2 recording-group-engraver.cc -- implement Recording_group_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2003--2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
11 #include "engraver-group-engraver.hh"
12 #include "protected-scm.hh"
14 class Recording_group_engraver : public Engraver_group_engraver
17 TRANSLATOR_DECLARATIONS(Recording_group_engraver);
18 virtual bool try_music (Music *m);
19 virtual void start_translation_timestep ();
20 virtual void stop_translation_timestep ();
21 virtual void finalize ();
22 virtual void initialize ();
23 Protected_scm accumulator_;
27 Recording_group_engraver::initialize ()
29 Engraver_group_engraver::initialize ();
30 accumulator_ = gh_cons (gh_cons (now_mom (). smobbed_copy (), SCM_EOL),
34 Recording_group_engraver::Recording_group_engraver()
39 Recording_group_engraver::start_translation_timestep ()
41 Engraver_group_engraver::start_translation_timestep();
45 We have to do this both in initialize() and
46 start_translation_timestep(), since start_translation_timestep()
47 isn't called on the first time-step.
49 if (!gh_pair_p (gh_car (accumulator_)))
50 scm_set_car_x (accumulator_, gh_cons (now_mom ().smobbed_copy (), SCM_EOL));
54 Recording_group_engraver::stop_translation_timestep ()
56 Engraver_group_engraver::stop_translation_timestep();
57 scm_set_cdr_x (accumulator_, gh_cons (gh_car (accumulator_), gh_cdr (accumulator_)));
59 scm_set_car_x (accumulator_, SCM_EOL);
63 Recording_group_engraver::finalize ()
65 Engraver_group_engraver::finalize ();
66 SCM proc = get_property ("recordEventSequence");
68 if (gh_procedure_p (proc))
69 scm_call_2 (proc, daddy_context_->self_scm(), gh_cdr (accumulator_));
71 accumulator_ = SCM_EOL;
75 Recording_group_engraver::try_music (Music *m)
77 bool retval = Translator_group::try_music (m);
79 SCM seq = gh_cdar (accumulator_);
80 seq = gh_cons (gh_cons (m->self_scm(), gh_bool2scm (retval)),
83 scm_set_cdr_x (gh_car (accumulator_), seq);
89 ENTER_DESCRIPTION(Recording_group_engraver,
90 "Engraver_group_engraver that records all music events "
91 "for this context. Calls the procedure "
92 "in @code{recordEventSequence} when finished.",
96 "recordEventSequence",