2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
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 ENGRAVER_GROUP_HH
21 #define ENGRAVER_GROUP_HH
23 #include "engraver.hh"
24 #include "translator-group.hh"
26 class Announce_grob_info : public Grob_info
30 Announce_grob_info (Grob_info gi, Direction start_end)
31 : Grob_info (gi), start_end_ (start_end)
33 Direction start_end () const { return start_end_; }
36 struct Preinit_Engraver_group
38 Drul_array<SCM> acknowledge_hash_table_drul_;
39 Preinit_Engraver_group ();
42 class Engraver_group : Preinit_Engraver_group, public Translator_group
45 vector<Announce_grob_info> announce_infos_;
49 DECLARE_CLASSNAME (Engraver_group);
51 virtual void derived_mark () const;
53 virtual void connect_to_context (Context *c);
54 virtual void disconnect_from_context ();
55 virtual void announce_grob (Grob_info, Direction start_end,
56 Context *reroute_context = 0);
57 bool pending_grobs () const;
59 virtual void acknowledge_grobs ();
62 typedef void (Engraver:: *Engraver_method) (void);
64 void engraver_each (SCM list, Engraver_method method);
66 #endif /* ENGRAVERGROUP_HH */