-pl 2.jcn3
- - chords:
- * Chord is item
- * junked TeX hacking
- * configurable with styled strings from scm
- * fixes: dim, /no X, tonic != C
+pl 2.hwn1
+ - bf: dynamic style.
+ - prepare to move dir_ into SCM.
pl 2.jcn2
- - chords from scm
-
-pl 2.jcn1
- chord fixes:
* inversion request: no inversion guessing for chord entry
* bass request: c/+b to add bass note not part of chord
* C:m5- displays as "Cdim"
* C:m5-7- displays as "Co"
-pl 3.jcn1
+pl 2.jcn1
- moved bracket vars to params
- reverted broken lilypond-devel
+*************
pl 1.uu1
- David's patches:
* mfplain.mp detection
@uref{ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry,ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry}
or at mirror site @uref{ftp://ftp.dante.de,ftp://ftp.dante.de}
-@item MetaPost, if you want to use direct PostScript output. Please
-note that tetex-0.4pl8 (included with Redhat 5.x) does not include
-@file{mfplain.mp}, which is needed for producing the scaleable font files.
+@item MetaPost, needed for generating PostScript fonts. Please
+note that tetex-0.4pl8 (included with Redhat 5.x) does not include
+@file{mfplain.mp}, which is needed for producing the scalable font
+files.
+
+If you do not want to use PostScript output, edit @file{mf/GNUmakefile}.
+
@end itemize
(ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry)
or at mirror site ftp://ftp.dante.de (ftp://ftp.dante.de)
- * MetaPost, if you want to use direct PostScript output. Please note
- that tetex-0.4pl8 (included with Redhat 5.x) does not include
- `mfplain.mp', which is needed for producing the scaleable font
+ * MetaPost, needed for generating PostScript fonts. Please note that
+ tetex-0.4pl8 (included with Redhat 5.x) does not include
+ `mfplain.mp', which is needed for producing the scalable font
files.
+ If you do not want to use PostScript output, edit `mf/GNUmakefile'.
+
Running
=======
ctor_dict["Score_element"]->create_func ();
. * acc at tied note after linebreak.
-. * fix font-naming and selecting
-. * fix naming: \interline Context.staffLineLeading, staff_line_leading (),
-staff_position staff_space
-. * chord tonic: placement of accidental C#, Cb (from scm and C++)
. * note head on stem err msg in dutch.
. * why need to run -C mf twice?
. * setting indent to 0 with \shape fails
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=2
-MY_PATCH_LEVEL=jcn3
+PATCH_LEVEL=3
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
#
# For now let people define these in their environments
#
- : ${MFPLAIN_MP=`kpsewhich mfplain.mp`}
+ : ${MFPLAIN_MP=`kpsewhich mp mfplain.mp`}
: ${INIMETAPOST_FLAGS='-interaction=nonstopmode'}
rm -f mfput.*
#
# For now let people define these in their environments
#
- : ${MFPLAIN_MP=`kpsewhich mfplain.mp`}
+ : ${MFPLAIN_MP=`kpsewhich mp mfplain.mp`}
: ${INIMETAPOST_FLAGS='-interaction=nonstopmode'}
rm -f mfput.*
#endif
/// copy a bare (C-)array from #src# to #dest# sized #count#
-template<class T> void arrcpy (T*dest, T const*src, int count);
+template<class T> void arrcpy (T*dest, T*src, int count);
/**
Scaleable array/stack template, for a type T with default constructor.
set_size (size_ + src.size_);
arrcpy (array_p_+s,src.array_p_, src.size_);
}
- Array<T> slice (int lower, int upper) const;
+ Array<T> slice (int lower, int upper) ;
void reverse();
};
*/
template<class T> INLINE void
-arrcpy (T*dest, T const* src, int count)
+arrcpy (T*dest, T*src, int count)
{
for (int i_shadows_local=0; i_shadows_local < count ; i_shadows_local++)
#ifdef __powerpc__
template<class T> INLINE
Array<T>
-Array<T>::slice (int lower, int upper) const
+Array<T>::slice (int lower, int upper)
{
assert (lower >= 0 && lower <=upper&& upper <= size_);
Array<T> r;
+++ /dev/null
-\version "1.3.2";
-
-\header{
-enteredby = "jcn";
-copyright = "public domain";
-TestedFeatures = "Banter named chords";
-}
-
-% test German (Banter) naming
-% for more conventional naming, comment scm stuff out
-
-% {
-#(set! pitch-names-alist
- (append
- '(
- ; use these for German naming
- ((6 . 0) . ("H" ""))
- ((6 . -1) . ("B" ("feta-1" . "\12")))
- )
- pitch-names-alist))
-
-#(set! chord-names-alist
- (append
- '(
- (((0 . 0) (2 . -1) (4 . -1)) . ("m" . ("script" . "5-")))
- ; Co iso Cm5-7-
- ; urg, niet te pruimen
- ; (((0 . 0) (2 . -1) (4 . -1) (6 . -2)) . ("" . ("feta-1" . ".")))
- (((0 . 0) (2 . -1) (4 . -1) (6 . -2)) . ("" . ("script" . "o")))
- )))
-% }
-
-chord = \notes\transpose c''\chords{
- % dim modifier means: lower all implicit additions
- c:dim9
- c:dim
- c:dim7
- % explicit additions are taken as entered:
- c:m5-.7-
- % note that 7 is a special case: it's always lowered by 1...
- c:dim7-.9
- c:dim9-.11
-
- % test German names
- b:dim7
- bes:m5-
-
- \break
-
- c:sus2 %?
- c:sus4
- c^3
- c^3.5
- c:2.6^5
- c:dim^5-
- c:dim7^5-
- cis:m5-
-}
-
-\score{
- <
- \context ChordNames \chord
- \context Staff \chord
- >
-}
-
-\version "1.3.2";
+\version "1.2.0";
%{
Would this be acceptable/good enough/convenient for entry?
Cb ces
Cm; Cmin c:3-; c:m; c:min
Caug c:5+; c:aug;
- Cdim c:3-.5-; c:dim
+ Cdim c:3-:5-; c:dim
Cmaj7 c:7+; c:maj
C7 c:7
Csus; Csus4 c:4; c:sus
gis g4 gis |
g2 gis( |
)g gis4 gis |
-}
+}}
SCM prop = get_property (type_ + "Direction", 0);
if (isdir_b (prop))
{
- staff_side_p_->dir_ = to_dir (prop);
+ staff_side_p_->set_direction ( to_dir (prop));
}
else
{
- staff_side_p_->dir_ = UP;
+ staff_side_p_->set_direction ( UP);
}
staff_side_p_->set_victim(text_p_);
{
int y = (int)(stems_[i]->chord_start_f () / internote_f)
+ (int)sinfo_[i].interstaff_f_;
- stems_[i]->dir_ = y < knee_y ? UP : DOWN;
+ stems_[i]->set_direction ( y < knee_y ? UP : DOWN);
stems_[i]->set_elt_property ("dir-forced", SCM_BOOL_T);
}
}
urg: it seems that info on whether beam (voice) dir was forced
is being junked here?
*/
- if (!dir_)
- dir_ = get_default_dir ();
+ if (!get_direction ())
+ set_direction ( get_default_dir ());
- set_direction (dir_);
+ set_direction (get_direction ());
}
void
if auto-knee did its work, most probably stem directions
have changed, so we must recalculate all.
*/
- dir_ = get_default_dir ();
- set_direction (dir_);
+ set_direction ( get_default_dir ());
+ set_direction (get_direction ());
/* auto-knees used to only work for slope = 0
anyway, should be able to set slope per beam
for (int i=0; i <stems_.size (); i++)
do {
Stem *s = stems_[i];
- int current = s->dir_
- ? (1 + d * s->dir_)/2
+ int current = s->get_direction ()
+ ? (1 + d * s->get_direction ())/2
: s->get_center_distance ((Direction)-d);
if (current)
void
Beam::set_direction (Direction d)
{
- dir_ = d;
+ set_direction ( d);
for (int i=0; i <stems_.size (); i++)
{
Stem *s = stems_[i];
SCM force = s->remove_elt_property ("dir-forced");
if (force == SCM_UNDEFINED)
- s->dir_ = d;
+ s->set_direction ( d);
}
}
Real y = sinfo_[i].x_ * slope_f_ + left_y_;
// correct for knee
- if (dir_ != sinfo_[i].dir_)
+ if (get_direction () != sinfo_[i].get_direction ())
{
Real internote_f = sinfo_[i].stem_l_->staff_line_leading_f ()/2;
- y -= dir_ * (beam_f / 2
+ y -= get_direction () * (beam_f / 2
+ (sinfo_[i].mult_i_ - 1) * interbeam_f) / internote_f;
if (!i && sinfo_[i].stem_l_->staff_symbol_l () !=
sinfo_.top ().stem_l_->staff_symbol_l ())
- y += dir_ * (multiple_i_ - (sinfo_[i].stem_l_->flag_i_ - 2) >? 0)
+ y += get_direction () * (multiple_i_ - (sinfo_[i].stem_l_->flag_i_ - 2) >? 0)
* interbeam_f / internote_f;
}
if (set_b)
sinfo_[i].stem_l_->set_stemend (y - sinfo_[i].interstaff_f_);
- y *= dir_;
+ y *= get_direction ();
if (y > sinfo_[i].maxy_f_)
dy_f = dy_f <? sinfo_[i].maxy_f_ - y;
if (y < sinfo_[i].miny_f_)
s->set_default_extents ();
if (s->invisible_b ())
continue;
- if (((int)s->chord_start_f ()) && (s->dir_ != s->get_default_dir ()))
+ if (((int)s->chord_start_f ()) && (s->get_direction () != s->get_default_dir ()))
forced_count_i++;
total_count_i++;
}
if (leftx == 0)
leftx = info.x_;
info.x_ -= leftx;
- if (info.dir_ == dir_)
+ if (info.get_direction () == get_direction ())
{
if (forced_count_i == total_count_i)
info.idealy_f_ -= shorten_f;
{
slope_f_ = 0;
left_y_ = sinfo_[0].idealy_f_;
- left_y_ *= dir_;
+ left_y_ *= get_direction ();
}
else
{
Real damped_slope_dy_f = (solved_slope_f - slope_f_) * dx_f / 2;
left_y_ += damped_slope_dy_f;
- left_y_ *= dir_;
- slope_f_ *= dir_;
+ left_y_ *= get_direction ();
+ slope_f_ *= get_direction ();
}
}
// isn't this asymmetric ? --hwn
// dim(left_y_) = internote
- Real dy_f = dir_ * left_y_ * internote_f;
+ Real dy_f = get_direction () * left_y_ * internote_f;
Real beamdx_f = stems_.top ()->hpos_f () - stems_[0]->hpos_f ();
Real beamdy_f = beamdx_f * slope_f_ * internote_f;
quanty_f = iv[BIGGER];
// dim(left_y_) = internote
- left_y_ = dir_ * quanty_f / internote_f;
+ left_y_ = get_direction () * quanty_f / internote_f;
}
void
Real dy_f = check_stemlengths_f (false);
for (int i = 0; i < 2; i++) // 2 ?
{
- left_y_ += dy_f * dir_;
+ left_y_ += dy_f * get_direction ();
quantise_left_y (dy_f);
dy_f = check_stemlengths_f (true);
if (abs (dy_f) <= epsilon_f)
for (int j = 0; j < lhalfs; j++)
{
Molecule b (a);
- b.translate_axis (-dir_ * dy * (lwholebeams+j), Y_AXIS);
+ b.translate_axis (-get_direction () * dy * (lwholebeams+j), Y_AXIS);
leftbeams.add_molecule (b);
}
}
for (; j < nogap; j++)
{
Molecule b (a);
- b.translate_axis (-dir_ * dy * j, Y_AXIS);
+ b.translate_axis (-get_direction () * dy * j, Y_AXIS);
rightbeams.add_molecule (b);
}
// TODO: notehead widths differ for different types
{
Molecule b (a);
if (!here->invisible_b ())
- b.translate (Offset (gap_f, -dir_ * dy * j));
+ b.translate (Offset (gap_f, -get_direction () * dy * j));
else
- b.translate (Offset (0, -dir_ * dy * j));
+ b.translate (Offset (0, -get_direction () * dy * j));
rightbeams.add_molecule (b);
}
for (; j < rwholebeams + rhalfs; j++)
{
Molecule b (a);
- b.translate_axis (-dir_ * dy * j, Y_AXIS);
+ b.translate_axis (-get_direction () * dy * j, Y_AXIS);
rightbeams.add_molecule (b);
}
Real end_dy = 0 >? end_h - clip_h;
Real pi = M_PI;
- Real begin_alpha = (control_[1] - control_[0]).arg () + dir_ * alpha_;
- Real end_alpha = pi - (control_[2] - control_[3]).arg () - dir_ * alpha_;
+ Real begin_alpha = (control_[1] - control_[0]).arg () + get_direction () * alpha_;
+ Real end_alpha = pi - (control_[2] - control_[3]).arg () - get_direction () * alpha_;
Real max_alpha = clip_angle / 90 * pi / 2;
if ((begin_dy < 0) && (end_dy < 0)
{
Real dy = (begin_dy + end_dy) / 4;
dy *= cos (alpha_);
- encompass_[0][Y_AXIS] += dir_ * dy;
- encompass_[encompass_.size () - 1][Y_AXIS] += dir_ * dy;
+ encompass_[0][Y_AXIS] += get_direction () * dy;
+ encompass_[encompass_.size () - 1][Y_AXIS] += get_direction () * dy;
}
else
{
if (end_alpha >= max_alpha)
end_dy = 0 >? c * end_alpha / max_alpha * end_h;
- encompass_[0][Y_AXIS] += dir_ * begin_dy;
- encompass_[encompass_.size () - 1][Y_AXIS] += dir_ * end_dy;
+ encompass_[0][Y_AXIS] += get_direction () * begin_dy;
+ encompass_[encompass_.size () - 1][Y_AXIS] += get_direction () * end_dy;
Offset delta = encompass_[encompass_.size () - 1] - encompass_[0];
alpha_ = delta.arg ();
end_p = ijk_p;
end_rc = default_rc;
}
- BEZIER_BOW_DEBUG_OUT << "begin " << begin_p[X_AXIS] << ", " << begin_p[Y_AXIS] << endl;
- BEZIER_BOW_DEBUG_OUT << "end " << end_p[X_AXIS] << ", " << end_p[Y_AXIS] << endl;
Real height =control_[1][Y_AXIS];
for (int i = 0; i < encompass_.size (); i++ )
Real c3 = begin_p[Y_AXIS] > end_p[Y_AXIS] ? begin_p[Y_AXIS]
- rc3 * begin_p[X_AXIS] : end_p[Y_AXIS] - rc3 * end_p[X_AXIS];
- BEZIER_BOW_DEBUG_OUT << "y1 = " << rc1 << " x + 0" << endl;
- BEZIER_BOW_DEBUG_OUT << "y2 = " << rc2 << " x + " << c2 << endl;
- BEZIER_BOW_DEBUG_OUT << "y3 = " << rc3 << " x + " << c3 << endl;
control_[1][X_AXIS] = c3 / (rc1 - rc3);
control_[1][Y_AXIS] = rc1 * control_[1][X_AXIS];
control_[2][X_AXIS] = (c3 - c2) / (rc2 - rc3);
- BEZIER_BOW_DEBUG_OUT << "c2[X_AXIS] = " << control_[2][X_AXIS] << endl;
- BEZIER_BOW_DEBUG_OUT << "(c3 - c2) = " << (c3 - c2) << endl;
- BEZIER_BOW_DEBUG_OUT << "(rc2 - rc3) = " << (rc2 - rc3) << endl;
control_[2][Y_AXIS] = rc2 * control_[2][X_AXIS] + c2;
- BEZIER_BOW_DEBUG_OUT << "c2[Y_AXIS]" << control_[2][Y_AXIS] << endl;
calc_return (begin_alpha, end_alpha);
}
}
void
-Bezier_bow::set (Array<Offset> points, int dir)
+Bezier_bow::set (Array<Offset> points, Direction dir)
{
- dir_ = dir;
+ set_direction (dir);
encompass_ = points;
}
encompass_.rotate (-alpha_);
- if (dir_ == DOWN)
+ if (get_direction () == DOWN)
encompass_.flipy ();
}
void
Bezier_bow::transform_back ()
{
- if (dir_ == DOWN)
+ if (get_direction () == DOWN)
{
control_.flipy ();
return_.flipy ();
Bow::curve_extent_drul () const
{
Bezier_bow b (paper_l ());
- b.set (get_encompass_offset_arr (), dir_);
+ b.set (get_encompass_offset_arr (), get_direction ());
b.calc ();
return b.curve_extent_drul_;
}
Bow::get_controls () const
{
Bezier_bow b (paper_l ());
- b.set (get_encompass_offset_arr (), dir_);
+ b.set (get_encompass_offset_arr (), get_direction ());
b.calc ();
Array<Offset> controls;
controls.set_size (8);
Breathing_sign::Breathing_sign ()
{
- dir_ = UP;
+ set_direction (UP);
set_elt_property ("breakable", SCM_BOOL_T);
set_elt_property ("visibility-lambda",
ly_ch_C_eval_scm ("non_postbreak_visibility"));
assert(updown >= -1 && updown <= +1);
if(updown != 0)
- dir_ = updown;
+ set_direction (updown);
}
Molecule*
{
Real dl = staff_line_leading_f();
- translate_axis(2.0 * dl * dir_, Y_AXIS);
+ translate_axis(2.0 * dl * get_direction (), Y_AXIS);
}
Chord_name_engraver::Chord_name_engraver ()
{
- chord_p_ = 0;
tonic_req_ = 0;
inversion_req_ = 0;
bass_req_ = 0;
void
Chord_name_engraver::do_process_requests ()
{
- if (chord_p_)
+ if (text_p_arr_.size ())
return;
if (!pitch_arr_.size ())
return;
if (gh_boolean_p (chord_inversion))
find_inversion_b = gh_scm2bool (chord_inversion);
- chord_p_ = new Chord (to_chord (pitch_arr_, tonic_req_, inversion_req_, bass_req_, find_inversion_b));
+ Chord chord = to_chord (pitch_arr_, tonic_req_, inversion_req_, bass_req_,
+ find_inversion_b);
- announce_element (Score_element_info (chord_p_, 0));
+ Text_item* item_p = new Text_item;
+
+ /*
+ TODO:
+ - switch on property, add american (?) chordNameStyle:
+ Chord::american_str (...)
+
+ SCM chordNameStyle = get_property ("chordNameStyle", 0);
+ if (chordNameStyle == "Banter")
+ item_p->text_str_ = chord.banter_str (inversion);
+ */
+
+ item_p->text_str_ = chord.banter_str ();
+
+ text_p_arr_.push (item_p);
+ announce_element (Score_element_info (item_p, 0));
}
void
Chord_name_engraver::do_pre_move_processing ()
{
- if (chord_p_)
+ for (int i=0; i < text_p_arr_.size (); i++)
{
- typeset_element (chord_p_);
+ typeset_element (text_p_arr_[i]);
}
+ text_p_arr_.clear ();
pitch_arr_.clear ();
- chord_p_ = 0;
tonic_req_ = 0;
inversion_req_ = 0;
bass_req_ = 0;
#include "chord.hh"
#include "musical-request.hh"
#include "warn.hh"
-#include "debug.hh"
-#include "molecule.hh"
-#include "paper-def.hh"
-#include "lookup.hh"
-SCM
-pitch2scm (Musical_pitch p)
-{
- return gh_cons (gh_int2scm (p.notename_i_), gh_int2scm (p.accidental_i_));
-}
/*
construct from parser output
Chord
to_chord (Musical_pitch tonic, Array<Musical_pitch>* add_arr_p, Array<Musical_pitch>* sub_arr_p, Musical_pitch* inversion_p, Musical_pitch* bass_p)
{
- // urg: catch dim modifier: 3rd, 5th, 7th, .. should be lowered
+ // urg: catch dim modifier: 5th and 7th should be lowered
bool dim_b = false;
for (int i=0; i < add_arr_p->size (); i++)
{
dim_b = true;
}
}
- Chord::rebuild_transpose (add_arr_p, tonic, true);
- Chord::rebuild_transpose (sub_arr_p, tonic, true);
+ Chord::rebuild_transpose (add_arr_p, tonic);
+ Chord::rebuild_transpose (sub_arr_p, tonic);
- Musical_pitch fifth = Chord::base_arr (tonic).top ();
+ Musical_pitch fifth = tonic;
+ fifth.transpose (Musical_pitch (2));
+ fifth.transpose (Musical_pitch (2, -1));
/*
remove double adds (urg: sus4)
if (highest_step < 5)
missing_arr.push (fifth);
- /*
- if dim modifier is given: lower all missing
- */
if (dim_b)
{
for (int i=0; i < missing_arr.size (); i++)
{
- missing_arr[i].accidental_i_--;
+ missing_arr[i].accidental_i_--;
}
}
/*
if additions include some 3, don't add third
*/
- Musical_pitch third = Chord::base_arr (tonic)[1];
+ Musical_pitch third = tonic;
+ third.transpose (Musical_pitch (2));
if (Chord::find_notename_i (add_arr_p, third) != -1)
{
int i = Chord::find_pitch_i (&missing_arr, third);
}
Chord::Chord (Chord const& chord)
- : Item (chord)
{
pitch_arr_ = chord.pitch_arr_;
inversion_p_ = chord.inversion_p_ ? new Musical_pitch (*chord.inversion_p_) : 0;
{
delete inversion_p_;
delete bass_p_;
- // AAARGH, why doesn't Score_elt do this?
- unsmobify_self ();
-}
-
-Array<Musical_pitch>
-Chord::base_arr (Musical_pitch p)
-{
- Array<Musical_pitch> base;
- base.push (p);
- p.transpose (Musical_pitch (2));
- base.push (p);
- p.transpose (Musical_pitch (2, -1));
- base.push (p);
- return base;
}
void
-Chord::rebuild_transpose (Array<Musical_pitch>* pitch_arr_p, Musical_pitch tonic, bool fix7_b)
+Chord::rebuild_transpose (Array<Musical_pitch>* pitch_arr_p, Musical_pitch tonic)
{
for (int i = 0; i < pitch_arr_p->size (); i++)
{
Musical_pitch p = tonic;
Musical_pitch q = (*pitch_arr_p)[i];
- p.transpose (q);
// duh, c7 should mean <c bes>
- if (fix7_b && (step_i (tonic, p) == 7))
- p.accidental_i_--;
+ if (q.notename_i_ == 6)
+ q.accidental_i_--;
+ p.transpose (q);
(*pitch_arr_p)[i] = p;
}
pitch_arr_p->sort (Musical_pitch::compare);
}
void
-Chord::find_additions_and_subtractions (Array<Musical_pitch> pitch_arr, Array<Musical_pitch>* add_arr_p, Array<Musical_pitch>* sub_arr_p) const
+Chord::find_additions_and_subtractions (Array<Musical_pitch>* add_arr_p, Array<Musical_pitch>* sub_arr_p) const
{
- Musical_pitch tonic = pitch_arr[0];
+ Musical_pitch tonic = pitch_arr_[0];
/*
construct an array of thirds for a normal chord
*/
Array<Musical_pitch> all_arr;
all_arr.push (tonic);
- if (step_i (tonic, pitch_arr.top ()) >= 5)
- all_arr.push (pitch_arr.top ());
- else
- all_arr.push (base_arr (tonic).top ());
+ all_arr.push (pitch_arr_.top ());
all_arr.concat (missing_thirds_pitch_arr (&all_arr));
all_arr.sort (Musical_pitch::compare);
int i = 0;
int j = 0;
- Musical_pitch last_extra = tonic;
- while ((i < all_arr.size ()) || (j < pitch_arr.size ()))
+ while ((i < all_arr.size ()) || (j < pitch_arr_.size ()))
{
Musical_pitch a = all_arr [i <? all_arr.size () - 1];
- Musical_pitch p = pitch_arr[j <? pitch_arr.size () - 1];
+ Musical_pitch p = pitch_arr_ [j <? pitch_arr_.size () - 1];
/*
this pitch is present: do nothing, check next
*/
{
i++;
j++;
- last_extra = tonic;
}
/*
found an extra pitch: chord addition
else if ((p < a) || (p.notename_i_ == a.notename_i_))
{
add_arr_p->push (p);
- last_extra = p;
- (j < pitch_arr.size ()) ? j++ : i++;
+ (j < pitch_arr_.size ()) ? j++ : i++;
}
/*
a third is missing: chord subtraction
*/
else
{
- if (last_extra.notename_i_ != a.notename_i_)
- sub_arr_p->push (a);
+ sub_arr_p->push (a);
(i < all_arr.size ()) ? i++ : j++;
- last_extra = tonic;
}
}
- /* add missing basic steps */
- if (step_i (tonic, pitch_arr.top ()) < 3)
- sub_arr_p->push (base_arr (tonic)[1]);
- if (step_i (tonic, pitch_arr.top ()) < 5)
- sub_arr_p->push (base_arr (tonic).top ());
-
/*
- add highest addition, because it names chord, if greater than 5
- or non-standard
- (1, 3 and) 5 not additions: part of normal chord
+ add highest addition, because it names chord
+ (1, 3 and) 5 not an addition: part of normal chord
*/
- if ((step_i (tonic, pitch_arr.top ()) > 5)
- || pitch_arr.top ().accidental_i_)
- add_arr_p->push (pitch_arr.top ());
+ if (step_i (tonic, pitch_arr_.top () > 5))
+ add_arr_p->push (pitch_arr_.top ());
}
-
/*
- word is roman text or styled text:
- "text"
- ("style" . "text")
+ TODO:
+ reduce guess work: dim chord
+ other naming conventions `American'?
+ don't use TeX constructs
+ user defined chords-names for specific chords:
+ tonic, additions, subtractions, inversion, bass -> "my-chord-name"
*/
-Molecule
-Chord::ly_word2molecule (SCM scm) const
-{
- String style;
- if (gh_pair_p (scm))
- {
- style = ly_scm2string (gh_car (scm));
- scm = gh_cdr (scm);
- }
- String text = ly_scm2string (scm);
- return lookup_l ()->text (style, text, paper_l ());
-}
-
-/*
- scm is word or list of words:
- word
- (word word)
- */
-Molecule
-Chord::ly_text2molecule (SCM scm) const
-{
- Molecule mol;
- if (gh_list_p (scm))
- {
- while (gh_cdr (scm) != SCM_EOL)
- {
- mol.add_at_edge (X_AXIS, RIGHT,
- ly_word2molecule (gh_car (scm)), 0);
- scm = gh_cdr (scm);
- }
- scm = gh_car (scm);
- }
- mol.add_at_edge (X_AXIS, RIGHT,
- ly_word2molecule (scm), 0);
- return mol;
-}
-
-Molecule
-Chord::pitch2molecule (Musical_pitch p) const
-{
- SCM name = scm_eval (gh_list (gh_symbol2scm ("user-pitch-name"), ly_quote_scm (pitch2scm (p)), SCM_UNDEFINED));
-
- if (name != SCM_UNSPECIFIED)
- {
- return ly_text2molecule (name);
- }
-
- Molecule mol = lookup_l ()->text ("", p.str ().left_str (1).upper_str (), paper_l ());
- if (p.accidental_i_)
- // urg, how to select the feta-1 font?
- mol.add_at_edge (X_AXIS, RIGHT,
- lookup_l ()->accidental (p.accidental_i_, 0), 0);
- return mol;
-}
-
-Musical_pitch
-diff_pitch (Musical_pitch tonic, Musical_pitch p)
+String
+Chord::banter_str () const
{
- Musical_pitch diff (p.notename_i_ - tonic.notename_i_,
- p.accidental_i_ - tonic.accidental_i_,
- p.octave_i_ - tonic.octave_i_);
-
- while (diff.notename_i_ >= 7)
- {
- diff.notename_i_ -= 7;
- diff.octave_i_ ++;
- }
- while (diff.notename_i_ < 0)
- {
- diff.notename_i_ += 7;
- diff.octave_i_ --;
- }
-
- diff.accidental_i_ -= (tonic.semitone_pitch () + diff.semitone_pitch ())
- - p.semitone_pitch ();
-
- return diff;
-}
-
-bool
-Chord::user_chord_name (Array<Musical_pitch> pitch_arr, Chord_name* name_p) const
-{
- SCM chord = SCM_EOL;
- Array<Musical_pitch> chord_type = pitch_arr;
- rebuild_transpose (&chord_type, diff_pitch (pitch_arr[0], Musical_pitch (0)), false);
-
- for (int i= chord_type.size (); i--; )
- chord = gh_cons (pitch2scm (chord_type[i]), chord);
+ Musical_pitch tonic = pitch_arr_[0];
- SCM name = scm_eval (gh_list (gh_symbol2scm ("user-chord-name"), ly_quote_scm (chord), SCM_UNDEFINED));
- if (name != SCM_UNSPECIFIED)
- {
- name_p->modifier_mol = ly_text2molecule (gh_car (name));
- name_p->addition_mol = ly_text2molecule (gh_cdr (name));
- return true;
- }
- return false;
-}
+ //urg, should do translation in scheme.
+ char const *acc[] = {"\\textflat\\textflat ", "\\textflat ", "", "\\textsharp " , "\\textsharp\\textsharp "};
+ String tonic_str = tonic.str ();
+ tonic_str = tonic_str.left_str (1).upper_str ()
+ + acc[tonic.accidental_i_ + 2];
-void
-Chord::banter (Array<Musical_pitch> pitch_arr, Chord_name* name_p) const
-{
Array<Musical_pitch> add_arr;
Array<Musical_pitch> sub_arr;
- find_additions_and_subtractions (pitch_arr, &add_arr, &sub_arr);
+ find_additions_and_subtractions (&add_arr, &sub_arr);
+
Array<Musical_pitch> scale;
for (int i=0; i < 7; i++)
scale.push (Musical_pitch (i));
- Musical_pitch tonic = pitch_arr[0];
- rebuild_transpose (&scale, tonic, true);
-
- /*
- Does chord include this step? -1 if flat
- */
- int has[16];
- for (int i=0; i<16; i++)
- has[i] = 0;
+ // 7 always means 7-...
+ // scale.push (Musical_pitch (6, -1)); // b
- String mod_str;
- String add_str;
+ rebuild_transpose (&scale, tonic);
+
+ bool has3m_b = false;
+ bool has4_b = false;
+ bool has5m_b = false;
+ String str;
+ String minor_str;
String sep_str;
for (int i = 0; i < add_arr.size (); i++)
{
Musical_pitch p = add_arr[i];
int step = step_i (tonic, p);
+ if (step == 4)
+ has4_b = true;
int accidental = p.accidental_i_ - scale[(step - 1) % 7].accidental_i_;
- if ((step < 16) && (has[step] != -1))
- has[step] = accidental == -1 ? -1 : 1;
if ((step == 3) && (accidental == -1))
{
- mod_str = "m";
+ minor_str = "m";
+ has3m_b = true;
}
/*
- urg.
- This routine gets a lot simpler, if we don't try to be catch
- the 'dim' chords. However, we'll have to list every exceptional
- 'dim' chord in scm: otherwise we'll get stuff like Cdim7-, iso
- Cdim7, etc
+ have Cdim rather than Cm5-, even if it's a prefix
*/
-#ifdef SMART_DIM
- else if ((step == 5) && (accidental == -1) && (has[3] == -1))
+ else if ((step == 5) && (accidental == -1) && has3m_b)
{
- mod_str = "dim";
+ minor_str = "dim";
+ has5m_b = true;
}
-#endif
else if (accidental
- || (!(step % 2)
- || ((i == add_arr.size () - 1) && (step > 5))))
+ || (!(step % 2) || ((i + 1 == add_arr.size ()) && (step > 5))))
{
- add_str += sep_str;
+ str += sep_str;
sep_str = "/";
if ((step == 7) && (accidental == 1))
{
- add_str += "maj7";
+ str += "maj7";
}
else
-#ifdef SMART_DIM
- {
- if ((step % 2) && (accidental == -1)
- && (has[3] == -1) && (has[5] == -1))
- {
- if (i != add_arr.size () - 1)
- sep_str = "";
+ {
+ /*
+ if has3m_b and has5m_b, assume dim
+ don't mention dim-addition, except for chord-namer
+ */
+ if (((step/2) && (accidental == -1))
+ && has3m_b && has5m_b)
+ {
+ if (i == add_arr.size () - 1)
+ str += to_str (step);
else
- add_str += to_str (step);
+ sep_str = "";
}
else
-#endif
{
- add_str += to_str (step);
- if (accidental)
- add_str += accidental < 0 ? "-" : "+";
+ str += to_str (step);
+ if (accidental)
+ str += accidental < 0 ? "-" : "+";
}
-#ifdef SMART_DIM
- }
-#endif
+ }
}
}
Musical_pitch p = sub_arr[i];
int step = step_i (tonic, p);
/*
- if additions include 2 or 4, assume sus2/4 and don't display 'no3'
+ if chord has 3-, assume minor and don't display 'no3'
+ if additions include 4, assume sus4 and don't display 'no3'
+ if has3m_b and has5m_b, assume 'dim' chord
*/
- if (!((step == 3) && (has[2] || has[4])))
+ if (!((step == 3) && (has3m_b || has4_b))
+ && !((step/2) && (step !=3) && (step !=7 ) && (p.accidental_i_ == 0) && has3m_b && has5m_b)
+ && !((step == 7) && (p.accidental_i_ == -1) && has3m_b && has5m_b))
{
- add_str += sep_str + "no" + to_str (step);
+ str += sep_str + "no" + to_str (step);
sep_str = "/";
}
}
- if (mod_str.length_i ())
- name_p->modifier_mol.add_at_edge (X_AXIS, RIGHT,
- lookup_l ()->text ("roman", mod_str, paper_l ()), 0);
- if (add_str.length_i ())
+ /*
+ have Co rather than Cdim7
+ */
+ if (minor_str + str == "dim7")
{
- if (!name_p->addition_mol.empty_b ())
- add_str = "/" + add_str;
- name_p->addition_mol.add_at_edge (X_AXIS, RIGHT,
- lookup_l ()->text ("script", add_str, paper_l ()), 0);
+ minor_str = "";
+ str = "o";
}
-}
+
+ String inversion_str;
+ if (inversion_p_)
+ {
+ inversion_str = inversion_p_->str ();
+ inversion_str = "/" + inversion_str.left_str (1).upper_str ()
+ + acc[inversion_p_->accidental_i_ + 2];
+ }
+
+ String bass_str;
+ if (bass_p_)
+ {
+ bass_str = bass_p_->str ();
+ bass_str = "/" + bass_str.left_str (1).upper_str ()
+ + acc[bass_p_->accidental_i_ + 2];
+
+ }
+
+ return tonic_str + minor_str + "$^{" + str + "}$" + inversion_str + bass_str;
+}
int
Chord::find_tonic_i (Array<Musical_pitch> const* pitch_arr_p)
bass.octave_i_--;
pitch_arr_p->insert (bass, 0);
}
-
-Molecule*
-Chord::do_brew_molecule_p () const
-{
- Musical_pitch tonic = pitch_arr_[0];
-
- Chord_name name;
- name.tonic_mol = pitch2molecule (tonic);
-
- /*
- if user has explicitely listed chord name, use that
-
- TODO
- urg
- maybe we should check all sub-lists of pitches, not
- just full list and base triad?
- */
- if (!user_chord_name (pitch_arr_, &name))
- {
- /*
- else, check if user has listed base triad
- use user base name and add banter for remaining part
- */
- if ((pitch_arr_.size () > 2)
- && user_chord_name (pitch_arr_.slice (0, 3), &name))
- {
- Array<Musical_pitch> base = base_arr (tonic);
- base.concat (pitch_arr_.slice (3, pitch_arr_.size ()));
- banter (base, &name);
- }
- /*
- else, use pure banter
- */
- else
- {
- banter (pitch_arr_, &name);
- }
- }
-
- if (inversion_p_)
- {
- name.inversion_mol = lookup_l ()->text ("", "/", paper_l ());
- // zucht const&
- Molecule mol = pitch2molecule (*inversion_p_);
- name.inversion_mol.add_at_edge (X_AXIS, RIGHT, mol, 0);
- }
-
- if (bass_p_)
- {
- name.bass_mol = lookup_l ()->text ("", "/", paper_l ());
- Molecule mol = pitch2molecule (*bass_p_);
- name.bass_mol.add_at_edge (X_AXIS, RIGHT, mol, 0);
- }
-
- // urg, howto get a good superscript_y?
- Real super_y = lookup_l ()->text ("", "x", paper_l ()).dim_.y ().length ()/2;
- if (!name.addition_mol.empty_b ())
- name.addition_mol.translate (Offset (0, super_y));
-
- Molecule* mol_p = new Molecule;
- mol_p->add_at_edge (X_AXIS, RIGHT, name.tonic_mol, 0);
- // huh?
- if (!name.modifier_mol.empty_b ())
- mol_p->add_at_edge (X_AXIS, RIGHT, name.modifier_mol, 0);
- if (!name.addition_mol.empty_b ())
- mol_p->add_at_edge (X_AXIS, RIGHT, name.addition_mol, 0);
- if (!name.inversion_mol.empty_b ())
- mol_p->add_at_edge (X_AXIS, RIGHT, name.inversion_mol, 0);
- if (!name.bass_mol.empty_b ())
- mol_p->add_at_edge (X_AXIS, RIGHT, name.bass_mol, 0);
- return mol_p;
-}
-
-void
-Chord::do_print () const
-{
-#ifndef NPRINT
- //DEBUG_OUT << "chord = " ...
-#endif
-}
void
Directional_spanner::do_pre_processing()
{
- if (!dir_)
- dir_ = get_default_dir();
+ if (!get_direction ())
+ set_direction (get_default_dir());
}
Directional_spanner::Directional_spanner()
{
- dir_ = CENTER;
+ set_direction (CENTER);
}
Offset
text_p_ = new Text_item;
text_p_->text_str_ = loud; // ugh
+ text_p_->set_elt_property ("style", gh_str02scm ("dynamic"));
staff_side_p_ = new Staff_side_item;
staff_side_p_->set_elt_property ("script-priority",
staff_side_p_->set_victim (text_p_);
staff_side_p_->axis_ = Y_AXIS;
- staff_side_p_->dir_ = DOWN;
+ staff_side_p_->set_direction (DOWN);
SCM prop = get_property ("verticalDirection", 0);
if (isdir_b (prop))
{
- staff_side_p_->dir_ = to_dir (prop);
+ staff_side_p_->set_direction (to_dir (prop));
}
prop = get_property ("dynamicDirection", 0);
if (gh_number_p(prop))
{
- staff_side_p_->dir_ = to_dir (prop);
+ staff_side_p_->set_direction (to_dir (prop));
}
- if (absd->dir_)
+ if (absd->get_direction ())
{
- staff_side_p_->dir_ = absd->dir_;
+ staff_side_p_->set_direction (absd->get_direction ());
}
prop = get_property ("dynamicPadding", 0);
SCM prop = get_property ("verticalDirection", 0);
if (isdir_b (prop))
{
- to_end_ss_span_p_->dir_ = to_dir (prop);
+ to_end_ss_span_p_->set_direction (to_dir (prop));
}
prop = get_property ("dynamicDirection", 0);
if (isdir_b (prop))
{
- to_end_ss_span_p_->dir_ = to_dir (prop);
+ to_end_ss_span_p_->set_direction (to_dir (prop));
}
prop = get_property ("dynamicPadding", 0);
if (gh_number_p(prop))
bool check_fit_bo ();
Real check_fit_f ();
void print () const;
- void set (Array<Offset> points, int dir);
+ void set (Array<Offset> points, Direction dir);
void transform ();
void transform_back ();
Paper_def* paper_l_;
Curve encompass_;
- int dir_;
+ Direction dir_;
+ void set_direction (Direction d ) { dir_ = d; }
+ Direction get_direction () const { return dir_; }
+
Real alpha_;
Offset origin_;
Curve return_;
Breathing_sign ();
void set_vertical_position (Direction);
+ void set_direction (Direction d ) { dir_ = d; }
+ Direction get_direction () const { return dir_; }
+
protected:
virtual void do_post_processing ();
private:
Array<Musical_pitch> pitch_arr_;
- Chord* chord_p_;
+ Link_array<Item> text_p_arr_;
+ Array<Musical_pitch> rebuild_pitch_arr (int tonic_i) const;
Tonic_req* tonic_req_;
Inversion_req* inversion_req_;
Bass_req* bass_req_;
#include "array.hh"
#include "musical-pitch.hh"
#include "lily-proto.hh"
-#include "item.hh"
-#include "molecule.hh"
-class Chord_name
+class Chord
{
public:
- Molecule tonic_mol;
- Molecule modifier_mol;
- Molecule addition_mol;
- Molecule inversion_mol;
- Molecule bass_mol;
-};
-
-class Chord : public Item
-{
-public:
- VIRTUAL_COPY_CONS (Score_element);
- static Array<Musical_pitch> base_arr (Musical_pitch p);
static int find_tonic_i (Array<Musical_pitch> const*);
static int find_pitch_i (Array<Musical_pitch> const*, Musical_pitch p);
static int find_notename_i (Array<Musical_pitch> const*, Musical_pitch p);
static Array<Musical_pitch> missing_thirds_pitch_arr (Array<Musical_pitch> const* pitch_arr_p);
static void rebuild_from_base (Array<Musical_pitch>*, int base_i);
static void rebuild_insert_inversion (Array<Musical_pitch>*, int tonic_i);
- static void rebuild_transpose (Array<Musical_pitch>*, Musical_pitch tonic, bool fix7_b);
+ static void rebuild_transpose (Array<Musical_pitch>*, Musical_pitch tonic);
static void rebuild_with_bass (Array<Musical_pitch>*, int bass_i);
static int step_i (Musical_pitch tonic, Musical_pitch p);
Chord (Array<Musical_pitch> pitch_arr, Musical_pitch* inversion_p, Musical_pitch* bass_p);
- Chord (Chord const&);
- virtual ~Chord ();
+ Chord (Chord const& chord);
+ ~Chord ();
Array<Musical_pitch> to_pitch_arr () const;
- void find_additions_and_subtractions(Array<Musical_pitch> pitch_arr, Array<Musical_pitch>* add_arr_p, Array<Musical_pitch>* sub_arr_p) const;
-
- Molecule ly_word2molecule (SCM scm) const;
- Molecule ly_text2molecule (SCM scm) const;
- Molecule pitch2molecule (Musical_pitch p) const;
- bool user_chord_name (Array<Musical_pitch> pitch_arr, Chord_name* name_p) const;
- void banter (Array<Musical_pitch> pitch_arr, Chord_name* name_p) const;
+ String banter_str () const;
+ void find_additions_and_subtractions(Array<Musical_pitch>* add_arr_p, Array<Musical_pitch>* sub_arr_p) const;
Array<Musical_pitch> pitch_arr_;
Musical_pitch* inversion_p_;
Musical_pitch* bass_p_;
-
-protected:
- virtual Molecule* do_brew_molecule_p () const;
- virtual void do_print () const;
};
Chord to_chord (Musical_pitch tonic, Array<Musical_pitch>* add_arr_p, Array<Musical_pitch>* sub_arr_p, Musical_pitch* inversion_p, Musical_pitch* bass_p);
JUNKME?
*/
class Directional_spanner : public Spanner{
-public:
-
/// -1 below heads, +1 above heads.
Direction dir_;
+
+public:
Directional_spanner();
-
+
+ void set_direction (Direction d ) { dir_ = d; }
+ Direction get_direction () const { return dir_; }
+
/// offset of "center" relative to left-column/0-pos of staff
virtual Offset center() const;
virtual Direction get_default_dir() const;
{
public:
Direction dir_;
+ void set_direction (Direction d ) { dir_ = d; }
+ Direction get_direction () const { return dir_; }
+
VIRTUAL_COPY_CONS(Music);
Script_req ();
};
class Staff_side_element : public Staff_symbol_referencer
{
void position_self ();
-
+ Direction dir_;
public:
Score_element * to_position_l_;
- Direction dir_;
+
+ void set_direction (Direction d ) { dir_ = d; }
+ Direction get_direction () const { return dir_; }
+
+
Link_array<Score_element> support_l_arr_;
Axis axis_;
//junkme.
struct Stem_info {
Real x_;
- int dir_;
+ Direction dir_;
+ void set_direction (Direction d ) { dir_ = d; }
+ Direction get_direction () const { return dir_; }
+
int beam_dir_;
Real idealy_f_;
Real miny_f_;
*/
Drul_array<Real> yextent_drul_;
+ /// direction stem (that's me)
+ Direction dir_;
+
public:
+ void set_direction (Direction d);
+ Direction get_direction () const { return dir_; }
+
Link_array<Note_head> head_l_arr_;
Link_array<Rest> rest_l_arr_;
Beam* beam_l_;
Drul_array<int> beams_i_drul_;
-
- void set_direction (Direction d);
- /// direction stem (that's me)
- Direction dir_;
-
-
Stem ();
/// ensure that this Stem also encompasses the Notehead #n#
void do_print() const;
void set_stemend (Real);
Direction get_default_dir() const;
- Direction get_dir () const;
int get_center_distance(Direction) const;
Script_req::Script_req ()
{
- dir_ = CENTER;
+ set_direction (CENTER);
}
Note_column::dir () const
{
if (stem_l_)
- return stem_l_->dir_;
+ return stem_l_->get_direction ();
else if (head_l_arr_.size ())
return (Direction)sign (head_positions_interval().center ());
return;
/* ugh. Should be done by beam. */
- Direction d = stem_l_->get_dir ();
+ Direction d = stem_l_->get_direction ();
Real beamy = (stem_l_->hpos_f () - b->stems_[0]->hpos_f ()) * b->slope_f_ + b->left_y_;
Real staff_space = rest_l_arr_[0]->staff_line_leading_f ();
for (int i=0; i < staff_sided_item_l_arr_.size (); i++)
{
Staff_side_item * ip = get_Staff_side (staff_sided_item_l_arr_[i]);
- arrs[ip->dir_].push (staff_sided_item_l_arr_[i]);
+ arrs[ip->get_direction ()].push (staff_sided_item_l_arr_[i]);
}
Direction d = DOWN;
if (relative_stem_dir)
ss->relative_dir_ = (Direction)relative_stem_dir;
else
- ss->dir_ = (Direction)force_dir;
+ ss->set_direction ((Direction)force_dir);
SCM dir_prop (get_property ("articulationScriptVerticalDirection", 0));
if (gh_number_p(dir_prop))
- ss->dir_ = to_dir (dir_prop);
+ ss->set_direction (to_dir (dir_prop));
- if (l->dir_)
- ss->dir_ = l->dir_;
+ if (l->get_direction ())
+ ss->set_direction (l->get_direction ());
SCM paddingprop = get_property ("articulationScriptPadding", 0);
if (gh_number_p(paddingprop))
void
Script::do_post_processing ()
{
- Direction d = staff_side_l_->dir_;
+ Direction d = staff_side_l_->get_direction ();
Molecule m (get_molecule(d));
/*
Molecule*
Script::do_brew_molecule_p () const
{
- return new Molecule (get_molecule (staff_side_l_->dir_));
+ return new Molecule (get_molecule (staff_side_l_->get_direction ()));
}
void
for (int i = 0; i < end_slur_l_arr_.size(); i++)
{
- end_slur_l_arr_[i]->dir_ = slurdir;
+ end_slur_l_arr_[i]->set_direction (slurdir);
typeset_element (end_slur_l_arr_[i]);
}
end_slur_l_arr_.clear();
{
warning (_ ("Slur over rest?"));
o[X_AXIS] = col->hpos_f ();
- o[Y_AXIS] = col->extent (Y_AXIS)[dir_];
+ o[Y_AXIS] = col->extent (Y_AXIS)[get_direction ()];
return o;
}
Simply set x to middle of notehead
*/
- o[X_AXIS] -= 0.5 * stem_l->dir_ * col->extent (X_AXIS).length ();
+ o[X_AXIS] -= 0.5 * stem_l->get_direction () * col->extent (X_AXIS).length ();
- if ((stem_l->dir_ == dir_)
+ if ((stem_l->get_direction () == get_direction ())
&& !stem_l->extent (Y_AXIS).empty_b ())
{
- o[Y_AXIS] = stem_l->extent (Y_AXIS)[dir_];
+ o[Y_AXIS] = stem_l->extent (Y_AXIS)[get_direction ()];
}
else
{
- o[Y_AXIS] = col->extent (Y_AXIS)[dir_];
+ o[Y_AXIS] = col->extent (Y_AXIS)[get_direction ()];
}
/*
leave a gap: slur mustn't touch head/stem
*/
- o[Y_AXIS] += dir_ * paper_l ()->get_var ("slur_y_free");
+ o[Y_AXIS] += get_direction () * paper_l ()->get_var ("slur_y_free");
o[Y_AXIS] += calc_interstaff_dist (stem_l, this);
return o;
}
Slur::do_post_processing ()
{
encompass_arr_.sort (Note_column_compare);
- if (!dir_)
- dir_ = get_default_dir ();
+ if (!get_direction ())
+ set_direction (get_default_dir ());
/*
Slur and tie placement [OSU]
no beam getting in the way
*/
if ((stem_l->extent (Y_AXIS).empty_b ()
- || !((stem_l->dir_ == dir_) && (dir_ != d)))
- && !((dir_ == stem_l->dir_)
+ || !((stem_l->get_direction () == get_direction ()) && (get_direction () != d)))
+ && !((get_direction () == stem_l->get_direction ())
&& stem_l->beam_l_ && (stem_l->beams_i_drul_[-d] >= 1)))
{
dx_f_drul_[d] = spanned_drul_[d]->extent (X_AXIS).length () / 2;
dx_f_drul_[d] -= d * x_gap_f;
- if (stem_l->dir_ != dir_)
+ if (stem_l->get_direction () != get_direction ())
{
- dy_f_drul_[d] = note_column_drul[d]->extent (Y_AXIS)[dir_];
+ dy_f_drul_[d] = note_column_drul[d]->extent (Y_AXIS)[get_direction ()];
}
else
{
dy_f_drul_[d] = stem_l->chord_start_f ()
- + dir_ * internote_f;
+ + get_direction () * internote_f;
}
- dy_f_drul_[d] += dir_ * y_gap_f;
+ dy_f_drul_[d] += get_direction () * y_gap_f;
}
/*
side attached to (visible) stem
*/
if (stem_l->beam_l_ && (stem_l->beams_i_drul_[-d] >= 1))
{
- dy_f_drul_[d] = stem_l->extent (Y_AXIS)[dir_];
- dy_f_drul_[d] += dir_ * 2 * y_gap_f;
+ dy_f_drul_[d] = stem_l->extent (Y_AXIS)[get_direction ()];
+ dy_f_drul_[d] += get_direction () * 2 * y_gap_f;
}
/*
side attached to notehead, with stem getting in the way
dx_f_drul_[d] -= d * x_gap_f;
dy_f_drul_[d] = stem_l->chord_start_f ()
- + dir_ * internote_f;
- dy_f_drul_[d] += dir_ * y_gap_f;
+ + get_direction () * internote_f;
+ dy_f_drul_[d] += get_direction () * y_gap_f;
}
}
}
Real slope_ratio_f = abs (dy_f / dx_f);
if (slope_ratio_f > slope_damp_f)
{
- Direction d = (Direction)(- dir_ * (sign (dy_f)));
+ Direction d = (Direction)(- get_direction () * (sign (dy_f)));
if (!d)
d = LEFT;
Real damp_f = (slope_ratio_f - slope_damp_f) * dx_f;
must never change sign of dy
*/
damp_f = damp_f <? abs (dy_f);
- dy_f_drul_[d] += dir_ * damp_f;
+ dy_f_drul_[d] += get_direction () * damp_f;
}
/*
Real height_ratio_f = abs (height_f / width_f);
if (height_ratio_f > height_damp_f)
{
- Direction d = (Direction)(- dir_ * (sign (dy_f)));
+ Direction d = (Direction)(- get_direction () * (sign (dy_f)));
if (!d)
d = LEFT;
/* take third step */
*/
if (abs (dy_f / dx_f ) < slope_damp_f)
{
- dy_f_drul_[-d] += dir_ * damp_f;
- dy_f_drul_[d] += dir_ * damp_f;
+ dy_f_drul_[-d] += get_direction () * damp_f;
+ dy_f_drul_[d] += get_direction () * damp_f;
}
/*
don't change slope too much, would have been catched by slope damping
else
{
damp_f = damp_f <? abs (dy_f/2);
- dy_f_drul_[d] += dir_ * damp_f;
+ dy_f_drul_[d] += get_direction () * damp_f;
}
}
}
Note_column * nc = note_column_drul[d];
if (nc == spanned_drul_[d]
&& nc->stem_l_
- && nc->stem_l_->dir_ == dir_
- && abs (nc->stem_l_->extent (Y_AXIS)[dir_]
+ && nc->stem_l_->get_direction () == get_direction ()
+ && abs (nc->stem_l_->extent (Y_AXIS)[get_direction ()]
- dy_f_drul_[d] + (d == LEFT ? 0 : interstaff_f))
<= snap_f)
{
snapx_f_drul[d] = nc->stem_l_->hpos_f ()
- spanned_drul_[d]->relative_coordinate (0, X_AXIS);
- snapy_f_drul[d] = nc->stem_l_->extent (Y_AXIS)[dir_]
+ snapy_f_drul[d] = nc->stem_l_->extent (Y_AXIS)[get_direction ()]
+ interstaff_interval[d]
- + dir_ * 2 * y_gap_f;
+ + get_direction () * 2 * y_gap_f;
snapped_b_drul[d] = true;
}
{
create_items (0);
text_p_->text_str_ = ly_scm2string (long_name);
- staff_side_p_->dir_ = LEFT;
+ staff_side_p_->set_direction (LEFT);
Bar_script_engraver::attach_script_to_item (i);
/*
Staff_side_element::Staff_side_element ()
{
- dir_ = CENTER;
+ set_direction (CENTER);
to_position_l_ = 0;
set_elt_property ("transparent", SCM_BOOL_T);
axis_ = Y_AXIS;
void
Staff_side_element::do_pre_processing ()
{
- if (!dir_)
- dir_ = get_default_direction ();
+ if (!get_direction ())
+ set_direction (get_default_direction ());
if (axis_ == X_AXIS)
position_self ();
SCM pad = remove_elt_property ("padding");
if (pad != SCM_UNDEFINED)
{
- off += gh_scm2double (pad) * dir_;
+ off += gh_scm2double (pad) * get_direction ();
}
- Real total_off = dim[dir_] + off;
+ Real total_off = dim[get_direction ()] + off;
/*
"no-staff-support" is ugh bugfix to get staccato dots right.
*/
if (to_position_l_ && to_position_l_->get_elt_property ("no-staff-support") == SCM_UNDEFINED)
- total_off += - sym_dim[-dir_];
+ total_off += - sym_dim[-get_direction ()];
dim_cache_[axis_]->set_offset (total_off);
if (fabs (total_off) > 100 CM)
DEBUG_OUT << "positioning " << to_position_l_->name();
DEBUG_OUT << "axis == " << axis_name_str (axis_)
- << ", dir == " << to_str ((int)dir_ );
+ << ", dir == " << to_str ((int)get_direction () );
#endif
}
SCM prop = get_property ("verticalDirection", 0);
if (gh_number_p(prop))
{
- stem_p_->dir_ = to_dir (prop);
+ stem_p_->set_direction (to_dir (prop));
stem_p_->set_elt_property ("dir-forced", SCM_BOOL_T);
}
mult_i_ =mult;
stem_l_ = s;
x_ = stem_l_->hpos_f ();
- dir_ = stem_l_->dir_;
+ set_direction (stem_l_->get_direction ());
SCM bd = stem_l_->remove_elt_property ("beam-dir");
beam_dir_ = gh_scm2int (bd);
Real stem_f = paper_l->get_var (type_str + "stem_length"
+ to_str (mult_i_ <? stem_max))* internote_f;
- if (!beam_dir_ || (beam_dir_ == dir_))
+ if (!beam_dir_ || (beam_dir_ == get_direction ()))
/* normal beamed stem */
{
if (mult_i_)
Direction
Stem_staff_side_item::get_default_direction () const
{
- return (Direction)(relative_dir_ * stem_l_->dir_);
+ return (Direction)(relative_dir_ * stem_l_->get_direction ());
}
void
Real self_coord = relative_coordinate (c, Y_AXIS);
Real now_coord = self_coord - staff_coord;
- Real desired_coord = ceil (dir_ * 2.0 * now_coord / staff_line_leading_f ());
+ Real desired_coord = ceil (get_direction () * 2.0 * now_coord / staff_line_leading_f ());
if (! (int (desired_coord) % 2))
{
desired_coord ++;
}
- translate_axis (desired_coord * dir_ * staff_line_leading_f () / 2.0 - now_coord, Y_AXIS);
+ translate_axis (desired_coord * get_direction () * staff_line_leading_f () / 2.0 - now_coord, Y_AXIS);
}
}
{
beams->translate (Offset(stem_l_->hpos_f () - hpos_f (),
stem_l_->stem_end_f () * internote_f -
- stem_l_->beam_l_->dir_ * beams_i * interbeam_f));
+ stem_l_->beam_l_->get_direction () * beams_i * interbeam_f));
}
else
{
/*
Beams should intersect one beamthickness below staff end
*/
- Real dy = - beams->extent ()[Y_AXIS].length () / 2 * stem_l_->dir_;
+ Real dy = - beams->extent ()[Y_AXIS].length () / 2 * stem_l_->get_direction ();
/*
uhg. Should use relative coords and placement
*/
Real whole_note_correction = (stem_l_ && stem_l_->invisible_b( ))
- ? -stem_l_->get_dir () * stem_l_->note_delta_f ()/2
+ ? -stem_l_->get_direction () * stem_l_->note_delta_f ()/2
: 0.0;
/*
void
Stem::set_direction (Direction d)
{
- if (!dir_)
+ if (!get_direction ())
warning (_ ("stem direction set already!"));
dir_ = d;
beams_i_drul_[LEFT] = beams_i_drul_[RIGHT] = -1;
yextent_drul_[DOWN] = yextent_drul_[UP] = 0;
flag_i_ = 2;
- dir_ = CENTER;
+ set_direction (CENTER);
beam_l_ = 0;
}
Real
Stem::stem_begin_f () const
{
- return yextent_drul_[Direction(-dir_)];
+ return yextent_drul_[Direction(-get_direction ())];
}
Real
Stem::chord_start_f () const
{
- return head_positions()[dir_] * staff_line_leading_f ()/2.0;
+ return head_positions()[get_direction ()] * staff_line_leading_f ()/2.0;
}
Real
Stem::stem_end_f () const
{
- return yextent_drul_[dir_];
+ return yextent_drul_[get_direction ()];
}
void
Stem::set_stemend (Real se)
{
// todo: margins
- if (dir_ && dir_ * head_positions()[dir_] >= se*dir_)
+ if (get_direction () && get_direction () * head_positions()[get_direction ()] >= se*get_direction ())
warning (_ ("Weird stem size; check for narrow beams"));
- yextent_drul_[dir_] = se;
- yextent_drul_[Direction(-dir_)] = head_positions()[-dir_];
+ yextent_drul_[get_direction ()] = se;
+ yextent_drul_[Direction(-get_direction ())] = head_positions()[-get_direction ()];
}
int
return Direction (int(paper_l ()->get_var ("stem_default_neutral_direction")));
}
-Direction
-Stem::get_dir () const
-{
- return dir_;
-}
void
Real shorten_f = paper_l ()->get_var (type_str + "forced_stem_shorten0");
- if (!dir_)
- dir_ = get_default_dir ();
+ if (!get_direction ())
+ set_direction (get_default_dir ());
/*
stems in unnatural (forced) direction should be shortened,
according to [Roush & Gourlay]
*/
if (((int)chord_start_f ())
- && (dir_ != get_default_dir ()))
+ && (get_direction () != get_default_dir ()))
length_f -= shorten_f;
if (flag_i_ >= 5)
if (flag_i_ >= 6)
length_f += 1.0;
- set_stemend ((dir_ > 0) ? head_positions()[BIGGER] + length_f:
+ set_stemend ((get_direction () > 0) ? head_positions()[BIGGER] + length_f:
head_positions()[SMALLER] - length_f);
bool no_extend_b = get_elt_property ("no-stem-extend") != SCM_UNDEFINED;
- if (!grace_b && !no_extend_b && (dir_ * stem_end_f () < 0))
+ if (!grace_b && !no_extend_b && (get_direction () * stem_end_f () < 0))
set_stemend (0);
}
if (!head_l_arr_.size ())
return;
head_l_arr_.sort (Note_head::compare);
- if (dir_ < 0)
+ if (get_direction () < 0)
head_l_arr_.reverse ();
Note_head * beginhead = head_l_arr_[0];
if (dy <= 1)
{
if (parity)
- head_l_arr_[i]->flip_around_stem (dir_);
+ head_l_arr_[i]->flip_around_stem (get_direction ());
parity = !parity;
}
else
{
if (!invisible_b ())
{
- SCM scmdir = gh_int2scm (dir_);
+ SCM scmdir = gh_int2scm (get_direction ());
SCM dirlist = column_l ()->get_elt_property ("dir-list");
if (dirlist == SCM_UNDEFINED)
dirlist = SCM_EOL;
style = ly_scm2string (st);
}
- char c = (dir_ == UP) ? 'u' : 'd';
+ char c = (get_direction () == UP) ? 'u' : 'd';
Molecule m = lookup_l ()->afm_find (String ("flags-") + to_str (c) +
to_str (flag_i_));
if (!style.empty_b ())
Real head_wid = 0;
if (head_l_arr_.size ())
head_wid = head_l_arr_[0]->extent (X_AXIS).length ();
- stem_y[Direction(-dir_)] += dir_ * head_wid * tan(ANGLE)/(2*dy);
+ stem_y[Direction(-get_direction ())] += get_direction () * head_wid * tan(ANGLE)/(2*dy);
if (!invisible_b ())
{
if (!beam_l_ && abs (flag_i_) > 2)
{
Molecule fl = flag ();
- fl.translate_axis(stem_y[dir_]*dy, Y_AXIS);
+ fl.translate_axis(stem_y[get_direction ()]*dy, Y_AXIS);
mol_p->add_molecule (fl);
}
Real rule_thick = paper_l ()->get_var ("stemthickness");
Interval stem_wid(-rule_thick/2, rule_thick/2);
- if (dir_ == CENTER)
+ if (get_direction () == CENTER)
r = head_wid.center ();
else
- r = head_wid[dir_] - stem_wid[dir_];
+ r = head_wid[get_direction ()] - stem_wid[get_direction ()];
}
return r;
}
ss->set_elt_property ("script-priority",
gh_int2scm (200));
- ss->dir_ = r->dir_;
+ ss->set_direction (r->get_direction ());
text->text_str_ = r->text_str_;
for (int i=0; i< tie_p_arr_.size (); i++)
{
- tie_p_arr_[i]->dir_ = tie_dir;
+ tie_p_arr_[i]->set_direction (tie_dir);
typeset_element (tie_p_arr_[i]);
}
tie_p_arr_.clear ();
if (dx_f < paper_l ()->get_var ("tie_staffspace_length"))
{
if (abs (ypos_i) % 2)
- y_f += dir_ * internote_f;
- y_f += dir_ * y_gap_f;
+ y_f += get_direction () * internote_f;
+ y_f += get_direction () * y_gap_f;
}
else
{
if (! (abs (ypos_i) % 2))
- y_f += dir_ * internote_f;
- y_f += dir_ * internote_f;
- y_f -= dir_ * y_gap_f;
+ y_f += get_direction () * internote_f;
+ y_f += get_direction () * internote_f;
+ y_f -= get_direction () * y_gap_f;
}
dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = y_f;
num.align_to (X_AXIS, CENTER);
num.translate_axis (w/2, X_AXIS);
Real interline = paper_l ()->get_var ("interline");
- Real dy = column_arr_.top ()->extent (Y_AXIS) [dir_]
- - column_arr_[0]->extent (Y_AXIS) [dir_];
+ Real dy = column_arr_.top ()->extent (Y_AXIS) [get_direction ()]
+ - column_arr_[0]->extent (Y_AXIS) [get_direction ()];
num.align_to (Y_AXIS, CENTER);
- num.translate_axis (dir_ * interline, Y_AXIS);
+ num.translate_axis (get_direction () * interline, Y_AXIS);
num.translate_axis (dy/2, Y_AXIS);
{
Real gap = paper_l () -> get_var ("tuplet_spanner_gap");
- mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, dir_));
+ mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, get_direction ()));
}
if (number_visibility)
{
mol_p->add_molecule (num);
}
- mol_p->translate_axis (dir_ * interline, Y_AXIS);
+ mol_p->translate_axis (get_direction () * interline, Y_AXIS);
}
return mol_p;
}
Tuplet_spanner::do_post_processing ()
{
if (column_arr_.size())
- translate_axis (column_arr_[0]->extent (Y_AXIS)[dir_], Y_AXIS);
+ translate_axis (column_arr_[0]->extent (Y_AXIS)[get_direction ()], Y_AXIS);
if (beam_l_arr_.size () == 1)
{
chord modifiers
%}
-#(eval-string (ly-gulp-file "chord-names.scm"))
-
\chordmodifiers {
m = \musicalpitch { 0 2 -1 }
min = \musicalpitch { 0 2 -1 }
font_large = 8.;
font_Large = 6.;
font_normal = 5.;
- font_script = 4.;
font_finger = 4.;
font_volta = 4.;
font_dynamic = 10.;
font_mark = 6.;
magnification_dynamic = -4.0;
-
-1=\font "feta11"
-2=\font "feta11"
0=\font "feta11"
- "font_feta-2" = 11.;
- "font_feta-1" = 11.;
- "font_feta" = 11.;
-
\include "params.ly";
}
font_large = 8.;
font_Large = 6.;
font_normal = 5.;
- font_script = 4.;
font_finger = 4.;
font_volta = 4.;
0=\font "feta13"
-1=\font "feta11"
-
- "font_feta-2" = 11.;
- "font_feta-1" = 11.;
- "font_feta" = 13.;
\include "params.ly";
}
font_large = 12.;
font_Large = 10.;
font_normal = 8.;
- font_script = 7.;
-
magnification_dynamic = 1.0;
font_finger = 4.;
font_volta = 5.;
-1 = \font "feta13"
-2 = \font "feta11"
- "font_feta-2" = 11.;
- "font_feta-1" = 13.;
- "font_feta" = 16.;
-
\include "params.ly";
}
font_large = 12.;
font_Large = 12.;
font_normal = 10.;
- font_script = 8.;
font_finger = 5.;
font_volta = 8.;
-1 = \font "feta16"
0 = \font "feta20"
- "font_feta-2" = 13.;
- "font_feta-1" = 16.;
- "font_feta" = 20.;
-
\include "params.ly";
}
font_large = 12.;
font_Large = 12.;
font_normal = 10.;
- font_script = 8.;
font_finger = 5.;
font_volta = 8.;
-1 = \font "feta20"
0 = \font "feta23"
- "font_feta-2" = 16.;
- "font_feta-1" = 20.;
- "font_feta" = 23.;
-
\include "params.ly";
}
font_large = 14.;
font_Large = 17.;
font_normal = 12.;
- font_script = 10.;
-
font_dynamic = 10.;
% Ugh
magnification_dynamic = 4.;
0=\font "feta26"
-1 = \font "feta23"
-2 = \font "feta20"
-
- "font_feta-2" = 20.;
- "font_feta-1" = 23.;
- "font_feta" = 26.;
-
\include "params.ly";
}
Begin3
Title: LilyPond
-Version: 1.3.2
-Entered-date: 01NOV99
+Version: 1.3.3
+Entered-date: 03NOV99
Description:
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.3.2.tar.gz
+ 1000k lilypond-1.3.3.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.2.tar.gz
+ 1000k lilypond-1.3.3.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.2
+Version: 1.3.3
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.2.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.3.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
INSTALLATION_OUT_DIR3=$(datadir)/tfm
INSTALLATION_OUT_FILES3=$(TFM_FILES)
+# comment these out if you don't want pfa's to be generated
+# or you don't have metapost.
INSTALLATION_OUT_DIR4=$(datadir)/pfa
INSTALLATION_OUT_FILES4=$(PFA_FILES)
+++ /dev/null
-;; pitch: (notename . accidental)
-;; list: (list-of-pitches . (modifier-string . addition-subtraction-string))
-
-;; if a complete chord is found, use name
-;; if a chord's base triad is found (c e g), use name
-
-(define pitch-names-alist '())
-(set! pitch-names-alist
- (append
- '(
- ; use these for German naming
- ;((6 . 0) . ("H" ""))
- ;((6 . -1) . ("B" ("feta-1" . "\12")))
-
- ; urg, temp hack for accidental size: can't set from Chord::
- ((0 . 1) . ("C" ("feta-1" . "\10")))
- ((1 . 1) . ("D" ("feta-1" . "\10")))
- ((2 . 1) . ("E" ("feta-1" . "\10")))
- ((3 . 1) . ("F" ("feta-1" . "\10")))
- ((4 . 1) . ("G" ("feta-1" . "\10")))
- ((5 . 1) . ("A" ("feta-1" . "\10")))
- ((6 . 1) . ("B" ("feta-1" . "\10")))
-
- ((0 . -1) . ("C" ("feta-1" . "\12")))
- ((1 . -1) . ("D" ("feta-1" . "\12")))
- ((2 . -1) . ("E" ("feta-1" . "\12")))
- ((3 . -1) . ("F" ("feta-1" . "\12")))
- ((4 . -1) . ("G" ("feta-1" . "\12")))
- ((5 . -1) . ("A" ("feta-1" . "\12")))
- ((6 . -1) . ("B" ("feta-1" . "\12")))
- )
- pitch-names-alist))
-
-(define (user-pitch-name pitch)
- (let ((entry (assoc pitch pitch-names-alist)))
- (if entry
- (cdr entry))))
-
-(define chord-names-alist '())
-(set! chord-names-alist
- (append
- '(
- ; C iso C.no3.no5
- (((0 . 0)) . ("" . ""))
- ; C iso C.no5
- (((0 . 0) (2 . 0)) . ("" . ""))
- ; Cm iso Cm.no5
- (((0 . 0) (2 . -1)) . ("m" . ""))
- ; Cdim iso Cm5-
- (((0 . 0) (2 . -1) (4 . -1)) . ("dim" . ""))
- ; Co iso Cm5-7-
- ; urg
- ; (((0 . 0) (2 . -1) (4 . -1) (6 . -2)) . ("" . ("feta-1" . ".")))
- (((0 . 0) (2 . -1) (4 . -1) (6 . -2)) . ("" . ("script" . "o")))
- ; Cdim9
- (((0 . 0) (2 . -1) (4 . -1) (6 . -2) (1 . -1)) . ("dim" . ("script" . "9")))
- (((0 . 0) (2 . -1) (4 . -1) (6 . -2) (1 . -1) (3 . -1)) . ("dim" . ("script" . "11")))
- )
- chord-names-alist))
-
-(define (user-chord-name chord)
- ;(display chord)
- ;(newline)
- (let ((entry (assoc chord chord-names-alist)))
- (if entry
- (cdr entry))))
-
;;;;;;;; TeX
-;; this is silly, can't we use something like
-;; roman-0, roman-1 roman+1 ?
(define cmr-alist
'(("bold" . "cmbx")
("dynamic" . "feta-din")
- ("feta" . "feta")
- ("feta-1" . "feta")
- ("feta-2" . "feta")
("finger" . "feta-nummer")
("typewriter" . "cmtt")
("italic" . "cmti")
("roman" . "cmr")
- ("script" . "cmr")
("large" . "cmbx")
("Large" . "cmbx")
("mark" . "feta-nummer")
#
# For now let people define these in their environments
#
- : ${MFPLAIN_MP=`kpsewhich mfplain.mp`}
+ : ${MFPLAIN_MP=`kpsewhich mp mfplain.mp`}
: ${INIMETAPOST_FLAGS='-interaction=nonstopmode'}
rm -f mfput.*