+ Direction sd = to_dir (current_cresc_ev_->get_mus_property ("span-direction"));
+ String msg = sd == 1
+ ? _ ("already have a crescendo")
+ : _ ("already have a decrescendo");
+
+ accepted_spanreqs_drul_[START]->origin ()->warning (msg);
+ current_cresc_ev_->origin ()->warning (_("Cresc started here"));
+ }
+ else
+ {
+ current_cresc_ev_ = accepted_spanreqs_drul_[START];
+
+ if (Direction d = to_dir (current_cresc_ev_->get_mus_property ("direction")))
+ set_grob_direction (line_spanner_, d);
+
+ /*
+ TODO: Use symbols.
+ */
+
+ String start_type =
+ ly_symbol2string (current_cresc_ev_->get_mus_property ("name"));
+
+ /*
+ ugh. Use push/pop?
+ */
+ if (start_type == "DecrescendoEvent")
+ start_type = "decrescendo";
+ else if (start_type == "CrescendoEvent")
+ start_type = "crescendo";
+
+ SCM s = get_property ((start_type + "Spanner").to_str0 ());
+ if (!gh_symbol_p (s) || s == ly_symbol2scm ("hairpin"))
+ {
+ cresc_ = make_spanner ("Hairpin");
+ cresc_->set_grob_property ("grow-direction",
+ gh_int2scm ((start_type == "crescendo")
+ ? BIGGER : SMALLER));
+
+ }
+
+
+ /*
+ This is a convenient (and legacy) interface to TextSpanners
+ for use in (de)crescendi.
+ Hmm.
+ */
+ else
+ {
+ cresc_ = make_spanner ("TextSpanner");
+ cresc_->set_grob_property ("style", s);
+ daddy_trans_->set_property ((start_type
+ + "Spanner").to_str0 (), SCM_EOL);
+ s = get_property ((start_type + "Text").to_str0 ());
+ /*
+ FIXME: use get_markup () to check type.
+ */
+ if (gh_string_p (s) || gh_pair_p (s))
+ {
+ cresc_->set_grob_property ("edge-text",
+ gh_cons (s, scm_makfrom0str ("")));
+ daddy_trans_->set_property ((start_type + "Text").to_str0 (),
+ SCM_EOL);
+ }
+ }
+
+ cresc_->set_bound (LEFT, script_
+ ? script_
+ : unsmob_grob (get_property ("currentMusicalColumn")));
+
+ Axis_group_interface::add_element (line_spanner_, cresc_);
+
+ add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
+
+ announce_grob(cresc_, accepted_spanreqs_drul_[START]->self_scm());