X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftuplet-engraver.cc;h=3829c98283632ed0f4583e68c99a4e577bdd23b3;hb=4a03918c90866800b208ad12ffc019f577c8ab83;hp=888f5ccb81a133c148966d84d39689f59e016c4f;hpb=fe3687d66d2a768c83fede50ce901c6ef1b4969e;p=lilypond.git diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 888f5ccb81..3829c98283 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -1,9 +1,20 @@ /* - tuplet-engraver.cc -- implement Tuplet_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2007 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "beam.hh" @@ -78,7 +89,7 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev) { /* discard duplicates. - */ + */ if (new_tuplets_[i].stop_moment_ == d.stop_moment_) return; } @@ -87,13 +98,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 (_ ("No tuplet to end")); } else ev->origin ()->programming_error ("direction tuplet-span-event_ invalid."); @@ -133,12 +144,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 neither left nor right bound"); + } // todo: scrap last_tuplets_, use stopped_tuplets_ only. // clear stopped_tuplets_ at start_translation_timestep last_tuplets_.push_back (bracket); @@ -167,6 +182,8 @@ Tuplet_engraver::process_music () tuplets_[i].number_ = make_spanner ("TupletNumber", tuplets_[i].event_->self_scm ()); tuplets_[i].number_->set_object ("bracket", tuplets_[i].bracket_->self_scm ()); + tuplets_[i].number_->set_parent (tuplets_[i].bracket_, X_AXIS); + tuplets_[i].number_->set_parent (tuplets_[i].bracket_, Y_AXIS); tuplets_[i].bracket_->set_object ("tuplet-number", tuplets_[i].number_->self_scm ()); tuplets_[i].stop_moment_.grace_part_ = 0; @@ -196,6 +213,10 @@ void Tuplet_engraver::start_translation_timestep () { last_tuplets_.clear (); + /* + May seem superfluous, but necessary for skipTypesetting. + */ + new_tuplets_.clear (); } void @@ -215,14 +236,17 @@ Tuplet_engraver::Tuplet_engraver () ADD_ACKNOWLEDGER (Tuplet_engraver, note_column); ADD_TRANSLATOR (Tuplet_engraver, - /* doc */ "Catch tuplet events and generate appropriate bracket.", /* create */ "TupletBracket " "TupletNumber ", + /* read */ "tupletFullLength " "tupletFullLengthNote ", - /* write */ ""); + + /* write */ + "" + );