2015-12-09 12:52 GMT+01:00 Andrew Bernard <andrew.bern...@gmail.com>: > Hi Abraham, > > Well, as a very quick hack, you can change the uppercase hardwired A in this > code to lowercase hardwired as below. I am not suggesting this is the best > solution, but it works. > > Andrew > > > > — snip > > define-markup-commands.scm > > > (define number->mark-letter-vector (make-vector 25 #\a)) > > (do ((i 0 (1+ i)) > (j 0 (1+ j))) > ((>= i 26)) > (if (= i (- (char->integer #\i) (char->integer #\a))) > (set! i (1+ i))) > (vector-set! number->mark-letter-vector j > (integer->char (+ i (char->integer #\a))))) > > (define number->mark-alphabet-vector (list->vector > (map (lambda (i) (integer->char (+ i > (char->integer #\a)))) (iota 26)))) > > — snip >
This whole stuff looks quite obfuscated to me. Currently we do a lot of calculation to end up with then hard-coded vectors. Why not give the initial value directly? Below three suggestions, via string, char-set, vector. Maybe we could even introduce a context-property for it. To get lowercase values uncomment the relevant line (see comments inline) \version "2.19.32" %%%% (1) Possible characters are given as string %%{ #(define mark-string "ABCDEFGHIJKLMNOPQRSTUVWXYZ") %% uncomment for lowercase: %#(set! mark-string (string-downcase mark-string)) #(define mark-vector (list->vector (string->list mark-string))) #(define mark-vector-I (list->vector (string->list (string-delete mark-string (string->char-set "iI"))))) %} %%%% (2) Possible characters are taken from a char-set %{ #(define mark-char-set char-set:upper-case) %% uncomment for lowercase: %#(set! mark-char-set char-set:lower-case) #(define mark-vector (list->vector (char-set->list mark-char-set))) #(define mark-vector-I (list->vector (char-set->list (char-set-difference mark-char-set (string->char-set "iI"))))) %} %%%% (3) Possible characters are given as vector %{ #(define mark-initial-vector #(#\A #\B #\C #\D #\E #\F #\G #\H #\I #\J #\K #\L #\M #\N #\O #\P #\Q #\R #\S #\T #\U #\V #\W #\X #\Y #\Z)) %% uncomment for lowercase: %%% adjusted copy from music-functions.scm %#(define (vector-map f v) % "Map F over V. Returns a new created vector." % (do ((n (vector-length v)) % (i 0 (+ i 1))) % ((>= i n)) % (vector-set! v i (f (vector-ref v i)))) % v) % %#(set! mark-initial-vector (vector-map char-downcase mark-initial-vector)) #(define mark-vector mark-initial-vector) #(define mark-vector-I (list->vector (remove (lambda (c) (or (char=? #\i c) (char=? #\I c))) (vector->list mark-initial-vector)))) %} %%%% The following (adjusted) copies need to be here to make it work without %%%% changing the source-code %% c/p from define-markup-commands.scm #(define (number->markletter-string vec n) "Double letters for big marks." (let* ((lst (vector-length vec))) (if (>= n lst) (string-append (number->markletter-string vec (1- (quotient n lst))) (number->markletter-string vec (remainder n lst))) (make-string 1 (vector-ref vec n))))) %% adjusted copies from define-markup-commands.scm #(define-markup-command (markalphabet layout props num) (integer?) #:category other (interpret-markup layout props (number->markletter-string mark-vector num))) #(define-markup-command (markletter layout props num) (integer?) #:category other (interpret-markup layout props (number->markletter-string mark-vector-I num))) %% c/p from translation-functions.scm #(define (format-mark-letters mark context) (make-bold-markup (make-markletter-markup (1- mark)))) \score { \new Staff { \mark #8 R1 \mark #9 R1 \mark #10 R1 \mark #30 } \layout { \context { \Score markFormatter = #format-mark-letters } } } Cheers, Harm _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user