+MAKE_SCHEME_CALLBACK (Script_column, row_before_line_breaking, 1);
+SCM
+Script_column::row_before_line_breaking (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ vector<Grob*> horizontal_grobs;
+ extract_grob_set (me, "scripts", scripts);
+
+ Grob_scripts_map head_scripts_map;
+ vector<Grob *> affect_all_grobs;
+ for (vsize i = 0; i < scripts.size (); i++)
+ {
+ Grob *sc = scripts[i];
+
+ /*
+ Don't want to consider scripts horizontally next to notes.
+ */
+ if (Accidental_placement::has_interface (sc)
+ || Arpeggio::has_interface (sc))
+ {
+ affect_all_grobs.push_back (sc);
+ }
+ else if (sc->get_property_data ("Y-offset") !=
+ Side_position_interface::x_aligned_side_proc)
+ {
+ head_scripts_map[sc->get_parent (Y_AXIS)].push_back (sc);
+ }
+ }
+
+ for (Grob_scripts_map::const_iterator i (head_scripts_map.begin ());
+ i != head_scripts_map.end ();
+ i++)
+ {
+ vector<Grob*> grobs = (*i).second;
+
+ // this isn't right in all cases, but in general a safe assumption.
+ concat (grobs, affect_all_grobs);
+ order_grobs (grobs);
+ }
+
+ return SCM_UNSPECIFIED;
+}
+
+
+MAKE_SCHEME_CALLBACK (Script_column, before_line_breaking, 1);
+SCM
+Script_column::before_line_breaking (SCM smob)