Reinhold Kainhofer <reinh...@kainhofer.com> writes:

> I'm defining my own predicate symbol-or-markup? for the argument of a markup 
> function. 
>
>     #(define-public (symbol-or-markup? x)
>       (or (symbol? x) (markup? x)))
>
>     #(define-markup-command (mytest layout props label arg)
>       (symbol-or-markup? markup?)
>       (let* ((s (if (symbol? label) (symbol->string label) (label))))
>         (interpret-markup layout props 
>                           (markup #:concat ("Label: " s " arg: " arg)))))
>
> If I pass a symbol, then everything works fine
>     \markup \mytest #'test \bold "f"
>
> but, as soon as I try to pass a markup, the parser complains that it expects 
> an SCM_IDENTIFIER or SCM_TOKEN:
>
>     \markup \mytest "test" \bold "f"
>     \markup \mytest \bold "test" \bold "f"
>     \markup \mytest \markup { "test" } \bold "f"
>
> markup-or-symbol.ly:15:21: Fehler: syntax error, unexpected STRING, expecting 
> SCM_IDENTIFIER or SCM_TOKEN
> \markup \mytest "test
>                      " \bold "f"
> markup-or-symbol.ly:16:16: Fehler: syntax error, unexpected MARKUP_FUNCTION, 
> expecting SCM_IDENTIFIER or SCM_TOKEN
> \markup \mytest 
>                 \bold "test" \bold "f"
> markup-or-symbol.ly:17:16: Fehler: syntax error, unexpected \markup, 
> expecting 
> SCM_IDENTIFIER or SCM_TOKEN
> \markup \mytest 
>                 \markup { "test" } \bold "f"
>
>
> Simple test case attached. Any idea what might be wrong?

markup? is specially detected and implemented in the parser.  It is
never actually called but rather used as a switch.

markup-or-symbol? isn't.  All predicates not recognized as markup? or
markup-list? expect a Scheme expression that will then be checked for
validity using the respective predicate.

-- 
David Kastrup


_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to