lilypond-user
[Top][All Lists]
Advanced

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

Re: Catch direction operators


From: David Kastrup
Subject: Re: Catch direction operators
Date: Sun, 29 Sep 2013 11:08:05 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Urs Liska <address@hidden> writes:

> Hi David,
>
> this is great!
>
> Am 29.09.2013 09:51, schrieb David Kastrup:
>> David Kastrup <address@hidden> writes:
>>
>>> colorizeDir =
>>> #(define-music-function (parser location item)
>>>    (symbol-list-or-music?)
>>>    (define (grob-colorize-dir grob)
>>>      (let ((ev (event-cause grob)))
>>>        (and ev (ly:event-property ev 'direction #f)
>>>                red)))
>>>    #{ \tweak color #grob-colorize-dir #item #})
>> Not everything might be prepared to deal with a color #f, so it may be
>> safer to write the slightly more complex
>>
>> (if (and ev (ly:event-property ev 'direction #f))
>>      red '())
>>
>> expression inside.
>>
> Could you please explain to me (or give a few hints) what this last
> (and) expression does exactly?

if ev is non-#f and the property with the name 'direction in ev is
non-#f (while considering an unset direction as defaulting to #f), then
red is returned, otherwise '().

> I would like to extend this to treat up/down independently
>
>
> I tried to modify it as follows:
>
> colorizeDir =
>
> #(define-music-function (parser location item)
>
>   (symbol-list-or-music?)
>
>   (define (grob-colorize-dir grob)
>
>     (let ((ev (event-cause grob)))
>
>       (if (and ev (ly:event-property ev 'direction #f))
>
>           (cond ((equal? 'direction 1) red)

The symbol 'direction is a symbol and never equal to a number.  You
forgot to look up the property, instead comparing with the _name_ of the
property.

Any reason for the double-spacing here?  It's a nuisance to quote and
comment on.

You can write:

#(define-music-function (parser location item)
   (symbol-list-or-music?)
   (define (grob-colorize-dir grob)
     (let ((ev (event-cause grob)))
       (case (ly:event-property ev 'direction)
             ((1) red)
             ((-1) blue)
             (else '())))))
   #{ \tweak color #grob-colorize-dir #item #})

-- 
David Kastrup




reply via email to

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