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;
103 int dur = duration[0];
104 int dots=duration[1];
107 Stem_req * st = new Stem_req(dur,dots);
108 st->plet_factor = Moment(default_plet_dur, default_plet_type);
112 if ( !defined_ch_c_l )
113 defined_ch_c_l = lexer->here_ch_c_l();
115 Note_req * rq = new Note_req;
119 parse_pitchmod(pitch, i, oct, forceacc);
120 rq->notename =notename[0];
121 rq->accidental = notename[1];
123 rq->forceacc = forceacc;
126 rq->plet_factor = Moment(default_plet_dur, default_plet_type);
127 rq->defined_ch_c_l_m = defined_ch_c_l;
131 v->defined_ch_c_l_m = defined_ch_c_l;
137 get_word_element(Text_def* tdef_p, int* duration)
139 Voice_element* velt_p = new Voice_element;
142 int dur = duration[0];
143 int dots=duration[1];
145 tdef_p->defined_ch_c_l_m = defined_ch_c_l;
148 strncpy( buf, tdef_p->defined_ch_c_l_m, 20 );
150 cout << hex << (void*)tdef_p->defined_ch_c_l_m << dec << buf << endl;
152 Lyric_req* lreq_p = new Lyric_req(tdef_p);
154 lreq_p->balltype = dur;
156 lreq_p->plet_factor = Moment(default_plet_dur, default_plet_type);
165 get_rest_element(String, int * duration )
167 Voice_element*v = new Voice_element;
169 Rest_req * rq = new Rest_req;
170 rq->plet_factor = Moment(default_plet_dur, default_plet_type);
171 rq->balltype = duration[0];
172 rq->dots = duration[1];
180 get_default_duration(int *p)
182 *p++ = default_duration;
187 set_default_duration(int *p)
189 default_duration = *p++;
195 set_default_octave(String d)
199 parse_octave(d, i, default_octave);
208 req_p = new Barcheck_req;
214 Beam_req*b = new Beam_req;
215 if (default_plet_type != 1)
216 b->nplet = default_plet_type;
224 req_p = new Slur_req;
234 req_p->span()->spantype = Span_req::START;
238 req_p->span()->spantype = Span_req::STOP;
245 req_p->defined_ch_c_l_m = req_defined_ch_c_l;
250 add_requests(Voice_element *v, Array<Request*> &req)
252 for (int i = 0; i < req.size(); i++) {
259 get_scriptdef(char c)
263 case '^' : s = "marcato";
265 case '+' : s = "stopped";
267 case '-' : s = "tenuto";
269 case '|': s = "staccatissimo";
273 case '>' : s = "accent";
277 case '.' : s = "staccato";
280 return lexer->lookup_identifier(s)->script(1);
284 get_script_req(int d , Script_def*def)
286 return new Script_req(d, def);
290 get_text_req(int d , Text_def*def)
292 return new Text_req(d, def);
296 get_mark_element(String s)
298 Voice_element*v_p = new Voice_element;
299 v_p->add( new Mark_req(s));
304 get_command_element(Input_command*com_p)
306 Voice_element *v_p = new Voice_element;
307 v_p->add(new Staff_command_req(com_p));
311 get_barcheck_element()
313 Voice_element*v_p = new Voice_element;
314 v_p->add( new Barcheck_req);
320 get_stemdir_element(int d)
322 Voice_element*v_p = new Voice_element;
323 Group_feature_req * gfreq_p = new Group_feature_req;
324 gfreq_p->stemdir_i_ =d;