]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4687/1: Let \etc in partial markup commands stand for any arguments
authorDavid Kastrup <dak@gnu.org>
Wed, 9 Dec 2015 20:33:00 +0000 (21:33 +0100)
committerDavid Kastrup <dak@gnu.org>
Wed, 16 Dec 2015 08:07:32 +0000 (09:07 +0100)
Previously, \etc could only stand for a final markup argument.  Now an
arbitrary kind and number of arguments from the last markup command in
a markup command chain may be omitted.

Example:

quarter-markup = \markup \note-by-number #2 \etc

\markup { 3/8: \quarter #1 #UP }

lily/parser.yy
scm/ly-syntax-constructors.scm

index 35d0aa48dc40cd46df5961780c6f8f2fab2d822e..c60c6ed64c1157fa00e516efdcd98b8cb9e9eb0b 100644 (file)
@@ -3671,7 +3671,7 @@ full_markup:
        ;
 
 partial_markup:
-       markup_mode markup_head_1_list ETC
+       markup_mode markup_partial_function ETC
        {
                $$ = MAKE_SYNTAX (partial_markup, @2, $2);
                parser->lexer_->pop_state ();
@@ -3789,6 +3789,37 @@ markup_command_list_arguments:
        }
        ;
 
+markup_partial_function:
+       MARKUP_FUNCTION markup_arglist_partial
+       {
+               $$ = scm_list_1 (scm_cons ($1, scm_reverse_x ($2, SCM_EOL)));
+       }
+       | markup_head_1_list MARKUP_FUNCTION markup_arglist_partial
+       {
+               $$ = scm_cons (scm_cons ($2, scm_reverse_x ($3, SCM_EOL)),
+                              $1);
+       }
+       ;
+
+markup_arglist_partial:
+       EXPECT_MARKUP markup_arglist_partial
+       {
+               $$ = $2;
+       }
+       | EXPECT_SCM markup_arglist_partial
+       {
+               $$= $2;
+       }
+       | EXPECT_MARKUP markup_command_list_arguments
+       {
+               $$ = $2;
+       }
+       | EXPECT_SCM markup_command_list_arguments
+       {
+               $$ = $2;
+       }
+       ;
+
 markup_head_1_item:
        MARKUP_FUNCTION EXPECT_MARKUP markup_command_list_arguments {
          $$ = scm_cons ($1, scm_reverse_x ($3, SCM_EOL));
index 810a30b333e2f63852bf89c96ca06b3f6010c28d..0a12672095701cf1844cef2ba881010afe2be0de 100644 (file)
@@ -203,14 +203,17 @@ into a @code{MultiMeasureTextEvent}."
 (define-public (partial-markup commands)
   ;; Like composed-markup-list, except that the result is a single
   ;; markup command that can be applied to one markup
-  (define (compose arg)
+  (define (compose rest)
     (fold
      (lambda (cmd prev) (append cmd (list prev)))
-     arg
-     commands))
-  (let ((chain (lambda (layout props arg)
-                 (interpret-markup layout props (compose arg)))))
-    (set-object-property! chain 'markup-signature (list markup?))
+     (append (car commands) rest)
+     (cdr commands)))
+  (let ((chain (lambda (layout props . rest)
+                 (interpret-markup layout props (compose rest)))))
+    (set! (markup-command-signature chain)
+          (list-tail
+           (markup-command-signature (caar commands))
+           (length (cdar commands))))
     chain))
 
 (define-public (property-set context property value)