X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fproperty-iterator.cc;h=bb7a40395fe77b6c07645e97f854dbb611eaf919;hb=d521102157a5c9d71ba80ee8f0eef47e50bd7dd4;hp=2a191dead80b25da68f43f2a11fb4d3b8c8727ea;hpb=1edc2436a028cb2d1be8786ab0972a95b0985d42;p=lilypond.git diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index 2a191dead8..bb7a40395f 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -3,24 +3,60 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2000 Han-Wen Nienhuys */ #include "property-iterator.hh" -#include "translation-property.hh" +#include "music.hh" +#include "translator-def.hh" #include "translator-group.hh" -Property_iterator::Property_iterator (Translation_property *prop_l) +/** + There is no real processing to a property: just lookup the + translation unit, and set the property. + */ +void +Property_iterator::process (Moment m) { - property_l_ = prop_l; + 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 ()->set_property (sym, val); + } + 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 ("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); + + Simple_music_iterator::process (m); } void -Property_iterator::process_and_next (Moment m) +Pop_property_iterator::process (Moment m) { - if (property_l_->var_str_.length_i ()) - report_to_l ()->set_property (property_l_->var_str_, property_l_->value_); - Music_iterator::process_and_next (m); + 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); + + Simple_music_iterator::process (m); } -IMPLEMENT_IS_TYPE_B1(Property_iterator, Music_iterator); +IMPLEMENT_CTOR_CALLBACK(Pop_property_iterator); +IMPLEMENT_CTOR_CALLBACK(Push_property_iterator); +IMPLEMENT_CTOR_CALLBACK(Property_iterator);