+
+void
+Piano_pedal_engraver::del_linespanner (Spanner *g)
+{
+ int idx = previous_.find_index (g);
+ if (idx >= 0)
+ previous_.del (idx);
+}
+
+void
+Piano_pedal_engraver::stop_translation_timestep ()
+{
+ for (Pedal_info *p = info_list_; p && p->name_; p++)
+ {
+ if (!p->bracket_)
+ {
+ p->finished_line_spanner_ = p->line_spanner_;
+ p->line_spanner_ = 0;
+ del_linespanner (p->finished_line_spanner_);
+ }
+
+ typeset_all (p);
+ }
+
+ for (Pedal_info *p = info_list_; p->name_; p++)
+ {
+ p->event_drul_[STOP] = 0;
+ p->event_drul_[START] = 0;
+ }
+}
+
+void
+Piano_pedal_engraver::typeset_all (Pedal_info *p)
+{
+ /*
+ Handle suicide.
+ */
+ if (p->finished_line_spanner_
+ && !p->finished_line_spanner_->is_live ())
+ p->finished_line_spanner_ = 0;
+ if (p->finished_bracket_
+ && !p->finished_bracket_->is_live ())
+ p->finished_bracket_ = 0;
+
+ if (p->item_)
+ p->item_ = 0;
+
+ if (p->finished_bracket_)
+ {
+ Grob *r = p->finished_bracket_->get_bound (RIGHT);
+ if (!r)
+ p->finished_bracket_->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
+
+ p->finished_bracket_ = 0;
+ }
+
+ if (p->finished_line_spanner_)
+ {
+ Grob *l = p->finished_line_spanner_->get_bound (LEFT);
+ Grob *r = p->finished_line_spanner_->get_bound (RIGHT);
+ if (!r && l)
+ p->finished_line_spanner_->set_bound (RIGHT, l);
+ else if (!l && r)
+ p->finished_line_spanner_->set_bound (LEFT, r);
+ else if (!r && !l)
+ {
+ Grob *cc = unsmob_grob (get_property ("currentMusicalColumn"));
+ Item *ci = dynamic_cast<Item *> (cc);
+ p->finished_line_spanner_->set_bound (RIGHT, ci);
+ p->finished_line_spanner_->set_bound (LEFT, ci);
+ }
+
+ p->finished_line_spanner_ = 0;
+ }
+}
+
+#include "translator.icc"
+ADD_ACKNOWLEDGER (Piano_pedal_engraver, note_column);
+ADD_TRANSLATOR (Piano_pedal_engraver,
+ /* doc */ "Engrave piano pedal symbols and brackets.",
+ /* create */ "SostenutoPedal SustainPedal UnaCordaPedal SostenutoPedalLineSpanner SustainPedalLineSpanner UnaCordaPedalLineSpanner",
+ /* accept */ "pedal-event",
+ /* read */ "currentCommandColumn "
+ "pedalSostenutoStrings pedalSustainStrings "
+ "pedalUnaCordaStrings pedalSostenutoStyle "
+ "pedalSustainStyle pedalUnaCordaStyle",
+ /* write */ "");