]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stanza-number-align-engraver.cc
Release: bump Welcome versions.
[lilypond.git] / lily / stanza-number-align-engraver.cc
index 3115ac3012568462b92726fbddf2c6b42f828783..53ec89358f56359cad37b12d14b4d711d5dc6343 100644 (file)
@@ -1,68 +1,94 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
 
-/*   
-stanza-number-align-engraver.cc --  implement 
+  Copyright (C) 2004--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-source file of the GNU LilyPond music typesetter
+  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.
 
-(c) 2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
- */
+  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 <http://www.gnu.org/licenses/>.
+*/
 
 #include "context.hh"
 #include "engraver.hh"
 #include "note-head.hh"
 #include "lyric-extender.hh"
-#include "item.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 ();
+public:
+  TRANSLATOR_DECLARATIONS (Stanza_number_align_engraver);
+
+protected:
+  vector<Grob *> lyrics_;
+  vector<Grob *> stanza_numbers_;
+
+  void acknowledge_lyric_syllable (Grob_info);
+  void acknowledge_stanza_number (Grob_info);
+  void stop_translation_timestep ();
 };
 
-Stanza_number_align_engraver::Stanza_number_align_engraver ()
+Stanza_number_align_engraver::Stanza_number_align_engraver (Context *c)
+  : Engraver (c)
+{
+}
+
+void
+Stanza_number_align_engraver::acknowledge_lyric_syllable (Grob_info gi)
 {
-  
+  Grob *h = gi.grob ();
+  lyrics_.push_back (h);
 }
 
 void
-Stanza_number_align_engraver::acknowledge_grob (Grob_info gi)
+Stanza_number_align_engraver::acknowledge_stanza_number (Grob_info gi)
 {
-  Grob *h = gi.grob_;
-  
-  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);
+  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 ();
 }
 
 
-ENTER_DESCRIPTION(Stanza_number_align_engraver,
-                 "This engraver ensures that stanza numbers are neatly aligned. ",
-                 "",
-                 "",
-                 "stanza-number-interface lyric-syllable-interface ",
-                 "",
-                 "");
+void
+Stanza_number_align_engraver::boot ()
+{
+  ADD_ACKNOWLEDGER (Stanza_number_align_engraver, lyric_syllable);
+  ADD_ACKNOWLEDGER (Stanza_number_align_engraver, stanza_number);
+}
+
+ADD_TRANSLATOR (Stanza_number_align_engraver,
+                /* doc */
+                "This engraver ensures that stanza numbers are neatly"
+                " aligned.",
+
+                /* create */
+                "",
+
+                /* read */
+                "",
+
+                /* write */
+                "");