2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 2002--2015 Juergen Reuter <reuter@ipd.uka.de>
6 LilyPond is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 LilyPond is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
20 #ifndef LIGATURE_ENGRAVER_HH
21 #define LIGATURE_ENGRAVER_HH
23 #include "engraver.hh"
26 class Ligature_engraver : public Engraver
30 void stop_translation_timestep ();
31 virtual void finalize ();
33 void acknowledge_rest (Grob_info);
34 void acknowledge_ligature_head (Grob_info);
35 void listen_ligature (Stream_event *ev);
36 void process_music ();
37 virtual Spanner *create_ligature_spanner () = 0;
38 virtual void typeset_ligature (Spanner *ligature,
39 vector<Grob_info> const &primitives) = 0;
40 virtual Spanner *current_ligature ();
41 SCM brew_ligature_primitive_proc;
44 // no TRANSLATOR_DECLARATIONS (Ligature_engraver) needed since this
46 DECLARE_TRANSLATOR_CALLBACKS (Ligature_engraver);
49 Drul_array<Stream_event *> events_drul_;
52 vector<Grob_info> primitives_;
54 Spanner *finished_ligature_;
55 vector<Grob_info> finished_primitives_;
57 Stream_event *prev_start_event_;
59 // moment where ligature started.
60 Moment ligature_start_mom_;
65 #endif // LIGATURE_ENGRAVER_HH