X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fextender-engraver.cc;h=eaaa7d208b3dc9a97a1426cd38c05695fcc53e5e;hb=42392675026a0d14bda19d0a279a6762e4e84cf4;hp=9279849bb265468ac0830086665fed6598855d6a;hpb=cd93507bb0b0559c7d916c1b19d7ac1f83d1cc8e;p=lilypond.git diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index 9279849bb2..eaaa7d208b 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -67,19 +67,42 @@ Extender_engraver::try_music (Music* r) return true; } +void +completize_extender (Spanner* sp) +{ + if (!sp->get_bound (RIGHT)) + { + SCM heads = sp->get_grob_property ("heads"); + if (gh_pair_p (heads)) + { + Item* it = dynamic_cast (unsmob_grob (gh_car (heads))); + if (it) + sp->set_bound (RIGHT, it); + } + } +} + + + void Extender_engraver::finalize () { if (extender_) { - extender_->warning (_ ("unterminated extender")); + completize_extender (extender_); + + if (!extender_->get_bound (RIGHT)) + extender_->warning (_ ("unterminated extender")); typeset_grob (extender_); extender_ = 0; } if (finished_extender_) { - finished_extender_->warning (_("unterminated extender")); + completize_extender (finished_extender_); + + if (!finished_extender_->get_bound (RIGHT)) + finished_extender_->warning (_("unterminated extender")); typeset_grob (finished_extender_); finished_extender_ =0; } @@ -90,7 +113,7 @@ Extender_engraver::process_music () { if (ev_) { - extender_ = new Spanner (get_property ("LyricExtender")); + extender_ = make_spanner ("LyricExtender"); announce_grob (extender_, ev_->self_scm()); } }