]> git.donarmstrong.com Git - lilypond.git/blob - lily/command-request.cc
a9539e28f7a6db3e933494f72bf38c43deb5af48
[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_IS_TYPE_B1(Disallow_break_req,Command_req);
74 IMPLEMENT_STATIC_NAME(Disallow_break_req);
75 void
76 Disallow_break_req::do_print()const
77 {
78 }
79 /* *************** */
80 IMPLEMENT_STATIC_NAME(Barcheck_req);
81 IMPLEMENT_IS_TYPE_B1(Barcheck_req,Timing_req);
82
83 void
84 Barcheck_req::do_print() const{}
85
86 /* *************** */
87 IMPLEMENT_STATIC_NAME(Clef_change_req);
88 IMPLEMENT_IS_TYPE_B1(Clef_change_req,Command_req);
89
90 void
91 Clef_change_req::do_print() const
92 {
93 #ifndef NPRINT
94     mtor << clef_str_ ;
95 #endif
96 }
97
98 Clef_change_req::Clef_change_req(String s)
99 {
100     clef_str_ = s;
101 }
102 /* *************** */
103 IMPLEMENT_STATIC_NAME(Group_feature_req);
104 IMPLEMENT_IS_TYPE_B1(Group_feature_req,Command_req);
105
106 void
107 Group_feature_req::do_print() const
108 {
109 #ifndef NPRINT
110     mtor << type_str_ << "=" << value_str_;
111 #endif
112 }
113
114 /* *************** */
115
116 IMPLEMENT_STATIC_NAME(Partial_measure_req);
117 IMPLEMENT_IS_TYPE_B1(Partial_measure_req,Timing_req);
118
119 void
120 Partial_measure_req::do_print() const
121 {
122     mtor << duration_;
123 }
124
125 IMPLEMENT_STATIC_NAME(Meter_change_req);
126 IMPLEMENT_IS_TYPE_B1(Meter_change_req,Timing_req);
127
128 void
129 Meter_change_req::do_print() const
130 {
131     mtor << beats_i_ << "/" << one_beat_i_;
132 }
133
134 int
135 Meter_change_req::compare(Meter_change_req const &m)
136 {
137     return m.beats_i_ == beats_i_ && one_beat_i_ == m.one_beat_i_;
138 }
139
140 Meter_change_req::Meter_change_req()
141 {
142     beats_i_ = 0;
143     one_beat_i_ =0;
144 }
145
146 void
147 Meter_change_req::set(int b,int o)
148 {
149     beats_i_=b;
150     one_beat_i_=o;
151 }
152
153 /* *************** */
154
155 IMPLEMENT_STATIC_NAME(Measure_grouping_req);
156 IMPLEMENT_IS_TYPE_B1(Measure_grouping_req,Timing_req);
157
158 void
159 Measure_grouping_req::do_print() const
160 {
161     for (int i=0; i < elt_length_arr_.size(); i++) {
162         mtor << beat_i_arr_[i] <<"*" << elt_length_arr_[i]<<" ";
163     }
164 }
165 /* *************** */
166
167 void
168 Key_change_req::transpose(Melodic_req const & d)const
169 {
170     WARN << "don't know how to transpose a key. \n";
171     for (int i=0; i < melodic_p_arr_.size(); i++) {
172         melodic_p_arr_[i]->transpose(d);
173     }
174 }
175
176 IMPLEMENT_STATIC_NAME(Key_change_req);
177 IMPLEMENT_IS_TYPE_B1(Key_change_req,Command_req);
178 void
179 Key_change_req::squash_octaves()
180 {
181     for (int i=0; i < melodic_p_arr_.size(); i++) {
182         melodic_p_arr_[i]->octave_i_ = 0;
183     }
184 }
185
186 void
187 Key_change_req::do_print() const
188 {
189     for (int i=0; i < melodic_p_arr_.size(); i++) {
190         melodic_p_arr_[i]->print();
191     }
192 }
193
194 Key_change_req::Key_change_req()
195 {
196         minor_b_ = false;
197         multi_octave_b_= false;
198 }
199
200 Key_change_req::Key_change_req(Key_change_req const&c)
201 {
202         for (int i=0; i < c.melodic_p_arr_.size(); i++) 
203                 melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->musical()->melodic() );
204         minor_b_ = c.minor_b_;
205         multi_octave_b_ = c.multi_octave_b_;
206 }
207
208 Key_change_req::~Key_change_req()
209 {
210         for (int i=0; i < melodic_p_arr_.size(); i++)
211                 delete melodic_p_arr_[i];
212 }
213
214 int
215 Key_change_req::flats_i()
216 {
217         int flats_i = 0;
218         for ( int i = 0; i < melodic_p_arr_.size(); i++ ) {
219                 Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
220                 assert( mel_l );
221                 if ( mel_l->accidental_i_ < 0 )
222                         flats_i -= mel_l->accidental_i_;
223         }
224         return flats_i;
225 }
226
227 int
228 Key_change_req::minor_b()
229 {
230         return minor_b_;        
231 }
232
233 int
234 Key_change_req::sharps_i()
235 {
236         int sharps_i = 0;
237         for ( int i = 0; i < melodic_p_arr_.size(); i++ ) {
238                 Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
239                 assert( mel_l );
240                 if ( mel_l->accidental_i_ > 0 )
241                         sharps_i+= mel_l->accidental_i_;
242         }
243         return sharps_i;
244 }
245