+
+ Real avoidance_offset = 0.0;
+ for (int d = LEFT, k = 0; d <= RIGHT; d++, k++)
+ if (consider[k])
+ avoidance_offset = dir * (max (dir * avoidance_offset,
+ dir * (ys[k] - yext[-dir] + dir * slur_padding)));
+
+ return scm_from_double (offset + avoidance_offset);
+}
+
+/*
+ * Used by Slur_engraver:: and Phrasing_slur_engraver::
+ */
+void
+Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
+ vector<Grob*> &slurs,
+ vector<Grob*> &end_slurs)
+{
+ if (slurs.empty () && end_slurs.empty ())
+ return;
+
+ Grob *e = info.grob ();
+ SCM avoid = e->get_property ("avoid-slur");
+ if (Tie::has_interface (e)
+ || avoid == ly_symbol2scm ("inside"))
+ {
+ for (vsize i = slurs.size (); i--;)
+ add_extra_encompass (slurs[i], e);
+ for (vsize i = end_slurs.size (); i--;)
+ add_extra_encompass (end_slurs[i], e);
+ }
+ else if (avoid == ly_symbol2scm ("outside")
+ || avoid == ly_symbol2scm ("around"))