9 #include "musicalrequest.hh"
10 #include "commandrequest.hh"
12 #include "notename.hh"
13 #include "identparent.hh"
16 #include "parseconstruct.hh"
17 #include "inputmusic.hh"
19 int default_duration = 4, default_dots=0, default_octave=0;
20 int default_plet_type = 1, default_plet_dur = 1;
21 String textstyle="roman"; // in lexer?
23 bool last_duration_mode = false;
26 set_duration_mode(String s)
29 last_duration_mode = (s== "LAST");
35 if (last_duration_mode)
39 /* triplet is '2/3' */
41 set_plet(int num,int den)
43 assert(num >0&& den>0);
44 default_plet_dur = num;
45 default_plet_type = den;
49 get_text(String s) return t;
53 t->style_str_ = textstyle;
54 t->defined_ch_c_l_ = defined_ch_c_l;
59 set_text_style(String s)
65 parse_octave (const char *a, int &j, int &oct)
80 parse_pitch( const char *a, Melodic_req* mel_l)
85 mel_l->octave_i_ = default_octave;
86 parse_octave(a,j,mel_l->octave_i_);
89 mel_l->forceacc_b_ = false;
92 mel_l->forceacc_b_ = true;
98 get_note_element(String pitch, int * notename, int * duration )
100 Voice_element*v = new Voice_element;
101 v->defined_ch_c_l_ = defined_ch_c_l;
104 int dur = duration[0];
105 int dots = duration[1];
108 Stem_req * stem_req_p = new Stem_req(dur,dots);
109 stem_req_p->plet_factor = Moment(default_plet_dur, default_plet_type);
110 stem_req_p->defined_ch_c_l_ = defined_ch_c_l;
114 if ( !defined_ch_c_l )
115 defined_ch_c_l = lexer->here_ch_c_l();
117 Note_req * rq = new Note_req;
118 rq->notename_i_ =notename[0];
119 rq->accidental_i_ = notename[1];
120 parse_pitch(pitch, rq);
121 rq->octave_i_ += notename[2];
125 rq->plet_factor = Moment(default_plet_dur, default_plet_type);
126 rq->defined_ch_c_l_ = defined_ch_c_l;
134 get_word_element(Text_def* tdef_p, int* duration)
136 Voice_element* velt_p = new Voice_element;
137 velt_p->defined_ch_c_l_ = defined_ch_c_l;
139 int dur = duration[0];
140 int dots=duration[1];
142 tdef_p->defined_ch_c_l_ = defined_ch_c_l;
144 Lyric_req* lreq_p = new Lyric_req(tdef_p);
146 lreq_p->balltype = dur;
148 lreq_p->plet_factor = Moment(default_plet_dur, default_plet_type);
150 lreq_p->defined_ch_c_l_ = defined_ch_c_l;
158 get_rest_element(String, int * duration )
160 Voice_element* velt_p = new Voice_element;
161 velt_p->defined_ch_c_l_ = defined_ch_c_l;
163 Rest_req * rest_req_p = new Rest_req;
164 rest_req_p->plet_factor = Moment(default_plet_dur, default_plet_type);
165 rest_req_p->balltype = duration[0];
166 rest_req_p->dots = duration[1];
168 rest_req_p->defined_ch_c_l_ = defined_ch_c_l;
170 velt_p->add(rest_req_p);
176 get_default_duration(int *p)
178 *p++ = default_duration;
183 set_default_duration(int *p)
185 default_duration = *p++;
191 set_default_octave(String d)
195 parse_octave(d, i, default_octave);
199 get_plet_request( char c, int dur_i, int type_i )
201 Plet_req* plet_req_p = new Plet_req;
202 plet_req_p->dur_i_ = dur_i;
203 plet_req_p->type_i_ = type_i;
204 plet_req_p->type_c_ = c;
214 req_p = new Barcheck_req;
220 Beam_req*b = new Beam_req;
221 if (default_plet_type != 1)
222 b->nplet = default_plet_type;
230 req_p = new Slur_req;
240 req_p->span()->spantype = Span_req::START;
244 req_p->span()->spantype = Span_req::STOP;
251 req_p->defined_ch_c_l_ = req_defined_ch_c_l;
256 add_requests(Voice_element *v, Array<Request*> &req)
258 for (int i = 0; i < req.size(); i++) {
265 get_scriptdef(char c)
269 case '^' : s = "marcato";
271 case '+' : s = "stopped";
273 case '-' : s = "tenuto";
275 case '|': s = "staccatissimo";
279 case '>' : s = "accent";
283 case '.' : s = "staccato";
286 return lexer->lookup_identifier(s)->script(1);
290 get_script_req(int d , Script_def*def)
292 Script_req* script_req_p = new Script_req(d, def);
297 get_text_req(int d , Text_def*def)
299 Text_req* text_req_p = new Text_req(d, def);
304 get_stemdir_req(int d)
306 Group_feature_req * gfreq_p = new Group_feature_req;
307 gfreq_p->stemdir_i_ =d;
312 get_grouping_req(Array<int> i_arr)
314 Measure_grouping_req * mr_p = new Measure_grouping_req;
315 for (int i=0; i <i_arr.size(); ) {
316 mr_p->beat_i_arr_.push(i_arr[i++]);
317 mr_p->elt_length_arr_.push(Moment(1, i_arr[i++]));