Skip to content

Commit

Permalink
Issue 4687/1: Let \etc in partial markup commands stand for any argum…
Browse files Browse the repository at this point in the history
…ents

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 }
  • Loading branch information
dakhubgit committed Dec 16, 2015
1 parent 16661f7 commit 70eaa17
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 7 deletions.
33 changes: 32 additions & 1 deletion lily/parser.yy
Expand Up @@ -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 ();
Expand Down Expand Up @@ -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));
Expand Down
15 changes: 9 additions & 6 deletions scm/ly-syntax-constructors.scm
Expand Up @@ -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)
Expand Down

0 comments on commit 70eaa17

Please sign in to comment.