+void
+New_dynamic_engraver::finalize ()
+{
+ if (current_spanner_
+ && !current_spanner_->is_live ())
+ current_spanner_ = 0;
+ if (current_spanner_)
+ {
+ current_span_event_
+ ->origin ()->warning (_f ("unterminated %s",
+ get_spanner_type (current_span_event_)
+ .c_str ()));
+ current_spanner_->suicide ();
+ current_spanner_ = 0;
+ }
+}
+
+string
+New_dynamic_engraver::get_spanner_type (Stream_event *ev)
+{
+ string type;
+ SCM start_sym = ev->get_property ("class");
+
+ if (start_sym == ly_symbol2scm ("decrescendo-event"))
+ type = "decrescendo";
+ else if (start_sym == ly_symbol2scm ("crescendo-event"))
+ type = "crescendo";
+ else
+ programming_error ("unknown dynamic spanner type");
+ return type;
+}
+