2 recording-group-engraver.cc -- implement Recording_group_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2003 Han-Wen Nienhuys <hanwen@xs4all.nl>
10 #include "engraver-group-engraver.hh"
11 #include "protected-scm.hh"
13 class Recording_group_engraver : public Engraver_group_engraver
16 TRANSLATOR_DECLARATIONS(Recording_group_engraver);
17 virtual bool try_music (Music *m);
18 virtual void start_translation_timestep ();
19 virtual void stop_translation_timestep ();
20 virtual void finalize ();
21 virtual void initialize ();
22 Protected_scm accumulator_;
26 Recording_group_engraver::initialize ()
28 Engraver_group_engraver::initialize ();
29 accumulator_ = gh_cons (SCM_EOL, SCM_EOL);
32 Recording_group_engraver::Recording_group_engraver()
37 Recording_group_engraver::start_translation_timestep ()
39 Engraver_group_engraver::start_translation_timestep();
41 scm_set_car_x (accumulator_, gh_cons (now_mom ().smobbed_copy (), SCM_EOL));
45 Recording_group_engraver::stop_translation_timestep ()
47 Engraver_group_engraver::stop_translation_timestep();
48 scm_set_cdr_x (accumulator_, gh_cons (gh_car (accumulator_), gh_cdr (accumulator_)));
50 scm_set_car_x (accumulator_, SCM_EOL);
54 Recording_group_engraver::finalize ()
56 Engraver_group_engraver::finalize ();
57 SCM proc = get_property ("recordEventSequence");
59 if (gh_procedure_p (proc))
60 scm_call_2 (proc, self_scm(), gh_cdr (accumulator_));
62 accumulator_ = SCM_EOL;
66 Recording_group_engraver::try_music (Music *m)
68 bool here_success = Translator_group::try_music_on_nongroup_children (m);
69 bool retval = here_success;
70 if (!here_success && daddy_trans_)
71 retval = daddy_trans_->try_music (m);
73 SCM seq = gh_cdar (accumulator_);
74 seq = gh_cons (gh_cons (m->self_scm(), gh_bool2scm (here_success)),
77 scm_set_cdr_x (gh_car (accumulator_), seq);
83 ENTER_DESCRIPTION(Recording_group_engraver,
84 "Engraver_group_engraver that records all music events "
85 "for this context. Calls the procedure "
86 "in @code{recordEventSequence} when finished.",
90 "recordEventSequence",