2 g-script-column.cc -- implement Script_column
4 source file of the GNU LilyPond music typesetter
6 (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "script-column.hh"
10 #include "side-position-interface.hh"
12 #include "group-interface.hh"
15 Script_column::add_staff_sided (Score_element *me, Item *i)
17 SCM p = i->get_elt_property ("script-priority");
21 Pointer_group_interface gi (me, "scripts");
24 me->add_dependency (i);
28 staff_side_compare (Score_element * const &i1,
29 Score_element * const &i2)
31 SCM p1 = i1->get_elt_property ("script-priority");
32 SCM p2 = i2->get_elt_property ("script-priority");
34 return gh_scm2int (p1) - gh_scm2int (p2);
37 MAKE_SCHEME_CALLBACK(Script_column,before_line_breaking);
40 Script_column::before_line_breaking (SCM smob)
42 Score_element* me = unsmob_element (smob);
43 Drul_array<Link_array<Score_element> > arrs;
44 Link_array<Score_element> staff_sided
45 = Pointer_group_interface__extract_elements (me, (Score_element*)0, "scripts");
48 for (int i=0; i < staff_sided.size (); i++)
50 arrs[Side_position::get_direction (staff_sided[i])]
51 .push (staff_sided[i]);
56 Link_array<Score_element> &arr(arrs[d]);
58 arr.sort (staff_side_compare);
60 Score_element * last = 0;
61 for (int i=0; i < arr.size (); i++)
65 Side_position::add_support( arr[i],last);
67 arr[i]->remove_elt_property ("script-priority");
71 } while (flip (&d) != DOWN);
73 return SCM_UNSPECIFIED;