X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpercent-repeat-engraver.cc;h=a6c47e872c7f50e86fb6d1a0abf110f3d7153087;hb=b53ca26b6a62e30c75b758d17bcdab530cba1e2b;hp=57357cb55943d546e2824ad301009f80f31f1333;hpb=abbdb46061be5c0a0682059d1f86bf3e44ca5cf3;p=lilypond.git diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 57357cb559..a6c47e872c 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -14,7 +14,6 @@ #include "international.hh" #include "item.hh" #include "misc.hh" -#include "percent-repeat-iterator.hh" #include "repeated-music.hh" #include "side-position-interface.hh" #include "spanner.hh" @@ -52,6 +51,10 @@ protected: Spanner *percent_; Spanner *percent_counter_; + + Grob *first_command_column_; + Moment command_moment_; + protected: virtual void finalize (); DECLARE_TRANSLATOR_LISTENER (percent); @@ -65,8 +68,28 @@ Percent_repeat_engraver::Percent_repeat_engraver () { percent_ = 0; percent_counter_ = 0; - percent_event_ = 0; + + first_command_column_ = 0; + command_moment_ = Moment (-1); +} + +void +Percent_repeat_engraver::start_translation_timestep () +{ + if (now_mom ().main_part_ != command_moment_.main_part_) + { + first_command_column_ = unsmob_grob (get_property ("currentCommandColumn")); + command_moment_ = now_mom (); + } + + if (stop_mom_.main_part_ == now_mom ().main_part_) + { + if (percent_) + typeset_perc (); + percent_event_ = 0; + repeat_sign_type_ = UNKNOWN; + } } IMPLEMENT_TRANSLATOR_LISTENER (Percent_repeat_engraver, percent); @@ -94,7 +117,10 @@ Percent_repeat_engraver::listen_percent (Stream_event *ev) } else { - ev->origin ()->warning (_ ("Junking percent repeat event: Duration must be exactly one or two measures")); + /* + don't warn about percent repeats: slash repeats are not + exactly 1 or 2 measures long. + */ return; } percent_event_ = ev; @@ -114,9 +140,10 @@ Percent_repeat_engraver::process_music () { if (percent_) typeset_perc (); + percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ()); - Grob *col = unsmob_grob (get_property ("currentCommandColumn")); + Grob *col = first_command_column_; percent_->set_bound (LEFT, col); SCM count = percent_event_->get_property ("repeat-count"); @@ -181,7 +208,7 @@ Percent_repeat_engraver::typeset_perc () { if (percent_) { - Grob *col = unsmob_grob (get_property ("currentCommandColumn")); + Grob *col = first_command_column_; percent_->set_bound (RIGHT, col); percent_ = 0; @@ -192,17 +219,7 @@ Percent_repeat_engraver::typeset_perc () } } -void -Percent_repeat_engraver::start_translation_timestep () -{ - if (stop_mom_.main_part_ == now_mom ().main_part_) - { - if (percent_) - typeset_perc (); - percent_event_ = 0; - repeat_sign_type_ = UNKNOWN; - } -} + void Percent_repeat_engraver::stop_translation_timestep () @@ -218,9 +235,6 @@ ADD_TRANSLATOR (Percent_repeat_engraver, "DoublePercentRepeatCounter " "PercentRepeat " "PercentRepeatCounter ", - - /* accept */ - "percent-event ", /* read */ "countPercentRepeats "