X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fchord-tremolo-engraver.cc;h=805cb52554a864eb5e50bb8a71085314e492883d;hb=f604d2f2f7f03cbbd43182c14ef20647d16f87d8;hp=b0f17352baa49915e771c4b92d8d23f1fe34b60e;hpb=cc676c5aadd45985251b5d60fa23eed1ed98f6e6;p=lilypond.git diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index b0f17352ba..805cb52554 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2006 Han-Wen Nienhuys + (c) 2000--2007 Han-Wen Nienhuys Erik Sandberg */ @@ -73,15 +73,19 @@ Chord_tremolo_engraver::listen_tremolo_span (Stream_event *ev) Direction span_dir = to_dir (ev->get_property ("span-direction")); if (span_dir == START) { - repeat_ = ev; - int type = scm_to_int (ev->get_property ("tremolo-type")); - /* e.g. 1 for type 8, 2 for type 16 */ - flags_ = intlog2 (type) - 2; - expected_beam_count_ = scm_to_int (ev->get_property ("expected-beam-count")); - beam_dir_ = RIGHT; + if (ASSIGN_EVENT_ONCE (repeat_, ev)) + { + int type = scm_to_int (ev->get_property ("tremolo-type")); + /* e.g. 1 for type 8, 2 for type 16 */ + flags_ = intlog2 (type) - 2; + expected_beam_count_ = scm_to_int (ev->get_property ("expected-beam-count")); + beam_dir_ = RIGHT; + } } else if (span_dir == STOP) { + if (!repeat_) + ev->origin ()->warning (_ ("No tremolo to end")); repeat_ = 0; beam_ = 0; expected_beam_count_ = 0; @@ -104,6 +108,7 @@ Chord_tremolo_engraver::finalize () if (beam_) { repeat_->origin ()->warning (_ ("unterminated chord tremolo")); + announce_end_grob (beam_, SCM_EOL); beam_->suicide (); } } @@ -121,15 +126,18 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info) beam_->set_property ("gap-count", scm_from_int (flags_ - expected_beam_count_)); if (beam_dir_ == RIGHT) - beam_dir_ = LEFT; - - if (info.ultimate_music_cause ()->is_mus_type ("rhythmic-event")) + { + beam_dir_ = LEFT; + announce_end_grob (beam_, s->self_scm ()); + } + + if (info.ultimate_event_cause ()->in_event_class ("rhythmic-event")) Beam::add_stem (beam_, s); else { string s = _ ("stem must have Rhythmic structure"); - if (info.music_cause ()) - info.music_cause ()->origin ()->warning (s); + if (info.event_cause ()) + info.event_cause ()->origin ()->warning (s); else ::warning (s); } @@ -140,6 +148,5 @@ ADD_ACKNOWLEDGER (Chord_tremolo_engraver, stem); ADD_TRANSLATOR (Chord_tremolo_engraver, /* doc */ "Generates beams for tremolo repeats.", /* create */ "Beam", - /* accept */ "tremolo-span-event", /* read */ "", /* write */ "");