]> git.donarmstrong.com Git - lilypond.git/blob - lily/translator.cc
release: 1.3.82
[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--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9
10 #include "translator.hh"
11 #include "debug.hh"
12 #include "translator-group.hh"
13
14 #include "moment.hh"
15 #include "ly-smobs.icc"
16
17 char const*
18 Translator::name() const
19 {
20   return classname(this);
21 }
22
23 Translator::~Translator ()
24 {
25 }
26
27 void
28 Translator::init ()
29 {
30   status_ = ORPHAN;
31   simple_trans_list_ = SCM_EOL;
32   trans_group_list_ = SCM_EOL;
33   properties_scm_ = SCM_EOL;
34   accepts_name_list_ = SCM_EOL;   
35   consists_name_list_ = SCM_EOL;
36   end_consists_name_list_ = SCM_EOL;
37   property_pushes_ = SCM_EOL;
38   daddy_trans_l_ =0;
39 }
40
41 Translator::Translator ()
42 {
43   init ();
44   output_def_l_ = 0;
45   smobify_self ();
46
47 }
48
49 Translator::Translator (Translator const &s)
50   : Input (s)
51 {
52   init ();
53   
54   consists_name_list_ = scm_list_copy (s.consists_name_list_);
55   end_consists_name_list_ = scm_list_copy (s.end_consists_name_list_);
56   accepts_name_list_ = scm_list_copy (s.accepts_name_list_);
57   property_pushes_ = scm_list_copy (s.property_pushes_);
58   
59   output_def_l_ = s.output_def_l_;
60   type_str_ = s.type_str_;
61
62   smobify_self ();
63 }
64
65 bool
66 Translator::is_alias_b (String s) const
67 {
68   return s == type_str_;
69 }
70
71 bool
72 Translator::do_try_music (Music *)
73 {
74   return false;
75 }
76                             
77
78 Moment
79 Translator::now_mom () const
80 {
81   return daddy_trans_l_->now_mom ();
82 }
83
84
85 void
86 Translator::add_processing ()
87 {
88   if (status_ > ORPHAN)
89     return;
90   
91   do_add_processing ();
92   status_ = VIRGIN;
93 }
94
95 void
96 Translator::do_add_processing ()
97 {
98 }
99
100 void
101 Translator::print () const
102 {
103 #ifndef NPRINT
104   DEBUG_OUT << classname (this) << " {";
105   if (classname (this) != type_str_)
106     DEBUG_OUT << "type = " << type_str_;
107   do_print ();
108   DEBUG_OUT << "}\n";
109 #endif
110 }
111
112 void
113 Translator::do_print () const
114 {
115 }
116
117
118
119
120 void
121 Translator::creation_processing ()
122 {
123   if (status_ >= CREATION_INITED)
124     return ;
125   
126   do_creation_processing ();
127   status_ = CREATION_INITED;
128 }
129
130 void
131 Translator::post_move_processing ()
132 {
133   if (status_ >= MOVE_INITED)
134     return;
135
136   creation_processing ();
137   do_post_move_processing ();
138   status_ = MOVE_INITED;
139 }
140
141 void
142 Translator::removal_processing ()
143 {
144   if (status_ == ORPHAN)
145     return;
146   creation_processing ();
147   do_removal_processing ();
148   // elegancy ...
149   // status_ = ORPHAN;
150 }
151
152
153 bool
154 Translator::try_music (Music * r)
155 {
156   if (status_ < MOVE_INITED)
157     post_move_processing ();
158
159   return do_try_music (r);
160 }
161
162 void
163 Translator::process_music ()
164 {
165   if (status_ < PROCESSED_REQS)
166     post_move_processing ();
167   else if (status_ >= PROCESSED_REQS)
168     return; 
169   
170   status_ = PROCESSED_REQS;
171   do_process_music ();
172 }
173
174 void
175 Translator::pre_move_processing ()
176 {
177   do_pre_move_processing ();
178   status_ = CREATION_INITED;
179 }
180
181
182
183 Music_output_def *
184 Translator::output_def_l () const
185 {
186   return output_def_l_;
187 }
188
189 SCM
190 Translator::get_property (char const * id) const
191 {
192   return daddy_trans_l_->get_property (ly_symbol2scm (id));
193 }
194
195 SCM
196 Translator::get_property (SCM sym) const
197 {
198   return daddy_trans_l_->get_property (sym);
199 }
200
201 void
202 Translator:: do_pre_move_processing ()
203 {
204 }
205
206 void
207 Translator::do_post_move_processing ()
208 {
209 }
210
211 void
212 Translator::do_process_music ()
213 {
214 }
215
216 void
217 Translator::do_creation_processing ()
218 {
219 }
220
221 void
222 Translator::do_removal_processing ()
223 {
224 }
225
226
227 /*
228
229   SMOBS
230
231 */
232 SCM
233 Translator::mark_smob (SCM sm)
234 {
235   Translator * me = (Translator*) SCM_CELL_WORD_1(sm);
236   scm_gc_mark (me->consists_name_list_);
237   scm_gc_mark (me->accepts_name_list_);
238   scm_gc_mark (me->end_consists_name_list_);
239   scm_gc_mark (me->simple_trans_list_);
240   scm_gc_mark (me->trans_group_list_);
241   scm_gc_mark (me->property_pushes_);
242   return me->properties_scm_;
243 }
244
245
246 int
247 Translator::print_smob (SCM s, SCM port, scm_print_state *)
248 {
249   Translator *sc = (Translator *) gh_cdr (s);
250      
251   scm_puts ("#<Translator ", port);
252   scm_puts ((char *)sc->name (), port);
253   scm_display (sc->simple_trans_list_, port);
254   /*
255     don't try to print properties, that is too much hassle.
256    */
257   scm_puts (" >", port);
258
259   
260   
261   return 1;
262 }
263
264
265
266 IMPLEMENT_UNSMOB(Translator, translator);
267 IMPLEMENT_SMOBS(Translator);
268 IMPLEMENT_DEFAULT_EQUAL_P(Translator);