X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmelody-engraver.cc;h=5189f674b50a29bd6a1f0ea0cc3084982f8a516d;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=a0d66b2d6924a59fee865d8d58a4ec025c0edc1a;hpb=ecccf62d0688bc0033ab1f875d389f82a81b72f1;p=lilypond.git diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index a0d66b2d69..5189f674b5 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2008 Han-Wen Nienhuys */ @@ -16,39 +16,84 @@ 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_music (); }; Melody_engraver::Melody_engraver () { + stem_ = 0; melody_item_ = 0; } void -Melody_engraver::acknowledge_stem (Grob_info info) +Melody_engraver::process_music () { - extract_grob_set (info.grob (), "rests", rests); - if (rests.size ()) + if (scm_is_string (get_property ("whichBar"))) melody_item_ = 0; - else +} + +void +Melody_engraver::stop_translation_timestep () +{ + if (stem_ + && !is_direction (stem_->get_property_data ("neutral-direction"))) { - if (!melody_item_) - melody_item_ = make_item ("MelodyItem", info.grob ()->self_scm ()); + 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_, info.grob ()); + Melody_spanner::add_stem (melody_item_, stem_); + } } + stem_ = 0; } + +void +Melody_engraver::acknowledge_slur (Grob_info info) +{ + (void)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 */ + "" + );