+ Interval y (il->pure_height (ycommon, 0, very_large));
+ Interval x (il->extent (pc, X_AXIS));
+
+ Interval extra = robust_scm2interval (elts[i]->get_property ("extra-spacing-width"),
+ Interval (0, 0));
+ x[LEFT] += extra[LEFT];
+ x[RIGHT] += extra[RIGHT];
+ if (to_boolean (elts[i]->get_property ("infinite-spacing-height")))
+ y = Interval (-infinity_f, infinity_f);
+
+ out.push_back (Box (x, y));
+ }
+
+ return out;
+}
+
+Interval
+Separation_item::width (Grob *me)
+{
+ SCM sw = me->get_property ("X-extent");
+ return ly_scm2interval (sw);
+}
+
+Interval
+Separation_item::relative_width (Grob *me, Grob *common)
+{
+ Interval iv = width (me);
+
+ return dynamic_cast<Item *> (me)->get_column ()->relative_coordinate (common, X_AXIS) + iv;
+}
+
+/*
+ Try to find the break-aligned symbol in SEPARATION_ITEM that is
+ sticking out at direction D. The x size is put in LAST_EXT
+*/
+Grob *
+Separation_item::extremal_break_aligned_grob (Grob *me,
+ Direction d,
+ Interval *last_ext)
+{
+ Grob *col = dynamic_cast<Item *> (me)->get_column ();
+ last_ext->set_empty ();
+ Grob *last_grob = 0;
+
+ extract_grob_set (me, "elements", elts);
+ for (vsize i = elts.size (); i--;)
+ {
+ Grob *break_item = elts[i];
+ if (!scm_is_symbol (break_item->get_property ("break-align-symbol")))
+ continue;
+
+ if (!scm_is_pair (break_item->get_property ("space-alist")))
+ continue;
+
+ Interval ext = break_item->extent (col, X_AXIS);
+
+ if (ext.is_empty ())
+ continue;
+
+ if (!last_grob
+ || (last_grob && d * (ext[d]- (*last_ext)[d]) > 0))