X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fchord-tremolo-engraver.cc;h=82eba5cec150bf6d743f63cd44d1bbbb80dc72e2;hb=79d5be4a62e43ea14042cba8787a589fc9f3340b;hp=b0f17352baa49915e771c4b92d8d23f1fe34b60e;hpb=cc676c5aadd45985251b5d60fa23eed1ed98f6e6;p=lilypond.git diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index b0f17352ba..82eba5cec1 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--2008 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); } @@ -138,8 +146,15 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info) 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 */ ""); + /* doc */ + "Generate beams for tremolo repeats.", + + /* create */ + "Beam ", + + /* read */ + "", + + /* write */ + "" + );