Hello,

I have this snippet that combines subsequent multimeasure rests into a 
multiplied one that Lilypond can compress, that I grabbed from somewhere a 
while ago. It used to work without errors, if I remember well, in Lilypond 
2.20. In 2.22.1 it still "works" but throws an error for the first line of the 
snippet, namely:
syntax error, unexpected SYMBOL, expecting '.' or '='

​#(define (append-merge x l r)
It seems that something changed in 2.22 that makes the snippet misbehave. 
Here's the snippet:
#(define (append-merge x l r)
"Add x to the head of list l, merging skips,
and if r is true also merging full measure rests."
(if (and (pair? l)
(ly:music? x)
(ly:music? (car l))
(or (and (music-is-of-type? x 'skip-event)
(music-is-of-type? (car l) 'skip-event))
(and r
(music-is-of-type? x 'multi-measure-rest)
(music-is-of-type? (car l) 'multi-measure-rest)))
(not (pair? (ly:music-property (car l) 'articulations))))
(let ((total
(ly:moment-add
(ly:music-duration-length (car l))
(ly:music-duration-length x)
)))
(set! (ly:music-property x 'duration)
(make-duration-of-length total))
(cons x (cdr l)))
(cons x l)))

​
mergeSkips = #(define-music-function
(parser location rests-also music) ((boolean?) ly:music?)
"Merge successive skips in sequential music,
optionally merge full-measure rests as well."
(music-map
(lambda (m)
(if (music-is-of-type? m 'sequential-music)
(ly:music-set-property! m
'elements
(fold-right (lambda (x l)
(append-merge x l rests-also))
'()
(ly:music-property m 'elements))))
m)
music))

mergeFullBarRests = #(define-music-function
(parser location music) (ly:music?)
#{ \mergeSkips ##t $music #})
​
\score {
\mergeFullBarRests {
\context Staff = "staff1" {
\compressEmptyMeasures
c1 R1 R1 R1
}
}
}

Would it be possible to update it to work on Lilypond 2.22.1?
Regards,
Martín.

Reply via email to