#include "command-request.hh"
#include "musical-request.hh"
#include "my-lily-parser.hh"
-
+#include "context-specced-music.hh"
#include "translator-group.hh"
#include "score.hh"
#include "music-list.hh"
#include "relative-music.hh"
#include "transposed-music.hh"
#include "time-scaled-music.hh"
-#include "repeated-music.hh"
+#include "new-repeated-music.hh"
// mmm
-Mudela_version oldest_version ("1.0.14");
-Mudela_version version ("1.0.15");
-
+Mudela_version oldest_version ("1.0.16");
+Mudela_version version ("1.0.19");
+void
+print_mudela_versions (ostream &os)
+{
+ os << "Mudela versions: oldest " << oldest_version.str () << " current " << version.str () <<endl;
+}
// needed for bison.simple's malloc() and free()
#include <malloc.h>
/* tokens which are not keywords */
-%token ABSDYNAMIC
+%token TEXTSCRIPT
%token ACCEPTS
%token ALTERNATIVE
%token BAR
%token CLEF
%token CM_T
%token CONSISTS
+%token CONSISTSEND
%token DURATION
%token EXTENDER
%token FONT
%token SCRIPT
%token SHAPE
%token SKIP
-%token SPANDYNAMIC
+%token SPANREQUEST
%token TEMPO
%token TIME_T
%token TIMES
%token TRANSLATOR
%token TRANSPOSE
%token TYPE
+%token CONTEXT
%token VERSION
/* escaped */
%type <duration> duration_length
%type <scalar> scalar
-%type <music> Music relative_music Sequential_music Simultaneous_music
+%type <music> Music relative_music Sequential_music Simultaneous_music Music_sequence
%type <music> property_def translator_change
%type <music_list> Music_list
%type <paper> paper_block paper_def_body
%type <tempo> tempo_request
%type <notenametab> notenames_body notenames_block chordmodifiers_block
-%expect 8
+
+
%left '-' '+'
%left '*' '/'
}
| notenames_body STRING '=' explicit_musical_pitch {
(*$$)[*$2] = *$4;
- int n = ($4->notename_i_ + 10 * 7) % 7;
- int a = $4->accidental_i_ + 2;
- Musical_pitch::name_str_arr_arr_[n][a] = *$2;
+
delete $4;
delete $2;
}
dynamic_cast<Translator_group*> ($$)-> set_element (*$3, true);
delete $3;
}
+ | translator_spec_body CONSISTSEND STRING semicolon {
+ dynamic_cast<Translator_group*> ($$)-> set_element (*$3, true);
+ delete $3;
+ }
| translator_spec_body ACCEPTS STRING semicolon {
dynamic_cast<Translator_group*> ($$)-> set_acceptor (*$3, true);
delete $3;
Alternative_music:
/* empty */ {
-
- /* UGH*/
- Music_list* m = new Music_list;
- $$ = new Sequential_music (m);
+ $$ = 0;
}
- | ALTERNATIVE Simultaneous_music {
+ | ALTERNATIVE Music_sequence {
$$ = $2;
}
- | ALTERNATIVE Sequential_music {
- $$ = $2;
+ ;
+
+
+
+
+Repeated_music:
+ REPEAT STRING unsigned Music Alternative_music
+ {
+ Music_sequence* m = dynamic_cast <Music_sequence*> ($5);
+
+ New_repeated_music * r = new New_repeated_music ($4, $3 >? 1, m);
+ $$ = r;
+ r->fold_b_ = (*$2 == "fold");
+ r->semi_fold_b_ = (*$2 == "semi");
+ delete $2;
}
;
-Repeated_music: REPEAT unsigned Music Alternative_music {
- Music_sequence* m = dynamic_cast <Music_sequence*> ($4);
- assert (m);
- $$ = new Repeated_music ($3, $2 >? 1, m);
+Music_sequence: '{' Music_list '}' {
+ $$ = new Music_sequence ($2);
}
;
Composite_music:
- TYPE STRING Music {
- $$ = $3;
- $$->translator_type_str_ = *$2;
+ CONTEXT STRING Music {
+ Context_specced_music *csm = new Context_specced_music ($3);
+
+ csm->translator_type_str_ = *$2;
+ csm->translator_id_str_ = "";
delete $2;
+
+ $$ = csm;
}
- | TYPE STRING '=' STRING Music {
- $$ = $5;
- $$->translator_type_str_ = *$2;
- $$->translator_id_str_ = *$4;
+ | CONTEXT STRING '=' STRING Music {
+ Context_specced_music *csm = new Context_specced_music ($5);
+
+ csm->translator_type_str_ = *$2;
+ csm->translator_id_str_ = *$4;
delete $2;
delete $4;
+
+ $$ = csm;
}
| TIMES {
THIS->remember_spot ();
property_def:
PROPERTY STRING '.' STRING '=' scalar {
Translation_property *t = new Translation_property;
- t-> translator_type_str_ = *$2;
+
t-> var_str_ = *$4;
t-> value_ = *$6;
- $$ = t;
+
+ Context_specced_music *csm = new Context_specced_music (t);
+ $$ = csm;
$$->set_spot (THIS->here_input ());
+
+ csm-> translator_type_str_ = *$2;
+
delete $2;
delete $4;
delete $6;
;
scalar:
- STRING { $$ = new Scalar (*$1); delete $1; }
+ string { $$ = new Scalar (*$1); delete $1; }
| int { $$ = new Scalar ($1); }
;
$$ = new Tie_req;
}
| '[' {
- Beam_req*b= new Beam_req;
- b->spantype_ = START;
+ Span_req*b= new Span_req;
+ b->span_dir_ = START;
+ b->span_type_str_ = "beam";
$$ =b;
}
| ']' {
- Beam_req*b= new Beam_req;
- b->spantype_ = STOP;
+ Span_req*b= new Span_req;
+ b->span_dir_ = STOP;
+ b->span_type_str_ = "beam";
$$ = b;
}
;
$$ = (Request*)$1->access_content_Request (true);
$$->set_spot (THIS->here_input ());
}
- | ABSDYNAMIC '{' STRING '}' {
- Absolute_dynamic_req *ad_p = new Absolute_dynamic_req;
- ad_p ->loudness_str_ = *$3;
- ad_p->set_spot (THIS->here_input ());
+ | TEXTSCRIPT STRING STRING {
+ Text_script_req *ts_p = new Text_script_req;
+ ts_p-> text_str_ = *$2;
+ ts_p-> style_str_ = *$3;
+ ts_p->set_spot (THIS->here_input ());
delete $3;
- $$ =ad_p;
+ delete $2;
+ $$ = ts_p;
}
- | SPANDYNAMIC '{' int int '}' {
- Span_dynamic_req * sp_p = new Span_dynamic_req;
- sp_p-> dynamic_dir_ = Direction($3);
- sp_p->spantype_ = Direction($4);
+ | SPANREQUEST int STRING {
+ Span_req * sp_p = new Span_req;
+ sp_p-> span_dir_ = Direction($2);
+ sp_p->span_type_str_ = *$3;
sp_p->set_spot (THIS->here_input ());
$$ = sp_p;
}
close_request:
close_request_parens {
$$ = $1;
- dynamic_cast<Span_req*> ($$)->spantype_ = START;
+ dynamic_cast<Span_req*> ($$)->span_dir_ = START;
}
close_request_parens:
'(' {
- $$= new Slur_req;
+ Span_req* s= new Span_req;
+ $$ = s;
+ s->span_type_str_ = "slur";
}
| E_SMALLER {
- Span_dynamic_req*s =new Span_dynamic_req;
+ Span_req*s =new Span_req;
$$ = s;
- s->dynamic_dir_ = UP;
+ s->span_type_str_ = "crescendo";
}
| E_BIGGER {
- Span_dynamic_req*s =new Span_dynamic_req;
+ Span_req*s =new Span_req;
$$ = s;
- s->dynamic_dir_ = DOWN;
+ s->span_type_str_ = "decrescendo";
}
;
open_request:
open_request_parens {
$$ = $1;
- dynamic_cast<Span_req*> ($$)->spantype_ = STOP;
+ dynamic_cast<Span_req*> ($$)->span_dir_ = STOP;
}
;
open_request_parens:
E_EXCLAMATION {
- Span_dynamic_req *s = new Span_dynamic_req;
- s->dynamic_dir_ = SMALLER;
+ Span_req *s = new Span_req;
+ s->span_type_str_ = "crescendo";
$$ = s;
-
}
| ')' {
- $$= new Slur_req
+ Span_req* s= new Span_req;
+ $$ = s;
+ s->span_type_str_ = "slur";
}
;
}
+