+Real
+Paper_column::minimum_distance (Grob *left, Grob *right)
+{
+ Drul_array<Grob *> cols (left, right);
+ Drul_array<Skyline> skys = Drul_array<Skyline> (Skyline (RIGHT), Skyline (LEFT));
+
+ for (LEFT_and_RIGHT (d))
+ {
+ Skyline_pair *sp = Skyline_pair::unsmob (cols[d]->get_property ("horizontal-skylines"));
+ if (sp)
+ skys[d] = (*sp)[-d];
+ }
+
+ skys[RIGHT].merge (Separation_item::conditional_skyline (right, left));
+
+ return max (0.0, skys[LEFT].distance (skys[RIGHT]));
+}
+
+Interval
+Paper_column::break_align_width (Grob *me, SCM align_sym)
+{
+ Grob *p = me->get_parent (X_AXIS);
+
+ if (is_musical (me))
+ {
+ me->programming_error ("tried to get break-align-width of a musical column");
+ return Interval (0, 0) + me->relative_coordinate (p, X_AXIS);
+ }
+
+ Grob *align = 0;
+ if (align_sym == ly_symbol2scm ("staff-bar")
+ || align_sym == ly_symbol2scm ("break-alignment"))
+ align
+ = Pointer_group_interface::find_grob (me, ly_symbol2scm ("elements"),
+ (align_sym == ly_symbol2scm ("staff-bar")
+ ? Bar_line::non_empty_barline
+ : Break_alignment_interface::has_interface));
+ else
+ {
+ extract_grob_set (me, "elements", elts);
+ for (vsize i = 0; i < elts.size (); i++)
+ {
+ if (elts[i]->get_property ("break-align-symbol") == align_sym)
+ {
+ align = elts[i];
+ break;
+ }
+ }
+ }
+
+ if (!align)
+ return Interval (0, 0) + me->relative_coordinate (p, X_AXIS);
+
+ return align->extent (p, X_AXIS);
+}
+
+