]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/global-translator.cc
patch::: 1.3.86.jcn3
[lilypond.git] / lily / global-translator.cc
index 3ecc44b4e085101cdf6a0d6c2422e3c4ffb95b2d..de0ee4c4afbf9d9a6b2d5a994caaca064bbaf8d4 100644 (file)
@@ -8,6 +8,8 @@
 
 #include "debug.hh"
 #include "music.hh"
+#include "request.hh"
+#include "music-list.hh"
 #include "music-iterator.hh"
 #include "global-translator.hh"
 
@@ -81,18 +83,25 @@ Global_translator::finish ()
 void
 Global_translator::run_iterator_on_me (Music_iterator * iter)
 {
-  while (iter->ok() || moments_left_i ())
+  bool first = true;
+  while (iter->ok () || moments_left_i ())
     {
       Moment w;
       w.set_infinite (1);
-      if (iter->ok())
+      if (iter->ok ())
        {
          w = iter->next_moment();
+
+         if (!first)
+           iter->next ();
+         else
+           first = false;
+      
          DEBUG_OUT << "proccing: " << w << '\n';
          if (flower_dstream && !flower_dstream->silent_b ("walking"))
            iter->print();
        }
-      
+
       w = sneaky_insert_extra_moment (w);
       prepare (w);
       
@@ -100,6 +109,10 @@ Global_translator::run_iterator_on_me (Music_iterator * iter)
        print();
 
       iter->process (w);
+
+      /*
+       Urg, this is request_chord_iterator.
+       */
       for (SCM i = iter->get_music (); gh_pair_p (i); i = SCM_CDR (i))
        {
          assert (gh_pair_p (i));
@@ -108,20 +121,36 @@ Global_translator::run_iterator_on_me (Music_iterator * iter)
          Translator *t = unsmob_translator (SCM_CDR (p));
          assert (m);
          assert (t);
-         bool b = t->try_music (m);
-         if (!b)
+         for (SCM s = dynamic_cast<Music_sequence *> (m)->music_list ();
+              gh_pair_p (s);  s = SCM_CDR (s))
            {
-             /*
-               Children?
-             */
-             printf ("junking:\n");
-             m->print ();
-             t->print ();
+             Music *m = unsmob_music (SCM_CAR (s));
+             if (Request* r = dynamic_cast<Request*> (m))
+               {
+                 bool b = t->try_music (m);
+                 if (!b)
+                   m->origin ()->warning (_f ("Junking request: `%s'",
+                                              classname(m)));
+               }
+             else
+               m->origin ()->warning (_f ("Huh?  Not a Request: `%s'",
+                                          classname (m)));
+           }
+         if (! dynamic_cast<Music_sequence *> (m))
+           {
+             bool b = t->try_music (m);
+             if (!b)
+               {
+                 /*
+                   Children?
+                 */
+                 printf ("junking:\n");
+                 m->print ();
+                 t->print ();
+               }
            }
-
        }
       
-      iter->next ();
-      process();
+      process ();
     }
 }