]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/property-iterator.cc
release: 1.5.34
[lilypond.git] / lily / property-iterator.cc
index 3799ba0e2f514d675238a1fe28f24921817efbaa..ad4452a3eee76d903d6d59456b746bd3f4fcf411 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "property-iterator.hh"
 void
 Property_iterator::process (Moment m)
 {
-  SCM sym = music_l_->get_mus_property ("symbol");
-  if (gh_symbol_p(sym))
-    report_to_l ()->set_property (sym, music_l_->get_mus_property ("value"));
+  SCM sym = music_l ()->get_mus_property ("symbol");
+  if (gh_symbol_p (sym))
+    {
+      SCM val = music_l ()->get_mus_property ("value");
+      bool ok= true;
+      if (val != SCM_EOL)
+       ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
+      if (ok)
+       report_to_l ()->internal_set_property (sym, val);
+    }
   Simple_music_iterator::process (m);
 }
 
+void
+Property_unset_iterator::process (Moment m)
+{
+  SCM sym = music_l ()->get_mus_property ("symbol");
+  if (gh_symbol_p (sym))
+    {
+      report_to_l ()->unset_property (sym);
+    }
+  Simple_music_iterator::process (m);
+}
+
+
 void
 Push_property_iterator::process (Moment m)
 {
-  SCM syms = music_l_->get_mus_property ("symbols");
-  SCM eprop = music_l_->get_mus_property ("element-property");
-  SCM val = music_l_->get_mus_property ("element-value");
+  SCM sym = music_l ()->get_mus_property ("symbol");
+  SCM eprop = music_l ()->get_mus_property ("grob-property");
+  SCM val = music_l ()->get_mus_property ("grob-value");
+
+  if (to_boolean (music_l ()->get_mus_property ("pop-first")))
+    Translator_def::apply_pushpop_property (report_to_l (),
+                                           sym, eprop, SCM_UNDEFINED);
 
-  Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, val);
+  Translator_def::apply_pushpop_property (report_to_l (), sym, eprop, val);
   
   Simple_music_iterator::process (m);
 }
@@ -39,9 +62,15 @@ Push_property_iterator::process (Moment m)
 void
 Pop_property_iterator::process (Moment m)
 {
-  SCM syms = music_l_->get_mus_property ("symbols");
-  SCM eprop = music_l_->get_mus_property ("element-property");
-  Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED);
+  SCM sym = music_l ()->get_mus_property ("symbol");
+  SCM eprop = music_l ()->get_mus_property ("grob-property");
+  Translator_def::apply_pushpop_property (report_to_l (), sym, eprop, SCM_UNDEFINED);
   
   Simple_music_iterator::process (m);
 }
+
+
+IMPLEMENT_CTOR_CALLBACK (Pop_property_iterator);
+IMPLEMENT_CTOR_CALLBACK (Push_property_iterator);
+IMPLEMENT_CTOR_CALLBACK (Property_iterator);
+IMPLEMENT_CTOR_CALLBACK (Property_unset_iterator);