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 void add_music (SCM, SCM);
20 virtual void stop_translation_timestep ();
21 virtual void finalize ();
22 virtual void initialize ();
23 virtual void derived_mark () const;
29 Recording_group_engraver::derived_mark () const
31 Engraver_group_engraver::derived_mark();
32 scm_gc_mark (accumulator_);
36 Recording_group_engraver::initialize ()
38 Engraver_group_engraver::initialize ();
41 Recording_group_engraver::Recording_group_engraver ()
43 accumulator_ = SCM_EOL;
44 now_events_ = SCM_EOL;
48 Recording_group_engraver::add_music (SCM music, SCM success)
50 now_events_ = scm_cons (scm_cons (music, success), now_events_);
55 Recording_group_engraver::stop_translation_timestep ()
57 Engraver_group_engraver::stop_translation_timestep ();
59 accumulator_ = scm_acons (scm_cons (now_mom ().smobbed_copy (),
60 get_property ("instrumentTransposition")),
63 now_events_ = SCM_EOL;
67 Recording_group_engraver::finalize ()
69 Engraver_group_engraver::finalize ();
70 SCM proc = get_property ("recordEventSequence");
72 if (ly_c_procedure_p (proc))
73 scm_call_2 (proc, context ()->self_scm (), ly_cdr (accumulator_));
77 Recording_group_engraver::try_music (Music *m)
79 bool retval = Translator_group::try_music (m);
81 add_music (m->self_scm (), ly_bool2scm (retval));
86 ENTER_DESCRIPTION (Recording_group_engraver,
87 "Engraver_group_engraver that records all music events "
88 "for this context. Calls the procedure "
89 "in @code{recordEventSequence} when finished.",
93 "recordEventSequence",