2 recording-group-engraver.cc -- implement Recording_group_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2003--2005 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 (now_events_);
33 scm_gc_mark (accumulator_);
37 Recording_group_engraver::initialize ()
39 Engraver_group_engraver::initialize ();
42 Recording_group_engraver::Recording_group_engraver ()
44 accumulator_ = SCM_EOL;
45 now_events_ = SCM_EOL;
49 Recording_group_engraver::add_music (SCM music, SCM success)
51 now_events_ = scm_cons (scm_cons (music, success), now_events_);
56 Recording_group_engraver::stop_translation_timestep ()
58 Engraver_group_engraver::stop_translation_timestep ();
60 accumulator_ = scm_acons (scm_cons (now_mom ().smobbed_copy (),
61 get_property ("instrumentTransposition")),
64 now_events_ = SCM_EOL;
68 Recording_group_engraver::finalize ()
70 Engraver_group_engraver::finalize ();
71 SCM proc = get_property ("recordEventSequence");
73 if (ly_c_procedure_p (proc))
74 scm_call_2 (proc, context ()->self_scm (), scm_cdr (accumulator_));
78 Recording_group_engraver::try_music (Music *m)
80 bool retval = Translator_group::try_music (m);
82 add_music (m->self_scm (), ly_bool2scm (retval));
87 ADD_TRANSLATOR (Recording_group_engraver,
88 "Engraver_group_engraver that records all music events "
89 "for this context. Calls the procedure "
90 "in @code{recordEventSequence} when finished.",
94 "recordEventSequence",