lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: measure numbers with letters


From: Paul Scott
Subject: Re: measure numbers with letters
Date: Sun, 23 Jul 2017 12:13:08 -0700
User-agent: NeoMutt/20170609 (1.8.3)

On Sun, Jul 23, 2017 at 12:22:27PM +0200, Thomas Morley wrote:
> 2017-07-23 6:49 GMT+02:00 Paul Scott <address@hidden>:
> > On Sat, Jul 22, 2017 at 05:25:30PM -0700, madMuze wrote:
> 
> Hi Paul,
> 
> here my own approach (extending the default 'robust-bar-number-function')

This looks great!  Do I have a choice to not have the a b sublettering for
alternatives?

Thank you,

Paul


> 
> \version "2.19.64"
> 
> #(define* ((my-robust-bar-number-function #:optional (fixed #f))
>              barnum measure-pos alt-number context)
>   (define strg " abcdefghijklmnopqrstuvwxyz")
>   (define (get-number-and-power an pow)
>     (if (<= an alt-number)
>         (get-number-and-power (+ an (expt 26 (1+ pow))) (1+ pow))
>         (cons (+ alt-number (- (expt 26 pow) an)) (1- pow))))
>   (define (make-letter so-far an pow)
>     (if (< pow 0)
>         so-far
>         (let ((pos (modulo (quotient an (expt 26 pow)) 26)))
>           (make-letter (string-append so-far
>                                       (substring (string-drop strg 1)
>                                                  pos
>                                                  (1+ pos)))
>                        an
>                        (1- pow)))))
>   (let* ((number-and-power (get-number-and-power 0 0))
>          (begin-measure (= 0 (ly:moment-main-numerator measure-pos)))
>          (maybe-open-parenthesis (if begin-measure "" "("))
>          (maybe-close-parenthesis (if begin-measure "" ")")))
>     (markup
>       (string-append
>         maybe-open-parenthesis
>         (number->string (if (number? fixed) fixed barnum))
>         (cond
>           ((not (number? fixed))
>             "")
>           ((and (number? fixed) (< (- barnum fixed) 27))
>             (string-capitalize (string (string-ref strg (- barnum fixed)))))
>           (else
>             (begin
>               (ly:warning
>                 "Requested letter-number exceeds the alphabet: ~a, ignoring."
>                 (- barnum fixed))
>               "")))
>         (make-letter ""
>                      (car number-and-power)
>                      (cdr number-and-power))
>         maybe-close-parenthesis))))
> 
> keepBarNumberWithLetters =
>   \context Score
>   \applyContext
>   #(lambda (context)
>     (let ((static-bar (ly:context-property context 'currentBarNumber)))
>       (ly:context-set-property! context
>         'barNumberFormatter (my-robust-bar-number-function static-bar))))
> 
> defaultBarNumbers =
>   \set Score.barNumberFormatter = #robust-bar-number-function
> 
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> %% EXAMPLE
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> 
> \layout {
>   \context {
>     \Score
>     %% For testing. Those settings shouldn't have any impact on the
>     %% barNumberFormatter
>     \override BarNumber.break-visibility = ##(#f #t #t)
>     barNumberVisibility = #first-bar-number-invisible-save-broken-bars
>     alternativeNumberingStyle = #'numbers-with-letters
>   }
> }
> 
> {
>   c'1  c'
>   \keepBarNumberWithLetters
>   c' c' c'2 \bar "" \break c'2
>   \repeat volta 2 { c'1 } \alternative { { cis'1 } { ces'1 } }
>   %% NB
>   %% Only the letters of the alphabet plus space are available.
>   %% Exceeding those will be ignored and a warning issued.
>   %\repeat unfold 25 c'1
>   \keepBarNumberWithLetters
>   c'1  c'
>   \defaultBarNumbers
>   c' c' c'
> }
> 
> 
> HTH,
>   Harm
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]