- Item *&pc_l = info.bounds_[d] ;
- if (!pc_l->line_l())
- pc_l = pc_l->find_prebroken_piece(- d);
-
- assert (pc_l);
- if (!info.line_l_)
- info.line_l_ = pc_l-> line_l ();
- else
- assert( info.line_l_ = pc_l->line_l ());
-
+ Item *bound = left->find_prebroken_piece (d);
+ if (!bound)
+ programming_error ("no broken bound");
+ else if (bound->get_system ())
+ {
+ Spanner *span = dynamic_cast<Spanner *> (clone ());
+ span->set_bound (LEFT, bound);
+ span->set_bound (RIGHT, bound);
+
+ assert (span->get_system ());
+ span->get_system ()->typeset_grob (span);
+ broken_intos_.push_back (span);
+ }
+ }
+ while ((flip (&d)) != LEFT);
+ }
+ else
+ {
+ System *root = get_root_system (this);
+ vector<Item*> break_points = root->broken_col_range (left, right);
+
+ break_points.insert (break_points.begin () + 0, left);
+ break_points.push_back (right);
+
+ Slice parent_rank_slice;
+ parent_rank_slice.set_full ();
+
+ /*
+ Check if our parent in X-direction spans equally wide
+ or wider than we do.
+ */
+ for (int a = X_AXIS; a < NO_AXES; a++)
+ {
+ if (Spanner *parent = dynamic_cast<Spanner *> (get_parent ((Axis)a)))
+ {
+ parent_rank_slice.intersect (parent->spanned_rank_interval ());
+ }