/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1999--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Pointer_group_interface::add_grob (me, ly_symbol2scm ("scripts"), script);
}
-int
-pushed_by_slur (Grob *g)
-{
- return g->get_property ("avoid-slur") == ly_symbol2scm ("outside")
- || g->get_property ("avoid-slur") == ly_symbol2scm ("around");
-}
-
LY_DEFINE (ly_grob_script_priority_less, "ly:grob-script-priority-less",
2, 0, 0, (SCM a, SCM b),
"Compare two grobs by script priority. For internal use.")
Grob *i1 = unsmob_grob (a);
Grob *i2 = unsmob_grob (b);
- /*
- * avoid-staff of slur trumps script priority. If one grob is
- * supposed to be printed outside a slur and another grob inside,
- * we place the inside grob below the outside even if the inside
- * grob has a higher script-priority.
- */
- if (unsmob_grob (i1->get_object ("slur"))
- && unsmob_grob (i2->get_object ("slur")))
- {
- int push1 = pushed_by_slur (i1);
- int push2 = pushed_by_slur (i2);
- if (push1 != push2)
- return push1 < push2 ? SCM_BOOL_T : SCM_BOOL_F;
- }
-
SCM p1 = i1->get_property ("script-priority");
SCM p2 = i2->get_property ("script-priority");
{
SCM last_outside_staff = last->get_property ("outside-staff-priority");
/*
- if outside_staff_priority is missing for previous grob, just
- use it as a support for the current grob
+ if outside_staff_priority is missing for previous grob,
+ use all the scripts so far as support for the current grob
*/
if (!scm_is_number (last_outside_staff))
- Side_position_interface::add_support (g, last);
+ for (SCM t = ss; !scm_is_eq (t, s); t = scm_cdr (t))
+ Side_position_interface::add_support (g, unsmob_grob (scm_car (t)));
/*
if outside_staff_priority is missing or is equal to original
outside_staff_priority of previous grob, set new