]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stanza-number-align-engraver.cc
Run `make grand-replace'.
[lilypond.git] / lily / stanza-number-align-engraver.cc
index 16d2e073d230111b2275eb93ca26d0fa598c0208..9aa4e623ae6286426c94b85e139f3238b9ac017c 100644 (file)
@@ -1,29 +1,32 @@
-
 /*
-  stanza-number-align-engraver.cc -- implement
+  stanza-number-align-engraver.cc -- implement Stanza_number_align_engraver
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
 #include "engraver.hh"
 #include "note-head.hh"
 #include "lyric-extender.hh"
-#include "group-interface.hh"
+#include "pointer-group-interface.hh"
 #include "side-position-interface.hh"
 
+#include "translator.icc"
+
 class Stanza_number_align_engraver : public Engraver
 {
 public:
   TRANSLATOR_DECLARATIONS (Stanza_number_align_engraver);
 
 protected:
-  Link_array<Grob> lyrics_;
-  Link_array<Grob> stanza_numbers_;
-  virtual void acknowledge_grob (Grob_info);
-  virtual void stop_translation_timestep ();
+  vector<Grob*> lyrics_;
+  vector<Grob*> stanza_numbers_;
+
+  DECLARE_ACKNOWLEDGER (lyric_syllable);
+  DECLARE_ACKNOWLEDGER (stanza_number);
+  void stop_translation_timestep ();
 };
 
 Stanza_number_align_engraver::Stanza_number_align_engraver ()
@@ -31,32 +34,44 @@ Stanza_number_align_engraver::Stanza_number_align_engraver ()
 }
 
 void
-Stanza_number_align_engraver::acknowledge_grob (Grob_info gi)
+Stanza_number_align_engraver::acknowledge_lyric_syllable (Grob_info gi)
 {
-  Grob *h = gi.grob_;
+  Grob *h = gi.grob ();
+  lyrics_.push_back (h);
+}
 
-  if (h->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface")))
-    lyrics_.push (h);
-  else if (h->internal_has_interface (ly_symbol2scm ("stanza-number-interface")))
-    stanza_numbers_.push (h);
+void
+Stanza_number_align_engraver::acknowledge_stanza_number (Grob_info gi)
+{
+  Grob *h = gi.grob ();
+  stanza_numbers_.push_back (h);
 }
 
 void
 Stanza_number_align_engraver::stop_translation_timestep ()
 {
-  for (int i = lyrics_.size (); i--;)
-    for (int j = stanza_numbers_.size (); j--;)
+  for (vsize i = lyrics_.size (); i--;)
+    for (vsize j = stanza_numbers_.size (); j--;)
       Side_position_interface::add_support (stanza_numbers_[j], lyrics_[i]);
 
   stanza_numbers_.clear ();
   lyrics_.clear ();
 }
 
+ADD_ACKNOWLEDGER (Stanza_number_align_engraver, lyric_syllable);
+ADD_ACKNOWLEDGER (Stanza_number_align_engraver, stanza_number);
+
 ADD_TRANSLATOR (Stanza_number_align_engraver,
-               "This engraver ensures that stanza numbers are neatly aligned. ",
-               "",
+               /* doc */
+               "This engraver ensures that stanza numbers are neatly"
+               " aligned.",
+
+               /* create */
                "",
-               "stanza-number-interface lyric-syllable-interface ",
+
+               /* read */
                "",
+
+               /* write */
                "");