+ do {
+ Item *b = me->get_bound (d);
+
+ e = b->extent (b, X_AXIS);
+ if (!e.empty_b ())
+ r[d] = d * (e[-d] + padding);
+
+ broken[d] = b->break_status_dir () != CENTER;
+ width[d] = 0;
+ height[d] = 0;
+ shorten[d] = 0;
+ if ( gh_pair_p (ew) )
+ width[d] += gh_scm2double (index_cell (ew, d)) * d;
+ if ( !broken[d] && (gh_pair_p (eh) ) )
+ height[d] += gh_scm2double (index_cell (eh, d));
+ if ( gh_pair_p (sp) )
+ shorten[d] += gh_scm2double (index_cell (sp, d));
+ }
+ while (flip (&d) != LEFT);
+
+ Real extra_short = 0;
+ // For 'Mixed' style pedals, i.e. a bracket preceded by text: Ped._____|
+ // need to shorten by the extent of the text grob
+ if ( to_boolean (me->get_grob_property ("text-start")) )
+ {
+ height[LEFT] = 0;
+ Grob * textbit = me->get_parent(Y_AXIS);
+ extra_short = padding;
+ if (textbit->internal_has_interface(ly_symbol2scm("text-interface")))
+ // for plain text, e.g., Sost. Ped.
+ {
+ SCM text = textbit->get_grob_property("text");
+ if (gh_string_p (text)) {
+ SCM properties = Font_interface::font_alist_chain (me);
+ Molecule mol = Text_item::text2molecule (me, text, properties);
+ extra_short += mol.extent(X_AXIS).length() / 2;
+ }
+ }
+ shorten[RIGHT] -= thick;
+ }
+
+ shorten[LEFT] += extra_short ;
+
+ if (broken[LEFT]) {
+ shorten[LEFT] -= me->get_broken_left_end_align () ;
+ shorten[RIGHT] += abs(width[RIGHT]) + thick - r[RIGHT];
+ }
+
+ else {
+ // Shorten a ____/ on the right so that it will touch an adjoining \___
+ shorten[RIGHT] += abs(width[LEFT]) + abs(width[RIGHT]) + thick;
+ // Also shorten so that it ends just before the spanned note.
+ shorten[RIGHT] -= (r[LEFT] + r[RIGHT]);
+ }
+
+ me->set_grob_property ("edge-height", gh_cons ( gh_double2scm ( height[LEFT] ) ,
+ gh_double2scm ( height[RIGHT]) ) );
+ me->set_grob_property ("edge-width", gh_cons ( gh_double2scm ( width[LEFT] ),
+ gh_double2scm ( width[RIGHT] ) ));
+ me->set_grob_property ("shorten-pair", gh_cons ( gh_double2scm ( shorten[LEFT] ),
+ gh_double2scm ( shorten[RIGHT] ) ));