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