]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/extender-engraver.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / extender-engraver.cc
index 250430ba3f636c8ae31e429a8b4d85f916f69678..624a6bc062e809b734849058c1d410f323bd72b8 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1999--2010 Glen Prideaux <glenprideaux@iname.com>,
+  Copyright (C) 1999--2015 Glen Prideaux <glenprideaux@iname.com>,
   Han-Wen Nienhuys <hanwen@xs4all.nl>,
   Jan Nieuwenhuizen <janneke@gnu.org>
 
@@ -43,9 +43,9 @@ public:
   TRANSLATOR_DECLARATIONS (Extender_engraver);
 
 protected:
-  DECLARE_TRANSLATOR_LISTENER (extender);
-  DECLARE_TRANSLATOR_LISTENER (completize_extender);
-  DECLARE_ACKNOWLEDGER (lyric_syllable);
+  void listen_extender (Stream_event *);
+  void listen_completize_extender (Stream_event *);
+  void acknowledge_lyric_syllable (Grob_info);
 
   virtual void finalize ();
 
@@ -53,28 +53,26 @@ protected:
   void process_music ();
 };
 
-Extender_engraver::Extender_engraver ()
+Extender_engraver::Extender_engraver (Context *c)
+  : Engraver (c)
 {
   extender_ = 0;
   pending_extender_ = 0;
   ev_ = 0;
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Extender_engraver, extender);
 void
 Extender_engraver::listen_extender (Stream_event *ev)
 {
   ASSIGN_EVENT_ONCE (ev_, ev);
 }
 
-
 /*
   A CompletizeExtenderEvent is sent at the end of each lyrics block
   to ensure any pending extender can be correctly terminated if the lyrics
   end before the associated voice (this prevents the right bound being extended
   to the next note-column if no lyric follows the extender)
 */
-IMPLEMENT_TRANSLATOR_LISTENER (Extender_engraver, completize_extender);
 void
 Extender_engraver::listen_completize_extender (Stream_event * /* ev */)
 {
@@ -116,33 +114,33 @@ Extender_engraver::stop_translation_timestep ()
       Grob *h = voice ? get_current_note_head (voice) : 0;
 
       if (h)
-       {
-         if (extender_)
-           {
-             Pointer_group_interface::add_grob (extender_,
-                                                ly_symbol2scm ("heads"), h);
-           }
-
-         if (pending_extender_)
-           {
-             Pointer_group_interface::add_grob (pending_extender_,
-                                                ly_symbol2scm ("heads"), h);
-           }
-       }
+        {
+          if (extender_)
+            {
+              Pointer_group_interface::add_grob (extender_,
+                                                 ly_symbol2scm ("heads"), h);
+            }
+
+          if (pending_extender_)
+            {
+              Pointer_group_interface::add_grob (pending_extender_,
+                                                 ly_symbol2scm ("heads"), h);
+            }
+        }
       else
-       {
-         if (pending_extender_
-             && !get_property ("extendersOverRests"))
-           {
-             completize_extender (pending_extender_);
-             pending_extender_ = 0;
-           }
-       }
+        {
+          if (pending_extender_
+              && !to_boolean (get_property ("extendersOverRests")))
+            {
+              completize_extender (pending_extender_);
+              pending_extender_ = 0;
+            }
+        }
       if (extender_)
-       {
-         pending_extender_ = extender_;
-         extender_ = 0;
-       }
+        {
+          pending_extender_ = extender_;
+          extender_ = 0;
+        }
     }
 
   ev_ = 0;
@@ -155,7 +153,7 @@ completize_extender (Spanner *sp)
     {
       extract_item_set (sp, "heads", heads);
       if (heads.size ())
-       sp->set_bound (RIGHT, heads.back ());
+        sp->set_bound (RIGHT, heads.back ());
     }
 }
 
@@ -167,7 +165,7 @@ Extender_engraver::finalize ()
       completize_extender (extender_);
 
       if (!extender_->get_bound (RIGHT))
-       extender_->warning (_ ("unterminated extender"));
+        extender_->warning (_ ("unterminated extender"));
       extender_ = 0;
     }
 
@@ -176,22 +174,29 @@ Extender_engraver::finalize ()
       completize_extender (pending_extender_);
 
       if (!pending_extender_->get_bound (RIGHT))
-       pending_extender_->warning (_ ("unterminated extender"));
+        pending_extender_->warning (_ ("unterminated extender"));
       pending_extender_ = 0;
     }
 }
 
-ADD_ACKNOWLEDGER (Extender_engraver, lyric_syllable);
+void
+Extender_engraver::boot ()
+{
+  ADD_LISTENER (Extender_engraver, extender);
+  ADD_LISTENER (Extender_engraver, completize_extender);
+  ADD_ACKNOWLEDGER (Extender_engraver, lyric_syllable);
+}
+
 ADD_TRANSLATOR (Extender_engraver,
-               /* doc */
-               "Create lyric extenders.",
+                /* doc */
+                "Create lyric extenders.",
 
-               /* create */
-               "LyricExtender ",
+                /* create */
+                "LyricExtender ",
 
-               /* read */
-               "extendersOverRests ",
+                /* read */
+                "extendersOverRests ",
 
-               /* write */
-               ""
-               );
+                /* write */
+                ""
+               );