>From 0e6853a2378f345d14d1b9f417d9b560f271a8f7 Mon Sep 17 00:00:00 2001 From: Malte Meyn Date: Sun, 16 Aug 2015 19:24:23 +0200 Subject: [PATCH] define variants of format-mark-alphabet & friends MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit after Z they continue with Aa Bb Cc instead of AA AB AC TODO: I’ve no idea why vector-map doesn’t work --- scm/define-markup-commands.scm | 48 ++++++++++++++++++++++++++++++++++++++++++ scm/translation-functions.scm | 17 +++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index d7c0f22..752ab86 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -3172,9 +3172,15 @@ format require the prefix @code{#x}. (vector-set! number->mark-letter-vector j (integer->char (+ i (char->integer #\A))))) +; TODO: use vector-map instead of list->vector (map (vector->list ? +(define number->mark-letter-lowercase-vector (list->vector (map char-downcase (vector->list number->mark-letter-vector)))) + (define number->mark-alphabet-vector (list->vector (map (lambda (i) (integer->char (+ i (char->integer #\A)))) (iota 26)))) +; TODO: use vector-map instead of list->vector (map (vector->list ? +(define number->mark-alphabet-lowercase-vector (list->vector (map char-downcase (vector->list number->mark-alphabet-vector)))) + (define (number->markletter-string vec n) "Double letters for big marks." (let* ((lst (vector-length vec))) @@ -3184,6 +3190,14 @@ format require the prefix @code{#x}. (number->markletter-string vec (remainder n lst))) (make-string 1 (vector-ref vec n))))) +(define (number->markletter-var-string vecu vecl n) + "Double letters for big marks, variant." + (let* ((lst (vector-length vecu)) + (q (quotient n lst)) + (r (remainder n lst))) + (string-append (make-string 1 (vector-ref vecu r)) + (make-string q (vector-ref vecl r))))) + (define-markup-command (markletter layout props num) (integer?) #:category other @@ -3216,6 +3230,40 @@ and continue with double letters. (ly:text-interface::interpret-markup layout props (number->markletter-string number->mark-alphabet-vector num))) +(define-markup-command (markletter-var layout props num) + (integer?) + #:category other + "Make a markup letter for @var{num}. The letters start with A address@hidden (skipping address@hidden), and continue with double letters. +This is a variant: it doesn’t continue with AA AB AC but Aa Bb Cc. + address@hidden,quote] +\\markup { + \\markletter #8 + \\hspace #2 + \\markletter #26 +} address@hidden lilypond" + (ly:text-interface::interpret-markup layout props + (number->markletter-var-string number->mark-letter-vector number->mark-letter-lowercase-vector num))) + +(define-markup-command (markalphabet-var layout props num) + (integer?) + #:category other + "Make a markup letter for @var{num}. The letters start with A address@hidden +and continue with double letters. +This is a variant: it doesn’t continue with AA AB AC but Aa Bb Cc. + address@hidden,quote] +\\markup { + \\markalphabet #8 + \\hspace #2 + \\markalphabet #26 +} address@hidden lilypond" + (ly:text-interface::interpret-markup layout props + (number->markletter-var-string number->mark-alphabet-vector number->mark-alphabet-lowercase-vector num))) + (define-public (horizontal-slash-interval num forward number-interval mag) (if forward (cond ;; ((= num 6) (interval-widen number-interval (* mag 0.5))) diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index 219275f..d466f5e 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -152,6 +152,23 @@ way the transposition number is displayed." (number->string (ly:context-property context 'currentBarNumber))))) +(define-public (format-mark-alphabet-var mark context) + (make-bold-markup (make-markalphabet-var-markup (1- mark)))) + +(define-public (format-mark-box-alphabet-var mark context) + (make-bold-markup (make-box-markup (make-markalphabet-var-markup (1- mark))))) + +(define-public (format-mark-circle-alphabet-var mark context) + (make-bold-markup (make-circle-markup (make-markalphabet-var-markup (1- mark))))) + +(define-public (format-mark-letters-var mark context) + (make-bold-markup (make-markletter-var-markup (1- mark)))) + +(define-public (format-mark-box-letters-var mark context) + (make-bold-markup (make-box-markup (make-markletter-var-markup (1- mark))))) + +(define-public (format-mark-circle-letters-var mark context) + (make-bold-markup (make-circle-markup (make-markletter-var-markup (1- mark))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Bass figures. -- 1.9.1