On Sun, Nov 22, 2015 at 2:44 PM, David Kastrup <d...@gnu.org> wrote: > Thomas Morley <thomasmorle...@gmail.com> writes: > > > Though, why it is that arbitrary? > > > > Look at this variation and the attached image: > > > > \version "2.19.29" > > #(define test-nmbrs > > (let ((nmbrs (circular-list 1 2 3 4))) > > (lambda (grob) > > (let ((n (car nmbrs))) > > (set! nmbrs (cdr nmbrs)) > > (grob-interpret-markup grob (number->string n)))))) > > > > { > > \repeat unfold 8 { > > \once \override TextScript.stencil = #test-nmbrs > > c''4^\markup "foo" > > } > > } > > Well, it is exactly 2 variants of 1, 2, 3, 4 each. I suspect that the > order of grob evaluation at some point when a system is printed depends > on the order of memory addresses. > > Find that point and you'll likely also have the culprit for various > other stuff behaving non-deterministically, like what is drawn on top of > what and other things frequently turning up in "make check". > > Here's something interesting.
Setting the stencil during 'before-line-breaking or 'after-line-breaking works for the short example that Harm provided. In longer examples, after-line-breaking goes astray after several lines. Compare: \version "2.19.29" #(define test-nmbrs (let ((nmbrs (circular-list 1 2 3 4))) (lambda (grob) (let ((n (car nmbrs))) (set! nmbrs (cdr nmbrs)) (set! (ly:grob-property grob 'stencil) (grob-interpret-markup grob (number->string n))))))) { \repeat unfold 200 { %% works: \once \override TextScript.before-line-breaking = #test-nmbrs %% jumbling after 3 lines: % \once \override TextScript.after-line-breaking = #test-nmbrs c''4^\markup "" } } %%% In any case, the output of these variants is notably less screwed-up than the original, where jumbling happens almost immediately. My question would be: when does the evaluation of a grob's stencil normally happen? My guess is this normal evaluation is happening based on a haphazard input, that using 'before-line-breaking and 'after-line-breaking is forcing a later evaluation, at a time when grobs have been better arranged by timing. (Please understand that this is largely a guess. I'm finding the code incredible hard to follow.) DN
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user