X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpercent-repeat-engraver.cc;h=09009b0baf5650aeb991d2ef84799f0be0b2fa4b;hb=5cc390968095201b69f142ad01842ac3f08144a2;hp=1f9023ae723cf9613adacf123ddbd6ba40b99653;hpb=6b9bfd374643d1eed1ea158777d796c57a2bcd3a;p=lilypond.git diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 1f9023ae72..09009b0baf 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2002 Han-Wen Nienhuys + (c) 2000--2004 Han-Wen Nienhuys */ @@ -51,16 +51,13 @@ protected: enum { UNKNOWN, - BEAT, MEASURE, DOUBLE_MEASURE, } repeat_sign_type_ ; - Item * beat_slash_; Item * double_percent_; Spanner * perc_; Spanner * finished_perc_; - Item * stem_tremolo_; protected: virtual void finalize (); virtual bool try_music (Music*); @@ -71,11 +68,10 @@ protected: Percent_repeat_engraver::Percent_repeat_engraver () { - perc_ = finished_perc_ = 0; + perc_ = 0; + finished_perc_ = 0; repeat_ =0; - stem_tremolo_ = 0; - beat_slash_ = 0; double_percent_ = 0; } @@ -88,7 +84,7 @@ Percent_repeat_engraver::try_music (Music * m) == Percent_repeat_iterator::constructor_proc && !repeat_) { - body_length_ = rp->body_length_mom (); + body_length_ = rp->body_get_length (); int count = rp->repeat_count (); Moment now = now_mom (); @@ -101,10 +97,7 @@ Percent_repeat_engraver::try_music (Music * m) if (unsmob_moment (m)) meas_len = *unsmob_moment (m); - if (body_length_ < meas_len && - meas_len.main_part_.mod_rat (body_length_.main_part_) == Moment (Rational (0,0))) - repeat_sign_type_ = BEAT; - else if (meas_len == body_length_) + if (meas_len == body_length_) repeat_sign_type_ = MEASURE; else if (Moment (2)* meas_len == body_length_) { @@ -120,17 +113,9 @@ Percent_repeat_engraver::try_music (Music * m) repeat_ = rp; - Global_translator *global =0; - Translator *t = this; - do - { - t = t->daddy_trans_ ; - global = dynamic_cast (t); - } - while (!global); - + Global_translator *global =top_engraver(); for (int i = 0; i < count; i++) - global->add_moment_to_process (now + Moment (1+i) * body_length_); + global->add_moment_to_process (next_moment_ + Moment (i) * body_length_); return true; } @@ -143,24 +128,18 @@ Percent_repeat_engraver::process_music () { if (repeat_ && now_mom () == next_moment_) { - if (repeat_sign_type_ == BEAT) - { - beat_slash_ = new Item (get_property ("RepeatSlash")); - announce_grob(beat_slash_, repeat_->self_scm()); - } - else if (repeat_sign_type_ == MEASURE) + if (repeat_sign_type_ == MEASURE) { finished_perc_ = perc_; typeset_perc (); - perc_ = new Spanner (get_property ("PercentRepeat")); + perc_ = make_spanner ("PercentRepeat"); SCM col =get_property ("currentCommandColumn"); perc_->set_bound (LEFT, unsmob_grob (col)); announce_grob(perc_, repeat_->self_scm()); } else if (repeat_sign_type_ == DOUBLE_MEASURE) - { - double_percent_ = new Item (get_property ("DoublePercentRepeat")); + double_percent_ = make_item ("DoublePercentRepeat"); announce_grob(double_percent_, repeat_->self_scm()); /* @@ -170,6 +149,8 @@ Percent_repeat_engraver::process_music () top_engraver()->forbid_breaks (); // guh. Use properties! } next_moment_ = next_moment_ + body_length_; + + top_engraver()->add_moment_to_process (next_moment_); } } @@ -179,7 +160,7 @@ Percent_repeat_engraver::finalize () typeset_perc (); if (perc_) { - repeat_->origin ()->warning (_ ("unterminated chord tremolo")); + repeat_->origin ()->warning (_ ("unterminated percent repeat")); perc_->suicide (); } } @@ -195,12 +176,6 @@ Percent_repeat_engraver::typeset_perc () finished_perc_ = 0; } - if (beat_slash_) - { - typeset_grob (beat_slash_); - beat_slash_ = 0; - } - if (double_percent_) { typeset_grob (double_percent_); @@ -238,9 +213,9 @@ Percent_repeat_engraver::stop_translation_timestep () ENTER_DESCRIPTION(Percent_repeat_engraver, -/* descr */ "Make beat, whole bar and double bar repeats.", -/* creats*/ "PercentRepeat RepeatSlash DoublePercentRepeat", -/* accepts */ "general-music", +/* descr */ "Make whole bar and double bar repeats.", +/* creats*/ "PercentRepeat DoublePercentRepeat", +/* accepts */ "repeated-music", /* acks */ "", /* reads */ "measureLength currentCommandColumn", /* write */ "");