From c7268da1b688b47e3a7f2ac926e5ce3d79e05dbb Mon Sep 17 00:00:00 2001 From: Nicolas Sceaux Date: Tue, 26 Oct 2004 17:31:54 +0000 Subject: [PATCH] * lily/music-function.cc (ly_make_music_function): when an argument predicate is markup?, the signature keyword becomes "markup" iso "scm". * lily/lexer.ll (music_function_type): new MUSIC_FUNCTION_*MARKUP* tokens, for functions which signatures contain "markup". * lily/parser.yy (Generic_prefix_music_scm): add treatment for new MUSIC_FUNCTION_*MARKUP* tokens. --- ChangeLog | 12 ++++++++++++ lily/lexer.ll | 20 ++++++++++++++++++++ lily/music-function.cc | 2 ++ lily/parser.yy | 29 +++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9c776957fb..c194960af3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2004-10-26 Nicolas Sceaux + + * lily/music-function.cc (ly_make_music_function): when an + argument predicate is markup?, the signature keyword becomes + "markup" iso "scm". + + * lily/lexer.ll (music_function_type): new MUSIC_FUNCTION_*MARKUP* + tokens, for functions which signatures contain "markup". + + * lily/parser.yy (Generic_prefix_music_scm): add treatment for new + MUSIC_FUNCTION_*MARKUP* tokens. + 2004-10-26 Jan Nieuwenhuizen * input/regression/lyrics-bar.ly: Make StaffGroup accept the new diff --git a/lily/lexer.ll b/lily/lexer.ll index ccb3d77b67..391d2d5141 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -922,6 +922,26 @@ music_function_type (SCM func) { return MUSIC_FUNCTION_SCM_SCM_MUSIC; } + else if (type == ly_symbol2scm ("markup")) + { + return MUSIC_FUNCTION_MARKUP; + } + else if (type == ly_symbol2scm ("markup-music")) + { + return MUSIC_FUNCTION_MARKUP_MUSIC; + } + else if (type == ly_symbol2scm ("markup-markup")) + { + return MUSIC_FUNCTION_MARKUP_MARKUP; + } + else if (type == ly_symbol2scm ("markup-music-music")) + { + return MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC; + } + else if (type == ly_symbol2scm ("markup-markup-music")) + { + return MUSIC_FUNCTION_MARKUP_MARKUP_MUSIC; + } else if (type == ly_symbol2scm ("noarg")) { return MUSIC_FUNCTION; diff --git a/lily/music-function.cc b/lily/music-function.cc index e496ec6838..31ff12dcb8 100644 --- a/lily/music-function.cc +++ b/lily/music-function.cc @@ -42,6 +42,8 @@ LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0, if (scm_car (s) == Music_type_p_proc) str += "music"; + else if (scm_car (s) == ly_scheme_function("markup?")) + str += "markup"; else if (ly_c_procedure_p (scm_car (s))) str += "scm"; } diff --git a/lily/parser.yy b/lily/parser.yy index d15c71846a..8c910598eb 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -365,6 +365,11 @@ or %token MUSIC_FUNCTION_SCM_MUSIC %token MUSIC_FUNCTION_SCM_MUSIC_MUSIC %token MUSIC_FUNCTION_SCM_SCM_MUSIC +%token MUSIC_FUNCTION_MARKUP +%token MUSIC_FUNCTION_MARKUP_MARKUP +%token MUSIC_FUNCTION_MARKUP_MUSIC +%token MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC +%token MUSIC_FUNCTION_MARKUP_MARKUP_MUSIC %token DRUMS %token DRUMMODE @@ -989,6 +994,11 @@ Generic_prefix_music_scm: } embedded_scm { $$ = scm_list_3 ($1, make_input (THIS->pop_spot ()), $3); } + | MUSIC_FUNCTION_MARKUP { + THIS->push_spot (); + } full_markup { + $$ = scm_list_3 ($1, make_input (THIS->pop_spot ()), $3); + } | MUSIC_FUNCTION_MUSIC { THIS->push_spot (); } Music { @@ -1006,6 +1016,17 @@ Generic_prefix_music_scm: } embedded_scm embedded_scm { $$ = scm_list_4 ($1, make_input (THIS->pop_spot ()), $3, $4); } + | MUSIC_FUNCTION_MARKUP_MUSIC { + THIS->push_spot (); + } full_markup Music { + $$ = scm_list_4 ($1, make_input (THIS->pop_spot ()), $3, $4->self_scm ()); + scm_gc_unprotect_object ($4->self_scm ()); + } + | MUSIC_FUNCTION_MARKUP_MARKUP { + THIS->push_spot (); + } full_markup full_markup { + $$ = scm_list_4 ($1, make_input (THIS->pop_spot ()), $3, $4); + } | MUSIC_FUNCTION_MUSIC_MUSIC { THIS->push_spot (); } Music Music { @@ -1021,6 +1042,14 @@ Generic_prefix_music_scm: scm_gc_unprotect_object ($5->self_scm ()); scm_gc_unprotect_object ($4->self_scm ()); } + | MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC { + THIS->push_spot (); + } full_markup Music Music { + $$ = scm_list_5 ($1, make_input (THIS->pop_spot ()), + $3, $4->self_scm (), $5->self_scm ()); + scm_gc_unprotect_object ($5->self_scm ()); + scm_gc_unprotect_object ($4->self_scm ()); + } ; Generic_prefix_music: -- 2.39.5