]> git.donarmstrong.com Git - lilypond.git/blob - lily/command-request.cc
release: 0.0.68pre
[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 IMPLEMENT_STATIC_NAME(Command_script_req);
17 IMPLEMENT_IS_TYPE_B1(Command_script_req,Command_req);
18
19 IMPLEMENT_STATIC_NAME(Cadenza_req);
20 IMPLEMENT_IS_TYPE_B1(Cadenza_req, Timing_req);
21
22 void
23 Cadenza_req::do_print()const
24 {
25     mtor << on_b_;
26 }
27
28 Cadenza_req::Cadenza_req(bool b)
29 {
30     on_b_ =b;
31 }
32 /* *************** */
33
34
35 int
36 Bar_req::compare(Bar_req const &c1)const
37 {
38     return type_str_ == c1.type_str_;
39 }
40
41 IMPLEMENT_STATIC_NAME(Bar_req);
42 IMPLEMENT_IS_TYPE_B1(Bar_req,Command_req);
43
44 void
45 Bar_req::do_print() const
46 {
47     mtor << type_str_;
48 }
49
50 Bar_req::Bar_req(String s)
51 {
52     type_str_ = s;
53 }
54
55 Partial_measure_req::Partial_measure_req(Moment m)
56 {
57     duration_ =m;
58 }
59 /* *************** */
60
61 IMPLEMENT_STATIC_NAME(Timing_req);
62 IMPLEMENT_IS_TYPE_B1(Timing_req,Command_req);
63
64 void
65 Timing_req::do_print()const{}
66
67 IMPLEMENT_STATIC_NAME(Command_req);
68 IMPLEMENT_IS_TYPE_B1(Command_req,Request);
69
70 void
71 Command_req::do_print()const{}
72 /* *************** */
73 IMPLEMENT_STATIC_NAME(Barcheck_req);
74 IMPLEMENT_IS_TYPE_B1(Barcheck_req,Timing_req);
75
76 void
77 Barcheck_req::do_print() const{}
78
79 /* *************** */
80 IMPLEMENT_STATIC_NAME(Clef_change_req);
81 IMPLEMENT_IS_TYPE_B1(Clef_change_req,Command_req);
82
83 void
84 Clef_change_req::do_print() const
85 {
86 #ifndef NPRINT
87     mtor << clef_str_ ;
88 #endif
89 }
90
91 Clef_change_req::Clef_change_req(String s)
92 {
93     clef_str_ = s;
94 }
95 /* *************** */
96 IMPLEMENT_STATIC_NAME(Group_feature_req);
97 IMPLEMENT_IS_TYPE_B1(Group_feature_req,Command_req);
98
99 void
100 Group_feature_req::do_print() const
101 {
102 #ifndef NPRINT
103     mtor << type_str_ << "=" << value_str_;
104 #endif
105 }
106
107 /* *************** */
108
109 IMPLEMENT_STATIC_NAME(Partial_measure_req);
110 IMPLEMENT_IS_TYPE_B1(Partial_measure_req,Timing_req);
111
112 void
113 Partial_measure_req::do_print() const
114 {
115     mtor << duration_;
116 }
117
118 IMPLEMENT_STATIC_NAME(Meter_change_req);
119 IMPLEMENT_IS_TYPE_B1(Meter_change_req,Timing_req);
120
121 void
122 Meter_change_req::do_print() const
123 {
124     mtor << beats_i_ << "/" << one_beat_i_;
125 }
126
127 int
128 Meter_change_req::compare(Meter_change_req const &m)
129 {
130     return m.beats_i_ == beats_i_ && one_beat_i_ == m.one_beat_i_;
131 }
132
133 Meter_change_req::Meter_change_req()
134 {
135     beats_i_ = 0;
136     one_beat_i_ =0;
137 }
138
139 void
140 Meter_change_req::set(int b,int o)
141 {
142     beats_i_=b;
143     one_beat_i_=o;
144 }
145
146 /* *************** */
147
148 IMPLEMENT_STATIC_NAME(Measure_grouping_req);
149 IMPLEMENT_IS_TYPE_B1(Measure_grouping_req,Timing_req);
150
151 void
152 Measure_grouping_req::do_print() const
153 {
154     for (int i=0; i < elt_length_arr_.size(); i++) {
155         mtor << beat_i_arr_[i] <<"*" << elt_length_arr_[i]<<" ";
156     }
157 }
158 /* *************** */
159
160 void
161 Key_change_req::transpose(Melodic_req const & d)const
162 {
163     WARN << "don't know how to transpose a key. \n";
164     for (int i=0; i < melodic_p_arr_.size(); i++) {
165         melodic_p_arr_[i]->transpose(d);
166     }
167 }
168
169 IMPLEMENT_STATIC_NAME(Key_change_req);
170 IMPLEMENT_IS_TYPE_B1(Key_change_req,Command_req);
171 void
172 Key_change_req::squash_octaves()
173 {
174     for (int i=0; i < melodic_p_arr_.size(); i++) {
175         melodic_p_arr_[i]->octave_i_ = 0;
176     }
177 }
178
179 void
180 Key_change_req::do_print() const
181 {
182     for (int i=0; i < melodic_p_arr_.size(); i++) {
183         melodic_p_arr_[i]->print();
184     }
185 }
186
187 Key_change_req::Key_change_req()
188 {
189         minor_b_ = false;
190         multi_octave_b_= false;
191 }
192
193 Key_change_req::Key_change_req(Key_change_req const&c)
194 {
195         for (int i=0; i < c.melodic_p_arr_.size(); i++) 
196                 melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->musical()->melodic() );
197         minor_b_ = c.minor_b_;
198         multi_octave_b_ = c.multi_octave_b_;
199 }
200
201 Key_change_req::~Key_change_req()
202 {
203         for (int i=0; i < melodic_p_arr_.size(); i++)
204                 delete melodic_p_arr_[i];
205 }
206
207 int
208 Key_change_req::flats_i()
209 {
210         int flats_i = 0;
211         for ( int i = 0; i < melodic_p_arr_.size(); i++ ) {
212                 Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
213                 assert( mel_l );
214                 if ( mel_l->accidental_i_ < 0 )
215                         flats_i -= mel_l->accidental_i_;
216         }
217         return flats_i;
218 }
219
220 int
221 Key_change_req::minor_b()
222 {
223         return minor_b_;        
224 }
225
226 int
227 Key_change_req::sharps_i()
228 {
229         int sharps_i = 0;
230         for ( int i = 0; i < melodic_p_arr_.size(); i++ ) {
231                 Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
232                 assert( mel_l );
233                 if ( mel_l->accidental_i_ > 0 )
234                         sharps_i+= mel_l->accidental_i_;
235         }
236         return sharps_i;
237 }
238