]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/engraver.hh
81713bb4e516070476e8eb7d2dafbe06ae99b3ea
[lilypond.git] / lily / include / engraver.hh
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 1996--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
5
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.
10
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.
15
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/>.
18 */
19
20 #ifndef ENGRAVER_HH
21 #define ENGRAVER_HH
22
23 #include "grob-info.hh"
24 #include "translator.hh"
25
26 /**
27    a struct which processes events, and creates the #Grob#s.
28    It may use derived classes.
29 */
30 class Engraver : public Translator
31 {
32   Grob *internal_make_grob (SCM sym, SCM cause, char const *name,
33                             char const *f, int l, char const *fun);
34   friend SCM ly_engraver_make_grob (SCM, SCM, SCM);
35   friend class Engraver_group;
36 protected:
37   /*
38     take note of item/spanner
39     put item in spanner. Adjust local key; etc.
40
41     Default: ignore the info
42   */
43   virtual void acknowledge_grob (Grob_info) {}
44   virtual void announce_grob (Grob_info);
45   virtual void announce_end_grob (Grob_info);
46   Engraver_group *get_daddy_engraver () const;
47
48 public:
49   /**
50      Announce element. Default: pass on to daddy. Utility
51   */
52   void announce_grob (Grob *, SCM cause);
53   void announce_end_grob (Grob *, SCM cause);
54
55   Grob_info make_grob_info (Grob *, SCM cause);
56
57   Item *internal_make_item (SCM sym, SCM cause, char const *name,
58                             char const *f, int l, char const *fun);
59   Spanner *internal_make_spanner (SCM sym, SCM cause, char const *name,
60                                   char const *f, int l, char const *fun);
61   Paper_column *internal_make_column (SCM sym, char const *name,
62                                       char const *f, int l, char const *fun);
63
64   /**
65      override other ctor
66   */
67   TRANSLATOR_DECLARATIONS (Engraver);
68 };
69
70 #define make_item(x, cause) internal_make_item (ly_symbol2scm (x), cause, x, __FILE__, __LINE__, __FUNCTION__)
71 #define make_spanner(x, cause) internal_make_spanner (ly_symbol2scm (x), cause, x, __FILE__, __LINE__, __FUNCTION__)
72 #define make_paper_column(x) internal_make_column (ly_symbol2scm (x), x, __FILE__, __LINE__, __FUNCTION__)
73
74 Engraver *unsmob_engraver (SCM eng);
75 bool ly_is_grob_cause (SCM obj);
76
77 #endif // ENGRAVER_HH