- context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F);
-}
-
-void
-Slur_engraver::acknowledge_note_column (Grob_info info)
-{
- Grob *e = info.grob ();
- for (vsize i = slurs_.size (); i--;)
- Slur::add_column (slurs_[i], e);
- for (vsize i = end_slurs_.size (); i--;)
- Slur::add_column (end_slurs_[i], e);
-}
-
-void
-Slur_engraver::acknowledge_extra_object (Grob_info info)
-{
- objects_to_acknowledge_.push_back (info);
-}
-
-void
-Slur_engraver::acknowledge_inline_accidental (Grob_info info)
-{
- acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_fingering (Grob_info info)
-{
- acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_tuplet_number (Grob_info info)
-{
- acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_script (Grob_info info)
-{
- if (!info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
- acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_text_script (Grob_info info)
-{
- acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_tie (Grob_info info)
-{
- acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::finalize ()
-{
- for (vsize i = 0; i < slurs_.size (); i++)
- {
- slurs_[i]->warning (_ ("unterminated slur"));
- slurs_[i]->suicide ();
- }
-}
-
-void
-Slur_engraver::process_music ()
-{
- for (vsize i = 0; i < stop_events_.size (); i++)
- {
- Stream_event *ev = stop_events_[i];
- string id = robust_scm2string (ev->get_property ("spanner-id"), "");
-
- // Find the slur that is ended with this event (by checking the spanner-id)
- bool ended = false;
- for (vsize j = slurs_.size (); j--;)
- {
- if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
- {
- ended = true;
- end_slurs_.push_back (slurs_[j]);
- slurs_.erase (slurs_.begin () + j);
- }
- }
- if (!ended)
- ev->origin ()->warning (_ ("cannot end slur"));
- }
-
- for (vsize i = start_events_.size (); i--;)
- {
- 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);
- }
- }
- }
- set_melisma (slurs_.size ());
-}
-
-void
-Slur_engraver::stop_translation_timestep ()
-{
- if (Grob *g = unsmob_grob (get_property ("currentCommandColumn")))
- {
- for (vsize i = 0; i < end_slurs_.size (); i++)
- Slur::add_extra_encompass (end_slurs_[i], g);
-
- if (!start_events_.size ())
- for (vsize i = 0; i < slurs_.size (); i++)
- Slur::add_extra_encompass (slurs_[i], g);
- }
-
- for (vsize i = 0; i < end_slurs_.size (); i++)
- {
- Spanner *s = dynamic_cast<Spanner *> (end_slurs_[i]);
- if (!s->get_bound (RIGHT))
- s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
- announce_end_grob (s, SCM_EOL);
- }
-
- for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
- Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slurs_, end_slurs_);
-
- objects_to_acknowledge_.clear ();
- end_slurs_.clear ();
- start_events_.clear ();
- stop_events_.clear ();