Dynamic_engraver::finalize ()
{
typeset_all ();
+
+ if (line_spanner_
+ && line_spanner_->immutable_property_alist_ == SCM_EOL)
+ line_spanner_ = 0;
if (line_spanner_)
{
finished_line_spanner_ = line_spanner_;
typeset_all ();
}
+ if (cresc_p_
+ && cresc_p_->immutable_property_alist_ == SCM_EOL)
+ cresc_p_ = 0;
if (cresc_p_)
{
current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
void
Dynamic_engraver::typeset_all ()
{
+ /*
+ remove suicided spanners,
+ ugh: we'll need this for every spanner, beam, slur
+ Hmm, how to do this, cleanly?
+ Maybe just check at typeset_grob ()?
+ */
+ if (finished_cresc_p_
+ && finished_cresc_p_->immutable_property_alist_ == SCM_EOL)
+ finished_cresc_p_ = 0;
+ if (finished_line_spanner_
+ && finished_line_spanner_->immutable_property_alist_ == SCM_EOL)
+ finished_line_spanner_ = 0;
+
if (finished_cresc_p_)
{
if (!finished_cresc_p_->get_bound (RIGHT))
}
if (finished_line_spanner_)
{
- /*
- To make sure that this works
- */
+ /* To make sure that this works */
Side_position_interface::add_staff_support (finished_line_spanner_);
+
/*
We used to have
*/
- if (!finished_line_spanner_->get_bound (RIGHT))
+ if (!finished_line_spanner_->get_bound (RIGHT)
+ && finished_line_spanner_->get_bound (LEFT))
finished_line_spanner_->set_bound (RIGHT, finished_line_spanner_->get_bound (LEFT));
typeset_grob (finished_line_spanner_);
{
if (Note_column::has_interface (i.elem_l_))
{
- if (line_spanner_)
+ if (line_spanner_
+ /* Don't refill killed spanner */
+ && line_spanner_->immutable_property_alist_ != SCM_EOL)
{
Side_position_interface::add_support (line_spanner_,i.elem_l_);
add_bound_item (line_spanner_,dynamic_cast<Item*>(i.elem_l_));