lilypond-devel
[Top][All Lists]
Advanced

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

Re: Allow defining markup commands in LilyPond syntax (issue 324140043 b


From: dak
Subject: Re: Allow defining markup commands in LilyPond syntax (issue 324140043 by address@hidden)
Date: Sun, 30 Jul 2017 09:07:17 -0700

Reviewers: lemzwerg, thomasmorley651,

Message:
On 2017/07/30 15:41:56, thomasmorley651 wrote:
If I understand correctly the main advantage for the user will be the
possibility to define custom markup-commands with LilyPond-syntax.
Collecting a
subset of preexisting commands to substitute tedious coding/typing.
P.e.
\markup my-name = \markup \with-color #red \rotate #90 \italic
\fontsize #3 \etc
and use it as
\markup \my-name "My text!"

Well, that is already possible as

my-name-markup = \markup \with-color #red \rotate #90 \italic \fontsize
#3 \etc

However, this does not give you the make-my-name-markup convenience
function and
consequently does not work in the markup macro.  Also, the user needs to
"mangle"
the name for the markup command himself by appending "-markup" which is
ugly.

Whereas markup-commands with completely new functionality would need
to be
defined as before:
  (define-markup-command (command-name layout props args...)
    args-signature
    [ #:category category ]
    [ #:properties property-bindings ]
    documentation-string
    ..body..)

Basically yes, like with \etc for music functions.

I should download/apply this patch. After having played around with it
I'll
probably be able to say more.

For now two remarks/questions:


https://codereview.appspot.com/324140043/diff/1/scm/document-markup.scm
File scm/document-markup.scm (right):


https://codereview.appspot.com/324140043/diff/1/scm/document-markup.scm#newcode96
scm/document-markup.scm:96: (set! all-markup-commands (sort!
all-markup-commands
markup-name<?))
Looks like 'all-markup-(list)-commands' could be used to simplify
'all-relevant-markup-commands' in 'markup->string' from markup.scm

Good grief.  What is an expensive calculation like that doing inside of
a recursive function definition?  When checking the respective condition
as-needed would be so much faster than checking the weirdly stated
condition

     ((member (car m)
              (primitive-eval (cons 'list
all-relevant-markup-commands)))

This looks like a remnant of debug code?  Can't really tell.

https://codereview.appspot.com/324140043/diff/1/scm/markup-macros.scm
File scm/markup-macros.scm (right):


https://codereview.appspot.com/324140043/diff/1/scm/markup-macros.scm#newcode113
scm/markup-macros.scm:113: (defmacro*-public markup-lambda
Not sure I understand what 'markup-(list-)lambda' (as an
"unregistered" markup
command) is used for.
Is it for use (as an example) in on-the-fly?
It's public, so if a user could use it directly, why not document it
or at least
put up a regtest.
Or am I totally wrong?

Basically,

\markup blabla = #(markup-lambda (...) ...)

is the same as
#(define-markup-command (blabla ...) ...)

That's all.  You are right that it would make sense to generally replace

\on-the-fly #(lambda (layout props whatever) ...)

with

$(markup-lambda (layout props whatever) (markup?) ...)

However, I am not really sure why we don't have all the \on-the-fly
purposed functions as proper markup functions in the first place.  Some
sort of scoping problem?

I think it would be too invasive to change that for 2.20 though.
Something to keep on the agenda.

Description:
Allow defining markup commands in LilyPond syntax

This works with assignments of the form

    \markup with-red = \markup \with-color #red \etc

or similar.  The resulting definition (in addition to being available
as \with-red command inside of markups) can be used with the `markup'
macro and also gets a `make-with-red-markup' convenience function.


Also contains commits:

markup-partial regtest: use \markup function assignment



Changes: show \markup xxx = ... \etc assignments



Parser: let `assignment_id' return a symbol

That's actually what's needed rather than a string.



Split off `markup-lambda' from `define-markup-command'

Also markup-list-lambda from define-markup-list-command.



Let `make-markup' fetch the signature itself

Also don't export it from markup-macros.scm: it is an internal function.



Reorganize markup commands to use object properties

This loosens the ties between the actual markup function and its
calling methods.

Please review this at https://codereview.appspot.com/324140043/

Affected files (+215, -176 lines):
  M Documentation/changes.tely
  M input/regression/markup-partial.ly
  M lily/include/lily-imports.hh
  M lily/lexer.ll
  M lily/lily-imports.cc
  M lily/parser.yy
  M lily/text-interface.cc
  M scm/document-markup.scm
  M scm/markup-macros.scm





reply via email to

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