Hi again, On Sat, Dec 8, 2012 at 7:21 AM, David Nalesnik <david.nales...@gmail.com> 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 > <jeffrey.trevi...@gmail.com> 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 '()))))) _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user