X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fproperty-iterator.cc;h=726a79bf1da9553cd2af25af05dbb95b37693329;hb=d9b43b93f2c885409bafdb157138158f65cc49aa;hp=2f44683094ea11879b913924501860c4d61dc6b9;hpb=03311c038c913d96eb7ed0a896e2c7d8f4815e17;p=lilypond.git diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index 2f44683094..726a79bf1d 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -3,11 +3,11 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2002 Han-Wen Nienhuys */ #include "property-iterator.hh" -#include "translation-property.hh" +#include "music.hh" #include "translator-def.hh" #include "translator-group.hh" @@ -16,33 +16,61 @@ translation unit, and set the property. */ void -Property_iterator::do_process_and_next (Moment m) +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")); - Music_iterator::do_process_and_next (m); + 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 (val, sym, 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::do_process_and_next (Moment m) +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 syms = music_l ()->get_mus_property ("symbols"); + 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 (), + syms, eprop, SCM_UNDEFINED); Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, val); - Music_iterator::do_process_and_next (m); + Simple_music_iterator::process (m); } void -Pop_property_iterator::do_process_and_next (Moment m) +Pop_property_iterator::process (Moment m) { - SCM syms = music_l_->get_mus_property ("symbols"); - SCM eprop = music_l_->get_mus_property ("element-property"); + SCM syms = music_l ()->get_mus_property ("symbols"); + SCM eprop = music_l ()->get_mus_property ("grob-property"); Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED); - Music_iterator::do_process_and_next (m); + 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);