$$ = SCM_UNSPECIFIED;
}
}
- | embedded_scm
+ | music_embedded_backup BACKUP SCM_ARG
+ {
+ $$ = $3;
+ }
+ | music_embedded_backup BACKUP lyric_element_music
+ {
+ $$ = $3;
+ }
+ ;
+
+music_embedded_backup:
+ embedded_scm_closed
{
if (scm_is_eq ($1, SCM_UNSPECIFIED))
- $$ = $1;
+ MYBACKUP (SCM_ARG, $1, @1);
else if (Music *m = unsmob_music ($1)) {
if (m->is_mus_type ("post-event")) {
parser->parser_error
(@1, _ ("unexpected post-event"));
- $$ = SCM_UNSPECIFIED;
+ MYBACKUP (SCM_ARG, SCM_UNSPECIFIED, @1);
} else
- $$ = $1;
- } else {
+ MYBACKUP (SCM_ARG, $1, @1);
+ } else if (parser->lexer_->is_lyric_state ()
+ && Text_interface::is_markup ($1))
+ MYBACKUP (LYRIC_ELEMENT, $1, @1);
+ else {
@$.warning (_ ("Ignoring non-music expression"));
- $$ = SCM_UNSPECIFIED;
+ MYBACKUP (SCM_ARG, SCM_UNSPECIFIED, @1);
}
}
;
// \revert Accidental.color
revert_arg:
+ revert_arg_backup BACKUP symbol_list_arg
+ {
+ $$ = $3;
+ }
+ ;
+
+revert_arg_backup:
revert_arg_part
{
if (scm_is_null ($1)
else
MYBACKUP (SYMBOL_LIST, scm_reverse_x ($1, SCM_EOL), @1);
}
- | revert_arg BACKUP symbol_list_arg
- {
- $$ = $3;
- }
;
// revert_arg_part delivers results in reverse
revert_arg_part:
symbol_list_part
- | revert_arg BACKUP SCM_ARG '.' symbol_list_part
+ | revert_arg_backup BACKUP SCM_ARG '.' symbol_list_part
{
$$ = scm_append_x (scm_list_2 ($5, $3));
}
- | revert_arg BACKUP SCM_ARG symbol_list_part
+ | revert_arg_backup BACKUP SCM_ARG symbol_list_part
{
$$ = scm_append_x (scm_list_2 ($4, $3));
}