From 66714074fd18d3483371c91441bf3f7df6a4cfb2 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sun, 12 Jul 2015 18:16:58 +0200 Subject: [PATCH] Issue 4505: Add partial \override and \set commands This allows \set and \override commands to be stopped short after their `=' sign in order to be used in the manner of partial music functions. --- lily/parser.yy | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/lily/parser.yy b/lily/parser.yy index 552d699d25..6fb3a8708b 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -717,6 +717,26 @@ partial_function: { $$ = scm_acons ($1, $2, SCM_EOL); } + | OVERRIDE grob_prop_path '=' + { + if (SCM_UNBNDP ($2)) + $$ = scm_list_1 (SCM_BOOL_F); + else + $$ = scm_cons + (scm_list_3 (Syntax::property_override_function, + scm_cdr ($2), scm_car ($2)), + SCM_EOL); + } + | SET context_prop_spec '=' + { + if (SCM_UNBNDP ($2)) + $$ = scm_list_1 (SCM_BOOL_F); + else + $$ = scm_cons + (scm_list_3 (Syntax::property_set_function, + scm_cadr ($2), scm_car ($2)), + SCM_EOL); + } | MUSIC_FUNCTION EXPECT_SCM function_arglist_optional partial_function { $$ = scm_acons ($1, $3, $4); @@ -729,6 +749,26 @@ partial_function: { $$ = scm_acons ($1, $3, $4); } + | OVERRIDE grob_prop_path '=' partial_function + { + if (SCM_UNBNDP ($2)) + $$ = scm_list_1 (SCM_BOOL_F); + else + $$ = scm_cons + (scm_list_3 (Syntax::property_override_function, + scm_cdr ($2), scm_car ($2)), + $4); + } + | SET context_prop_spec '=' partial_function + { + if (SCM_UNBNDP ($2)) + $$ = scm_list_1 (SCM_BOOL_F); + else + $$ = scm_cons + (scm_list_3 (Syntax::property_set_function, + scm_cadr ($2), scm_car ($2)), + $4); + } | MUSIC_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function { $$ = scm_acons ($1, $4, $5); -- 2.39.2