]> git.donarmstrong.com Git - lilypond.git/blob - lily/stanza-number-align-engraver.cc
new file.
[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
11 #include "context.hh"
12 #include "engraver.hh"
13 #include "note-head.hh"
14 #include "lyric-extender.hh"
15 #include "group-interface.hh"
16 #include "side-position-interface.hh"
17
18 class Stanza_number_align_engraver : public Engraver
19 {
20 public:  
21   TRANSLATOR_DECLARATIONS (Stanza_number_align_engraver);
22
23 protected:  
24   Link_array<Grob> lyrics_;
25   Link_array<Grob> stanza_numbers_;
26   virtual void acknowledge_grob (Grob_info);
27   virtual void stop_translation_timestep ();
28 };
29
30 Stanza_number_align_engraver::Stanza_number_align_engraver ()
31 {
32   
33 }
34
35 void
36 Stanza_number_align_engraver::acknowledge_grob (Grob_info gi)
37 {
38   Grob *h = gi.grob_;
39   
40   if (h->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface")))
41     lyrics_.push (h);
42   else if (h->internal_has_interface (ly_symbol2scm ("stanza-number-interface")))
43     stanza_numbers_.push (h);
44 }
45
46 void
47 Stanza_number_align_engraver::stop_translation_timestep ()
48 {
49   for (int i = lyrics_.size (); i--;)
50     for (int j = stanza_numbers_.size (); j--;)
51       Side_position_interface::add_support (stanza_numbers_[j], lyrics_[i]);
52   
53   stanza_numbers_.clear ();
54   lyrics_.clear ();
55 }
56
57
58 ADD_TRANSLATOR (Stanza_number_align_engraver,
59                   "This engraver ensures that stanza numbers are neatly aligned. ",
60                   "",
61                   "",
62                   "stanza-number-interface lyric-syllable-interface ",
63                   "",
64                   "");
65