X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fligature-engraver.hh;h=f74cf6b6cedfcc2c7ac42a341f45ff442468b6f3;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=11bb055d883227167b00875f18a332c3025508d8;hpb=a1aebf5d6fccf7ab9a7106178e017c370484d40f;p=lilypond.git diff --git a/lily/include/ligature-engraver.hh b/lily/include/ligature-engraver.hh index 11bb055d88..f74cf6b6ce 100644 --- a/lily/include/ligature-engraver.hh +++ b/lily/include/ligature-engraver.hh @@ -3,66 +3,51 @@ source file of the GNU LilyPond music typesetter - (c) 2002--2005 Juergen Reuter + (c) 2002--2008 Juergen Reuter */ + #ifndef LIGATURE_ENGRAVER_HH #define LIGATURE_ENGRAVER_HH #include "engraver.hh" #include "moment.hh" - -/* - * FIXME: Spanner *create_ligature_spanner () and virtual void - * typeset_ligature (...) are abstract methods, such that we would - * like to declare them abstract: - * - * virtual Spanner *create_ligature_spanner () = 0; - * virtual void typeset_ligature (...) = 0; - * - * Unfortunately, clone_const_helper() (as expanded from the - * TRANSLATOR_DECLARATIONS macro) requires this class to be - * instantiatable, such that it may not have any abstract virtual - * functions. As a workaround, the actually abstract methods are - * implemented, but produce a programming_error whenever called. --jr - */ - class Ligature_engraver : public Engraver { protected: - PRECOMPUTED_VIRTUAL void stop_translation_timestep (); + Ligature_engraver (); + void stop_translation_timestep (); virtual void finalize (); - virtual void acknowledge_grob (Grob_info); - virtual bool try_music (Music *); - PRECOMPUTED_VIRTUAL void process_music (); - virtual Spanner *create_ligature_spanner (); /* abstract method */ + DECLARE_ACKNOWLEDGER (rest); + DECLARE_ACKNOWLEDGER (note_head); + virtual void listen_ligature (Stream_event *ev); + void process_music (); + virtual Spanner *create_ligature_spanner () = 0; virtual void typeset_ligature (Spanner *ligature, - Array primitives); /* abstract method */ + vector primitives) = 0; virtual Spanner *current_ligature (); SCM brew_ligature_primitive_proc; public: - TRANSLATOR_DECLARATIONS (Ligature_engraver); + // no TRANSLATOR_DECLARATIONS (Ligature_engraver) needed since this + // class is abstract private: - Drul_array events_drul_; + Drul_array events_drul_; Spanner *ligature_; - Array primitives_; + vector primitives_; Spanner *finished_ligature_; - Array finished_primitives_; + vector finished_primitives_; - Music *prev_start_event_; + Stream_event *prev_start_event_; // moment where ligature started. Moment ligature_start_mom_; Grob *last_bound_; - - void override_stencil_callback (); - void revert_stencil_callback (); }; #endif // LIGATURE_ENGRAVER_HH