- Stream_event *ev = start_events_[i];
- string id = robust_scm2string (ev->get_property ("spanner-id"), "");
- bool have_slur = false;
- // Check if we already have a slur with the same spanner-id.
- // In that case, don't create a new slur, but print a warning
- for (vsize j = 0; j < slurs_.size (); j++)
- have_slur = have_slur || (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""));
-
- if (have_slur)
- {
- // We already have a slur, so give a warning and completely ignore
- // the new slur.
- ev->origin ()->warning(_ ("already have slur"));
- start_events_.erase (start_events_.begin () + i);
- }
- else
- {
- Grob *slur = make_spanner ("Slur", ev->self_scm ());
- Direction updown = to_dir (ev->get_property ("direction"));
- slur->set_property ("spanner-id", ly_string2scm (id));
- if (updown)
- set_grob_direction (slur, updown);
- slurs_.push_back (slur);
-
- if (to_boolean (get_property ("doubleSlurs")))
- {
- set_grob_direction (slur, DOWN);
- slur = make_spanner ("Slur", ev->self_scm ());
- slur->set_property ("spanner-id", ly_string2scm (id));
- set_grob_direction (slur, UP);
- slurs_.push_back (slur);
- }
- }
+ Stream_event *ev = start_events_[i].slur_;
+ SCM id = ev->get_property ("spanner-id");
+ Direction updown = to_dir (ev->get_property ("direction"));
+
+ if (can_create_slur (id, old_slurs, &i, ev))
+ create_slur (id, start_events_[i], 0, updown, false);