+
+
+void
+Piano_pedal_engraver::typeset_all ()
+{
+ Item * sustain = 0;
+ for (Pedal_info*p = info_list_; p->name_; p ++)
+ {
+ /*
+ Handle suicide.
+ */
+ if (p->finished_line_spanner_
+ && !p->finished_line_spanner_->live ())
+ p->finished_line_spanner_ = 0;
+ if (p->finished_bracket_
+ && !p->finished_bracket_->live())
+ p->finished_bracket_ = 0;
+
+
+ if (p->name_ == String ("Sustain"))
+ sustain = p->item_;
+
+ if (p->item_)
+ {
+ /*
+ Hmm.
+ */
+ if (p->name_ != String ("Sustain") && sustain)
+ {
+ Side_position_interface::add_support (p->item_,sustain);
+ }
+ typeset_grob (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")));
+ }
+
+ typeset_grob (p->finished_bracket_);
+
+ 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);
+ }
+ typeset_grob (p->finished_line_spanner_);
+ p->finished_line_spanner_ = 0;
+ }
+ }
+}
+
+ENTER_DESCRIPTION (Piano_pedal_engraver,
+/* descr */ "Engrave piano pedal symbols and brackets.",
+/* creats*/ "SostenutoPedal SustainPedal UnaCordaPedal SostenutoPedalLineSpanner SustainPedalLineSpanner UnaCordaPedalLineSpanner",
+/* accepts */ "pedal-event abort-event",
+/* acks */ "note-column-interface",
+/* reads */ "pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings pedalSostenutoStyle pedalSustainStyle pedalUnaCordaStyle",
+/* write */ "");