X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Frepeat-acknowledge-engraver.cc;h=d025fa47d2d5b0bb1ad2ccdd72b14700ea6bca92;hb=ba858880848d6aca1de4401d185860eb2017a01c;hp=e3f544d0f6fad4d0f65f5089e0558244883d4c68;hpb=a4d7106c75b325441063fd9ba9c4131979784aa5;p=lilypond.git diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index e3f544d0f6..d025fa47d2 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -3,11 +3,13 @@ source file of the GNU LilyPond music typesetter - (c) 2000 Han-Wen Nienhuys + (c) 2000--2004 Han-Wen Nienhuys */ + #include "engraver.hh" #include "translator-group.hh" +#include "context.hh" #include "repeated-music.hh" @@ -25,37 +27,37 @@ class Repeat_acknowledge_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Repeat_acknowledge_engraver(); - - virtual void do_post_move_processing (); - void deprecated_process_music (); - virtual void do_creation_processing (); + TRANSLATOR_DECLARATIONS (Repeat_acknowledge_engraver); + + virtual void start_translation_timestep (); + virtual void process_music (); + virtual void initialize (); + }; void -Repeat_acknowledge_engraver::do_creation_processing () +Repeat_acknowledge_engraver::initialize () { - daddy_trans_l_->set_property ("repeatCommands", SCM_EOL); + get_parent_context ()->set_property ("repeatCommands", SCM_EOL); } -Repeat_acknowledge_engraver::Repeat_acknowledge_engraver() +Repeat_acknowledge_engraver::Repeat_acknowledge_engraver () { } void -Repeat_acknowledge_engraver::do_post_move_processing () +Repeat_acknowledge_engraver::start_translation_timestep () { - Translator_group * tr = daddy_trans_l_->where_defined (ly_symbol2scm ("repeatCommands")); + Context * tr = get_parent_context ()->where_defined (ly_symbol2scm ("repeatCommands")); if (!tr) - tr = daddy_trans_l_; + tr = get_parent_context (); tr->set_property ("repeatCommands", SCM_EOL); } void -Repeat_acknowledge_engraver::deprecated_process_music () +Repeat_acknowledge_engraver::process_music () { /* At the start of a piece, we don't print any repeat bars. @@ -69,19 +71,19 @@ Repeat_acknowledge_engraver::deprecated_process_music () bool start = false; bool end = false; bool volta_found = false; - while (gh_pair_p (cs)) + while (ly_c_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 (ly_c_pair_p (command) && ly_car (command) == ly_symbol2scm ("volta")) volta_found = true; - cs = gh_cdr (cs); + cs = ly_cdr (cs); } - if ( start && end ) + if (start && end) s = ":|:"; else if (start) s = "|:"; @@ -89,13 +91,29 @@ Repeat_acknowledge_engraver::deprecated_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 (!ly_c_string_p (wb) || is_equal (db, wb)) { - daddy_trans_l_->set_property ("whichBar", ly_str02scm(s.ch_C())); + if (s != "" || (volta_found && !ly_c_string_p (wb))) + { + get_parent_context ()->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 */ "");