2 property-iterator.cc -- implement Property_iterator
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "property-iterator.hh"
10 #include "translation-property.hh"
11 #include "translator-group.hh"
14 There is no real processing to a property: just lookup the
15 translation unit, and set the property.
18 Property_iterator::do_process_and_next (Moment m)
20 SCM sym = music_l_->get_mus_property ("symbol");
22 report_to_l ()->set_property (sym, music_l_->get_mus_property ("value"));
23 Music_iterator::do_process_and_next (m);
28 Push_property_iterator::do_process_and_next (Moment m)
30 SCM syms = music_l_->get_mus_property ("symbols");
31 SCM eprop = music_l_->get_mus_property ("element-property");
32 SCM val = music_l_->get_mus_property ("element-value");
34 for (SCM s = syms; gh_pair_p (s); s = gh_cdr (s))
39 SCM prev = report_to_l ()->get_property (sym);
41 prev = gh_cons (gh_cons (eprop, val), prev);
42 report_to_l ()->set_property (gh_car (s), prev);
45 Music_iterator::do_process_and_next (m);
49 Pop_property_iterator::do_process_and_next (Moment m)
51 SCM syms = music_l_->get_mus_property ("symbols");
52 SCM eprop = music_l_->get_mus_property ("element-property");
53 for (SCM s = syms; gh_pair_p (s); s = gh_cdr (s))
58 SCM prev = report_to_l ()->get_property (sym);
60 SCM newprops= SCM_EOL ;
61 while (gh_pair_p (prev) && gh_caar (prev) != eprop)
63 newprops = gh_cons (gh_car (prev), newprops);
67 newprops = scm_reverse_x (newprops, gh_cdr (prev));
68 report_to_l ()->set_property (sym, newprops);
71 Music_iterator::do_process_and_next (m);