+ spanbar_ = 0;
+}
+
+void
+Span_bar_engraver::acknowledge_grob (Grob_info i)
+{
+ int depth = i.origin_contexts (this).size ();
+ if (depth && Bar_line::has_interface (i.grob_))
+ {
+ Item *it = dynamic_cast<Item *> (i.grob_);
+ bars_.push (it);
+
+ if (bars_.size () >= 2 && !spanbar_)
+ {
+ spanbar_ = make_item ("SpanBar", SCM_EOL);
+
+ spanbar_->set_parent (bars_[0], X_AXIS);
+ }
+ }
+}
+
+void
+Span_bar_engraver::stop_translation_timestep ()
+{
+ if (spanbar_)
+ {
+ for (int i = 0; i < bars_.size (); i++)
+ Span_bar::add_bar (spanbar_, bars_[i]);
+
+ SCM vissym = ly_symbol2scm ("break-visibility");
+ SCM vis = bars_[0]->internal_get_property (vissym);
+ if (ly_c_equal_p (spanbar_->internal_get_property (vissym), vis))
+ spanbar_->internal_set_property (vissym, vis);
+
+ spanbar_ = 0;
+ }
+ bars_.set_size (0);