-Slur_engraver::do_pre_move_processing()
-{
- Scalar dir (get_property ("slurydirection"));
- Scalar dir2 (get_property ("ydirection"));
-
- Direction slurdir = CENTER;
- if (dir.length_i () && dir.isnum_b ())
- slurdir = (Direction) sign (int(dir));
- else if (dir2.length_i () && dir2.isnum_b ())
- slurdir = (Direction) sign (int (dir2));
-
- for (int i = 0; i < end_slur_l_arr_.size(); i++)
+Slur_engraver::create_slur (const string &spanner_id, Event_info evi, Grob *g_cause, Direction dir, bool left_broken)
+{
+ Grob *ccc = left_broken
+ ? unsmob<Grob> (get_property ("currentCommandColumn"))
+ : 0; // efficiency
+ SCM cause = evi.slur_ ? evi.slur_->self_scm () : g_cause->self_scm ();
+ Spanner *slur = make_spanner (grob_symbol (), cause);
+ slur->set_property ("spanner-id", ly_string2scm (spanner_id));
+ if (dir)
+ set_grob_direction (slur, dir);
+ if (left_broken)
+ slur->set_bound (LEFT, ccc);
+ slurs_.push_back (slur);
+ if (evi.note_)
+ note_slurs_[START].insert (Note_slurs::value_type (evi.note_, slur));
+
+ if (double_property ())
+ {
+ set_grob_direction (slur, DOWN);
+ slur = make_spanner (grob_symbol (), cause);
+ slur->set_property ("spanner-id", ly_string2scm (spanner_id));
+ set_grob_direction (slur, UP);
+ if (left_broken)
+ slur->set_bound (LEFT, ccc);
+ slurs_.push_back (slur);
+ if (evi.note_)
+ note_slurs_[START].insert(Note_slurs::value_type (evi.note_, slur));
+ }
+
+}
+
+bool
+Slur_engraver::can_create_slur (const string &id, vsize old_slurs, vsize *event_idx, Stream_event *ev)
+{
+ for (vsize j = slurs_.size (); j--;)