2 figured-bass-engraver.cc -- implement Figured_bass_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2002--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "text-interface.hh"
14 class Figured_bass_engraver : public Engraver
16 TRANSLATOR_DECLARATIONS (Figured_bass_engraver);
18 Link_array<Music> figures_;
23 virtual bool try_music (Music *);
24 PRECOMPUTED_VIRTUAL void stop_translation_timestep ();
25 PRECOMPUTED_VIRTUAL void process_music ();
28 Figured_bass_engraver::Figured_bass_engraver ()
35 Figured_bass_engraver::stop_translation_timestep ()
44 Figured_bass_engraver::try_music (Music *m)
46 if (m->is_mus_type ("bass-figure-event"))
51 else if (m->is_mus_type ("rest-event"))
60 Figured_bass_engraver::process_music ()
64 figure_ = make_item ("BassFigure", rest_event_->self_scm ());
65 figure_->set_property ("text", scm_makfrom0str ("-"));
67 else if (figures_.size ())
69 SCM proc = get_property ("bassFigureFormatFunction");
70 if (ly_is_procedure (proc))
74 for (int i = 0; i < figures_.size (); i++)
76 *t = scm_cons (figures_[i]->self_scm (), SCM_EOL);
79 figure_ = make_item ("BassFigure", figures_[0]->self_scm ());
80 scm_call_3 (proc, l, context ()->self_scm (),
81 figure_->self_scm ());
86 #include "translator.icc"
88 ADD_TRANSLATOR (Figured_bass_engraver,
89 /* descr */ "Make figured bass numbers.",
90 /* creats*/ "BassFigure",
91 /* accepts */ "rest-event bass-figure-event",
93 /* reads */ "bassFigureFormatFunction",