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 #include "translator.icc"
16 class Figured_bass_engraver : public Engraver
18 TRANSLATOR_DECLARATIONS (Figured_bass_engraver);
20 Link_array<Music> figures_;
25 virtual bool try_music (Music *);
26 void stop_translation_timestep ();
27 void process_music ();
30 Figured_bass_engraver::Figured_bass_engraver ()
37 Figured_bass_engraver::stop_translation_timestep ()
46 Figured_bass_engraver::try_music (Music *m)
48 if (m->is_mus_type ("bass-figure-event"))
53 else if (m->is_mus_type ("rest-event"))
62 Figured_bass_engraver::process_music ()
66 figure_ = make_item ("BassFigure", rest_event_->self_scm ());
67 figure_->set_property ("text", scm_makfrom0str ("-"));
69 else if (figures_.size ())
71 SCM proc = get_property ("bassFigureFormatFunction");
72 if (ly_is_procedure (proc))
76 for (int i = 0; i < figures_.size (); i++)
78 *t = scm_cons (figures_[i]->self_scm (), SCM_EOL);
81 figure_ = make_item ("BassFigure", figures_[0]->self_scm ());
82 scm_call_3 (proc, l, context ()->self_scm (),
83 figure_->self_scm ());
88 ADD_TRANSLATOR (Figured_bass_engraver,
89 /* doc */ "Make figured bass numbers.",
90 /* create */ "BassFigure",
91 /* accept */ "rest-event bass-figure-event",
92 /* read */ "bassFigureFormatFunction",