2 #include "text-item.hh"
3 #include "musical-request.hh"
6 class Figured_bass_engraver : public Engraver
9 TRANSLATOR_DECLARATIONS(Figured_bass_engraver);
11 Link_array<Note_req> figures_;
16 virtual bool try_music (Music*);
17 virtual void stop_translation_timestep ();
18 virtual void process_music ();
22 Figured_bass_engraver::Figured_bass_engraver()
29 Figured_bass_engraver::stop_translation_timestep ()
33 typeset_grob (figure_);
42 Figured_bass_engraver::try_music (Music*m)
44 if (Note_req* n = dynamic_cast<Note_req*> (m))
49 else if (Rest_req * r = dynamic_cast<Rest_req*> (m))
58 Figured_bass_engraver::process_music ()
62 figure_ = new Item (get_property ("BassFigure"));
63 announce_grob(figure_, rest_req_->self_scm()); // todo
64 figure_->set_grob_property ("text" , ly_str02scm ("-"));
66 else if (figures_.size ())
68 figure_ = new Item (get_property ("BassFigure"));
69 announce_grob(figure_, figures_[0]->self_scm()); // todo
71 for (int i = 0; i < figures_.size (); i++)
73 Note_req * n = figures_[i];
74 Pitch *p = unsmob_pitch (n->get_mus_property ("pitch"));
76 String fstr = to_str (p->steps ()+ 1);
78 SCM one_fig = ly_str02scm(fstr.ch_C ());
80 if (p->alteration_i_ || to_boolean (n->get_mus_property ("force-accidental") ))
82 SCM alter = scm_assoc (gh_int2scm (p->alteration_i_),
83 figure_->get_grob_property ("accidental-alist"));
84 if (gh_pair_p (alter))
86 one_fig = scm_list_n (ly_symbol2scm ("columns"),
93 flist = gh_cons (one_fig, flist);
96 flist = gh_cons (ly_symbol2scm ("lines"), flist);
98 figure_-> set_grob_property ("text", flist);
103 ENTER_DESCRIPTION(Figured_bass_engraver,
104 /* descr */ "Make volta brackets",
105 /* creats*/ "BassFigure",