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 // all terminal symbols, rather set directly here:
293 script_req_p
->defined_ch_c_l_m
= lexer
->here_ch_c_l();
298 get_text_req(int d
, Text_def
*def
)
300 Text_req
* text_req_p
= new Text_req(d
, def
);
301 text_req_p
->defined_ch_c_l_m
= defined_ch_c_l
;
306 get_mark_element(String s
)
308 Voice_element
*v_p
= new Voice_element
;
309 v_p
->defined_ch_c_l_m
= defined_ch_c_l
;
310 Mark_req
* mark_req_p
= new Mark_req(s
);
311 mark_req_p
->defined_ch_c_l_m
= defined_ch_c_l
;
312 v_p
->add(mark_req_p
);
316 get_command_element(Input_command
*com_p
)
318 Voice_element
*velt_p
= new Voice_element
;
319 velt_p
->defined_ch_c_l_m
= defined_ch_c_l
;
320 Staff_command_req
* scommand_req_p
= new Staff_command_req(com_p
);
321 scommand_req_p
->defined_ch_c_l_m
= defined_ch_c_l
;
322 velt_p
->add(scommand_req_p
);
326 get_barcheck_element()
328 Voice_element
* velt_p
= new Voice_element
;
329 velt_p
->defined_ch_c_l_m
= req_defined_ch_c_l
;
330 Barcheck_req
* barcheck_req_p
= new Barcheck_req
;
331 barcheck_req_p
->defined_ch_c_l_m
= req_defined_ch_c_l
;
332 velt_p
->add(barcheck_req_p
);
337 get_stemdir_element(int d
)
339 Voice_element
*v_p
= new Voice_element
;
340 v_p
->defined_ch_c_l_m
= req_defined_ch_c_l
;
341 Group_feature_req
* gfreq_p
= new Group_feature_req
;
342 gfreq_p
->stemdir_i_
=d
;
343 gfreq_p
->defined_ch_c_l_m
= req_defined_ch_c_l
;