+Slur_engraver::boot ()
+{
+ ADD_LISTENER (Slur_engraver, slur);
+ ADD_LISTENER (Slur_engraver, note);
+ ADD_ACKNOWLEDGER_FOR (Slur_engraver, extra_object, inline_accidental);
+ ADD_ACKNOWLEDGER_FOR (Slur_engraver, extra_object, fingering);
+ ADD_ACKNOWLEDGER (Slur_engraver, note_column);
+ ADD_ACKNOWLEDGER (Slur_engraver, script);
+ ADD_ACKNOWLEDGER_FOR (Slur_engraver, extra_object, text_script);
+ ADD_ACKNOWLEDGER_FOR (Slur_engraver, extra_object, dots);
+ ADD_END_ACKNOWLEDGER_FOR (Slur_engraver, extra_object, tie);
+ ADD_ACKNOWLEDGER_FOR (Slur_engraver, extra_object, tuplet_number);
+}
+
+ADD_TRANSLATOR (Slur_engraver,
+ /* doc */
+ "Build slur grobs from slur events.",
+
+ /* create */
+ "Slur ",
+
+ /* read */
+ "slurMelismaBusy "
+ "doubleSlurs ",
+
+ /* write */
+ ""
+ );
+
+void
+Slur_engraver::derived_mark () const
+{
+ for (vsize i = start_events_.size (); i--;)
+ {
+ scm_gc_mark (start_events_[i].slur_->self_scm ());
+ if (start_events_[i].note_)
+ scm_gc_mark (start_events_[i].note_->self_scm ());
+ }
+ for (vsize i = stop_events_.size (); i--;)
+ {
+ scm_gc_mark (stop_events_[i].slur_->self_scm ());
+ if (stop_events_[i].note_)
+ scm_gc_mark (stop_events_[i].note_->self_scm ());
+ }
+}
+
+void
+Slur_engraver::listen_note_slur (Stream_event *ev, Stream_event *note)