]> git.donarmstrong.com Git - lilypond.git/blob - lily/engraver.cc
* lily/global-context-scheme.cc: Separated ly:run-translator into
[lilypond.git] / lily / engraver.cc
1 /*
2   engraver.cc -- implement Engraver
3
4   Sourcefile of GNU LilyPond music type setter
5
6   (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9 #include "engraver.hh"
10
11 #include "music.hh"
12 #include "score-engraver.hh"
13 #include "warn.hh"
14 #include "spanner.hh"
15 #include "item.hh"
16 #include "context.hh"
17 #include "lilypond-key.hh"
18
19 Engraver_group *
20 Engraver::get_daddy_engraver () const
21 {
22   return dynamic_cast<Engraver_group *> (get_daddy_translator ());
23 }
24
25 void
26 Engraver::announce_grob (Grob_info inf)
27 {
28   get_daddy_engraver ()->announce_grob (inf);
29 }
30
31 void
32 Engraver::announce_end_grob (Grob_info inf)
33 {
34   get_daddy_engraver ()->announce_grob (inf);
35 }
36
37 /*
38   CAUSE is the object (typically a Music object)  that
39   was the reason for making E.
40 */
41 void
42 Engraver::announce_grob (Grob *e, SCM cause)
43 {
44   if (unsmob_music (cause) || unsmob_grob (cause))
45     e->set_property ("cause", cause);
46
47   Grob_info i (this, e);
48
49   Engraver_group *g = get_daddy_engraver ();
50   if (g)
51     g->announce_grob (i);
52 }
53
54
55 /*
56   CAUSE is the object (typically a Music object)  that
57   was the reason for making E.
58 */
59 void
60 Engraver::announce_end_grob (Grob *e, SCM cause)
61 {
62   if (unsmob_music (cause) || unsmob_grob (cause))
63     e->set_property ("cause", cause);
64
65   Grob_info i (this, e);
66
67   i.start_end_ = STOP;
68   Engraver_group *g = get_daddy_engraver ();
69   if (g)
70     g->announce_grob (i);
71 }
72
73
74 Engraver::Engraver ()
75 {
76 }
77
78 #include "translator.icc"
79
80 ADD_TRANSLATOR (Engraver,
81                 "Base class for engravers. Does nothing, so it is not used.",
82                 "",
83                 "",
84                 "",
85                 "");
86