11 #include "notename.hh"
12 #include "identparent.hh"
15 #include "parseconstruct.hh"
17 int default_duration = 4, default_dots=0, default_octave=0;
18 int default_plet_type = 1, default_plet_dur = 1;
19 String textstyle="roman"; // in lexer?
21 bool last_duration_mode = false;
24 set_duration_mode(String s)
27 last_duration_mode = (s== "LAST");
33 if (last_duration_mode)
37 /* triplet is '2/3' */
38 void set_plet(int num,int den)
40 assert(num >0&& den>0);
41 default_plet_dur = num;
42 default_plet_type = den;
46 get_text(String s) return t;
50 t->style_str_ = textstyle;
51 t->defined_ch_c_l_m = defined_ch_c_l;
56 set_text_style(String s)
62 parse_octave (const char *a, int &j, int &oct)
77 parse_pitchmod( const char *a, int &j, int &oct, bool & overide_acc)
81 parse_octave(a,j,oct);
92 mtor << "oct " << oct;
93 mtor << "override: " << overide_acc<<'\n';
98 get_note_element(String pitch, int * notename, int * duration )
100 Voice_element*v = new Voice_element;
101 v->defined_ch_c_l_m = 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_m = 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;
121 parse_pitchmod(pitch, i, oct, forceacc);
122 rq->notename =notename[0];
123 rq->accidental = notename[1];
124 rq->octave = oct + notename[2];
125 rq->forceacc = forceacc;
128 rq->plet_factor = Moment(default_plet_dur, default_plet_type);
129 rq->defined_ch_c_l_m = defined_ch_c_l;
138 get_word_element(Text_def* tdef_p, int* duration)
140 Voice_element* velt_p = new Voice_element;
141 velt_p->defined_ch_c_l_m = defined_ch_c_l;
143 int dur = duration[0];
144 int dots=duration[1];
146 tdef_p->defined_ch_c_l_m = defined_ch_c_l;
149 strncpy( buf, tdef_p->defined_ch_c_l_m, 20 );
151 cout << hex << (void*)tdef_p->defined_ch_c_l_m << dec << buf << endl;
153 Lyric_req* lreq_p = new Lyric_req(tdef_p);
155 lreq_p->balltype = dur;
157 lreq_p->plet_factor = Moment(default_plet_dur, default_plet_type);
159 lreq_p->defined_ch_c_l_m = defined_ch_c_l;
167 get_rest_element(String, int * duration )
169 Voice_element* velt_p = new Voice_element;
170 velt_p->defined_ch_c_l_m = defined_ch_c_l;
172 Rest_req * rest_req_p = new Rest_req;
173 rest_req_p->plet_factor = Moment(default_plet_dur, default_plet_type);
174 rest_req_p->balltype = duration[0];
175 rest_req_p->dots = duration[1];
177 rest_req_p->defined_ch_c_l_m = defined_ch_c_l;
179 velt_p->add(rest_req_p);
185 get_default_duration(int *p)
187 *p++ = default_duration;
192 set_default_duration(int *p)
194 default_duration = *p++;
200 set_default_octave(String d)
204 parse_octave(d, i, default_octave);
213 req_p = new Barcheck_req;
219 Beam_req*b = new Beam_req;
220 if (default_plet_type != 1)
221 b->nplet = default_plet_type;
229 req_p = new Slur_req;
239 req_p->span()->spantype = Span_req::START;
243 req_p->span()->spantype = Span_req::STOP;
250 req_p->defined_ch_c_l_m = req_defined_ch_c_l;
255 add_requests(Voice_element *v, Array<Request*> &req)
257 for (int i = 0; i < req.size(); i++) {
264 get_scriptdef(char c)
268 case '^' : s = "marcato";
270 case '+' : s = "stopped";
272 case '-' : s = "tenuto";
274 case '|': s = "staccatissimo";
278 case '>' : s = "accent";
282 case '.' : s = "staccato";
285 return lexer->lookup_identifier(s)->script(1);
289 get_script_req(int d , Script_def*def)
291 Script_req* script_req_p = new Script_req(d, def);
292 // script_req_p->defined_ch_c_l_m = req_defined_ch_c_l;
293 // all terminal symbols, rather set directly here:
294 script_req_p->defined_ch_c_l_m = lexer->here_ch_c_l();
299 get_text_req(int d , Text_def*def)
301 Text_req* text_req_p = new Text_req(d, def);
302 text_req_p->defined_ch_c_l_m = defined_ch_c_l;
307 get_mark_element(String s)
309 Voice_element*v_p = new Voice_element;
310 v_p->defined_ch_c_l_m = defined_ch_c_l;
311 Mark_req* mark_req_p = new Mark_req(s);
312 mark_req_p->defined_ch_c_l_m = defined_ch_c_l;
313 v_p->add(mark_req_p);
317 get_command_element(Input_command*com_p)
319 Voice_element *velt_p = new Voice_element;
320 velt_p->defined_ch_c_l_m = defined_ch_c_l;
321 Staff_command_req* scommand_req_p = new Staff_command_req(com_p);
322 scommand_req_p->defined_ch_c_l_m = defined_ch_c_l;
323 velt_p->add(scommand_req_p);
327 get_barcheck_element()
329 Voice_element* velt_p = new Voice_element;
330 velt_p->defined_ch_c_l_m = req_defined_ch_c_l;
331 Barcheck_req* barcheck_req_p = new Barcheck_req;
332 barcheck_req_p->defined_ch_c_l_m = req_defined_ch_c_l;
333 velt_p->add(barcheck_req_p);
338 get_stemdir_element(int d)
340 Voice_element*v_p = new Voice_element;
341 v_p->defined_ch_c_l_m = req_defined_ch_c_l;
342 Group_feature_req * gfreq_p = new Group_feature_req;
343 gfreq_p->stemdir_i_ =d;
344 gfreq_p->defined_ch_c_l_m = req_defined_ch_c_l;