]> git.donarmstrong.com Git - lilypond.git/blob - lily/translator.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / translator.cc
1 /*
2   translator.cc -- implement Translator
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9 #include "translator.hh"
10
11 #include "warn.hh"
12 #include "translator-group.hh"
13 #include "context-def.hh"
14 #include "global-context.hh"
15
16 #include "translator.icc"
17 #include "ly-smobs.icc"
18
19 Translator::~Translator ()
20 {
21 }
22
23 void
24 Translator::init ()
25 {
26   must_be_last_ = false;
27   self_scm_ = SCM_EOL;
28   daddy_context_ = 0;
29   smobify_self ();
30 }
31
32 void
33 Translator::process_music ()
34 {
35 }
36
37 void
38 Translator::process_acknowledged ()
39 {
40 }
41
42 Translator::Translator ()
43 {
44   init ();
45 }
46
47 Translator::Translator (Translator const &src)
48 {
49   init ();
50   must_be_last_ = src.must_be_last_;
51 }
52
53 bool
54 Translator::try_music (Music *)
55 {
56   return false;
57 }
58
59 Moment
60 Translator::now_mom () const
61 {
62   return daddy_context_->now_mom ();
63 }
64
65 Output_def *
66 Translator::get_output_def () const
67 {
68   return daddy_context_->get_output_def ();
69 }
70
71 Translator_group *
72 Translator::get_daddy_translator () const
73 {
74   return daddy_context_->implementation ();
75 }
76
77 SCM
78 Translator::internal_get_property (SCM sym) const
79 {
80   return daddy_context_->internal_get_property (sym);
81 }
82
83 void
84 Translator::stop_translation_timestep ()
85 {
86 }
87
88 /*
89   this function has 2 properties
90
91   - It is called before try_music ()
92
93   - It is called before any user information enters the translators.
94   (i.e. any \property or event is not processed yet.)
95 */
96 void
97 Translator::start_translation_timestep ()
98 {
99 }
100
101 void
102 Translator::initialize ()
103 {
104 }
105
106 void
107 Translator::finalize ()
108 {
109 }
110
111 /*
112   SMOBS
113 */
114 SCM
115 Translator::mark_smob (SCM sm)
116 {
117   Translator *me = (Translator *) SCM_CELL_WORD_1 (sm);
118   me->derived_mark ();
119   return SCM_EOL;
120 }
121
122 Global_context *
123 Translator::get_global_context () const
124 {
125   return daddy_context_->get_global_context ();
126 }
127
128 Score_context *
129 Translator::get_score_context () const
130 {
131   return daddy_context_->get_score_context ();
132 }
133
134 IMPLEMENT_SMOBS (Translator);
135 IMPLEMENT_DEFAULT_EQUAL_P (Translator);
136 IMPLEMENT_TYPE_P (Translator, "ly:translator?");
137
138 bool
139 Translator::must_be_last () const
140 {
141   return must_be_last_;
142 }
143
144 void
145 Translator::derived_mark () const
146 {
147 }
148
149 int
150 Translator::print_smob (SCM s, SCM port, scm_print_state *)
151 {
152   Translator *me = (Translator *) SCM_CELL_WORD_1 (s);
153   scm_puts ("#<Translator ", port);
154   scm_puts (me->class_name (), port);
155   scm_puts (" >", port);
156   return 1;
157 }
158
159 void
160 add_acknowledger (Engraver_void_function_engraver_grob_info ptr,
161                   char const *func_name,
162                   vector<Acknowledge_information> *ack_array)
163 {
164   Acknowledge_information inf;
165   inf.function_ = ptr;
166
167   string interface_name (func_name);
168
169   interface_name = replace_all (interface_name, '_', '-');
170   interface_name += "-interface";
171
172   inf.symbol_ = scm_gc_protect_object (ly_symbol2scm (interface_name.c_str ()));
173   ack_array->push_back (inf);
174 }
175
176 Engraver_void_function_engraver_grob_info
177 generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_array)
178 {
179   for (vsize i = 0; i < ack_array->size (); i++)
180     {
181       if (ack_array->at (i).symbol_ == sym)
182         return ack_array->at (i).function_;
183     }
184   return 0;
185 }
186
187 ADD_TRANSLATOR (Translator,
188                 "Base class. Unused",
189                 "",
190                 "",
191                 "",
192                 "");