]> git.donarmstrong.com Git - lilypond.git/commitdiff
(stop_translation_timestep):
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 26 Jan 2004 10:36:07 +0000 (10:36 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 26 Jan 2004 10:36:07 +0000 (10:36 +0000)
align all stanza numbers.

ChangeLog
VERSION
lily/beam.cc
lily/engraver.cc
lily/lyric-phrasing-engraver.cc
lily/mensural-ligature-engraver.cc
lily/spacing-engraver.cc
lily/stem-tremolo.cc
scm/define-grob-interfaces.scm
scm/define-grobs.scm

index 285e2dd643f2ce2062c160e660cd637a973ce66c..620132cbc202b69931c44b7e7c83046fd9019414 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-01-26  Han-Wen Nienhuys   <hanwen@xs4all.nl>
+
+       * lily/lyric-phrasing-engraver.cc (stop_translation_timestep):
+       align all stanza numbers.
+
 2004-01-26  Heikki Junes <hjunes@cc.hut.fi>
 
        * Documentation/user/{introduction.itely,refman.itely,
diff --git a/VERSION b/VERSION
index e2f0006468d04dceef6d8516782a493dbbb81d21..aaa77e5b2b118b8f68a679c8dab5144b581fd3a5 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=1
-PATCH_LEVEL=14
-MY_PATCH_LEVEL=hwn1
+PATCH_LEVEL=15
+MY_PATCH_LEVEL=
 
index 4c5f743030bb52eccd90edf094bb3f2a262a2f8c..60b6944a804bc5f5b4889c527f4dbe61f9984267 100644 (file)
@@ -83,8 +83,16 @@ Real
 Beam::get_beam_translation (Grob *me)
 {
   SCM func = me->get_grob_property ("space-function");
-  SCM s = gh_call2 (func, me->self_scm (), scm_int2num (get_beam_count (me)));
-  return gh_scm2double (s);
+
+  if (gh_procedure_p (func))
+    {
+      SCM s = gh_call2 (func, me->self_scm (), scm_int2num (get_beam_count (me)));
+      return gh_scm2double (s);
+    }
+  else
+    {
+      return 0.81;
+    }
 }
 
 /* Maximum beam_count. */
index 57c4298c394f81ff89ec28294badc32c2c9defe2..b009c3cb32644bbc08ae757b7845e5d811fecad5 100644 (file)
@@ -71,13 +71,15 @@ Engraver::process_music ()
 Item*
 Engraver::internal_make_item (SCM x)
 {
-  return new Item (x);
+  SCM props = internal_get_property (x);
+  return new Item (props);
 }
 
 Spanner*
 Engraver::internal_make_spanner (SCM x)
 {
-  return new Spanner (x);
+  SCM props = internal_get_property (x);
+  return new Spanner (props);
 }
 
 Engraver::Engraver()
index f33a10de35e8523e395b03c4aa2340e73eaf31d1..27879804742bf64d8b0bdabf6e8ea6ae9e3d1f90 100644 (file)
@@ -14,6 +14,7 @@ source file of the GNU LilyPond music typesetter
 #include "lyric-extender.hh"
 #include "item.hh"
 #include "group-interface.hh"
+#include "side-position-interface.hh"
 
 struct Phrasing_association
 {
@@ -22,6 +23,8 @@ struct Phrasing_association
   Link_array<Grob> heads_;
   Link_array<Spanner> past_extenders_;
   Link_array<Spanner> new_extenders_;
+  Link_array<Grob> stanza_numbers_;
+
   
   bool melisma_;
   
@@ -45,6 +48,7 @@ private:
   void add_lyric_phrasing (Grob_info);
   void add_voice_phrasing (Grob_info);
   void add_lyric_extender (Grob_info);
+  void add_stanza_number (Grob_info);
   Phrasing_association *get_phrasing_assoc (String nm);
   String get_voice_name_for_lyric (Translator_group*tr);
   Link_array<Phrasing_association> assocs_;
@@ -65,6 +69,8 @@ Lyric_phrasing_engraver::acknowledge_grob (Grob_info i)
     add_lyric_phrasing (i);
   else if (Lyric_extender::has_interface (h))
     add_lyric_extender (i);
+  else if (h->internal_has_interface (ly_symbol2scm ("stanza-number-interface")))
+    add_stanza_number (i);
 }
 
 Phrasing_association *
@@ -127,6 +133,19 @@ Lyric_phrasing_engraver::add_lyric_extender (Grob_info inf)
   a->new_extenders_.push (dynamic_cast<Spanner*> (inf.grob_));  
 }
 
+void
+Lyric_phrasing_engraver::add_stanza_number  (Grob_info inf)
+{
+  Translator_group * tr = inf.origin_trans_->daddy_trans_;
+  while (tr && !tr->is_alias (ly_symbol2scm ("LyricsVoice")))
+    tr = tr->daddy_trans_;
+
+  if (!tr)
+    return;
+
+  Phrasing_association *a =  get_phrasing_assoc (get_voice_name_for_lyric (tr));
+  a->stanza_numbers_.push (inf.grob_);
+}
 
 void
 Lyric_phrasing_engraver::add_voice_phrasing (Grob_info inf)
@@ -162,12 +181,28 @@ Lyric_phrasing_engraver::add_lyric_phrasing (Grob_info inf)
 void
 Lyric_phrasing_engraver::stop_translation_timestep ()
 {
+  Link_array<Grob> stzs;
+  Link_array<Grob> lyrs;
   for (int i = assocs_.size ();  i--; )
     {
-      assocs_[i]->heads_.clear ();
-      assocs_[i]->lyrics_.clear ();
-      assocs_[i]->past_extenders_.concat (assocs_[i]->new_extenders_) ;
-      assocs_[i]->new_extenders_.clear ();
+      Phrasing_association * a = assocs_[i];
+      stzs.concat (a->stanza_numbers_);
+      lyrs.concat (a->lyrics_);
+    }
+
+  for(int i= lyrs.size(); i--;)
+    for (int j = stzs.size (); j--;)
+      Side_position_interface::add_support (stzs[j], lyrs[i]);
+    
+  for (int i = assocs_.size ();  i--; )
+    {
+      Phrasing_association * a = assocs_[i];
+
+      a->stanza_numbers_.clear ();
+      a->heads_.clear ();
+      a->lyrics_.clear ();
+      a->past_extenders_.concat (assocs_[i]->new_extenders_) ;
+      a->new_extenders_.clear ();
     }
 }
 
@@ -211,7 +246,8 @@ ENTER_DESCRIPTION(Lyric_phrasing_engraver,
                  "This engraver combines note heads and lyrics for alignment. ",
                  "",
                  "",
-                 "lyric-syllable-interface note-head-interface lyric-extender-interface",
+                 "stanza-number-interface lyric-syllable-interface "
+                 "note-head-interface lyric-extender-interface",
                  "associatedVoice",
                  "");
 
index 4f915714dab734b3f090233c1cfd201cfb723fe6..f982a11ac7afa8332da5a2bfa0068aa66efb9161 100644 (file)
@@ -403,13 +403,6 @@ Mensural_ligature_engraver::fold_up_primitives (Array<Grob_info> primitives)
 
       if (i > 0)
        {
-#if 0
-         Rod r;
-         r.distance_ = distance;
-         r.item_l_drul_[LEFT] = first;
-         r.item_l_drul_[RIGHT] = current;
-         r.add_to_cols ();
-#endif
          current->translate_axis (distance, X_AXIS);
        }
 
index 377d88bbdf115d3bb5f5c1eda27a3e6a6e69b120..5e1f6371b56699b55386e2a503873b25c0d1b183 100644 (file)
@@ -78,7 +78,7 @@ Spacing_engraver::process_music ()
 {
   if (!spacing_)
     {
-      spacing_  =make_spanner ("SpacingSpanner");
+      spacing_ make_spanner ("SpacingSpanner");
       spacing_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));  
       announce_grob(spacing_, SCM_EOL);
     }
index 886c9df71dc5ace661ce33de8020e95530e37928..9a0fb6f1714be67f415f42ab7fcdd5dde7d9c15e 100644 (file)
@@ -129,14 +129,17 @@ Stem_tremolo::brew_molecule (SCM grob)
   Grob *stem = unsmob_grob (me->get_grob_property ("stem"));
   Grob *beam = Stem::get_beam (stem);
   Direction stemdir = Stem::get_direction (stem);
-  Real beam_translation = beam ? Beam::get_beam_translation (beam) : 0.81;
+  Real beam_translation
+    = (beam && beam->live ())
+    ? Beam::get_beam_translation (beam)
+    : 0.81;
 
   Molecule mol = raw_molecule (me);
   Interval mol_ext = mol.extent (Y_AXIS);
   Real ss = Staff_symbol_referencer::staff_space (me);
 
   // ugh, rather calc from Stem_tremolo_req
-  int beam_count = (beam) ? (Stem::beam_multiplicity (stem).length ()+ 1): 0;
+  int beam_count = (beam) ? (Stem::beam_multiplicity (stem).length () + 1): 0;
 
   /*
     TODO.
index 26e050f8389959fb615c4c6d1b761934159af0e4..9012a85e4534bca78d8fa6537500c511d7d5b6aa 100644 (file)
@@ -80,6 +80,13 @@ extents of a cluster spanner at this X position.
 are interesting enough to maintain a hara-kiri staff."
  '()
  )
+
+(ly:add-interface
+ 'stanza-number-interface
+ ""
+ '()
+ )
+
 ;;; todo: this is not typesetting info. Move to interpretation.
 (ly:add-interface
  'tablature-interface
index ec4977d958d6f03a158110d79c86aea0067aee9b..dcdb6964101785d7998b92d49c38ffbb6451732c 100644 (file)
        (padding . 1.0)
        (X-offset-callbacks . (,Side_position_interface::aligned_side))
        (direction . ,LEFT) 
-       (meta . ((interfaces . (side-position-interface text-interface font-interface item-interface ))))               
+       (meta . ((interfaces . (side-position-interface stanza-number-interface text-interface font-interface item-interface ))))               
        ))
 
     (StaffSpacing