]> git.donarmstrong.com Git - lilypond.git/blob - lily/command-request.cc
release: 0.1.13
[lilypond.git] / lily / command-request.cc
1 /*
2   commandrequest.cc -- implement Nonmusical reqs
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "command-request.hh"
10 #include "debug.hh"
11 #include "musical-request.hh"
12
13 void
14 Command_script_req::do_print() const
15 {}
16 Command_script_req::Command_script_req(){}
17
18 IMPLEMENT_IS_TYPE_B1(Command_script_req,Command_req);
19
20
21 IMPLEMENT_IS_TYPE_B1(Cadenza_req, Timing_req);
22
23 void
24 Cadenza_req::do_print() const
25 {
26 #ifndef NPRINT
27   DOUT << on_b_;
28 #endif
29 }
30
31 bool
32 Cadenza_req::do_equal_b (Request*r) const
33 {
34   Cadenza_req*cad =  r->command()->timing ()->cadenza ();
35   
36   return cad->on_b_ == on_b_;
37 }
38
39 Cadenza_req::Cadenza_req (bool b)
40 {
41   on_b_ =b;
42 }
43 /* *************** */
44
45
46 bool
47 Bar_req::do_equal_b (Request*r) const
48 {
49   Bar_req * b = r->command()->bar ();
50   return type_str_ == b->type_str_;
51 }
52
53
54 IMPLEMENT_IS_TYPE_B1(Bar_req,Command_req);
55
56 void
57 Bar_req::do_print() const
58 {
59   DOUT << type_str_;
60 }
61
62 Bar_req::Bar_req (String s)
63 {
64   type_str_ = s;
65 }
66
67 Partial_measure_req::Partial_measure_req (Moment m)
68 {
69   duration_ =m;
70 }
71
72 bool
73 Partial_measure_req::do_equal_b (Request* r) const
74 {
75   Partial_measure_req *p = r->command()->timing ()->partial ();
76
77   return p->duration_ == duration_;
78 }
79
80
81 IMPLEMENT_IS_TYPE_B1(Timing_req,Command_req);
82
83 void
84 Timing_req::do_print() const{}
85
86
87 IMPLEMENT_IS_TYPE_B1(Command_req,Request);
88
89 void
90 Command_req::do_print() const{}
91
92 IMPLEMENT_IS_TYPE_B1(Disallow_break_req,Command_req);
93
94 void
95 Disallow_break_req::do_print() const
96 {
97 }
98 /* *************** */
99
100 IMPLEMENT_IS_TYPE_B1(Barcheck_req,Timing_req);
101
102 void
103 Barcheck_req::do_print() const{}
104
105 bool
106 Barcheck_req::do_equal_b (Request*) const
107 {
108   return true;
109 }
110 /* *************** */
111
112 IMPLEMENT_IS_TYPE_B1(Clef_change_req,Command_req);
113
114 void
115 Clef_change_req::do_print() const
116 {
117 #ifndef NPRINT
118   DOUT << clef_str_ ;
119 #endif
120 }
121
122 Clef_change_req::Clef_change_req (String s)
123 {
124   clef_str_ = s;
125 }
126
127 /* *************** */
128
129
130 IMPLEMENT_IS_TYPE_B1(Partial_measure_req,Timing_req);
131
132 void
133 Partial_measure_req::do_print() const
134 {
135   DOUT << duration_;
136 }
137
138
139 IMPLEMENT_IS_TYPE_B1(Meter_change_req,Timing_req);
140
141 void
142 Meter_change_req::do_print() const
143 {
144 #ifndef NPRINT
145   DOUT << beats_i_ << "/" << one_beat_i_;
146 #endif
147 }
148
149 bool
150 Meter_change_req::do_equal_b (Request * r) const
151 {
152   Meter_change_req * m = r->command()->timing ()->meterchange ();
153   
154   return m->beats_i_ == beats_i_ 
155     && one_beat_i_ == m->one_beat_i_;
156 }
157
158 Meter_change_req::Meter_change_req()
159 {
160   beats_i_ = 0;
161   one_beat_i_ =0;
162 }
163
164 void
165 Meter_change_req::set (int b,int o)
166 {
167   beats_i_=b;
168   one_beat_i_=o;
169 }
170
171
172 Tempo_req::Tempo_req()
173 {
174   metronome_i_ = 60;
175   dur_. durlog_i_ = 2;
176 }
177
178 void
179 Tempo_req::do_print() const
180 {
181   DOUT << dur_.str() << " = " <<metronome_i_ ;
182 }
183 IMPLEMENT_IS_TYPE_B1(Tempo_req, Timing_req);
184
185 bool
186 Tempo_req::do_equal_b (Request *r) const
187 {
188   Tempo_req *t = r->command()->timing ()->tempo ();
189   
190   return t->dur_.length()== dur_.length () && metronome_i_ == t->metronome_i_;
191 }
192
193 /* *************** */
194
195
196 IMPLEMENT_IS_TYPE_B1(Measure_grouping_req,Timing_req);
197
198 void
199 Measure_grouping_req::do_print() const
200 {
201   for (int i=0; i < elt_length_arr_.size(); i++) 
202     {
203       DOUT << beat_i_arr_[i] <<"*" << elt_length_arr_[i]<<" ";
204     }
205 }
206
207
208 bool 
209 Measure_grouping_req::do_equal_b (Request*) const
210 {
211   return false;         // todo
212 }
213
214 /* *************** */
215
216 void
217 Key_change_req::transpose (Melodic_req const & d) const
218 {
219   WARN << "don't know how to transpose a key. \n";
220   for (int i=0; i < melodic_p_arr_.size(); i++) 
221     {
222       melodic_p_arr_[i]->transpose (d);
223     }
224 }
225
226
227 IMPLEMENT_IS_TYPE_B1(Key_change_req,Command_req);
228 void
229 Key_change_req::squash_octaves()
230 {
231   for (int i=0; i < melodic_p_arr_.size(); i++) 
232     {
233       melodic_p_arr_[i]->octave_i_ = 0;
234     }
235 }
236
237 void
238 Key_change_req::do_print() const
239 {
240 #ifndef NPRINT
241   for (int i=0; i < melodic_p_arr_.size(); i++) 
242     {
243       melodic_p_arr_[i]->print();
244     }
245 #endif
246 }
247
248 Key_change_req::Key_change_req()
249 {
250   minor_b_ = false;
251   multi_octave_b_= false;
252 }
253
254 Key_change_req::Key_change_req (Key_change_req const&c)
255 {
256   for (int i=0; i < c.melodic_p_arr_.size(); i++) 
257     melodic_p_arr_.push (c.melodic_p_arr_[i]->clone()->musical ()->melodic ());
258   minor_b_ = c.minor_b_;
259   multi_octave_b_ = c.multi_octave_b_;
260 }
261
262 Key_change_req::~Key_change_req()
263 {
264   for (int i=0; i < melodic_p_arr_.size(); i++)
265     delete melodic_p_arr_[i];
266 }
267
268 int
269 Key_change_req::flats_i()
270 {
271   int flats_i = 0;
272   for (int i = 0; i < melodic_p_arr_.size(); i++) 
273     {
274       Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
275       assert (mel_l);
276       if (mel_l->accidental_i_ < 0)
277         flats_i -= mel_l->accidental_i_;
278     }
279   return flats_i;
280 }
281
282 int
283 Key_change_req::minor_b()
284 {
285   return minor_b_;      
286 }
287
288 int
289 Key_change_req::sharps_i()
290 {
291   int sharps_i = 0;
292   for (int i = 0; i < melodic_p_arr_.size(); i++) 
293     {
294       Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
295       assert (mel_l);
296       if (mel_l->accidental_i_ > 0)
297         sharps_i+= mel_l->accidental_i_;
298     }
299   return sharps_i;
300 }
301