Ian Hulin <i...@hulin.org.uk> writes:

> Hi all,
> The patch had to get pulled from staging as although it passed reg.
> tests it wouldn't compile the doc.  I can easily fix the snippet in
> /Documentation/snippets/three-sided-box.ly, but this leaves one more
> problem in the docs, this time in /extending/.
>
> I pulled out and tested the examples in separate .ly file and the
> format that fails is
> #(define-markup-command (double-box layout props text) (markup?)
>   "Draw a double box around text."
>   (interpret-markup layout props
>     #{\markup \override #'(box-padding . 0.4) \box
>             \override #'(box-padding . 0.6) \box { $text }#}))
> \markup \double-box A
>
> but
> #(define-markup-command (double-box layout props text) (markup?)
>   "Draw a double box around text."
>   (interpret-markup layout props
>     (markup #:override '(box-padding . 0.4) #:box
>             #:override '(box-padding . 0.6) #:box text)))
> \markup \double-box A
>
> works fine.  This is not restricted to the double-box thing, it's
> general to doing
> interpret-markup #{ \markup \markup-command #'par ... #} within a
> #(define-markup-command ...  ) block.


> I'd like to deprecate this as I think it's nasty, smelly, evil and
> kludgy

Care to explain why being able to use the same syntax as one uses in the
main document is nasty, smelly, evil and kludgy?  Should we disallow
\markup syntax in the main document as well?

> and ask that users use
>
> interpret-markup ( markup #:markup-command 'par ... ) instead.
>
> We'd mark this as such in NEWS, meanwhile taking out the offending
> examples from /extending/.
>
> WDYT?

I think that there is nothing much out of the ordinary happening when
the above command is being run, so it is quite likely that we'll get the
same kind of breakage in other situations.

If I call

lilypond scheme-sandbox
and enter
(let ((text "xxx"))
#{ \markup \override #'(box-padding . 0.4) \box
           \override #'(box-padding . 0.6) \box { $text }#})

I get
(#<procedure line-markup (layout props args)> ((#<procedure
override-markup (layout props new-prop arg)> (box-padding . 0.4)
(#<procedure box-markup (layout props arg)> (#<procedure override-markup
(layout props new-prop arg)> (box-padding . 0.6) (#<procedure box-markup
(layout props arg)> "xxx"))))))

as result which is perfectly reasonable and does not expose the user to
non-Lilypond syntax, let alone macro expansion.

Since you are the resident expert on Guile v2, it would be nice if you
explained just what in Guile v2 happens to turn this into something
nasty, smelly, evil and kludgy.

It is _exactly_ what the parser will deliver for this particular markup
also in the main document, so if it breaks in #{ ... #}, it very likely
also breaks in the main document.  Should we only be allowed to specify
markups in Scheme macro syntax in future?

-- 
David Kastrup


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

Reply via email to