Jan Nieuwenhuizen <janneke@gnu.org>
*/
+/*
+ Ambiguities:
+
+ * \alternative
+
+ * use of '-' in various places
+
+*/
+
+
#include <iostream.h>
#include "lily-guile.hh"
#include "notename-table.hh"
#include "relative-music.hh"
#include "transposed-music.hh"
#include "time-scaled-music.hh"
-#include "repeated-music.hh"
+#include "new-repeated-music.hh"
+#include "version.hh"
+#include "grace-music.hh"
// mmm
-Mudela_version oldest_version ("1.0.16");
-Mudela_version version ("1.0.16");
+Mudela_version oldest_version ("1.0.20");
+Mudela_version version ( MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL );
+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>
-struct Assignment {
- String *name_p_;
- Identifier *id_p_;
- ~Assignment () {
- delete name_p_;
- delete id_p_;
- }
- Assignment () {
- name_p_ = 0;
- id_p_ =0;
- }
- Assignment (Assignment const&s)
- {
- name_p_ = new String (*s.name_p_);
- id_p_ = s.id_p_->clone ();
- }
-};
-
-Paper_def* current_paper = 0;
-
#ifndef NDEBUG
#define YYDEBUG 1
#endif
/* tokens which are not keywords */
-%token ABSDYNAMIC
+%token TEXTSCRIPT
%token ACCEPTS
%token ALTERNATIVE
%token BAR
+%token BREATHE
%token CADENZA
%token CHORDMODIFIERS
%token CHORDS
%token EXTENDER
%token FONT
%token GROUPING
+%token GRACE
%token HEADER
%token IN_T
%token KEY
%token SCRIPT
%token SHAPE
%token SKIP
-%token SPANDYNAMIC
+%token SPANREQUEST
%token TEMPO
%token TIME_T
%token TIMES
%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
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);
}
;
$$ = csm;
}
+ | GRACE Music {
+ $$ = new Grace_music ($2);
+ }
| CONTEXT STRING '=' STRING Music {
Context_specced_music *csm = new Context_specced_music ($5);
$$ = 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;
}
+ | BREATHE {
+ $$ = new Breathing_sign_req;
+ }
;
request_with_dir:
script_dir request_that_take_dir {
- if (G_script_req * gs = dynamic_cast<G_script_req*> ($2))
- gs->dir_ = $1;
+ if (Script_req * gs = dynamic_cast<Script_req*> ($2))
+ gs->dir_ = Direction ($1);
else if ($1)
$2->warning ("Can't specify direction for this request");
$$ = $2;
$$ = (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;
}
| abbrev_type {
- Abbreviation_req* a = new Abbreviation_req;
+ Tremolo_req* a = new Tremolo_req;
a->set_spot (THIS->here_input ());
a->type_i_ = $1;
$$ = a;
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";
}
;