2 ligature-engraver.hh -- declare Ligature_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2002--2005 Juergen Reuter <reuter@ipd.uka.de>
8 #ifndef LIGATURE_ENGRAVER_HH
9 #define LIGATURE_ENGRAVER_HH
11 #include "engraver.hh"
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:
20 * virtual Spanner *create_ligature_spanner () = 0;
21 * virtual void typeset_ligature (...) = 0;
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
30 class Ligature_engraver : public Engraver
33 PRECOMPUTED_VIRTUAL void stop_translation_timestep ();
34 virtual void finalize ();
36 virtual void acknowledge_grob (Grob_info);
37 virtual bool try_music (Music *);
38 PRECOMPUTED_VIRTUAL void process_music ();
39 virtual Spanner *create_ligature_spanner (); /* abstract method */
40 virtual void typeset_ligature (Spanner *ligature,
41 Array<Grob_info> primitives); /* abstract method */
42 virtual Spanner *current_ligature ();
43 SCM brew_ligature_primitive_proc;
46 TRANSLATOR_DECLARATIONS (Ligature_engraver);
49 Drul_array<Music *> events_drul_;
52 Array<Grob_info> primitives_;
54 Spanner *finished_ligature_;
55 Array<Grob_info> finished_primitives_;
57 Music *prev_start_event_;
59 // moment where ligature started.
60 Moment ligature_start_mom_;
64 void override_stencil_callback ();
65 void revert_stencil_callback ();
68 #endif // LIGATURE_ENGRAVER_HH