]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/change-iterator.cc
(find_font): Add "lm" to try-AFM-first
[lilypond.git] / lily / change-iterator.cc
index 804e3ff6e3887aae772539cc7dc284b03a2c5adb..35c82aaf08ceb8e0eddf0567504a12ed7ca88357 100644 (file)
@@ -7,12 +7,12 @@
 */
 
 #include "change-iterator.hh"
+
 #include "context.hh"
 #include "music.hh"
 #include "warn.hh"
 #include "input.hh"
 
-
 void
 Change_iterator::error (String reason)
 {
@@ -27,7 +27,7 @@ Change_iterator::error (String reason)
    */
   String warn2= "Change_iterator::process (): " 
     + get_outlet ()->context_name () + " = `"
-    + get_outlet ()->id_string_ + "': ";
+    + get_outlet ()->id_string () + "': ";
   warning (warn2);
   get_music ()->origin ()->warning (warn1);
 }
@@ -52,10 +52,10 @@ Change_iterator::process (Moment m)
   while (current && !current->is_alias (to_type))
     {
       last = current;
-      current = current->daddy_context_;
+      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");
@@ -64,10 +64,23 @@ Change_iterator::process (Moment m)
   if (current) 
     if (last)
       {
-       Context * dest = 
-         get_outlet ()->find_create_context (to_type, to_id, SCM_EOL);
-       current->remove_context (last);
-       dest->add_context (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
       {
@@ -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
          
-          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"));
       }