%type <i> tremolo_type
/* Music */
+%type <scm> composite_music
%type <scm> grouped_music_list
%type <scm> braced_music_list
%type <scm> closed_music
scm_call_2 (proc, PARSER->self_scm (), score->self_scm ());
score->unprotect ();
}
- | closed_music {
+ | composite_music {
Music *music = unsmob_music ($1);
SCM proc = PARSER->lexer_->lookup_identifier ("toplevel-music-handler");
scm_call_2 (proc, PARSER->self_scm (), music->self_scm ());
scm_call_2 (proc, $$->self_scm (), score->self_scm ());
score->unprotect ();
}
- | book_body closed_music {
+ | book_body composite_music {
Music *music = unsmob_music ($2);
SCM proc = PARSER->lexer_->lookup_identifier ("book-music-handler");
scm_call_3 (proc, PARSER->self_scm (), $$->self_scm (), music->self_scm ());
scm_call_2 (proc, $$->self_scm (), score->self_scm ());
score->unprotect ();
}
- | bookpart_body closed_music {
+ | bookpart_body composite_music {
Music *music = unsmob_music ($2);
SCM proc = PARSER->lexer_->lookup_identifier ("bookpart-music-handler");
scm_call_3 (proc, PARSER->self_scm (), $$->self_scm (), music->self_scm ());
music:
simple_music
- | prefix_composite_music { $$ = $1; }
- | grouped_music_list { $$ = $1; }
+ | composite_music
| MUSIC_IDENTIFIER
;
}
;
+composite_music:
+ prefix_composite_music { $$ = $1; }
+ | grouped_music_list { $$ = $1; }
+ ;
+
/* Music that can't be followed by additional events or durations */
closed_music:
MUSIC_IDENTIFIER
Pitch start = *unsmob_pitch ($2);
$$ = make_music_relative (start, $3, @$);
}
- | RELATIVE closed_music {
+ | RELATIVE composite_music {
Pitch middle_c (0, 0, 0);
$$ = make_music_relative (middle_c, $2, @$);
}