2 figured-bass-position-engraver.cc -- implement Figured_bass_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
10 #include "engraver.hh"
15 #include "side-position-interface.hh"
16 #include "translator.icc"
17 #include "axis-group-interface.hh"
19 class Figured_bass_position_engraver : public Engraver
21 TRANSLATOR_DECLARATIONS(Figured_bass_position_engraver);
23 Spanner *bass_figure_alignment_;
25 vector<Grob*> note_columns_;
28 DECLARE_ACKNOWLEDGER (note_column);
29 DECLARE_ACKNOWLEDGER (bass_figure_alignment);
30 DECLARE_END_ACKNOWLEDGER (bass_figure_alignment);
32 virtual void finalize ();
33 void start_spanner ();
35 void stop_translation_timestep ();
38 Figured_bass_position_engraver::Figured_bass_position_engraver ()
41 bass_figure_alignment_ = 0;
45 Figured_bass_position_engraver::start_spanner ()
47 assert (!positioner_);
49 positioner_ = make_spanner("BassFigureAlignmentPositioning", bass_figure_alignment_->self_scm ());
50 positioner_->set_bound (LEFT, bass_figure_alignment_->get_bound (LEFT));
51 Axis_group_interface::add_element (positioner_, bass_figure_alignment_);
55 Figured_bass_position_engraver::stop_spanner ()
57 if (positioner_ && !positioner_->get_bound (RIGHT))
59 positioner_->set_bound (RIGHT, bass_figure_alignment_->get_bound (RIGHT));
63 bass_figure_alignment_ = 0;
67 Figured_bass_position_engraver::finalize ()
73 Figured_bass_position_engraver::acknowledge_note_column (Grob_info info)
75 note_columns_.push_back (info.grob ());
79 Figured_bass_position_engraver::stop_translation_timestep ()
83 for (vsize i = 0; i < note_columns_.size (); i++)
84 Side_position_interface::add_support (positioner_, note_columns_[i]);
87 note_columns_.clear ();
91 Figured_bass_position_engraver::acknowledge_end_bass_figure_alignment (Grob_info info)
98 Figured_bass_position_engraver::acknowledge_bass_figure_alignment (Grob_info info)
100 bass_figure_alignment_ = dynamic_cast<Spanner*> (info.grob ());
105 ADD_ACKNOWLEDGER(Figured_bass_position_engraver,note_column);
106 ADD_ACKNOWLEDGER(Figured_bass_position_engraver,bass_figure_alignment);
107 ADD_END_ACKNOWLEDGER(Figured_bass_position_engraver,bass_figure_alignment);
109 ADD_TRANSLATOR (Figured_bass_position_engraver,
111 "Position figured bass alignments over notes.",
114 "BassFigureAlignmentPositioning ",