lilypond-user
[Top][All Lists]
Advanced

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

Re: \parenthesize and optional arguments


From: Marc Hohl
Subject: Re: \parenthesize and optional arguments
Date: Sat, 04 Jul 2015 09:56:13 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0

Am 04.07.2015 um 09:17 schrieb David Kastrup:
[...]
You are thinking of LilyPond/Scheme as a procedural language here.  What
happens here is that you calculate a suitable override and, well, throw
it away.  The return value of this function, calculated later as "arg",
does not care what you have calculated here.

Ah, ok. Yes, I had the opinion that the override is something globally inserted and executed before Lilypond places 'arg'.

Any pointers in the right direction are highly appreciated!

#UP (which is Lilypond-speak for +1).

Ok, it looks like this now:

\version "2.19.20"

parenthesize =
#(define-music-function (dir arg) ((number? 0) ly:music?)
   (_i "Tag @var{arg} to be parenthesized. @arg{dir} is optional and may be
   set to @code{#LEFT} or @code{#RIGHT} for left/right parentheses only.")

   (if (memq 'event-chord (ly:music-property arg 'types))
       ;; arg is an EventChord -> set the parenthesize property
       ;; on all child notes and rests
       (for-each
        (lambda (ev)
          (if (or (memq 'note-event (ly:music-property ev 'types))
                  (memq 'rest-event (ly:music-property ev 'types)))
              (set! (ly:music-property ev 'parenthesize) #t)))
        (ly:music-property arg 'elements))
       ;; No chord, simply set property for this expression:
       (set! (ly:music-property arg 'parenthesize) #t))

   (case dir
         ((-1) #{ \once\override ParenthesesItem.stencils =
                    #(lambda (grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
                       (list (car par-list) point-stencil ))) #arg #})
         ((1) #{ \once \override ParenthesesItem.stencils =
                   #(lambda (grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
                      (list point-stencil (cadr par-list)))) #arg #})
         (else #{ #arg #})))

{ \parenthesize c \parenthesize #LEFT d \parenthesize #RIGHT e}

Would it make sense to enhance the parenthesize function like this, i.e.
create a patch for this?

Cheers,

Marc





reply via email to

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