]> git.donarmstrong.com Git - lilypond.git/blob - lily/stanza-number-align-engraver.cc
* flower
[lilypond.git] / lily / stanza-number-align-engraver.cc
1
2 /*
3   stanza-number-align-engraver.cc -- implement
4
5   source file of the GNU LilyPond music typesetter
6
7   (c) 2004--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
8 */
9
10 #include "context.hh"
11 #include "engraver.hh"
12 #include "note-head.hh"
13 #include "lyric-extender.hh"
14 #include "group-interface.hh"
15 #include "side-position-interface.hh"
16
17 class Stanza_number_align_engraver : public Engraver
18 {
19 public:
20   TRANSLATOR_DECLARATIONS (Stanza_number_align_engraver);
21
22 protected:
23   Link_array<Grob> lyrics_;
24   Link_array<Grob> stanza_numbers_;
25   virtual void acknowledge_grob (Grob_info);
26   virtual void stop_translation_timestep ();
27 };
28
29 Stanza_number_align_engraver::Stanza_number_align_engraver ()
30 {
31
32 }
33
34 void
35 Stanza_number_align_engraver::acknowledge_grob (Grob_info gi)
36 {
37   Grob *h = gi.grob_;
38
39   if (h->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface")))
40     lyrics_.push (h);
41   else if (h->internal_has_interface (ly_symbol2scm ("stanza-number-interface")))
42     stanza_numbers_.push (h);
43 }
44
45 void
46 Stanza_number_align_engraver::stop_translation_timestep ()
47 {
48   for (int i = lyrics_.size (); i--;)
49     for (int j = stanza_numbers_.size (); j--;)
50       Side_position_interface::add_support (stanza_numbers_[j], lyrics_[i]);
51
52   stanza_numbers_.clear ();
53   lyrics_.clear ();
54 }
55
56 ADD_TRANSLATOR (Stanza_number_align_engraver,
57                 "This engraver ensures that stanza numbers are neatly aligned. ",
58                 "",
59                 "",
60                 "stanza-number-interface lyric-syllable-interface ",
61                 "",
62                 "");
63