[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Aleatoric / modern notation
From: |
David Nalesnik |
Subject: |
Re: Aleatoric / modern notation |
Date: |
Sat, 8 Dec 2012 19:21:02 -0600 |
Hi again,
On Sat, Dec 8, 2012 at 7:21 AM, David Nalesnik <address@hidden> wrote:
> Hi Jeffrey,
>
> I'm copying this to the list since I myself am not sure about something here.
>
> On Sat, Dec 8, 2012 at 5:13 AM, Jeffrey Trevino
> <address@hidden> wrote:
>> Hi David,
>>
>> Thanks for revising this more for me. I really appreciate your efforts, and
>> I will take a look at this asap and write back. For my learning, could you
>> please explain what exactly you changed between versions 4 and 5 that got it
>> working in parallel?
>>
>
> Well, I must say that I was a bit mystified by this, and I don't
> understand why the original form wouldn't work on multiple staves.
>
[snip]
>
> I did notice something which I can't account for. You'll notice that
> `frameEngraver4.ly' uses a variable "event-drul".
>
It turns out that the my definition of event-drul as '(() . ()) was
the problem. I substituted (cons '() '()) and everything works just
fine...even with the file that gave you the issues with multiple
staves. I don't understand why '(() . ()) and (cons '() '()) aren't
equivalent.
Trying to work out the problem, I've done a little rewriting so I'll
include the engraver here. You can just substitute this in the
problematic file.
frameEngraver =
#(lambda (context)
(let ((span '())
(stub '())
(event-drul (cons '() '())))
(make-engraver
(listeners ((frame-event engraver event)
(if (= START (ly:event-property event 'span-direction))
(set-car! event-drul event)
(begin
(set-cdr! event-drul event)
(set-car! event-drul '())))))
(acknowledgers
((note-column-interface engraver grob source-engraver)
(if (ly:spanner? span)
(begin
(ly:pointer-group-interface::add-grob span 'elements grob)
(add-bound-item span grob)))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob)))
((script-interface engraver grob source-engraver)
(if (ly:spanner? span)
(ly:pointer-group-interface::add-grob span 'elements grob))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob)))
((dynamic-interface engraver grob source-engraver)
(if (ly:spanner? span)
(ly:pointer-group-interface::add-grob span 'elements grob))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob)))
((inline-accidental-interface engraver grob source-engraver)
(if (ly:spanner? span)
(ly:pointer-group-interface::add-grob span 'elements grob))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob))))
((process-music trans)
(if (ly:stream-event? (car event-drul))
(begin
(set! span (ly:engraver-make-grob trans 'Frame (car event-drul)))
(set! stub (ly:engraver-make-grob trans 'FrameStub (car
event-drul)))
(ly:grob-set-object! stub 'frame span)
(ly:grob-set-property! stub 'direction LEFT)
(set-car! event-drul '())))
(if (ly:stream-event? (cdr event-drul))
(if (null? span)
(ly:warning "No start to this box.")
(begin
(set! stub (ly:engraver-make-grob trans 'FrameStub
(cdr event-drul)))
(ly:grob-set-property! stub 'direction RIGHT)
(ly:grob-set-object! stub 'frame span)
(ly:engraver-announce-end-grob trans span (cdr event-drul))
(set-cdr! event-drul '())))))
((stop-translation-timestep trans)
(set! stub '())))))