X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftuplet-engraver.cc;h=5cd637e3f9eb2853376fe79130bc0c6f71ed3dd4;hb=e34621159931fdbc7dff10973c2bc9ca38ab024c;hp=3d904ac7651ff79af9879251b7bb71433a04a3e6;hpb=7b5eff9b8de6992d309a959c13425aa91fb7d3a6;p=lilypond.git diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 3d904ac765..5cd637e3f9 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2006 Han-Wen Nienhuys + (c) 1998--2007 Han-Wen Nienhuys */ #include "beam.hh" @@ -78,7 +78,7 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev) { /* discard duplicates. - */ + */ if (new_tuplets_[i].stop_moment_ == d.stop_moment_) return; } @@ -87,13 +87,13 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev) } else if (dir == STOP) { - if (tuplets_.size ()) - { - stopped_tuplets_.push_back (tuplets_.back ()); - tuplets_.pop_back (); - } - else - ev->origin ()->warning (_f ("No tuplet to end")); + if (tuplets_.size ()) + { + stopped_tuplets_.push_back (tuplets_.back ()); + tuplets_.pop_back (); + } + else if (!to_boolean (get_property ("skipTypesetting"))) + ev->origin ()->warning (_f ("No tuplet to end")); } else ev->origin ()->programming_error ("direction tuplet-span-event_ invalid."); @@ -105,12 +105,14 @@ Tuplet_engraver::process_music () /* This may happen if the end of a tuplet is part of a quoted voice. */ - Moment now = now_mom(); + Moment now = now_mom (); for (vsize i = tuplets_.size (); i --; ) { - stopped_tuplets_.push_back (tuplets_[i]); if (tuplets_[i].stop_moment_ == now) - tuplets_.erase (tuplets_.begin () + i); + { + stopped_tuplets_.push_back (tuplets_[i]); + tuplets_.erase (tuplets_.begin () + i); + } } for (vsize i = 0; i < stopped_tuplets_.size (); i++) @@ -131,12 +133,16 @@ Tuplet_engraver::process_music () } else if (!bracket->get_bound (RIGHT)) { - bracket->set_bound (RIGHT, - bracket->get_bound (LEFT)); - number->set_bound (RIGHT, - stopped_tuplets_[i].bracket_->get_bound (LEFT)); - } - + if (bracket->get_bound (LEFT)) + { + bracket->set_bound (RIGHT, + bracket->get_bound (LEFT)); + number->set_bound (RIGHT, + stopped_tuplets_[i].bracket_->get_bound (LEFT)); + } + else + programming_error ("stopped tuplet bracket has left nor right bound."); + } // todo: scrap last_tuplets_, use stopped_tuplets_ only. // clear stopped_tuplets_ at start_translation_timestep last_tuplets_.push_back (bracket); @@ -169,7 +175,7 @@ Tuplet_engraver::process_music () tuplets_[i].stop_moment_.grace_part_ = 0; - if (i < tuplets_.size () - 1 && tuplets_[i + 1].bracket_) + if (i + 1 < tuplets_.size () && tuplets_[i + 1].bracket_) Tuplet_bracket::add_tuplet_bracket (tuplets_[i].bracket_, tuplets_[i + 1].bracket_); if (i > 0 && tuplets_[i - 1].bracket_) @@ -194,6 +200,10 @@ void Tuplet_engraver::start_translation_timestep () { last_tuplets_.clear (); + /* + May seem superfluous, but necessary for skipTypesetting. + */ + new_tuplets_.clear (); } void @@ -213,11 +223,17 @@ Tuplet_engraver::Tuplet_engraver () ADD_ACKNOWLEDGER (Tuplet_engraver, note_column); ADD_TRANSLATOR (Tuplet_engraver, - /* doc */ "Catch TupletSpannerEvent and generate appropriate bracket ", + /* doc */ + "Catch tuplet events and generate appropriate bracket.", + /* create */ "TupletBracket " "TupletNumber ", + /* read */ "tupletFullLength " "tupletFullLengthNote ", - /* write */ ""); + + /* write */ + "" + );