]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/change-iterator.cc
*** empty log message ***
[lilypond.git] / lily / change-iterator.cc
index 7d594273fd5038cd552cc9c277d33e572b16432d..d36567b5940981cf5ee0dd2babbfcb8b4fce4060 100644 (file)
@@ -3,21 +3,21 @@
 
   source file of the GNU LilyPond music typesetter
 
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "change-iterator.hh"
 */
 
 #include "change-iterator.hh"
-#include "translator-group.hh"
+#include "context.hh"
 #include "music.hh"
 #include "warn.hh"
 #include "music.hh"
 #include "warn.hh"
-
+#include "input.hh"
 
 
 void
 Change_iterator::error (String reason)
 {
 
 
 void
 Change_iterator::error (String reason)
 {
-  String to_type = ly_scm2string (get_music ()->get_mus_property ("change-to-type"));
-  String to_id =  ly_scm2string (get_music ()->get_mus_property ("change-to-id"));
+  String to_type = ly_symbol2string (get_music ()->get_property ("change-to-type"));
+  String to_id = ly_scm2string (get_music ()->get_property ("change-to-id"));
 
   String warn1 = _f ("can't change `%s' to `%s'", to_type, to_id) 
     + ": " + reason;
 
   String warn1 = _f ("can't change `%s' to `%s'", to_type, to_id) 
     + ": " + reason;
@@ -27,7 +27,7 @@ Change_iterator::error (String reason)
    */
   String warn2= "Change_iterator::process (): " 
     + get_outlet ()->context_name () + " = `"
    */
   String warn2= "Change_iterator::process (): " 
     + get_outlet ()->context_name () + " = `"
-    + get_outlet ()->id_string_ + "': ";
+    + get_outlet ()->id_string () + "': ";
   warning (warn2);
   get_music ()->origin ()->warning (warn1);
 }
   warning (warn2);
   get_music ()->origin ()->warning (warn1);
 }
@@ -38,11 +38,11 @@ Change_iterator::error (String reason)
 void
 Change_iterator::process (Moment m)
 {
 void
 Change_iterator::process (Moment m)
 {
-  Translator_group * current = get_outlet ();
-  Translator_group * last = 0;
+  Context * current = get_outlet ();
+  Context * last = 0;
 
 
-  SCM to_type = get_music ()->get_mus_property ("change-to-type");
-  String to_id =  ly_scm2string (get_music ()->get_mus_property ("change-to-id"));
+  SCM to_type = get_music ()->get_property ("change-to-type");
+  String to_id =  ly_scm2string (get_music ()->get_property ("change-to-id"));
 
 
   /* find the type  of translator that we're changing.
 
 
   /* find the type  of translator that we're changing.
@@ -52,10 +52,10 @@ Change_iterator::process (Moment m)
   while (current && !current->is_alias (to_type))
     {
       last = current;
   while (current && !current->is_alias (to_type))
     {
       last = current;
-      current = current->daddy_trans_;
+      current = current->get_parent_context ();
     }
 
     }
 
-  if (current && current->id_string_ == to_id)
+  if (current && current->id_string () == to_id)
     {
       String msg;
       msg += _ ("Can't switch translators, I'm there already");
     {
       String msg;
       msg += _ ("Can't switch translators, I'm there already");
@@ -64,10 +64,23 @@ Change_iterator::process (Moment m)
   if (current) 
     if (last)
       {
   if (current) 
     if (last)
       {
-       Translator_group * dest = 
-         get_outlet ()->find_create_translator (to_type, to_id, SCM_EOL);
-       current->remove_translator (last);
-       dest->add_used_group_translator (last);
+       Context * dest = 0;
+       Context * where = get_outlet ();
+       while (!dest && where)
+         {
+           dest = find_context_below (where, to_type, to_id);
+           where = where->get_parent_context ();
+         }
+       
+       if (dest)
+         {
+           current->remove_context (last);
+           dest->add_context (last);
+         }
+       else
+         {
+           get_music ()->origin ()->warning  ("could not find context to switch to.");
+         }
       }
     else
       {
       }
     else
       {
@@ -75,7 +88,7 @@ Change_iterator::process (Moment m)
          We could change the current translator's id, but that would make 
          errors hard to catch
          
          We could change the current translator's id, but that would make 
          errors hard to catch
          
-          last->translator_id_string_  = get_change ()->change_to_id_string_;
+          last->translator_id_string ()  = get_change ()->change_to_id_string ();
        */
        error (_ ("I'm one myself"));
       }
        */
        error (_ ("I'm one myself"));
       }