]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/sequential-iterator.cc
* lily/sequential-iterator.cc (run_always): implement run_always().
[lilypond.git] / lily / sequential-iterator.cc
index 798283abaa62f8ac845d8f5a35b436bcb6e4e0af..b2c31269771c5aa7097d7c8af44ebe4163a69c11 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "translator-group.hh"
@@ -97,7 +97,7 @@ get_grace_fixups (SCM cursor)
     {
       Music * mus = unsmob_music (ly_car (cursor));
       Moment s = mus->start_mom ();
-      Moment l =mus->length_mom () - s;
+      Moment l =mus->get_length () - s;
 
       if (s.grace_part_)
        {
@@ -174,9 +174,9 @@ Sequential_iterator::construct_children ()
   swoop.
 */
 void
-Sequential_iterator::next_element (bool side_effect)
+Sequential_iterator::next_element (bool)
 {
-  Moment len =iter_->music_length_mom () - iter_->music_start_mom ();
+  Moment len =iter_->music_get_length () - iter_->music_start_mom ();
   assert (!grace_fixups_  || grace_fixups_->start_ >= here_mom_);
   
   if (len.main_part_ && grace_fixups_ &&
@@ -221,6 +221,17 @@ Sequential_iterator::next_element (bool side_effect)
 void
 Sequential_iterator::descend_to_child ()
 {
+  Translator_group  * child_report = child_report = iter_->report_to ();
+  Translator_group * me_report = report_to ();
+
+  Translator_group * c = child_report;
+  while (c && c != me_report)
+    {
+      c= c->daddy_trans_;
+    }
+  
+  if (c == me_report)
+    set_translator (child_report);
 }
 
 
@@ -241,7 +252,7 @@ Sequential_iterator::descend_to_child ()
 */
 
 SCM
-Sequential_iterator::get_pending_events (Moment until)const
+Sequential_iterator::get_pending_events (Moment until) const
 {
   SCM s = SCM_EOL;
   if (until <  pending_moment ())
@@ -258,7 +269,7 @@ Sequential_iterator::get_pending_events (Moment until)const
       for (SCM i = nm; gh_pair_p (i); i = ly_cdr (i))
        {
          Music *mus=unsmob_music (ly_car (i));
-         m = m >? (mus->length_mom () - mus->start_mom ());
+         m = m >? (mus->get_length () - mus->start_mom ());
        }
       if (m > Moment (0))
        break ;
@@ -289,9 +300,9 @@ Sequential_iterator::skip (Moment until)
          /*
            do the stuff/note/rest preceding a grace.
           */
-         iter_->skip (iter_->music_length_mom ());
+         iter_->skip (iter_->music_get_length ());
        }
-      else if (iter_->music_length_mom () >= until - here_mom_)
+      else if (iter_->music_get_length () >= until - here_mom_)
        iter_->skip (until - here_mom_ + iter_->music_start_mom ());
 
       if (iter_->ok ())
@@ -314,7 +325,7 @@ Sequential_iterator::process (Moment until)
          /*
            do the stuff/note/rest preceding a grace.
           */
-         iter_->process (iter_->music_length_mom ());
+         iter_->process (iter_->music_get_length ());
        }
       else
        iter_->process (until - here_mom_ + iter_->music_start_mom ());
@@ -367,3 +378,9 @@ Sequential_iterator::try_music_in_children (Music *m) const
 }
 
 IMPLEMENT_CTOR_CALLBACK (Sequential_iterator);
+
+bool
+Sequential_iterator::run_always () const
+{
+  return iter_ ? iter_->run_always () : false; 
+}