]> git.donarmstrong.com Git - lilypond.git/blob - lily/ligature-bracket-engraver.cc
Merge branch 'master' of ssh+git://gpercival@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / ligature-bracket-engraver.cc
1 /*
2   ligature-bracket-engraver.cc -- implement Ligature_bracket_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
7 */
8
9 #include "ligature-engraver.hh"
10 #include "note-column.hh"
11 #include "tuplet-bracket.hh"
12 #include "spanner.hh"
13 #include "stream-event.hh"
14 #include "spanner.hh"
15 #include "item.hh"
16
17 #include "translator.icc"
18
19 /*
20  * This engraver marks ligatures of any kind by just printing a
21  * horizontal square bracket on top of each ligature.  See class
22  * Ligature_engraver for more information on the interaction between
23  * this class and its superclass.
24  */
25 class Ligature_bracket_engraver : public Ligature_engraver
26 {
27 protected:
28   virtual Spanner *create_ligature_spanner ();
29   virtual void typeset_ligature (Spanner *ligature,
30                                  vector<Grob_info> primitives);
31   DECLARE_ACKNOWLEDGER (rest);
32   DECLARE_ACKNOWLEDGER (note_column);
33   DECLARE_TRANSLATOR_LISTENER (ligature);
34 public:
35   TRANSLATOR_DECLARATIONS (Ligature_bracket_engraver);
36 };
37
38 IMPLEMENT_TRANSLATOR_LISTENER (Ligature_bracket_engraver, ligature);
39 void
40 Ligature_bracket_engraver::listen_ligature (Stream_event *ev)
41 {
42   Ligature_engraver::listen_ligature (ev);
43 }
44
45 Ligature_bracket_engraver::Ligature_bracket_engraver ()
46 {
47 }
48
49 Spanner *
50 Ligature_bracket_engraver::create_ligature_spanner ()
51 {
52   return make_spanner ("LigatureBracket", SCM_EOL);
53 }
54
55 void
56 Ligature_bracket_engraver::typeset_ligature (Spanner *, vector<Grob_info>)
57 {
58   // no real ligature to typeset; the LigatureBracket just does it
59 }
60
61 void
62 Ligature_bracket_engraver::acknowledge_note_column (Grob_info info)
63 {
64   if (current_ligature ())
65     {
66       Tuplet_bracket::add_column (current_ligature (),
67                                   dynamic_cast<Item *> (info.grob ()));
68
69       // avoid "junking empty ligature" message by acknowledging dummy
70       // note head
71       Ligature_engraver::acknowledge_note_head (Grob_info ());
72     }
73 }
74
75 void
76 Ligature_bracket_engraver::acknowledge_rest (Grob_info info)
77 {
78   if (current_ligature ())
79     Ligature_engraver::acknowledge_rest (info);
80 }
81
82 ADD_ACKNOWLEDGER (Ligature_bracket_engraver, rest);
83 ADD_ACKNOWLEDGER (Ligature_bracket_engraver, note_column);
84
85 ADD_TRANSLATOR (Ligature_bracket_engraver,
86                 /* doc */ "Handles Ligature_events by engraving Ligature brackets.",
87                 /* create */ "TupletBracket",
88                 /* read */ "",
89                 /* write */ "");