]> git.donarmstrong.com Git - lilypond.git/blob - lily/stanza-number-engraver.cc
Nitpick run.
[lilypond.git] / lily / stanza-number-engraver.cc
1 /*
2   lyric-number-engraver.cc -- implement Stanza_number_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2000--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>, Glen Prideaux <glenprideaux@iname.com>
7 */
8
9 #include "engraver.hh"
10 #include "side-position-interface.hh"
11
12 class Stanza_number_engraver : public Engraver
13 {
14   Item *text_;
15
16   SCM last_stanza_;
17 public:
18   TRANSLATOR_DECLARATIONS (Stanza_number_engraver);
19   void process_music ();
20   virtual void derived_mark () const;
21   void stop_translation_timestep ();
22   DECLARE_ACKNOWLEDGER (lyric_syllable);
23 };
24
25 void
26 Stanza_number_engraver::derived_mark () const
27 {
28   scm_gc_mark (last_stanza_);
29 }
30
31 /*
32   TODO: should make engraver that collects all the stanzas on a higher
33   level, and then groups them to the side. Stanza numbers should be
34   all aligned.
35 */
36
37 Stanza_number_engraver::Stanza_number_engraver ()
38 {
39   text_ = 0;
40   last_stanza_ = SCM_EOL;
41 }
42
43 void
44 Stanza_number_engraver::process_music ()
45 {
46   SCM stanza = get_property ("stanza");
47
48   if (scm_is_string (stanza) && stanza != last_stanza_)
49     {
50       last_stanza_ = stanza;
51
52       text_ = make_item ("StanzaNumber", SCM_EOL);
53       text_->set_property ("text", stanza);
54     }
55 }
56
57 void
58 Stanza_number_engraver::acknowledge_lyric_syllable (Grob_info inf)
59 {
60   if (text_)
61     Side_position_interface::add_support (text_, inf.grob ());
62 }
63
64 void
65 Stanza_number_engraver::stop_translation_timestep ()
66 {
67   text_ = 0;
68 }
69
70 #include "translator.icc"
71
72 ADD_ACKNOWLEDGER (Stanza_number_engraver, lyric_syllable);
73 ADD_TRANSLATOR (Stanza_number_engraver,
74                 /* doc */ "",
75                 /* create */ "StanzaNumber",
76                 /* accept */ "",
77                 /* read */ "stanza",
78                 /* write */ "");