]> git.donarmstrong.com Git - lilypond.git/blob - lily/translator.cc
release: 1.3.93
[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
92
93
94
95 void
96 Translator::creation_processing ()
97 {
98   if (status_ >= CREATION_INITED)
99     return ;
100   
101   do_creation_processing ();
102   status_ = CREATION_INITED;
103 }
104
105 void
106 Translator::post_move_processing ()
107 {
108   if (status_ >= MOVE_INITED)
109     return;
110
111   creation_processing ();
112   do_post_move_processing ();
113   status_ = MOVE_INITED;
114 }
115
116 void
117 Translator::removal_processing ()
118 {
119   if (status_ == ORPHAN)
120     return;
121   creation_processing ();
122   do_removal_processing ();
123   // elegancy ...
124   // status_ = ORPHAN;
125 }
126
127
128 bool
129 Translator::try_music (Music * r)
130 {
131   if (status_ < MOVE_INITED)
132     post_move_processing ();
133
134   return do_try_music (r);
135 }
136
137 void
138 Translator::process_music ()
139 {
140   if (status_ < PROCESSED_REQS)
141     post_move_processing ();
142   else if (status_ >= PROCESSED_REQS)
143     return; 
144   
145   status_ = PROCESSED_REQS;
146   do_process_music ();
147 }
148
149 void
150 Translator::pre_move_processing ()
151 {
152   do_pre_move_processing ();
153   status_ = CREATION_INITED;
154 }
155
156
157
158 Music_output_def *
159 Translator::output_def_l () const
160 {
161   return output_def_l_;
162 }
163
164 SCM
165 Translator::get_property (char const * id) const
166 {
167   return daddy_trans_l_->get_property (ly_symbol2scm (id));
168 }
169
170 SCM
171 Translator::get_property (SCM sym) const
172 {
173   return daddy_trans_l_->get_property (sym);
174 }
175
176 void
177 Translator:: do_pre_move_processing ()
178 {
179 }
180
181 void
182 Translator::do_post_move_processing ()
183 {
184 }
185
186 void
187 Translator::do_process_music ()
188 {
189 }
190
191 void
192 Translator::do_creation_processing ()
193 {
194 }
195
196 void
197 Translator::do_removal_processing ()
198 {
199 }
200
201
202 /*
203
204   SMOBS
205
206 */
207 SCM
208 Translator::mark_smob (SCM sm)
209 {
210   Translator * me = (Translator*) SCM_CELL_WORD_1(sm);
211   scm_gc_mark (me->simple_trans_list_);
212   scm_gc_mark (me->trans_group_list_);
213   scm_gc_mark (me->definition_);  
214   scm_gc_mark (me->properties_scm_);  
215
216   return me->properties_scm_;
217 }
218
219
220 int
221 Translator::print_smob (SCM s, SCM port, scm_print_state *)
222 {
223   Translator *sc = (Translator *) gh_cdr (s);
224      
225   scm_puts ("#<Translator ", port);
226   scm_puts ((char *)sc->name (), port);
227   scm_display (sc->simple_trans_list_, port);
228   /*
229     don't try to print properties, that is too much hassle.
230    */
231   scm_puts (" >", port);
232
233   
234   
235   return 1;
236 }
237
238
239
240 IMPLEMENT_UNSMOB(Translator, translator);
241 IMPLEMENT_SMOBS(Translator);
242 IMPLEMENT_DEFAULT_EQUAL_P(Translator);