]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/melody-engraver.cc
Run `make grand-replace'.
[lilypond.git] / lily / melody-engraver.cc
index a0d66b2d6924a59fee865d8d58a4ec025c0edc1a..5189f674b50a29bd6a1f0ea0cc3084982f8a516d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
 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 */
+               ""
+               );