%type <scm> context_prop_spec
%type <scm> direction_less_char
%type <scm> duration_length
+%type <scm> closed_embedded_scm
%type <scm> embedded_scm
%type <scm> figure_list
%type <scm> figure_spec
%type <scm> markup_composed_list
%type <scm> markup_command_list
%type <scm> markup_command_list_arguments
+%type <scm> closed_markup_command_list_arguments
%type <scm> markup_command_basic_arguments
%type <scm> markup_head_1_item
%type <scm> markup_head_1_list
%type <scm> property_operation
%type <scm> property_path property_path_revved
%type <scm> scalar
-%type <scm> scm_function_call
+%type <scm> closed_scalar
+%type <scm> open_scm_function_call
+%type <scm> closed_scm_function_call
%type <scm> script_abbreviation
%type <scm> simple_chord_elements
%type <scm> simple_markup
}
;
-embedded_scm:
+closed_embedded_scm:
SCM_TOKEN
| SCM_IDENTIFIER
- | scm_function_call
+ | closed_scm_function_call
+ ;
+
+embedded_scm:
+ closed_embedded_scm
+ | open_scm_function_call
;
-scm_function_call:
+closed_scm_function_call:
SCM_FUNCTION closed_function_arglist
{
$$ = run_music_function (PARSER, @$,
}
;
+open_scm_function_call:
+ SCM_FUNCTION open_function_arglist
+ {
+ $$ = run_music_function (PARSER, @$,
+ $1, $2);
+ }
+ ;
+
embedded_lilypond:
{ $$ = MAKE_SYNTAX ("void-music", @$, SCM_UNDEFINED); }
| identifier_init
TEMPO steno_duration '=' tempo_range {
$$ = MAKE_SYNTAX ("tempo", @$, SCM_EOL, $2, $4);
}
- | TEMPO scalar steno_duration '=' tempo_range {
+ | TEMPO closed_scalar steno_duration '=' tempo_range {
$$ = MAKE_SYNTAX ("tempo", @$, $2, $3, $5);
}
- | TEMPO scalar {
+ | TEMPO closed_scalar {
$$ = MAKE_SYNTAX ("tempo", @$, $2);
}
;
;
function_scm_argument:
- embedded_scm
+ closed_embedded_scm
| simple_string
;
EXPECT_MUSIC function_arglist open_music {
$$ = scm_cons ($3, $2);
}
+ | EXPECT_SCM function_arglist open_scm_function_call {
+ $$ = scm_cons ($3, $2);
+ }
;
/* a closed argument list is one that does not end in a music
property_path_revved:
- embedded_scm {
+ closed_embedded_scm {
$$ = scm_cons ($1, SCM_EOL);
}
- | property_path_revved embedded_scm {
+ | property_path_revved closed_embedded_scm {
$$ = scm_cons ($2, $1);
}
;
}
;
-scalar: string {
+closed_scalar: string {
$$ = $1;
}
| lyric_element {
| bare_number {
$$ = $1;
}
- | embedded_scm {
+ | closed_embedded_scm {
$$ = $1;
}
| full_markup {
}
;
+scalar: closed_scalar
+ | open_scm_function_call
+ ;
+
event_chord:
/* TODO: Create a special case that avoids the creation of
EventChords around simple_elements that have no post_events?
;
markup_command_list:
- MARKUP_LIST_FUNCTION markup_command_list_arguments {
+ MARKUP_LIST_FUNCTION closed_markup_command_list_arguments {
$$ = scm_cons ($1, scm_reverse_x($2, SCM_EOL));
}
;
EXPECT_MARKUP_LIST markup_command_list_arguments markup_list {
$$ = scm_cons ($3, $2);
}
- | EXPECT_SCM markup_command_list_arguments embedded_scm {
+ | EXPECT_SCM markup_command_list_arguments closed_embedded_scm {
$$ = scm_cons ($3, $2);
}
| EXPECT_NO_MORE_ARGS {
}
;
-markup_command_list_arguments:
+closed_markup_command_list_arguments:
markup_command_basic_arguments { $$ = $1; }
| EXPECT_MARKUP markup_command_list_arguments markup {
$$ = scm_cons ($3, $2);
}
;
+markup_command_list_arguments:
+ closed_markup_command_list_arguments
+ | EXPECT_SCM markup_command_list_arguments open_scm_function_call
+ {
+ $$ = scm_cons ($3, $2);
+ }
+ ;
+
markup_head_1_item:
MARKUP_FUNCTION EXPECT_MARKUP markup_command_list_arguments {
$$ = scm_cons ($1, scm_reverse_x ($3, SCM_EOL));