X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frepeat-acknowledge-engraver.cc;h=53265a70e520c15880e7ac2b3222c85c21166248;hb=b209affed3653e31c4078557342ba392209dff55;hp=d4891d97ac69d438a71769968f306066fc3057d3;hpb=fc3e875d6bf06f0680e897faffdcab36ad975a03;p=lilypond.git diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index d4891d97ac..53265a70e5 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2001 Han-Wen Nienhuys + (c) 2000--2003 Han-Wen Nienhuys */ #include "engraver.hh" @@ -25,8 +25,7 @@ class Repeat_acknowledge_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Repeat_acknowledge_engraver (); + TRANSLATOR_DECLARATIONS(Repeat_acknowledge_engraver); virtual void start_translation_timestep (); virtual void process_music (); @@ -39,7 +38,7 @@ void Repeat_acknowledge_engraver::initialize () { first_b_ = true; - daddy_trans_l_->set_property ("repeatCommands", SCM_EOL); + daddy_trans_->set_property ("repeatCommands", SCM_EOL); } @@ -51,9 +50,9 @@ void Repeat_acknowledge_engraver::start_translation_timestep () { first_b_ = true; - Translator_group * tr = daddy_trans_l_->where_defined (ly_symbol2scm ("repeatCommands")); + Translator_group * tr = daddy_trans_->where_defined (ly_symbol2scm ("repeatCommands")); if (!tr) - tr = daddy_trans_l_; + tr = daddy_trans_; tr->set_property ("repeatCommands", SCM_EOL); } @@ -75,14 +74,14 @@ Repeat_acknowledge_engraver::process_music () bool volta_found = false; while (gh_pair_p (cs)) { - SCM command = gh_car (cs); + SCM command = ly_car (cs); if (command == ly_symbol2scm ("start-repeat")) start = true; else if (command == ly_symbol2scm ("end-repeat")) end = true; - else if (gh_pair_p (command) && gh_car (command) == ly_symbol2scm ("volta")) + else if (gh_pair_p (command) && ly_car (command) == ly_symbol2scm ("volta")) volta_found = true; - cs = gh_cdr (cs); + cs = ly_cdr (cs); } if (start && end) @@ -93,12 +92,29 @@ Repeat_acknowledge_engraver::process_music () s = ":|"; /* - TODO: line breaks might be allowed if we set whichBar to "". + TODO: line breaks might be allowed if we set whichBar to "". */ - if (s != "" || (volta_found && !gh_string_p (get_property ("whichBar")))) + + /* + We only set the barline if we wouldn't overwrite a previously set + barline. + */ + SCM wb = get_property ("whichBar"); + SCM db = get_property ("defaultBarType"); + if (!gh_string_p (wb) || gh_equal_p (db, wb)) { - daddy_trans_l_->set_property ("whichBar", ly_str02scm (s.ch_C ())); + if (s != "" || (volta_found && !gh_string_p (wb))) + { + daddy_trans_->set_property ("whichBar", scm_makfrom0str (s.to_str0 ())); + } } } -ADD_THIS_TRANSLATOR (Repeat_acknowledge_engraver); +ENTER_DESCRIPTION(Repeat_acknowledge_engraver, +/* descr */ "Acknowledge repeated music, and convert the contents of " +"repeatCommands ainto an appropriate setting for whichBar.", +/* creats*/ "", +/* accepts */ "", +/* acks */ "", +/* reads */ "repeatCommands whichBar", +/* write */ "");