X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmelody-engraver.cc;h=2d982056d33d22f438fdb30a800e081bf6f8150f;hb=d1ca9346d8e86b873c3cf5511105b0252e6c54ad;hp=5c9ee1c8269c892eca274f09bd43bf5aac6e0669;hpb=f1b323b28c4ed9e06193ed9a0447d48423fb05d5;p=lilypond.git diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index 5c9ee1c826..2d982056d3 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -1,51 +1,113 @@ /* - 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--2005 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" #include "item.hh" #include "melody-spanner.hh" +#include "pointer-group-interface.hh" -/** - Make stems upon receiving noteheads. -*/ class Melody_engraver : public Engraver { Grob *melody_item_; + Grob *stem_; protected: - + DECLARE_ACKNOWLEDGER (stem); + DECLARE_ACKNOWLEDGER (slur); TRANSLATOR_DECLARATIONS (Melody_engraver); + void stop_translation_timestep (); + void process_acknowledged (); + void process_music (); }; - Melody_engraver::Melody_engraver () { + stem_ = 0; melody_item_ = 0; } void -Melody_engraver::acknowledge_stem (Grob_info info) +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::process_acknowledged () +{ + if (stem_ + && !is_direction (stem_->get_property_data ("neutral-direction"))) + { + extract_grob_set (stem_, "rests", rests); + if (rests.size ()) + melody_item_ = 0; + else + { + if (!melody_item_) + melody_item_ = make_item ("MelodyItem", stem_->self_scm ()); + + Melody_spanner::add_stem (melody_item_, stem_); + } + } +} + +void +Melody_engraver::stop_translation_timestep () { - if (!melody_item_) - melody_item_ = make_item ("MelodyItem", info.grob ()->self_scm ()); + stem_ = 0; +} - Melody_spanner::add_stem (melody_item_, info.grob ()); +void +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); + ADD_TRANSLATOR (Melody_engraver, - "Create information for context dependent typesetting decisions. ", - "MelodyItem", - "", - "", - ""); - + /* doc */ + "Create information for context dependent typesetting" + " decisions.", + + /* create */ + "MelodyItem ", + + /* read */ + "", + + /* write */ + "" + ); +