]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/ligature-engraver.hh
* lily/accidental-engraver.cc: formatting fixes.
[lilypond.git] / lily / include / ligature-engraver.hh
1 /*
2   ligature-engraver.hh -- declare Ligature_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2002--2005 Juergen Reuter <reuter@ipd.uka.de>
7 */
8 #ifndef LIGATURE_ENGRAVER_HH
9 #define LIGATURE_ENGRAVER_HH
10
11 #include "engraver.hh"
12 #include "moment.hh"
13
14
15 /*
16  * FIXME: Spanner *create_ligature_spanner () and virtual void
17  * typeset_ligature (...) are abstract methods, such that we would
18  * like to declare them abstract:
19  *
20  *    virtual Spanner *create_ligature_spanner () = 0;
21  *    virtual void typeset_ligature (...) = 0;
22  *
23  * Unfortunately, clone_const_helper() (as expanded from the
24  * TRANSLATOR_DECLARATIONS macro) requires this class to be
25  * instantiatable, such that it may not have any abstract virtual
26  * functions.  As a workaround, the actually abstract methods are
27  * implemented, but produce a programming_error whenever called. --jr
28  */
29
30 class Ligature_engraver : public Engraver
31 {
32 protected:
33   void stop_translation_timestep ();
34   virtual void finalize ();
35
36
37   DECLARE_ACKNOWLEDGER (rest);
38   DECLARE_ACKNOWLEDGER (note_head);
39   virtual bool try_music (Music *);
40   void process_music ();
41   virtual Spanner *create_ligature_spanner (); /* abstract method */
42   virtual void typeset_ligature (Spanner *ligature,
43                                  Array<Grob_info> primitives); /* abstract method */
44   virtual Spanner *current_ligature ();
45   SCM brew_ligature_primitive_proc;
46
47 public:
48   TRANSLATOR_DECLARATIONS (Ligature_engraver);
49
50 private:
51   Drul_array<Music *> events_drul_;
52
53   Spanner *ligature_;
54   Array<Grob_info> primitives_;
55
56   Spanner *finished_ligature_;
57   Array<Grob_info> finished_primitives_;
58
59   Music *prev_start_event_;
60
61   // moment where ligature started.
62   Moment ligature_start_mom_;
63
64   Grob *last_bound_;
65
66   void override_stencil_callback ();
67   void revert_stencil_callback ();
68 };
69
70 #endif // LIGATURE_ENGRAVER_HH