X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fligature-engraver.cc;h=4c056bb54041b3094f6490db30717133e15cbbaf;hb=3dd9b13331489a191d0e901245cc98476e5fcac1;hp=8c77ceb45694d8cb66079d5bae2d8afea8623a3d;hpb=b37e3f652677ae0298423db9fa0e552e5fce0c92;p=lilypond.git diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index 8c77ceb456..4c056bb540 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -1,9 +1,20 @@ /* - ligature-engraver.cc -- implement Ligature_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2002--2009 Juergen Reuter - (c) 2002--2006 Juergen Reuter + 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 "ligature-engraver.hh" @@ -12,10 +23,8 @@ #include "international.hh" #include "note-head.hh" #include "rest.hh" -#include "score-engraver.hh" #include "spanner.hh" -#include "warn.hh" - +#include "stream-event.hh" #include "translator.icc" /* @@ -27,7 +36,7 @@ * * A concrete ligature engraver must subclass this class and provide * functions create_ligature_spanner () and typeset_ligature - * (Spanner *, Array). Subclasses of this class basically + * (Spanner *, vector). Subclasses of this class basically * fall into two categories. * * The first category consists of engravers that engrave ligatures in @@ -78,16 +87,11 @@ Ligature_engraver::Ligature_engraver () brew_ligature_primitive_proc = SCM_EOL; } -bool -Ligature_engraver::try_music (Music *m) +void +Ligature_engraver::listen_ligature (Stream_event *ev) { - if (m->is_mus_type ("ligature-event")) - { - Direction d = to_dir (m->get_property ("span-direction")); - events_drul_[d] = m; - return true; - } - return false; + Direction d = to_dir (ev->get_property ("span-direction")); + ASSIGN_EVENT_ONCE (events_drul_[d], ev); } void @@ -97,7 +101,7 @@ Ligature_engraver::process_music () { if (!ligature_) { - events_drul_[STOP]->origin ()->warning (_ ("can't find start of ligature")); + events_drul_[STOP]->origin ()->warning (_ ("cannot find start of ligature")); return; } @@ -117,7 +121,7 @@ Ligature_engraver::process_music () if (ligature_) { // TODO: maybe forbid breaks only if not transcribing - get_score_engraver ()->forbid_breaks (); + context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T); } if (events_drul_[START]) @@ -193,8 +197,8 @@ Ligature_engraver::acknowledge_note_head (Grob_info info) { if (ligature_) { - primitives_.push (info); - if (info.grob () && (brew_ligature_primitive_proc != SCM_EOL)) + primitives_.push_back (info); + if (info.grob () && brew_ligature_primitive_proc != SCM_EOL) { info.grob ()->set_property ("stencil", brew_ligature_primitive_proc); } @@ -206,7 +210,7 @@ Ligature_engraver::acknowledge_rest (Grob_info info) { if (ligature_) { - info.music_cause ()->origin ()->warning (_ ("ignoring rest: ligature may not contain rest")); + info.event_cause ()->origin ()->warning (_ ("ignoring rest: ligature may not contain rest")); prev_start_event_->origin ()->warning (_ ("ligature was started here")); // TODO: maybe better should stop ligature here rather than // ignoring the rest?