X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffigured-bass-position-engraver.cc;h=8043640a2f5c91ed2d148bc1b861cf477dcc99bb;hb=e0f4896b497fc462d69c17843b1f783dcba60f3c;hp=502b30d6c15c7e56b2c1c1d746acb6a856039cc3;hpb=ec747f27694f0673dc944568e9436f67771bce23;p=lilypond.git diff --git a/lily/figured-bass-position-engraver.cc b/lily/figured-bass-position-engraver.cc index 502b30d6c1..8043640a2f 100644 --- a/lily/figured-bass-position-engraver.cc +++ b/lily/figured-bass-position-engraver.cc @@ -3,30 +3,31 @@ source file of the GNU LilyPond music typesetter - (c) 2005--2006 Han-Wen Nienhuys + (c) 2005--2007 Han-Wen Nienhuys */ #include "engraver.hh" #include "context.hh" -#include "music.hh" #include "spanner.hh" +#include "item.hh" #include "side-position-interface.hh" #include "translator.icc" #include "axis-group-interface.hh" class Figured_bass_position_engraver : public Engraver { - TRANSLATOR_DECLARATIONS(Figured_bass_position_engraver); + TRANSLATOR_DECLARATIONS (Figured_bass_position_engraver); Spanner *bass_figure_alignment_; Spanner *positioner_; vector support_; - + vector span_support_; protected: DECLARE_ACKNOWLEDGER (note_column); DECLARE_ACKNOWLEDGER (slur); + DECLARE_END_ACKNOWLEDGER (slur); DECLARE_ACKNOWLEDGER (tie); DECLARE_ACKNOWLEDGER (bass_figure_alignment); DECLARE_END_ACKNOWLEDGER (bass_figure_alignment); @@ -48,7 +49,7 @@ Figured_bass_position_engraver::start_spanner () { assert (!positioner_); - positioner_ = make_spanner("BassFigureAlignmentPositioning", bass_figure_alignment_->self_scm ()); + positioner_ = make_spanner ("BassFigureAlignmentPositioning", bass_figure_alignment_->self_scm ()); positioner_->set_bound (LEFT, bass_figure_alignment_->get_bound (LEFT)); Axis_group_interface::add_element (positioner_, bass_figure_alignment_); } @@ -77,11 +78,20 @@ Figured_bass_position_engraver::acknowledge_note_column (Grob_info info) support_.push_back (info.grob ()); } +void +Figured_bass_position_engraver::acknowledge_end_slur (Grob_info info) +{ + vector::iterator i = find (span_support_.begin (), span_support_.end (), + info.grob ()); + + if (i < span_support_.end ()) + span_support_.erase (i); +} void Figured_bass_position_engraver::acknowledge_slur (Grob_info info) { - support_.push_back (info.grob ()); + span_support_.push_back (info.grob ()); } void @@ -95,6 +105,8 @@ Figured_bass_position_engraver::stop_translation_timestep () { if (positioner_) { + for (vsize i = 0; i < span_support_.size (); i++) + Side_position_interface::add_support (positioner_, span_support_[i]); for (vsize i = 0; i < support_.size (); i++) Side_position_interface::add_support (positioner_, support_[i]); } @@ -117,11 +129,13 @@ Figured_bass_position_engraver::acknowledge_bass_figure_alignment (Grob_info inf } -ADD_ACKNOWLEDGER(Figured_bass_position_engraver,note_column); -ADD_ACKNOWLEDGER(Figured_bass_position_engraver,slur); -ADD_ACKNOWLEDGER(Figured_bass_position_engraver,tie); -ADD_ACKNOWLEDGER(Figured_bass_position_engraver,bass_figure_alignment); -ADD_END_ACKNOWLEDGER(Figured_bass_position_engraver,bass_figure_alignment); +ADD_ACKNOWLEDGER (Figured_bass_position_engraver, note_column); +ADD_ACKNOWLEDGER (Figured_bass_position_engraver, slur); +ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, slur); + +ADD_ACKNOWLEDGER (Figured_bass_position_engraver, tie); +ADD_ACKNOWLEDGER (Figured_bass_position_engraver, bass_figure_alignment); +ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, bass_figure_alignment); ADD_TRANSLATOR (Figured_bass_position_engraver, /* doc */ @@ -130,8 +144,9 @@ ADD_TRANSLATOR (Figured_bass_position_engraver, /* create */ "BassFigureAlignmentPositioning ", - /* accept */ "", - /* read */ - " ", - /* write */ ""); + "", + + /* write */ + "" + );