]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/property-iterator.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / property-iterator.cc
index d2f9ebf450325847f63c3ec166ee5c88ad7462cd..4725406323e46efceef64fb788543788009c6c76 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1997--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -31,49 +31,30 @@ bool check_grob (Music *mus, SCM sym);
    translation unit, and set the property.
 */
 void
-Property_iterator::process (Moment m)
+Property_iterator::process (Moment mom)
 {
-  send_stream_event (get_outlet (), "SetProperty", get_music ()->origin (),
-                    ly_symbol2scm ("symbol"), get_music ()->get_property ("symbol"),
-                    ly_symbol2scm ("value"), get_music ()->get_property ("value"));
-  
-  Simple_music_iterator::process (m);
-}
+  Context *o = get_outlet ();
+  Music *m = get_music ();
 
-void
-Property_unset_iterator::process (Moment m)
-{
-  SCM sym = get_music ()->get_property ("symbol");
-  send_stream_event (get_outlet (), "UnsetProperty", get_music ()->origin (),
-                    ly_symbol2scm ("symbol"), sym);
+  send_stream_event (o, "SetProperty", m->origin (),
+                     ly_symbol2scm ("symbol"), m->get_property ("symbol"),
+                     ly_symbol2scm ("value"), m->get_property ("value"),
+                     ly_symbol2scm ("once"), m->get_property ("once"));
 
-  Simple_music_iterator::process (m);
-}
-
-MAKE_SCHEME_CALLBACK (Property_iterator, once_finalization, 2);
-SCM
-Property_iterator::once_finalization (SCM ctx, SCM music)
-{
-  Music *m = unsmob_music (music);
-  Context *c = unsmob_context (ctx);
-
-  send_stream_event (c, "UnsetProperty", m->origin (),
-                    ly_symbol2scm ("symbol"), m->get_property ("symbol"));
-  return SCM_UNSPECIFIED;
+  Simple_music_iterator::process (mom);
 }
 
 void
-Property_iterator::do_quit ()
+Property_unset_iterator::process (Moment mom)
 {
-  if (to_boolean (get_music ()->get_property ("once")))
-    {
-      SCM trans = get_outlet ()->self_scm ();
-      SCM music = get_music ()->self_scm ();
+  Context *o = get_outlet ();
+  Music *m = get_music ();
 
-      Global_context *tg = get_outlet ()->get_global_context ();
-      tg->add_finalization (scm_list_n (once_finalization_proc,
-                                       trans, music, SCM_UNDEFINED));
-    }
+  send_stream_event (o, "UnsetProperty", m->origin (),
+                     ly_symbol2scm ("symbol"), m->get_property ("symbol"),
+                     ly_symbol2scm ("once"), m->get_property ("once"));
+
+  Simple_music_iterator::process (mom);
 }
 
 bool
@@ -83,7 +64,7 @@ check_grob (Music *mus, SCM sym)
 
   if (!g)
     mus->origin ()->warning (_f ("not a grob name, `%s'",
-                                ly_symbol2string (sym)));
+                                 ly_symbol2string (sym)));
 
   return g;
 }
@@ -110,68 +91,39 @@ Push_property_iterator::process (Moment m)
     {
       SCM grob_property_path = get_property_path (get_music ());
       SCM val = get_music ()->get_property ("grob-value");
+      SCM once = get_music ()->get_property ("once");
 
       if (to_boolean (get_music ()->get_property ("pop-first"))
-         && !to_boolean (get_music ()->get_property ("once")))
-       send_stream_event (get_outlet (), "Revert", get_music ()->origin (),
-                          ly_symbol2scm ("symbol"), sym,
-                          ly_symbol2scm ("property-path"), grob_property_path);
-                       
+          && !to_boolean (once))
+        send_stream_event (get_outlet (), "Revert", get_music ()->origin (),
+                           ly_symbol2scm ("symbol"), sym,
+                           ly_symbol2scm ("property-path"), grob_property_path);
+
       send_stream_event (get_outlet (), "Override", get_music ()->origin (),
-                        ly_symbol2scm ("symbol"), sym,
-                        ly_symbol2scm ("property-path"), grob_property_path,
-                        ly_symbol2scm ("value"), val);
+                         ly_symbol2scm ("symbol"), sym,
+                         ly_symbol2scm ("property-path"), grob_property_path,
+                         ly_symbol2scm ("once"), once,
+                         ly_symbol2scm ("value"), val);
     }
   Simple_music_iterator::process (m);
 }
 
-MAKE_SCHEME_CALLBACK (Push_property_iterator, once_finalization, 2);
-SCM
-Push_property_iterator::once_finalization (SCM ctx, SCM music)
-{
-  Music *mus = unsmob_music (music);
-  Context *c = unsmob_context (ctx);
-
-  SCM sym = mus->get_property ("symbol");
-  if (check_grob (mus, sym))
-    {
-      SCM grob_property_path = get_property_path (mus);
-
-      send_stream_event (c, "Revert", mus->origin (),
-                        ly_symbol2scm ("symbol"), sym,
-                        ly_symbol2scm ("property-path"), grob_property_path);
-    }
-  return SCM_UNSPECIFIED;
-}
-
 void
-Push_property_iterator::do_quit ()
+Pop_property_iterator::process (Moment mom)
 {
-  if (to_boolean (get_music ()->get_property ("once")))
-    {
-      SCM trans = get_outlet ()->self_scm ();
-      SCM music = get_music ()->self_scm ();
+  Music *m = get_music ();
+  SCM sym = m->get_property ("symbol");
 
-      Global_context *tg = get_outlet ()->get_global_context ();
-      tg->add_finalization (scm_list_n (once_finalization_proc,
-                                       trans, music, SCM_UNDEFINED));
-    }
-}
-
-void
-Pop_property_iterator::process (Moment m)
-{
-  SCM sym = get_music ()->get_property ("symbol");
-
-  if (check_grob (get_music (), sym))
+  if (check_grob (m, sym))
     {
-      SCM grob_property_path = get_property_path (get_music ());
+      SCM grob_property_path = get_property_path (m);
 
-      send_stream_event (get_outlet (), "Revert", get_music ()->origin (),
-                        ly_symbol2scm ("symbol"), sym,
-                        ly_symbol2scm ("property-path"), grob_property_path);
+      send_stream_event (get_outlet (), "Revert", m->origin (),
+                         ly_symbol2scm ("symbol"), sym,
+                         ly_symbol2scm ("once"), m->get_property ("once"),
+                         ly_symbol2scm ("property-path"), grob_property_path);
     }
-  Simple_music_iterator::process (m);
+  Simple_music_iterator::process (mom);
 }
 
 IMPLEMENT_CTOR_CALLBACK (Pop_property_iterator);