]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/change-iterator.cc
2003 -> 2004
[lilypond.git] / lily / change-iterator.cc
index 7bd04e1e89f79e2e52b486710f957fea7e276435..82ce6d6673287ee8461a85d232436017eef31f8b 100644 (file)
@@ -3,32 +3,33 @@
 
   source file of the GNU LilyPond music typesetter
 
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "change-iterator.hh"
 #include "translator-group.hh"
 */
 
 #include "change-iterator.hh"
 #include "translator-group.hh"
-#include "change-translator.hh"
-#include "debug.hh"
+#include "music.hh"
+#include "warn.hh"
+
 
 
 void
 Change_iterator::error (String reason)
 {
 
 
 void
 Change_iterator::error (String reason)
 {
-  Change_translator const * t = dynamic_cast<Change_translator const*> (music_l_);   
-  String to_type = t->change_to_type_str_;
-  String to_id =  t->change_to_id_str_;
+  String to_type = ly_symbol2string (get_music ()->get_mus_property ("change-to-type"));
+  String to_id = ly_scm2string (get_music ()->get_mus_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;
+
   /*
     GUHG!
    */
   String warn2= "Change_iterator::process (): " 
   /*
     GUHG!
    */
   String warn2= "Change_iterator::process (): " 
-    + report_to_l ()->type_str_ + " = `"
-    + report_to_l ()->id_str_ + "': ";
+    + get_outlet ()->context_name () + " = `"
+    + get_outlet ()->id_string_ + "': ";
   warning (warn2);
   warning (warn2);
-  t->origin ()->warning (warn1);
+  get_music ()->origin ()->warning (warn1);
 }
 
 /*
 }
 
 /*
@@ -37,24 +38,24 @@ Change_iterator::error (String reason)
 void
 Change_iterator::process (Moment m)
 {
 void
 Change_iterator::process (Moment m)
 {
-  Translator_group * current = report_to_l ();
+  Translator_group * current = get_outlet ();
   Translator_group * last = 0;
 
   Translator_group * last = 0;
 
-  Change_translator const * t = dynamic_cast<Change_translator const*> (music_l_); 
-  String to_type = t->change_to_type_str_;
-  String to_id =  t->change_to_id_str_;
+  SCM to_type = get_music ()->get_mus_property ("change-to-type");
+  String to_id =  ly_scm2string (get_music ()->get_mus_property ("change-to-id"));
+
 
   /* find the type  of translator that we're changing.
      
      If \translator Staff = bass, then look for Staff = *
    */
 
   /* find the type  of translator that we're changing.
      
      If \translator Staff = bass, then look for Staff = *
    */
-  while  (current && current->type_str_ != to_type)
+  while (current && !current->is_alias (to_type))
     {
       last = current;
     {
       last = current;
-      current = current->daddy_trans_l_;
+      current = current->daddy_trans_;
     }
 
     }
 
-  if (current && current->id_str_ == 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,9 +65,9 @@ Change_iterator::process (Moment m)
     if (last)
       {
        Translator_group * dest = 
     if (last)
       {
        Translator_group * dest = 
-         report_to_l ()->find_create_translator_l (to_type, to_id);
-       current->remove_translator_p (last);
-       dest->add_group_translator (last);
+         get_outlet ()->find_create_translator (to_type, to_id, SCM_EOL);
+       current->remove_translator (last);
+       dest->add_used_group_translator (last);
       }
     else
       {
       }
     else
       {
@@ -74,13 +75,16 @@ 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_str_  = change_l ()->change_to_id_str_;
+          last->translator_id_string_  = get_change ()->change_to_id_string_;
        */
        error (_ ("I'm one myself"));
       }
   else
     error (_ ("none of these in my family"));
        */
        error (_ ("I'm one myself"));
       }
   else
     error (_ ("none of these in my family"));
+
   Simple_music_iterator::process (m);
 }
 
 
   Simple_music_iterator::process (m);
 }
 
 
+
+IMPLEMENT_CTOR_CALLBACK (Change_iterator);