X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffigured-bass-engraver.cc;h=a73cdf6bd8b845eacf044368c1c9e7f175a08252;hb=a69b417a5cfb4dc3b78e931b9a9358f8df07adc3;hp=cf3e418883a9f51f74f88eea6dd5b4cad4721d5a;hpb=eca489c11ef81e501b2748f422877baee8f246be;p=lilypond.git diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index cf3e418883..a73cdf6bd8 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2005--2006 Han-Wen Nienhuys + (c) 2005--2007 Han-Wen Nienhuys */ @@ -57,8 +57,8 @@ struct Figure_group struct Figured_bass_engraver : public Engraver { - TRANSLATOR_DECLARATIONS(Figured_bass_engraver); - void clear_spanners(); + TRANSLATOR_DECLARATIONS (Figured_bass_engraver); + void clear_spanners (); void add_brackets (); void create_grobs (); @@ -131,6 +131,8 @@ Figured_bass_engraver::start_translation_timestep () groups_[i].current_event_ = 0; continuation_ = false; + + } IMPLEMENT_TRANSLATOR_LISTENER (Figured_bass_engraver, rest); @@ -140,7 +142,12 @@ Figured_bass_engraver::listen_rest (Stream_event *ev) if (to_boolean (get_property ("ignoreFiguredBassRest"))) { new_event_found_ = true; - ASSIGN_EVENT_ONCE (rest_event_, ev); + + /* + No ASSIGN_EVENT_ONCE () ; otherwise we get warnings about + polyphonic rests. + */ + rest_event_ = ev; } } @@ -149,23 +156,25 @@ void Figured_bass_engraver::listen_bass_figure (Stream_event *ev) { new_event_found_ = true; - Moment stop = now_mom () + get_event_length (ev); + Moment stop = now_mom () + get_event_length (ev, now_mom ()); stop_moment_ = max (stop_moment_, stop); - SCM fig = ev->get_property ("figure"); - for (vsize i = 0; i < groups_.size (); i++) + if (to_boolean (get_property ("useBassFigureExtenders"))) { - if (!groups_[i].current_event_ - && ly_is_equal (groups_[i].number_, fig)) + SCM fig = ev->get_property ("figure"); + for (vsize i = 0; i < groups_.size (); i++) { - groups_[i].current_event_ = ev; - groups_[i].force_no_continuation_ - = to_boolean (ev->get_property ("no-continuation")); - continuation_ = true; - return; + if (!groups_[i].current_event_ + && ly_is_equal (groups_[i].number_, fig)) + { + groups_[i].current_event_ = ev; + groups_[i].force_no_continuation_ + = to_boolean (ev->get_property ("no-continuation")); + continuation_ = true; + return; + } } - } - + } new_events_.push_back (ev); } @@ -175,13 +184,13 @@ Figured_bass_engraver::center_continuations (vector const &consecutive if (consecutive_lines.size () == 2) { vector left_figs; - for (vsize j = consecutive_lines.size(); j--;) + for (vsize j = consecutive_lines.size (); j--;) left_figs.push_back (consecutive_lines[j]->get_bound (LEFT)); SCM ga = Grob_array::make_array (); unsmob_grob_array (ga)->set_array (left_figs); - for (vsize j = consecutive_lines.size(); j--;) + for (vsize j = consecutive_lines.size (); j--;) consecutive_lines[j]->set_object ("figures", unsmob_grob_array (ga)->smobbed_copy ()); } @@ -191,14 +200,14 @@ void Figured_bass_engraver::center_repeated_continuations () { vector consecutive_lines; - for (vsize i = 0; i <= groups_.size(); i++) + for (vsize i = 0; i <= groups_.size (); i++) { if (i < groups_.size () && groups_[i].continuation_line_ && (consecutive_lines.empty () - || (consecutive_lines[0]->get_bound(LEFT)->get_column () + || (consecutive_lines[0]->get_bound (LEFT)->get_column () == groups_[i].continuation_line_->get_bound (LEFT)->get_column () - && consecutive_lines[0]->get_bound(RIGHT)->get_column () + && consecutive_lines[0]->get_bound (RIGHT)->get_column () == groups_[i].continuation_line_->get_bound (RIGHT)->get_column ()))) consecutive_lines.push_back (groups_[i].continuation_line_); else @@ -222,7 +231,7 @@ Figured_bass_engraver::clear_spanners () } if (to_boolean (get_property ("figuredBassCenterContinuations"))) - center_repeated_continuations(); + center_repeated_continuations (); for (vsize i = 0; i < groups_.size (); i++) { @@ -277,6 +286,9 @@ Figured_bass_engraver::add_brackets () void Figured_bass_engraver::process_music () { + if (alignment_ && !to_boolean (get_property ("useBassFigureExtenders"))) + clear_spanners (); + if (rest_event_) { clear_spanners (); @@ -342,9 +354,9 @@ Figured_bass_engraver::process_music () if (use_extenders) { vector junk_continuations; - for (vsize i = 0; i < groups_.size(); i++) + for (vsize i = 0; i < groups_.size (); i++) { - Figure_group &group = groups_[i]; + Figure_group &group = groups_[i]; if (group.is_continuation ()) { @@ -377,7 +389,7 @@ Figured_bass_engraver::process_music () { for (vsize i = 0; i <= junk_continuations.size (); i++) { - if (i < junk_continuations.size() + if (i < junk_continuations.size () && (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1)) consecutive.push_back (groups_[junk_continuations[i]].continuation_line_); else @@ -409,7 +421,7 @@ Figured_bass_engraver::create_grobs () alignment_->set_bound (RIGHT, muscol); SCM proc = get_property ("figuredBassFormatter"); - for (vsize i = 0; i < groups_.size(); i++) + for (vsize i = 0; i < groups_.size (); i++) { Figure_group &group = groups_[i]; @@ -479,9 +491,6 @@ ADD_TRANSLATOR (Figured_bass_engraver, "BassFigureContinuation " "BassFigureLine " , - /* accept */ - "bass-figure-event " - "rest-event", /* read */ "figuredBassAlterationDirection "