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