From 8fbdde4680196538bbb3ef2d6912b0c87de8b9af Mon Sep 17 00:00:00 2001 From: Neil Puttock Date: Tue, 14 Jun 2011 22:51:50 +0100 Subject: [PATCH] Fix #1679: Premature end to TextSpanner with full-bar rest. * input/regression/text-spanner-full-rest.ly: new regtest * lily/text-spanner-engraver.cc (acknowledge_note_column): only add bound item for current spanner if it doesn't already have its left bound set to prevent right bound being set prematurely --- input/regression/text-spanner-full-rest.ly | 12 ++++++++ lily/text-spanner-engraver.cc | 35 ++++++++++++---------- 2 files changed, 31 insertions(+), 16 deletions(-) create mode 100644 input/regression/text-spanner-full-rest.ly diff --git a/input/regression/text-spanner-full-rest.ly b/input/regression/text-spanner-full-rest.ly new file mode 100644 index 0000000000..97e5be904b --- /dev/null +++ b/input/regression/text-spanner-full-rest.ly @@ -0,0 +1,12 @@ +\version "2.15.2" + +\header { + texidoc = "Text spanners ending on full-measure rests do +not stop prematurely on preceding note heads." +} + +\relative c'' { + a1\startTextSpan + b1 + R1\stopTextSpan +} diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index b9c7b75fb9..c18bf098f2 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -52,8 +52,7 @@ Text_spanner_engraver::Text_spanner_engraver () finished_ = 0; current_event_ = 0; span_ = 0; - event_drul_[START] = 0; - event_drul_[STOP] = 0; + event_drul_.set (0, 0); } IMPLEMENT_TRANSLATOR_LISTENER (Text_spanner_engraver, text_span); @@ -119,8 +118,7 @@ Text_spanner_engraver::stop_translation_timestep () } typeset_all (); - event_drul_[START] = 0; - event_drul_[STOP] = 0; + event_drul_.set (0, 0); } void @@ -135,20 +133,25 @@ Text_spanner_engraver::finalize () } } - void Text_spanner_engraver::acknowledge_note_column (Grob_info info) { - if (span_) { - Pointer_group_interface::add_grob (span_, - ly_symbol2scm ("note-columns"), - info.grob()); - add_bound_item (span_, info.grob ()); - } else if (finished_) { - Pointer_group_interface::add_grob (finished_, ly_symbol2scm ("note-columns"), - info.grob()); - add_bound_item (finished_, info.grob ()); - } + if (span_) + { + Pointer_group_interface::add_grob (span_, + ly_symbol2scm ("note-columns"), + info.grob ()); + if (!span_->get_bound (LEFT)) + add_bound_item (span_, info.grob ()); + } + else if (finished_) + { + Pointer_group_interface::add_grob (finished_, + ly_symbol2scm ("note-columns"), + info.grob ()); + if (!finished_->get_bound (RIGHT)) + add_bound_item (finished_, info.grob ()); + } } ADD_ACKNOWLEDGER (Text_spanner_engraver, note_column); @@ -161,7 +164,7 @@ ADD_TRANSLATOR (Text_spanner_engraver, "TextSpanner ", /* read */ - "", + "currentMusicalColumn ", /* write */ "" -- 2.39.5