Hi Arne,
2016-08-07 12:54 GMT+02:00 arnepe <arne.pet...@berlin.de>:
> hello,
>
> in my case, Lily throws an errror when compiling music starting with a
> \partial.
> Otherwise it compiles fine.
>
> see attached file
> debug-mmr.txt
> <http://lilypond.1069038.n5.nabble.com/file/n193523/debug-mmr.txt>
>
> /(hope that the file uploads correctly - haven't tried it before...)/
>
> greetings
> Arne Peters
thanks for testing.
I now come up with:
\version "2.19.45"
%% define the custom context-property `printMmrRange'
#(define (define-translator-property symbol type? description)
(if (not (and (symbol? symbol)
(procedure? type?)
(string? description)))
(ly:error "error in call of define-translator-property"))
(if (not (equal? (object-property symbol 'translation-doc) #f))
(ly:error (_ "symbol ~S redefined") symbol))
(set-object-property! symbol 'translation-type? type?)
(set-object-property! symbol 'translation-doc description)
symbol)
#(for-each
(lambda (x)
(apply define-translator-property x))
`((printMmrRange
,boolean?
"Print range of a MultiMeasureRest")))
%% define how to format `start' and `stop'
%% for `MultiMeasureRestNumber' in the engraver
%% TODO find a method to set the values for `translate-scaled'
formatMMRNumber =
#(define-scheme-function (start stop)(integer? integer?)
#{
\markup
\center-column {
#(number->string (- stop start))
%% value found by try and error
\translate-scaled #'(0 . -6.5)
\with-dimensions #empty-interval #empty-interval
\halign #CENTER
\normal-text
\fontsize #-2
\line {
#(number->string start)
" - "
#(number->string (1- stop))
}
}
#})
#(define (mmr-range-engraver context)
"Print the range of a @code{MultiMeasureRest}, if the context-property
@code{printMmrRange} is set @code{#t}."
(let ((print-mmr-nmbr-list '())
(mmr-bar-numbr-list '()))
`((acknowledgers
(multi-measure-interface
.
,(lambda (engraver grob source-engraver)
(if (eq? (grob::name grob) 'MultiMeasureRestNumber)
(set! print-mmr-nmbr-list
(cons
(cons
grob
(ly:context-property context 'printMmrRange #f))
print-mmr-nmbr-list)))
(if (eq? (grob::name grob) 'MultiMeasureRest)
(begin
(set! mmr-bar-numbr-list
(cons
(cons
grob
(ly:context-property context 'currentBarNumber))
mmr-bar-numbr-list)))))))
(finalize
.
,(lambda (trans)
(for-each
(lambda (mmr mmr-nmbr)
(let ((measure-count (ly:grob-property (car mmr) 'measure-count)))
(if (and (cdr mmr-nmbr) (> measure-count 1))
(ly:grob-set-property! (car mmr-nmbr) 'text
(formatMMRNumber
(cdr mmr)
(+ measure-count (cdr mmr)))))))
mmr-bar-numbr-list
print-mmr-nmbr-list)
(set! print-mmr-nmbr-list '())
(set! mmr-bar-numbr-list '()))))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\layout {
\override Score.BarNumber.break-visibility = ##(#t #t #t)
}
\score {
{
\time 3/4
c'2.
\compressFullBarRests
R2.*14
c'2.
\once \unset printMmrRange
R2.*15
c'2.
R2.*15
c'2.
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
\score {
{
\time 3/4
c'2.
\compressFullBarRests
R2.*14
c'2.
\once \set printMmrRange = ##t
R2.*15
c'2.
R2.*15
c'2.
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##f
}
}
}
\score {
{
\time 3/4
c'2.
\compressFullBarRests
R1*3/4*14
c'2.
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
\score {
{
c'1
\compressFullBarRests
R1*14
c'1
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
\score {
{
\time 5/8
\partial 4 c'4
c'2 c'8
\compressFullBarRests
R1*5/8*15
c'2 c'8
R1*5/8*13
c'2 cis'8
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
I didn't manage to completely find my way through the hints David K gave here:
http://lists.gnu.org/archive/html/lilypond-user/2016-08/msg00033.html
At least it works now with upbeats and looks generel more robust.
Though, there still may be issues.
@all: Please test. I need the feed-back.
Cheers,
Harm
\version "2.19.45"
%% define the custom context-property `printMmrRange'
#(define (define-translator-property symbol type? description)
(if (not (and (symbol? symbol)
(procedure? type?)
(string? description)))
(ly:error "error in call of define-translator-property"))
(if (not (equal? (object-property symbol 'translation-doc) #f))
(ly:error (_ "symbol ~S redefined") symbol))
(set-object-property! symbol 'translation-type? type?)
(set-object-property! symbol 'translation-doc description)
symbol)
#(for-each
(lambda (x)
(apply define-translator-property x))
`((printMmrRange
,boolean?
"Print range of a MultiMeasureRest")))
%% define how to format `start' and `stop'
%% for `MultiMeasureRestNumber' in the engraver
%% TODO find a method to set the values for `translate-scaled'
formatMMRNumber =
#(define-scheme-function (start stop)(integer? integer?)
#{
\markup
\center-column {
#(number->string (- stop start))
%% value found by try and error
\translate-scaled #'(0 . -6.5)
\with-dimensions #empty-interval #empty-interval
\halign #CENTER
\normal-text
\fontsize #-2
\line {
#(number->string start)
" - "
#(number->string (1- stop))
}
}
#})
#(define (mmr-range-engraver context)
"Print the range of a @code{MultiMeasureRest}, if the context-property
@code{printMmrRange} is set @code{#t}."
(let ((print-mmr-nmbr-list '())
(mmr-bar-numbr-list '()))
`((acknowledgers
(multi-measure-interface
.
,(lambda (engraver grob source-engraver)
(if (eq? (grob::name grob) 'MultiMeasureRestNumber)
(set! print-mmr-nmbr-list
(cons
(cons
grob
(ly:context-property context 'printMmrRange #f))
print-mmr-nmbr-list)))
(if (eq? (grob::name grob) 'MultiMeasureRest)
(begin
(set! mmr-bar-numbr-list
(cons
(cons
grob
(ly:context-property context 'currentBarNumber))
mmr-bar-numbr-list)))))))
(finalize
.
,(lambda (trans)
(for-each
(lambda (mmr mmr-nmbr)
(let ((measure-count (ly:grob-property (car mmr) 'measure-count)))
(if (and (cdr mmr-nmbr) (> measure-count 1))
(ly:grob-set-property! (car mmr-nmbr) 'text
(formatMMRNumber
(cdr mmr)
(+ measure-count (cdr mmr)))))))
mmr-bar-numbr-list
print-mmr-nmbr-list)
(set! print-mmr-nmbr-list '())
(set! mmr-bar-numbr-list '()))))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\layout {
\override Score.BarNumber.break-visibility = ##(#t #t #t)
}
\score {
{
\time 3/4
c'2.
\compressFullBarRests
R2.*14
c'2.
\once \unset printMmrRange
R2.*15
c'2.
R2.*15
c'2.
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
\score {
{
\time 3/4
c'2.
\compressFullBarRests
R2.*14
c'2.
\once \set printMmrRange = ##t
R2.*15
c'2.
R2.*15
c'2.
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##f
}
}
}
\score {
{
\time 3/4
c'2.
\compressFullBarRests
R1*3/4*14
c'2.
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
\score {
{
c'1
\compressFullBarRests
R1*14
c'1
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
\score {
{
\time 5/8
\partial 4 c'4
c'2 c'8
\compressFullBarRests
R1*5/8*15
c'2 c'8
R1*5/8*13
c'2 cis'8
}
\layout {
\context {
\Voice
\consists #mmr-range-engraver
printMmrRange = ##t
}
}
}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user