lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Feed list of strings into markup command expecting markuplist?


From: David Kastrup
Subject: Re: Feed list of strings into markup command expecting markuplist?
Date: Mon, 30 Mar 2020 12:26:27 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Lukas-Fabian Moser <address@hidden> writes:

> Hi all,
>
> I just can't seem to get it right:
>
> \version "2.19"
>
> #(define-markup-command (function-A-taking-markup-list layout props
>  input-list) (markup-list?)
>    (interpret-markup layout props (markup (string-concatenate
> input-list))))
>
> #(define-markup-command (feed-split-string-into-A layout props str)
>  (string?)
>    (let* ((strings (string-split str #\,)))
>      (interpret-markup layout props
>         #{ \markup { \function-A-taking-markup-list #strings } #} ;
> HERE: can this be done without #{ ... #} ?
>         )))
>
> \markup {
>   \function-A-taking-markup-list { a b c }
>   \feed-split-string-into-A "d,e,f"
> }
>
> What is the scheme way to construct a markup list (out of a list of
> strings, for example) that can be passed to a markup command?

A list of strings is a markup list.  However, not every markup list is a
list of strings, so you might be on the safer side by using markup list
processing commands rather than string processing commands.

> In the line marked HERE, I would have expected something like (markup
> #:function-A-taking-markup-list strings), but this did not work. 
> Probably it's because I never fully understood what a markup-list
> really is. :-)

That's more a case of

    Known issues and warnings
    .........................

    The markup-list argument of commands such as ‘#:line’, ‘#:center’, and
    ‘#:column’ cannot be a variable or the result of a function call.

         (markup #:line (function-that-returns-markups))

    is invalid.  One should use the ‘make-line-markup’,
    ‘make-center-markup’, or ‘make-column-markup’ functions instead,

         (markup (make-line-markup (function-that-returns-markups)))


So:

\version "2.19"

#(define-markup-command (function-A-taking-markup-list layout props
 input-list) (markup-list?)
   (interpret-markup layout props (make-concat-markup input-list)))

#(define-markup-command (feed-split-string-into-A layout props str)
 (string?)
   (let* ((strings (string-split str #\,)))
     (interpret-markup layout props
      (make-function-A-taking-markup-list-markup strings)
        )))

\markup {
  \function-A-taking-markup-list { a b c }
  \feed-split-string-into-A "d,e,f"
}

-- 
David Kastrup

reply via email to

[Prev in Thread] Current Thread [Next in Thread]