-Slur_engraver::finalize ()
-{
- for (int i = 0; i < slur_stack_.size (); i++)
- {
-#if 0
- typeset_grob (slur_stack_[i]);
-#else
- /*
- Let's not typeset unterminated stuff
- */
- slur_stack_[i]->suicide ();
-#endif
- }
- slur_stack_.clear ();
-
- for (int i=0; i < requests_.size (); i++)
- {
- requests_[i]->origin ()->warning (_ ("unterminated slur"));
- }
-}
-
-void
-Slur_engraver::process_acknowledged_grobs ()
-{
- Link_array<Grob> start_slurs;
- for (int i=0; i< new_slur_reqs_.size (); i++)
- {
- Span_req* slur_req = new_slur_reqs_[i];
- // end slur: move the slur to other array
- if (slur_req->get_span_dir () == STOP)
- {
- if (slur_stack_.empty ())
- /* How to shut up this warning, when Voice_devnull_engraver has
- eaten start request? */
- slur_req->origin ()->warning (_f ("can't find start of slur"));
- else
- {
- Grob* slur = slur_stack_.pop ();
-
- end_slurs_.push (slur);
- requests_.pop ();
- }
- }
- else if (slur_req->get_span_dir () == START)
- {
- // push a new slur onto stack.
- // (use temp. array to wait for all slur STOPs)
- Grob* slur = new Spanner (get_property ("Slur"));
- Slur::set_interface (slur); // cannot remove yet!
- start_slurs.push (slur);
- requests_.push (slur_req);
- announce_grob (slur, slur_req->self_scm ());
- }
- }
- for (int i=0; i < start_slurs.size (); i++)
- slur_stack_.push (start_slurs[i]);
- new_slur_reqs_.clear ();
-}
-
-void
-Slur_engraver::stop_translation_timestep ()
-{
- for (int i = 0; i < end_slurs_.size (); i++)
- {
- typeset_grob (end_slurs_[i]);
- }
- end_slurs_.clear ();
-}
-
-void
-Slur_engraver::start_translation_timestep ()