]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.3.15 release/1.3.15
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 20 Dec 1999 00:22:01 +0000 (01:22 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 20 Dec 1999 00:22:01 +0000 (01:22 +0100)
36 files changed:
CHANGES
INSTALL.txt
TODO
VERSION
flower/include/acursor.hh [deleted file]
flower/include/full-storage.icc [deleted file]
flower/include/handle.hh [deleted file]
flower/include/iterate.hh [deleted file]
flower/include/nscalar.hh [deleted file]
flower/include/priorities.hh [deleted file]
flower/include/varray.icc [deleted file]
flower/nscalar.cc [deleted file]
input/test/auto-isknee.ly [deleted file]
input/test/auto-knee.ly
lib/duration-convert.cc [deleted file]
lib/duration-iter.cc [deleted file]
lib/duration.cc [deleted file]
lib/include/duration-convert.hh [deleted file]
lib/include/duration-iter.hh [deleted file]
lib/include/duration.hh [deleted file]
lib/include/plet.hh [deleted file]
lib/include/thank-you-cygnus.hh [deleted file]
lib/plet.cc [deleted file]
lib/thank-you-cygnus.cc [deleted file]
lily/beam.cc
lily/beaming-info.cc
lily/chord-name-engraver.cc
lily/chord-name.cc
lily/duration.cc
lily/include/chord-name.hh
lily/include/plet.hh [deleted file]
lily/lily-guile.cc
lily/score-element.cc
lily/stem.cc
make/out/lilypond.lsm
make/out/lilypond.spec

diff --git a/CHANGES b/CHANGES
index 87bebcbd4b82442c121c6d872a4cf1992fb718c8..f0747050e808f46bf8ef25775d6e16fb62325b4a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,7 +1,3 @@
-pl 14.hwn1jcn1
-       - chord-name uses scm members
-       - bfs: knee with different mults, interstaff knee, auto-knee
-
 pl 14.hwn1
        - specialize duration.cc for lily, move out of lib/
        - stem cleanup
index cb25f178c11a2a9e6165f2be2e723d0ce6bb0414..847984f75ad2e35b11059db6e190308ba9f8d4f2 100644 (file)
@@ -120,7 +120,7 @@ Website
    The website is the most convenient form to use for reading the
 documentation on-line documentation. It is made by entering
 
-       make website
+       make htmldoc
    This does require a  functioning  LilyPond. The binary doesn't have
 to be installed.
 
diff --git a/TODO b/TODO
index fe36f4a168d1fd5cb3c2fa9f5187736281f9a846..7a30b25a86bd19c929840e46e897ccc9345c33f2 100644 (file)
--- a/TODO
+++ b/TODO
@@ -30,6 +30,29 @@ Grep -i for TODO, FIXME and ugh/ugr/urg.
 . * acc at tied note after linebreak.
 . * fix font-naming and selecting
 . * sparse ties.
+. * 
+- in the melody contex I have:
+
+                d8 d, d' <d f> d, <d' f> |
+
+- in the bass context I have:
+
+
+                r8 d4. d4 |
+
+The problem is with 3rd note from melody / 2nd note from the bass.
+lilypond prints them as 2 separate notes, while the original score uses
+the same note circle, and draws both up and down stems. Like for the 5th
+melody / 3rd bass note. Is there any way to solve this ? It looks like
+lilypond doesn't like that the bass note is "4." If I make it "4", then
+lilypond will draw it like I want.
+
+Also, another problem is the midi output. Those bass notes are doubled.
+Is there any way to mute one of "them" ? 
+
+Probably this is not a problem with lilypond, but with my lack of
+knowledge of music theory and/or lilypond. Anyhow, any help is highly
+appreciated, like always :-)
 . * 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?
diff --git a/VERSION b/VERSION
index 54c56fb42de7a20261eb3ba69997cf62c86589a8..531ec79331de178d3be82b5c3c432a7aa4e21729 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
-PATCH_LEVEL=14
-MY_PATCH_LEVEL=hwn1jcn1
+PATCH_LEVEL=15
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
diff --git a/flower/include/acursor.hh b/flower/include/acursor.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/include/full-storage.icc b/flower/include/full-storage.icc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/include/handle.hh b/flower/include/handle.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/include/iterate.hh b/flower/include/iterate.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/include/nscalar.hh b/flower/include/nscalar.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/include/priorities.hh b/flower/include/priorities.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/include/varray.icc b/flower/include/varray.icc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/flower/nscalar.cc b/flower/nscalar.cc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/input/test/auto-isknee.ly b/input/test/auto-isknee.ly
deleted file mode 100644 (file)
index f2b30b9..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-\score {
-       \notes \context PianoStaff <
-               \context Staff = "up" {
-                       \autochange Staff \relative c' { 
-                               [c8 e'] [c' c,,]
-                               \stemdown
-                               c'8 c c g,
-                               g8 d' d d 
-                               \stemup
-                               b8 c d e
-                       }
-               }
-               \context Staff = "down" {
-                       \clef bass; 
-                       s1*2
-               }
-       >
-       \paper{
-               \translator{
-                       \StaffContext
-                       autoKneeGap = #13.0
-                       autoInterstaffKneeGap = #4.0
-               }
-       }
-}
index 3a3fbf55d2698bf550dec6b0d187640a661b1ff1..e6541ec2ef0bd663a8475869e7ee22d50b882b14 100644 (file)
@@ -1,13 +1,26 @@
 
 \score {
-         \context Staff \notes\relative c'{ 
-%              \property Voice.autoKneeGap = #13
-               [c8 e'] [c' c,,]
-       }
+       \notes \context PianoStaff <
+               \context Staff = "up" {
+                       \autochange Staff \relative c' { 
+                               [c8 e'] [c' c,,]
+                               \stemdown
+                               c'8 c c g,
+                               g8 d' d d 
+                               \stemup
+                               b8 c d e
+                       }
+               }
+               \context Staff = "down" {
+                       \clef bass; 
+                       s1*2
+               }
+       >
        \paper{
                \translator{
                        \StaffContext
-                       autoKneeGap = #13
+                       autoKneeGap = "13.0";
+                       autoInterstaffKneeGap = "4.0";
                }
        }
 }
diff --git a/lib/duration-convert.cc b/lib/duration-convert.cc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/duration-iter.cc b/lib/duration-iter.cc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/duration.cc b/lib/duration.cc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/include/duration-convert.hh b/lib/include/duration-convert.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/include/duration-iter.hh b/lib/include/duration-iter.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/include/duration.hh b/lib/include/duration.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/include/plet.hh b/lib/include/plet.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/include/thank-you-cygnus.hh b/lib/include/thank-you-cygnus.hh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/plet.cc b/lib/plet.cc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lib/thank-you-cygnus.cc b/lib/thank-you-cygnus.cc
deleted file mode 100644 (file)
index e69de29..0000000
index 8620f8747c69b8351700c0624d3cd6b07674e8c7..33584530760d4a1f8db774796890ec7117a2d71e 100644 (file)
@@ -207,9 +207,9 @@ Beam::auto_knee (String gap_str, bool interstaff_b)
         {
          bool is_b = (bool)(calc_interstaff_dist (stem (i), this) 
            - calc_interstaff_dist (stem (i-1), this));
-         int l_y = (int)(stem (i-1)->head_positions()[get_direction ()])
+         int l_y = (int)(stem (i-1)->chord_start_f ())
            + (int)calc_interstaff_dist (stem (i-1), this);
-         int r_y = (int)(stem (i)->head_positions()[get_direction ()])
+         int r_y = (int)(stem (i)->chord_start_f ())
            + (int)calc_interstaff_dist (stem (i), this);
          int gap_i = r_y - l_y;
 
@@ -225,7 +225,7 @@ Beam::auto_knee (String gap_str, bool interstaff_b)
     {
       for (int i=0; i < stem_count (); i++)
         {
-         int y = (int)(stem (i)->head_positions()[get_direction ()])
+         int y = (int)(stem (i)->chord_start_f ())
            + (int)calc_interstaff_dist (stem (i), this);
          stem (i)->set_direction (y < knee_y ? UP : DOWN);
          stem (i)->set_elt_property ("dir-forced", SCM_BOOL_T);
@@ -317,9 +317,8 @@ Beam::do_post_processing ()
       set_stem_length (y, dy);
       y_shift = check_stem_length_f (y, dy);
 
-      Staff_symbol_referencer_interface st (this);
-      Real half_space = st.staff_space () / 2;
-      if (y_shift > half_space / 4)
+      Real internote_f = paper_l ()->get_var ("interline") / 2;
+      if (y_shift > internote_f / 4)
        {
          y += y_shift;
 
@@ -328,7 +327,7 @@ Beam::do_post_processing ()
            request quanting the other way.
          */
          int quant_dir = 0;
-         if (abs (y_shift) > half_space / 2)
+         if (abs (y_shift) > internote_f / 2)
            quant_dir = sign (y_shift) * get_direction ();
          y = quantise_y_f (y, dy, quant_dir);
          set_stem_length (y, dy);
@@ -422,11 +421,11 @@ Beam::calc_slope_damping_f (Real dy) const
 Real
 Beam::calc_stem_y_f (Stem* s, Real y, Real dy) const
 {
-  Real thick = gh_scm2double (get_elt_property ("beam-thickness"));
-  int beam_multiplicity = get_multiplicity ();
-  int stem_multiplicity = (s->flag_i () - 2) >? 0;
+  Real beam_f = gh_scm2double (get_elt_property ("beam-thickness"));
+  int   multiplicity = get_multiplicity ();
+
 
-  Real interbeam_f = paper_l ()->interbeam_f (beam_multiplicity);
+  Real interbeam_f = paper_l ()->interbeam_f (multiplicity);
   Real x0 = first_visible_stem ()->hpos_f ();
   Real dx = last_visible_stem ()->hpos_f () - x0;
   Real stem_y = (s->hpos_f () - x0) / dx * dy + y;
@@ -434,9 +433,8 @@ Beam::calc_stem_y_f (Stem* s, Real y, Real dy) const
   /* knee */
   if (get_direction () != s->get_direction ())
     {
-      stem_y -= get_direction ()
-       * (thick / 2 + (beam_multiplicity - 1 - stem_multiplicity))
-       * interbeam_f;
+      stem_y -= get_direction () * (beam_f / 2
+       + (multiplicity - 1) * interbeam_f);
 
       Staff_symbol_referencer_interface me (s);
       Staff_symbol_referencer_interface last (last_visible_stem ());
@@ -444,7 +442,7 @@ Beam::calc_stem_y_f (Stem* s, Real y, Real dy) const
       if ((s != first_visible_stem ())
          && me.staff_symbol_l () != last.staff_symbol_l ())
        stem_y += get_direction () 
-                 * (beam_multiplicity - stem_multiplicity) * interbeam_f;
+                 * (multiplicity - (s->flag_i () - 2) >? 0) * interbeam_f;
     }
   return stem_y;
 }
@@ -485,8 +483,7 @@ Beam::check_stem_length_f (Real y, Real dy) const
 void
 Beam::set_stem_length (Real y, Real dy)
 {
-  Staff_symbol_referencer_interface st (this);
-  Real half_space = st.staff_space ()/2;
+  Real internote_f = paper_l ()->get_var ("interline") / 2;
   for (int i=0; i < stem_count (); i++)
     {
       Stem* s = stem (i);
@@ -496,7 +493,7 @@ Beam::set_stem_length (Real y, Real dy)
       Real stem_y = calc_stem_y_f (s, y, dy);
 
       /* caution: stem measures in staff-positions */
-      s->set_stemend ((stem_y + calc_interstaff_dist (s, this)) / half_space);
+      s->set_stemend ((stem_y - calc_interstaff_dist (s, this)) / internote_f);
     }
 }
 
@@ -504,9 +501,9 @@ Beam::set_stem_length (Real y, Real dy)
   [Ross] (simplification of)
   Try to set dy complying with:
     - zero
-    - thick / 2 + staffline_f / 2
-    - thick + staffline_f
-  + n * staff_space
+    - beam_f / 2 + staffline_f / 2
+    - beam_f + staffline_f
+  + n * interline
 
   TODO: get allowed-positions as scm list (aarg: from paper block)
 */
@@ -519,17 +516,17 @@ Beam::quantise_dy_f (Real dy) const
     return dy;
 
   Staff_symbol_referencer_interface st (this);
-  Real staff_space = st.staff_space ();
+  Real interline_f = st.staff_space ();
   
   Real staffline_f = paper_l ()->get_var ("stafflinethickness");
-  Real thick = gh_scm2double (get_elt_property ("beam-thickness"));;
+  Real beam_f = gh_scm2double (get_elt_property ("beam-thickness"));;
 
   Array<Real> allowed_fraction (3);
   allowed_fraction[0] = 0;
-  allowed_fraction[1] = (thick / 2 + staffline_f / 2);
-  allowed_fraction[2] = (thick + staffline_f);
+  allowed_fraction[1] = (beam_f / 2 + staffline_f / 2);
+  allowed_fraction[2] = (beam_f + staffline_f);
 
-  allowed_fraction.push (staff_space);
+  allowed_fraction.push (interline_f);
   Interval iv = quantise_iv (allowed_fraction,  abs (dy));
   Real q = (abs (dy) - iv[SMALLER] <= iv[BIGGER] - abs (dy))
     ? iv[SMALLER]
@@ -567,14 +564,14 @@ Beam::quantise_y_f (Real y, Real dy, int quant_dir)
        hang       straddle   sit        inter      hang
    */
 
-  Staff_symbol_referencer_interface st (this);
-  Real staff_space = st.staff_space ();
+  Staff_symbol_referencer_interface sinf (this);
+  Real space = sinf.staff_space ();
   Real staffline_f = paper_l ()->get_var ("stafflinethickness");
-  Real thick = gh_scm2double (get_elt_property ("beam-thickness"));;
+  Real beam_f = gh_scm2double (get_elt_property ("beam-thickness"));;
 
   Real straddle = 0;
-  Real sit = thick / 2 - staffline_f / 2;
-  Real hang = staff_space - thick / 2 + staffline_f / 2;
+  Real sit = beam_f / 2 - staffline_f / 2;
+  Real hang = space - beam_f / 2 + staffline_f / 2;
 
   /*
     Put all allowed positions into an array.
@@ -608,7 +605,7 @@ Beam::quantise_y_f (Real y, Real dy, int quant_dir)
        allowed_position.push (hang);
     }
 
-  allowed_position.push (staff_space);
+  allowed_position.push (space);
   Real up_y = get_direction () * y;
   Interval iv = quantise_iv (allowed_position, up_y);
 
@@ -655,7 +652,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
 
 
   Real interbeam_f = paper_l ()->interbeam_f (multiplicity);
-  Real thick = gh_scm2double (get_elt_property ("beam-thickness"));;
+  Real beam_f = gh_scm2double (get_elt_property ("beam-thickness"));;
 
   Real dy = interbeam_f;
   Real stemdx = staffline_f;
@@ -690,7 +687,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
       w = w/2 <? nw_f;
       Molecule a;
       if (lhalfs)              // generates warnings if not
-       a =  lookup_l ()->beam (dydx, w, thick);
+       a =  lookup_l ()->beam (dydx, w, beam_f);
       a.translate (Offset (-w, -w * dydx));
       for (int j = 0; j  < lhalfs; j++)
        {
@@ -706,7 +703,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
       int rwholebeams= here->beam_count (RIGHT) <? next->beam_count (LEFT) ;
 
       Real w = next->hpos_f () - here->hpos_f ();
-      Molecule a = lookup_l ()->beam (dydx, w + stemdx, thick);
+      Molecule a = lookup_l ()->beam (dydx, w + stemdx, beam_f);
       a.translate_axis( - stemdx/2, X_AXIS);
       int j = 0;
       Real gap_f = 0;
@@ -726,7 +723,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
          // TODO: notehead widths differ for different types
          gap_f = nw_f / 2;
          w -= 2 * gap_f;
-         a = lookup_l ()->beam (dydx, w + stemdx, thick);
+         a = lookup_l ()->beam (dydx, w + stemdx, beam_f);
        }
 
       for (; j  < rwholebeams; j++)
@@ -741,7 +738,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
 
       w = w/2 <? nw_f;
       if (rhalfs)
-       a = lookup_l ()->beam (dydx, w, thick);
+       a = lookup_l ()->beam (dydx, w, beam_f);
 
       for (; j  < rwholebeams + rhalfs; j++)
        {
index ef0bb2904116cf958e7aa79349dbab9743ada7ac..8e16c509884c3b7d36d69d4581cd0ba32f78ad19 100644 (file)
@@ -23,7 +23,7 @@ Beaming_info::Beaming_info(Moment m, int i)
   beams_i_drul_[RIGHT] = i;  
 }
 
-const int infinity_i = 1000;   // guh.
+const int infinity_i = INT_MAX;        // guh.
 
 int
 Beaming_info_list::min_denominator_index () const
index c22fd18a5b73679c6673f11066dff3d65b4191bb..fcc6031cbb2224fe5acfa882fcf38674e8fbbca0 100644 (file)
@@ -72,8 +72,7 @@ Chord_name_engraver::do_process_requests ()
   if (gh_boolean_p (chord_inversion))
     find_inversion_b = gh_scm2bool (chord_inversion);
 
-  chord_name_p_ = new Chord_name;
-  chord_name_p_->set (to_chord (pitch_arr_, tonic_req_, inversion_req_, bass_req_, find_inversion_b));
+  chord_name_p_ = new Chord_name (to_chord (pitch_arr_, tonic_req_, inversion_req_, bass_req_, find_inversion_b));
     
   announce_element (Score_element_info (chord_name_p_, 0));
 }
index a202812d32c057d209261269c78f705fee21b677..b190520b74ca5fb41117b5de16e025267ba15509 100644 (file)
 #include "lookup.hh"
 
 SCM
-to_scm (Musical_pitch p)
+pitch2scm (Musical_pitch p)
 {
-  return gh_list (gh_int2scm (p.notename_i_), gh_int2scm (p.accidental_i_), gh_int2scm (p.octave_i_), SCM_UNDEFINED);
-}
-
-Musical_pitch
-from_scm (SCM s)
-{
-  return Musical_pitch (gh_scm2int (gh_car (s)),
-                       gh_scm2int (gh_cadr (s)),
-                       gh_scm2int (gh_caddr (s)));
-}
-  
-template<class T>SCM
-array_to_scm (Array<T> arr)
-{
-  SCM list = SCM_EOL;
-  for (int i = arr.size (); i--;)
-    list =  gh_cons (to_scm (arr[i]), list);
-  return list;
-}
-
-/*
-  Silly templates
-  Array<T> scm_to_array (SCM s)
- */
-template<class T>void
-scm_to_array (SCM s, Array<T>* arr)
-{
-  for (; gh_pair_p (s); s= gh_cdr (s))
-    arr->push (from_scm (gh_car (s)));
-}
-
-/*
-  ugh, move to chord-name-engraver
-
-  Hmm, why not represent complete chord as list?
-  ((tonic third fifth) (inversion bass))
- */
-void
-Chord_name::set (Chord const& c)
-{
-  set_elt_property ("pitches", array_to_scm (c.pitch_arr_));
-  if (c.inversion_b_)
-    set_elt_property ("inversion", to_scm (c.inversion_pitch_));
-  if (c.bass_b_)
-    set_elt_property ("bass", to_scm (c.bass_pitch_));
+  return gh_cons (gh_int2scm (p.notename_i_), gh_int2scm (p.accidental_i_));
 }
 
-SCM
-notename2scm (Musical_pitch p)
+Chord_name::Chord_name (Chord const& c)
 {
-  return gh_cons (gh_int2scm (p.notename_i_), gh_int2scm (p.accidental_i_));
+  chord_ = c;
 }
 
 /*
@@ -115,7 +70,7 @@ Chord_name::ly_text2molecule (SCM scm) const
 Molecule
 Chord_name::pitch2molecule (Musical_pitch p) const
 {
-  SCM name = scm_eval (gh_list (ly_symbol2scm ("user-pitch-name"), ly_quote_scm (notename2scm (p)), SCM_UNDEFINED));
+  SCM name = scm_eval (gh_list (ly_symbol2scm ("user-pitch-name"), ly_quote_scm (pitch2scm (p)), SCM_UNDEFINED));
 
   if (name != SCM_UNSPECIFIED)
     {
@@ -166,7 +121,7 @@ Chord_name::user_chord_name (Array<Musical_pitch> pitch_arr, Chord_mol* name_p)
   Chord::rebuild_transpose (&chord_type, diff_pitch (pitch_arr[0], Musical_pitch (0)), false);
 
   for (int i= chord_type.size (); i--; )
-    chord = gh_cons (notename2scm (chord_type[i]), chord);
+    chord = gh_cons (pitch2scm (chord_type[i]), chord);
 
   SCM name = scm_eval (gh_list (ly_symbol2scm ("user-chord-name"), ly_quote_scm (chord), SCM_UNDEFINED));
   if (gh_pair_p (name))
@@ -190,7 +145,7 @@ Chord_name::banter (Array<Musical_pitch> pitch_arr, Chord_mol* name_p) const
     scale.push (Musical_pitch (i));
 
   Musical_pitch tonic = pitch_arr[0];
-  Chord::rebuild_transpose (&scale, tonic, true);
+  chord_.rebuild_transpose (&scale, tonic, true);
   
   /*
     Does chord include this step?  -1 if flat
@@ -259,16 +214,10 @@ Chord_name::banter (Array<Musical_pitch> pitch_arr, Chord_mol* name_p) const
     }
 }
 
-/*
-  TODO:
-    fix silly to-and-fro scm conversions
- */
 Molecule*
 Chord_name::do_brew_molecule_p () const
 {
-  Array<Musical_pitch> pitch_arr;
-  scm_to_array (get_elt_property ("pitches"), &pitch_arr);
-  Musical_pitch tonic = pitch_arr[0];
+  Musical_pitch tonic = chord_.pitch_arr_[0];
   
   Chord_mol name;
   name.tonic_mol = pitch2molecule (tonic);
@@ -281,17 +230,17 @@ Chord_name::do_brew_molecule_p () const
     maybe we should check all sub-lists of pitches, not
     just full list and base triad?
    */
-  if (!user_chord_name (pitch_arr, &name))
+  if (!user_chord_name (chord_.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))
+      if ((chord_.pitch_arr_.size () > 2)
+         && user_chord_name (chord_.pitch_arr_.slice (0, 3), &name))
         {
          Array<Musical_pitch> base = Chord::base_arr (tonic);
-         base.concat (pitch_arr.slice (3, pitch_arr.size ()));
+         base.concat (chord_.pitch_arr_.slice (3, chord_.pitch_arr_.size ()));
          banter (base, &name);
        }
       /*
@@ -299,23 +248,22 @@ Chord_name::do_brew_molecule_p () const
        */
       else
        {
-         banter (pitch_arr, &name);
+         banter (chord_.pitch_arr_, &name);
        }
     }
 
-  SCM s = get_elt_property ("inversion");
-  if (s != SCM_UNDEFINED)
+  if (chord_.inversion_b_)
     {
       name.inversion_mol = lookup_l ()->text ("", "/", paper_l ());
-      Molecule mol = pitch2molecule (from_scm (s));
+      // zucht  const&
+      Molecule mol = pitch2molecule (chord_.inversion_pitch_);
       name.inversion_mol.add_at_edge (X_AXIS, RIGHT, mol, 0);
     }
 
-  s = get_elt_property ("bass");
-  if (s != SCM_UNDEFINED)
+  if (chord_.bass_b_)
     {
       name.bass_mol = lookup_l ()->text ("", "/", paper_l ());
-      Molecule mol = pitch2molecule (from_scm (s));
+      Molecule mol = pitch2molecule (chord_.bass_pitch_);
       name.bass_mol.add_at_edge (X_AXIS, RIGHT, mol, 0);
     }
 
index ea63899a496ba6f80932edc41086486c3815fc10..03c769ec3234dcd5bb180bd522891fccacfc8e93 100644 (file)
@@ -26,8 +26,8 @@ Duration::Duration ()
 void
 Duration::compress (Rational m)
 {
-  tuplet_type_i_ *= m.num_i ();
tuplet_iso_i_ *= m.den_i (); 
+  tuplet_iso_i_  *= m.num_i ();
 tuplet_type_i_ *= m.den_i (); 
 }
 
 Rational
index 04c20ffb18dac118a4b3154aae5cde871903ef3e..008944569478c8a904bc3fd9e8ec82ab951c9de5 100644 (file)
@@ -33,7 +33,13 @@ public:
   bool user_chord_name (Array<Musical_pitch> pitch_arr, Chord_mol* name_p) const;
   void banter (Array<Musical_pitch> pitch_arr, Chord_mol* name_p) const;
 
-  void set (Chord const& c);
+  Chord_name (Chord const& c);
+
+  /*
+    ugh. Junkme, I must be elt property.
+   */
+  
+  Chord chord_;
 
 protected:
   virtual Molecule* do_brew_molecule_p () const;
diff --git a/lily/include/plet.hh b/lily/include/plet.hh
deleted file mode 100644 (file)
index 3a3b234..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-  plet.hh -- declare Plet
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef PLET_HH
-#define PLET_HH
-#include "rational.hh"
-
-/** 
-  The type and replacement value of a  plet (triplet, quintuplet.) Conceptually the same as a rational, but 4/6 != 2/3.
-  
-  (plet)
- */
-struct Plet {
-  Plet ();
-  Rational mom () const;
-  bool unit_b () const;
-};
-
-#endif // PLET_HH
index 3a32c03d69eeecbddcd69ae5da80da3cce7bc819..21723f7713c21d21f11371f6e9bec600fabbf953 100644 (file)
@@ -197,7 +197,6 @@ index_set_cell (SCM s, Direction d, SCM v)
   return s;
 }
   
-#if 0
 SCM
 array_to_list (SCM *a , int l)
 {
@@ -208,7 +207,6 @@ array_to_list (SCM *a , int l)
     }
   return list;
 }
-#endif
 
 SCM
 ly_warning (SCM str)
index 55f2b92c6f7834aee9cf11c39ea93745c5743920..6d3be5981c996fcc980d5185b1cc793823e18abd 100644 (file)
@@ -367,6 +367,9 @@ Score_element::add_dependency (Score_element*e)
 SCM
 Score_element::handle_broken_smobs (SCM s, SCM criterion)
 {
+ again:
+
+  
   Score_element *sc = unsmob_element ( s);
   if (sc)
     {
@@ -402,16 +405,25 @@ Score_element::handle_broken_smobs (SCM s, SCM criterion)
       /*
        UGH! breaks on circular lists.
       */
-      gh_set_car_x (s, handle_broken_smobs (gh_car (s), criterion));
-      gh_set_cdr_x (s, handle_broken_smobs (gh_cdr (s), criterion));
-
-      SCM c = gh_cdr(s);
-
-      // gh_list_p () is linear, this is O(1)  
-      bool list = gh_pair_p (c) || c == SCM_EOL;
+      SCM car = handle_broken_smobs (gh_car (s), criterion);
+      SCM cdr = gh_cdr (s);
       
-      if (gh_car (s) == SCM_UNDEFINED && list)
-       return c;
+      if (car == SCM_UNDEFINED
+         && (gh_pair_p (cdr) || cdr == SCM_EOL))
+       {
+         /*
+           This is tail-recursion, ie. 
+           
+           return handle_broken_smobs (cdr, criterion);
+
+           We don't want to rely on the compiler to do this.  */
+         s =  cdr;     
+         goto again;
+       }
+
+      gh_set_car_x (s, car);
+      gh_set_cdr_x (s, handle_broken_smobs (cdr, criterion));
+      return s;
     }
   return s;
 }
index ef6e10a501f6e4b181f86b9e41a7ba67e6fc6f75..b86b38c2d65de0cdced92b06428c4b5661955778 100644 (file)
@@ -92,6 +92,8 @@ Stem::stem_end_position () const
     {
       Stem * me = (Stem*) this;
       len = get_default_stemlen ();
+
+      // FIXME: len != position
       me->set_elt_property ("stem-end-position", gh_double2scm (len));
     }
   else
@@ -561,7 +563,7 @@ Stem::calc_stem_info () const
   if (gh_number_p (s))
     info.idealy_f_ -= gh_double2scm (s);
 
-  Real interstaff_f =  -beam_dir* calc_interstaff_dist (this, beam_l ());
+  Real interstaff_f =  beam_dir* calc_interstaff_dist (this, beam_l ());
 
   info.idealy_f_ += interstaff_f;
   info.miny_f_ += interstaff_f;
index 028c343a1683435d1b829e05a09237305f3176d8..73fdd902a0af78cf96c2f258177d21c712cb5d9b 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.3.14
-Entered-date: 19DEC99
+Version: 1.3.15
+Entered-date: 20DEC99
 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.14.tar.gz 
+       1000k lilypond-1.3.15.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.3.14.tar.gz 
+       1000k lilypond-1.3.15.tar.gz 
 Copying-policy: GPL
 End
index d616aaa06db08afbec0c8e9cae6b1a9322dcea78..056d2d1cb3a3acf9b3fccc8d33d544ed16620543 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.3.14
+Version: 1.3.15
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.14.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.15.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 # get Packager from (undocumented?) ~/.rpmmacros!