Han-Wen Nienhuys <[EMAIL PROTECTED]> writes:

> I think the embedded_scm_or_full_markup is inelegant. Why can't you
> add a separate
>
>     MUSIC_FUNCTION_SCM_MARKUP
>
> to do what you want? the typechecking will be more detailed, and it's
> IMO less ugly.

Ok.
However, I must be missing something obvious, as this does not seem
cleaner:

Index: lily/lexer.ll
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/lexer.ll,v
retrieving revision 1.149
diff -u -r1.149 lexer.ll
--- lily/lexer.ll	10 Oct 2004 19:41:07 -0000	1.149
+++ lily/lexer.ll	23 Oct 2004 09:59:27 -0000
@@ -922,6 +922,26 @@
 	{
 		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;
Index: lily/music-function.cc
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/music-function.cc,v
retrieving revision 1.6
diff -u -r1.6 music-function.cc
--- lily/music-function.cc	7 Oct 2004 19:39:50 -0000	1.6
+++ lily/music-function.cc	23 Oct 2004 09:59:27 -0000
@@ -42,8 +42,13 @@
       
       if (scm_car (s) == Music_type_p_proc)
 	str += "music";
-      else if (ly_c_procedure_p (scm_car (s)))
-	str += "scm";
+      else if (ly_c_procedure_p (scm_car (s))) 
+	{
+	  if (ly_c_equal_p (scm_car (s), scm_primitive_eval (ly_symbol2scm ("markup?"))))
+	    str += "markup";
+	  else
+	    str += "scm";
+	}
     }
   if (str == "") str = "noarg";
   scm_set_object_property_x (func, ly_symbol2scm ("music-function-signature"),
Index: lily/parser.yy
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/parser.yy,v
retrieving revision 1.433
diff -u -r1.433 parser.yy
--- lily/parser.yy	10 Oct 2004 19:37:58 -0000	1.433
+++ lily/parser.yy	23 Oct 2004 09:59:32 -0000
@@ -365,6 +365,11 @@
 %token <scm> MUSIC_FUNCTION_SCM_MUSIC 
 %token <scm> MUSIC_FUNCTION_SCM_MUSIC_MUSIC 
 %token <scm> MUSIC_FUNCTION_SCM_SCM_MUSIC 
+%token <scm> MUSIC_FUNCTION_MARKUP 
+%token <scm> MUSIC_FUNCTION_MARKUP_MARKUP 
+%token <scm> MUSIC_FUNCTION_MARKUP_MUSIC 
+%token <scm> MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC 
+%token <scm> MUSIC_FUNCTION_MARKUP_MARKUP_MUSIC 
 
 %token DRUMS
 %token DRUMMODE
@@ -989,6 +994,11 @@
 	} 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 @@
 	}  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 @@
 		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:
nicolas
_______________________________________________
lilypond-devel mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to