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