From 65760f8486204ab98e75e14283df2873d1990234 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Thu, 5 Jul 2012 12:24:19 +0200 Subject: [PATCH] Interpret #... inside of music lists as music instead of ignoring it One consequence is that you get a warning for things like \revert Score.BarLine #'space-alist #'cue-clef which actually reverts the whole of space-alist, then ignores #'cue-clef. Another is that things like $(set-accidental-style 'dodecaphonic) can be written as #(set-accidental-style 'dodecaphonic) without getting ignored in most situations. Void expressions (like most definitions, or the result of calling \void) are still silently ignored since they are regarded as intentional. --- lily/parser.yy | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/lily/parser.yy b/lily/parser.yy index a6b3b99d58..44284f6178 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -405,6 +405,7 @@ If we give names, Bison complains. %type music_bare %type music_arg %type music_assign +%type music_embedded %type complex_music %type complex_music_prefix %type mode_changed_music @@ -702,9 +703,13 @@ embedded_lilypond: $$ = MAKE_SYNTAX ("void-music", @$); } | identifier_init - | music music music_list { - $$ = MAKE_SYNTAX ("sequential-music", @$, - scm_cons2 ($1, $2, scm_reverse_x ($3, SCM_EOL))); + | music_embedded music_embedded music_list { + $3 = scm_reverse_x ($3, SCM_EOL); + if (unsmob_music ($2)) + $3 = scm_cons ($2, $3); + if (unsmob_music ($1)) + $3 = scm_cons ($1, $3); + $$ = MAKE_SYNTAX ("sequential-music", @$, $3); } | error { parser->error_level_ = 1; @@ -1131,11 +1136,9 @@ music_list: /* empty */ { $$ = SCM_EOL; } - | music_list music { - $$ = scm_cons ($2, $1); - } - | music_list embedded_scm { - + | music_list music_embedded { + if (unsmob_music ($2)) + $$ = scm_cons ($2, $1); } | music_list error { Music *m = MY_MAKE_MUSIC("Music", @$); @@ -1157,6 +1160,21 @@ music: music_arg | lyric_element_music ; +music_embedded: + music + | embedded_scm + { + if (unsmob_music ($1) + || scm_is_eq ($1, SCM_UNSPECIFIED)) + $$ = $1; + else + { + @$.warning (_ ("Ignoring non-music expression")); + $$ = SCM_UNSPECIFIED; + } + } + ; + music_arg: simple_music { -- 2.39.5