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_);
41 Figured_bass_engraver::try_music (Music*m)
43 if (Note_req* n = dynamic_cast<Note_req*> (m))
48 else if (Rest_req * r = dynamic_cast<Rest_req*> (m))
57 Figured_bass_engraver::process_music ()
61 figure_ = new Item (get_property ("BassFigure"));
62 announce_grob (figure_, rest_req_); // todo
63 figure_->set_grob_property ("text" , gh_str02scm ("-"));
65 else if (figures_.size ())
67 figure_ = new Item (get_property ("BassFigure"));
68 announce_grob (figure_, figures_[0]); // todo
70 for (int i = 0; i < figures_.size (); i++)
72 Note_req * n = figures_[i];
73 Pitch *p = unsmob_pitch (n->get_mus_property ("pitch"));
75 String fstr = to_str (p->steps ()+ 1);
77 SCM one_fig = ly_str02scm(fstr.ch_C ());
79 if (p->alteration_i_ || to_boolean (n->get_mus_property ("force-accidental") ))
81 SCM alter = scm_assoc (gh_int2scm (p->alteration_i_),
82 figure_->get_grob_property ("accidental-alist"));
83 if (gh_pair_p (alter))
85 one_fig = scm_list_n (ly_symbol2scm ("columns"),
92 flist = gh_cons (one_fig, flist);
95 flist = gh_cons (ly_symbol2scm ("lines"), flist);
97 figure_-> set_grob_property ("text", flist);
102 ENTER_DESCRIPTION(Figured_bass_engraver,
103 /* descr */ "Make volta brackets",
104 /* creats*/ "BassFigure",