X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvolta-engraver.cc;h=15fe9e9c0c1e5433b4aca179f173b58868a21b45;hb=0568120713137e8d51f39f2a95f57c8e8cb5587d;hp=7a9cbe25f4cad7c3ceb2711b18092e0c007be2ba;hpb=28976d28a04cfb9abe97af7214d7dce11f732604;p=lilypond.git diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 7a9cbe25f4..15fe9e9c0c 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -60,41 +60,42 @@ Volta_engraver::Volta_engraver () bool Volta_engraver::staff_eligible () { - /* - UGH. - */ - if (!unsmob_grob (staff_)) - return true; - - if (!to_boolean (get_property ("voltaOnThisStaff"))) + SCM doit =get_property ("voltaOnThisStaff"); + if (ly_c_boolean_p (doit)) { - /* - TODO: this does weird things when you open a piece with a - volta spanner. - - */ - SCM staffs = get_property ("stavesFound"); + return to_boolean (doit); + } - /* - only put a volta on the top staff. + + if (!unsmob_grob (staff_)) + return false; + + /* + TODO: this does weird things when you open a piece with a + volta spanner. + */ + SCM staffs = get_property ("stavesFound"); + + /* + only put a volta on the top staff. - May be this is a bit convoluted, and we should have a single - volta engraver in score context or somesuch. + May be this is a bit convoluted, and we should have a single + volta engraver in score context or somesuch. - */ - if (!is_pair (staffs)) - { - programming_error ("Huh? Volta engraver can't find staffs?"); - return false; - } - else if (ly_car (scm_last_pair (staffs)) != staff_) - { - return false; - } + */ + if (!ly_c_pair_p (staffs)) + { + programming_error ("Huh? Volta engraver can't find staffs?"); + return false; + } + else if (ly_car (scm_last_pair (staffs)) != staff_) + { + return false; } return true; } + void Volta_engraver::process_music () { @@ -106,13 +107,13 @@ Volta_engraver::process_music () bool end = false; start_string_ = SCM_EOL; - while (is_pair (cs)) + while (ly_c_pair_p (cs)) { SCM c = ly_car (cs); - if (is_pair (c) + if (ly_c_pair_p (c) && ly_car (c) == ly_symbol2scm ("volta") - && is_pair (ly_cdr (c))) + && ly_c_pair_p (ly_cdr (c))) { if (ly_cadr (c) == SCM_BOOL_F) end = true; @@ -146,7 +147,7 @@ Volta_engraver::process_music () } if (volta_span_ && - (is_string (start_string_) || is_pair (start_string_))) + (ly_c_string_p (start_string_) || ly_c_pair_p (start_string_))) { warning (_ ("Already have a volta spanner. Stopping that one prematurely.")); @@ -161,13 +162,13 @@ Volta_engraver::process_music () } if (!volta_span_ && - (is_string (start_string_) || is_pair (start_string_))) + (ly_c_string_p (start_string_) || ly_c_pair_p (start_string_))) { started_mom_ = now_mom () ; - volta_span_ = make_spanner ("VoltaBracket"); + volta_span_ = make_spanner ("VoltaBracket", SCM_EOL); - announce_grob (volta_span_, SCM_EOL); + volta_span_->set_property ("text", start_string_); } } @@ -207,14 +208,6 @@ Volta_engraver::acknowledge_grob (Grob_info i) void Volta_engraver::finalize () { - if (volta_span_) - { - typeset_grob (volta_span_); - } - if (end_volta_span_) - { - typeset_grob (end_volta_span_); - } } @@ -235,11 +228,22 @@ Volta_engraver::stop_translation_timestep () volta_span_ = 0; } - if (end_volta_span_) + if (end_volta_span_ && !end_volta_span_->get_bound (RIGHT)) + { + Grob * cc = unsmob_grob (get_property ("currentCommandColumn")); + Item * ci = dynamic_cast (cc); + end_volta_span_->set_bound (RIGHT, ci); + } + + end_volta_span_ =0; + + if (volta_span_ && !volta_span_->get_bound (LEFT)) { - typeset_grob (end_volta_span_); - end_volta_span_ =0; + Grob * cc = unsmob_grob (get_property ("currentCommandColumn")); + Item * ci = dynamic_cast (cc); + volta_span_->set_bound (LEFT, ci); } + } /* @@ -247,7 +251,7 @@ Volta_engraver::stop_translation_timestep () */ ENTER_DESCRIPTION (Volta_engraver, -/* descr */ "Make volta brackets", +/* descr */ "Make volta brackets.", /* creats*/ "VoltaBracket", /* accepts */ "", /* acks */ "bar-line-interface staff-symbol-interface note-column-interface",