X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fparser.yy;h=02c99e2f42e8f4eb7cf3283a764369ccac3770d7;hb=8ca51c229f5114093e6b8fe1f409ab13c49673e0;hp=26b1af7d144cc6d09269c19e70b03281daa88ce5;hpb=cf1842d73e1876e6a0613e92168997a753907990;p=lilypond.git diff --git a/lily/parser.yy b/lily/parser.yy index 26b1af7d14..02c99e2f42 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -187,7 +187,7 @@ void set_music_properties (Music *p, SCM a); %token FIGURES "\\figures" %token GROBDESCRIPTIONS "\\grobdescriptions" %token HEADER "\\header" -%token INVALID "\\invalid" +%token INVALID "\\version-error" %token KEY "\\key" %token LAYOUT "\\layout" %token LYRICMODE "\\lyricmode" @@ -202,7 +202,6 @@ void set_music_properties (Music *p, SCM a); %token ONCE "\\once" %token OVERRIDE "\\override" %token PAPER "\\paper" -%token PARTIAL "\\partial" %token RELATIVE "\\relative" %token REMOVE "\\remove" %token REPEAT "\\repeat" @@ -212,10 +211,8 @@ void set_music_properties (Music *p, SCM a); %token SEQUENTIAL "\\sequential" %token SET "\\set" %token SIMULTANEOUS "\\simultaneous" -%token SKIP "\\skip" %token TEMPO "\\tempo" %token TIMES "\\times" -%token TRANSPOSE "\\transpose" %token TYPE "\\type" %token UNSET "\\unset" %token WITH "\\with" @@ -262,7 +259,6 @@ If we give names, Bison complains. %token MULTI_MEASURE_REST -%token DIGIT %token E_UNSIGNED %token UNSIGNED @@ -286,6 +282,7 @@ If we give names, Bison complains. %token CONTEXT_DEF_IDENTIFIER %token CONTEXT_MOD_IDENTIFIER %token DRUM_PITCH +%token PITCH_IDENTIFIER %token DURATION_IDENTIFIER %token EVENT_IDENTIFIER %token FRACTION @@ -348,10 +345,12 @@ If we give names, Bison complains. %type direction_reqd_event %type embedded_lilypond %type event_chord +%type fingering %type gen_text_def %type music_property_def %type note_chord_element %type post_event +%type post_event_nofinger %type re_rhythmed_music %type relative_music %type simple_element @@ -476,7 +475,7 @@ start_symbol: PARSER->lexer_->push_note_state (alist_to_hashq (nn)); } embedded_lilypond { PARSER->lexer_->pop_state (); - PARSER->lexer_->set_identifier (ly_symbol2scm ("$parseStringResult"), $3); + PARSER->lexer_->set_identifier (ly_symbol2scm ("parseStringResult"), $3); } ; @@ -583,7 +582,7 @@ embedded_lilypond: | error { PARSER->error_level_ = 1; } - | embedded_lilypond INVALID { + | INVALID embedded_lilypond { PARSER->error_level_ = 1; } ; @@ -665,7 +664,7 @@ identifier_init: else $$ = MAKE_SYNTAX ("event-chord", @$, scm_list_1 ($1)); } - | post_event { + | post_event_nofinger { $$ = $1; } | number_expression { @@ -683,9 +682,6 @@ identifier_init: | full_markup_list { $$ = $1; } - | DIGIT { - $$ = scm_from_int ($1); - } | context_modification { $$ = $1; } @@ -1177,8 +1173,7 @@ function_arglist_nonmusic_last: generic_prefix_music_scm: MUSIC_FUNCTION function_arglist { $$ = run_music_function (PARSER, @$, - $1, - scm_reverse_x ($2, SCM_EOL)); + $1, $2); } ; @@ -1212,12 +1207,6 @@ prefix_composite_music: $$ = MAKE_SYNTAX ("time-scaled-music", @$, $2, $3); } | repeated_music { $$ = $1; } - | TRANSPOSE pitch_also_in_chords pitch_also_in_chords music { - Pitch from = *unsmob_pitch ($2); - Pitch to = *unsmob_pitch ($3); - SCM pitch = pitch_interval (from, to).smobbed_copy (); - $$ = MAKE_SYNTAX ("transpose-music", @$, pitch, $4); - } | mode_changing_head grouped_music_list { if ($1 == ly_symbol2scm ("chords")) { @@ -1509,9 +1498,6 @@ closed_scalar: string { | full_markup { $$ = $1; } - | DIGIT { - $$ = scm_from_int ($1); - } ; scalar: closed_scalar @@ -1647,7 +1633,7 @@ music_function_chord_body_arglist: music_function_chord_body: MUSIC_FUNCTION music_function_chord_body_arglist { $$ = run_music_function (PARSER, @$, - $1, scm_reverse_x ($2, SCM_EOL)); + $1, $2); } ; @@ -1666,7 +1652,7 @@ music_function_event_arglist: music_function_event: MUSIC_FUNCTION music_function_event_arglist { $$ = run_music_function (PARSER, @$, - $1, scm_reverse_x ($2, SCM_EOL)); + $1, $2); } ; @@ -1674,9 +1660,6 @@ command_element: command_event { $$ = $1; } - | SKIP duration_length { - $$ = MAKE_SYNTAX ("skip-music", @$, $2); - } | E_BRACKET_OPEN { Music *m = MY_MAKE_MUSIC ("LigatureEvent", @$); m->set_property ("span-direction", scm_from_int (START)); @@ -1704,10 +1687,6 @@ command_element: $$ = MAKE_SYNTAX ("bar-check", @$, SCM_UNDEFINED); } - | PARTIAL duration_length { - $$ = MAKE_SYNTAX ("partial", @$, $2); - } - | TIME_T fraction { SCM proc = ly_lily_module_constant ("make-time-signature-set"); @@ -1760,7 +1739,7 @@ post_events: } ; -post_event: +post_event_nofinger: direction_less_event { $$ = $1; } @@ -1800,6 +1779,18 @@ post_event: | string_number_event ; +post_event: + post_event_nofinger + | script_dir fingering { + if ($1) + { + Music *m = unsmob_music ($2); + m->set_property ("direction", scm_from_int ($1)); + } + $$ = $2; + } + ; + string_number_event: E_UNSIGNED { Music *s = MY_MAKE_MUSIC ("StringNumberEvent", @$); @@ -1946,6 +1937,7 @@ pitch: steno_pitch { $$ = $1; } + | PITCH_IDENTIFIER ; pitch_also_in_chords: @@ -1965,7 +1957,10 @@ gen_text_def: make_simple_markup ($1)); $$ = t->unprotect (); } - | DIGIT { + ; + +fingering: + UNSIGNED { Music *t = MY_MAKE_MUSIC ("FingeringEvent", @$); t->set_property ("digit", scm_from_int ($1)); $$ = t->unprotect (); @@ -2004,7 +1999,7 @@ script_dir: absolute_pitch: - steno_pitch { + pitch { $$ = $1; } ; @@ -2087,10 +2082,7 @@ tremolo_type: ; bass_number: - DIGIT { - $$ = scm_from_int ($1); - } - | UNSIGNED { + UNSIGNED { $$ = scm_from_int ($1); } | STRING { $$ = $1; } @@ -2420,9 +2412,6 @@ bare_unsigned: UNSIGNED { $$ = $1; } - | DIGIT { - $$ = $1; - } ; unsigned_number: @@ -2684,6 +2673,9 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) mus->unprotect (); return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER; + } else if (unsmob_pitch (sid)) { + *destination = unsmob_pitch (sid)->smobbed_copy (); + return PITCH_IDENTIFIER; } else if (unsmob_duration (sid)) { *destination = unsmob_duration (sid)->smobbed_copy (); return DURATION_IDENTIFIER; @@ -2731,14 +2723,16 @@ run_music_function (Lily_parser *parser, Input loc, SCM func, SCM args) SCM type_check_proc = ly_lily_module_constant ("type-check-list"); + args = scm_reverse_x (args, SCM_EOL); + if (!to_boolean (scm_call_3 (type_check_proc, make_input (loc), scm_cdr (sig), args))) { parser->error_level_ = 1; return LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("void-music"), scm_list_2 (parser->self_scm (), make_input (loc))); } - SCM syntax_args = scm_list_4 (parser->self_scm (), make_input (loc), func, args); - return LOWLEVEL_MAKE_SYNTAX (scm_car (sig), syntax_args); + SCM syntax_args = scm_list_5 (parser->self_scm (), make_input (loc), scm_car (sig), func, args); + return LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("music-function"), syntax_args); } bool