1 ;;;; figured bass support ...
5 "A bass figure, including bracket"
8 (define (recursive-split-at pred? l)
12 ((x (split-at-predicate pred? l)))
13 (set-cdr! x (recursive-split-at pred? (cdr x)))
17 (define-public (make-bass-figure-markup figures context)
19 (define (no-end-bracket? f1 f2)
20 (eq? (ly:get-mus-property f1 'bracket-stop) '())
22 (define (no-start-bracket? f1 f2)
23 (eq? (ly:get-mus-property f2 'bracket-start) '())
26 ;; TODO: support slashed numerals here.
27 (define (fig-to-markup fig-music)
29 ((align-accs (eq? #t (ly:get-context-property context 'alignBassFigureAccidentals)))
30 (fig (ly:get-mus-property fig-music 'figure))
31 (acc (ly:get-mus-property fig-music 'alteration))
35 (make-simple-markup fig)
36 (make-simple-markup (if align-accs " " ""))
40 (make-line-markup (list fig-markup
41 (alteration->text-accidental-markup acc)))
45 (define (fig-seq-to-markup figs)
48 (c (make-dir-column-markup (map fig-to-markup figs)))
50 (if (eq? (ly:get-mus-property (car figs) 'bracket-start) #t)
51 (make-bracket-markup c)
57 (ends (recursive-split-at no-end-bracket? (reverse figures)))
58 (starts (map (lambda (x) (recursive-split-at no-start-bracket? x)) ends))
60 (make-dir-column-markup (map fig-seq-to-markup (apply append starts)))