]> git.donarmstrong.com Git - lilypond.git/blob - lily/ligature-bracket-engraver.cc
* lily/include/grob-info.hh (class Grob_info): make data member
[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--2005 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
14 /*
15  * This engraver marks ligatures of any kind by just printing a
16  * horizontal square bracket on top of each ligature.  See class
17  * Ligature_engraver for more information on the interaction between
18  * this class and its superclass.
19  */
20 class Ligature_bracket_engraver : public Ligature_engraver
21 {
22 protected:
23   virtual Spanner *create_ligature_spanner ();
24   virtual void acknowledge_grob (Grob_info);
25 public:
26   TRANSLATOR_DECLARATIONS (Ligature_bracket_engraver);
27 };
28
29 Ligature_bracket_engraver::Ligature_bracket_engraver ()
30 {
31 }
32
33 Spanner *
34 Ligature_bracket_engraver::create_ligature_spanner ()
35 {
36   return make_spanner ("LigatureBracket", SCM_EOL);
37 }
38
39 void
40 Ligature_bracket_engraver::acknowledge_grob (Grob_info info)
41 {
42   if (current_ligature ())
43     {
44       if (Note_column::has_interface (info.grob ()))
45         {
46           Tuplet_bracket::add_column (current_ligature (),
47                                       dynamic_cast<Item *> (info.grob ()));
48         }
49       else Ligature_engraver::acknowledge_grob (info);
50     }
51 }
52
53 ADD_TRANSLATOR (Ligature_bracket_engraver,
54                 /* descr */ "Handles Ligature_events by engraving Ligature brackets.",
55                 /* creats*/ "TupletBracket",
56                 /* accepts */ "ligature-event",
57                 /* acks  */ "rest-interface note-column-interface",
58                 /* reads */ "",
59                 /* write */ "");