]> git.donarmstrong.com Git - lilypond.git/blob - scm/bass-figure.scm
* scm/define-music-properties.scm (figure): use string for 'figure
[lilypond.git] / scm / bass-figure.scm
1 ;;;; figured bass support ...
2
3 (ly:add-interface
4 'bass-figure-interface
5  "A bass figure, including bracket"
6  '())
7
8 (define  (recursive-split-at pred? l)
9   (if (null? l)
10       '()
11       (let*
12           ((x (split-at-predicate pred? l)))
13         (set-cdr! x (recursive-split-at pred? (cdr x)))
14         x
15         )))
16
17 (define-public (make-bass-figure-markup figures context)
18   
19   (define (no-end-bracket? f1 f2)
20     (eq? (ly:get-mus-property f1 'bracket-stop) '())
21     )
22   (define (no-start-bracket? f1 f2)
23     (eq? (ly:get-mus-property f2 'bracket-start) '())
24     )
25
26   ;; TODO: support slashed numerals here.
27   (define (fig-to-markup fig-music)
28     (let*
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))
32          (acc-markup #f)
33          (fig-markup
34           (if (string? fig)
35               (make-simple-markup fig)
36               (make-simple-markup (if align-accs " " ""))
37               )))
38
39       (if (number? acc)
40           (make-line-markup (list fig-markup
41                                   (alteration->text-accidental-markup acc)))
42           fig-markup)
43       ))
44   
45   (define (fig-seq-to-markup figs)
46     (let*
47         (
48          (c (make-dir-column-markup (map fig-to-markup figs)))
49          )
50       (if (eq? (ly:get-mus-property (car figs) 'bracket-start) #t)
51           (make-bracket-markup c)
52           c
53           )))
54   
55   (let*
56       (
57        (ends (recursive-split-at no-end-bracket? (reverse figures)))
58        (starts (map (lambda (x) (recursive-split-at no-start-bracket? x)) ends))
59        )
60     (make-dir-column-markup (map fig-seq-to-markup (apply append starts)))
61     ))
62