lilypond-1.3.154
[lilypond.git] / lily / property-iterator.cc
blob84c8486d0b2086c5e469b35e2591d1edd937f7f7
1 /*
2 property-iterator.cc -- implement Property_iterator
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
9 #include "property-iterator.hh"
10 #include "music.hh"
11 #include "translator-def.hh"
12 #include "translator-group.hh"
14 /**
15 There is no real processing to a property: just lookup the
16 translation unit, and set the property.
18 void
19 Property_iterator::process (Moment m)
21 SCM sym = music_l_->get_mus_property ("symbol");
22 if (gh_symbol_p (sym))
24 SCM val = music_l_->get_mus_property ("value");
25 bool ok= true;
26 if (val != SCM_EOL)
27 ok = type_check_assignment (val, sym, ly_symbol2scm ("translation-type?"));
28 if (ok)
29 report_to_l ()->set_property (sym, val);
31 Simple_music_iterator::process (m);
34 void
35 Property_unset_iterator::process (Moment m)
37 SCM sym = music_l_->get_mus_property ("symbol");
38 if (gh_symbol_p (sym))
40 report_to_l ()->unset_property (sym);
42 Simple_music_iterator::process (m);
46 void
47 Push_property_iterator::process (Moment m)
49 SCM syms = music_l_->get_mus_property ("symbols");
50 SCM eprop = music_l_->get_mus_property ("grob-property");
51 SCM val = music_l_->get_mus_property ("grob-value");
53 if (to_boolean (music_l_->get_mus_property ("pop-first")))
54 Translator_def::apply_pushpop_property (report_to_l (),
55 syms, eprop, SCM_UNDEFINED);
57 Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, val);
59 Simple_music_iterator::process (m);
62 void
63 Pop_property_iterator::process (Moment m)
65 SCM syms = music_l_->get_mus_property ("symbols");
66 SCM eprop = music_l_->get_mus_property ("grob-property");
67 Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED);
69 Simple_music_iterator::process (m);
73 IMPLEMENT_CTOR_CALLBACK (Pop_property_iterator);
74 IMPLEMENT_CTOR_CALLBACK (Push_property_iterator);
75 IMPLEMENT_CTOR_CALLBACK (Property_iterator);
76 IMPLEMENT_CTOR_CALLBACK (Property_unset_iterator);