X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmelody-engraver.cc;h=65f464c357e16982085603a0d86013508342159d;hb=a6a51abfd0195a3cf7d6ea095cf69808852f21ce;hp=9957185f04d10c6e3a1f9f6b54e97d5072c75b92;hpb=d664f5a7153ec2b1a1c4c9fba2d2174bf3140695;p=lilypond.git diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index 9957185f04..65f464c357 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -1,11 +1,21 @@ /* - melody-engraver.cc -- implement Melody_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2015 Han-Wen Nienhuys - (c) 1997--2008 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 "engraver.hh" @@ -16,18 +26,19 @@ class Melody_engraver : public Engraver { Grob *melody_item_; - Grob *stem_; + Grob *stem_; protected: - - DECLARE_ACKNOWLEDGER (stem); - DECLARE_ACKNOWLEDGER (slur); + + void acknowledge_stem (Grob_info); + void acknowledge_slur (Grob_info); TRANSLATOR_DECLARATIONS (Melody_engraver); void stop_translation_timestep (); + void process_acknowledged (); void process_music (); }; - -Melody_engraver::Melody_engraver () +Melody_engraver::Melody_engraver (Context *c) + : Engraver (c) { stem_ = 0; melody_item_ = 0; @@ -39,27 +50,35 @@ Melody_engraver::process_music () if (scm_is_string (get_property ("whichBar"))) melody_item_ = 0; } - + +/* + Used to be in stop_translation_timestep, but grobs can't + be created here. +*/ void -Melody_engraver::stop_translation_timestep () +Melody_engraver::process_acknowledged () { if (stem_ && !is_direction (stem_->get_property_data ("neutral-direction"))) { extract_grob_set (stem_, "rests", rests); if (rests.size ()) - melody_item_ = 0; + melody_item_ = 0; else - { - if (!melody_item_) - melody_item_ = make_item ("MelodyItem", stem_->self_scm ()); + { + if (!melody_item_) + melody_item_ = make_item ("MelodyItem", stem_->self_scm ()); - Melody_spanner::add_stem (melody_item_, stem_); - } + Melody_spanner::add_stem (melody_item_, stem_); + } } - stem_ = 0; } +void +Melody_engraver::stop_translation_timestep () +{ + stem_ = 0; +} void Melody_engraver::acknowledge_slur (Grob_info /* info */) @@ -67,32 +86,34 @@ Melody_engraver::acknowledge_slur (Grob_info /* info */) melody_item_ = 0; } - void Melody_engraver::acknowledge_stem (Grob_info info) { stem_ = info.grob (); } - - #include "translator.icc" -ADD_ACKNOWLEDGER (Melody_engraver, stem); -ADD_ACKNOWLEDGER (Melody_engraver, slur); + +void +Melody_engraver::boot () +{ + ADD_ACKNOWLEDGER (Melody_engraver, stem); + ADD_ACKNOWLEDGER (Melody_engraver, slur); +} ADD_TRANSLATOR (Melody_engraver, - /* doc */ - "Create information for context dependent typesetting" - " decisions.", + /* doc */ + "Create information for context dependent typesetting" + " decisions.", + + /* create */ + "MelodyItem ", - /* create */ - "MelodyItem ", + /* read */ + "", - /* read */ - "", + /* write */ + "" + ); - /* write */ - "" - ); -