X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fbass-figure.scm;h=104793b86ffe57ea54dd63060cd4de6f161d15f0;hb=e2f5ba92300dc3fb7517165ac224e1500ad850dd;hp=8aa8f5dce432ddebc4552c9f30ebd0c82791d747;hpb=eba82770802a246bca4afab7eab1f78e84785214;p=lilypond.git diff --git a/scm/bass-figure.scm b/scm/bass-figure.scm index 8aa8f5dce4..104793b86f 100644 --- a/scm/bass-figure.scm +++ b/scm/bass-figure.scm @@ -5,24 +5,9 @@ "A bass figure, including bracket" '()) -(define (recursive-split-at pred? l) - (if (null? l) - '() - (let* - ((x (split-at-predicate pred? l))) - (set-cdr! x (recursive-split-at pred? (cdr x))) - x - ))) -(define-public (make-bass-figure-markup figures context) - - (define (no-end-bracket? f1 f2) - (eq? (ly:music-property f1 'bracket-stop) '()) - ) - (define (no-start-bracket? f1 f2) - (eq? (ly:music-property f2 'bracket-start) '()) - ) +(define-public (format-bass-figure figures context grob) ;; TODO: support slashed numerals here. (define (fig-to-markup fig-music) (let* @@ -31,8 +16,8 @@ (acc (ly:music-property fig-music 'alteration)) (acc-markup #f) (fig-markup - (if (string? fig) - (make-simple-markup fig) + (if (markup? fig) + fig (if align-accs (make-simple-markup " ") (if (not (eq? acc '())) (make-simple-markup "") @@ -44,22 +29,25 @@ (alteration->text-accidental-markup acc))) fig-markup) )) - - (define (fig-seq-to-markup figs) - (let* - ( - (c (make-dir-column-markup (map fig-to-markup figs))) - ) - (if (eq? (ly:music-property (car figs) 'bracket-start) #t) - (make-bracket-markup c) - c - ))) - - (let* - ( - (ends (recursive-split-at no-end-bracket? (reverse figures))) - (starts (map (lambda (x) (recursive-split-at no-start-bracket? x)) ends)) - ) - (make-dir-column-markup (map fig-seq-to-markup (apply append starts))) - )) + (define (filter-brackets i figs acc) + (cond + ((null? figs) acc) + (else + (filter-brackets (1+ i) (cdr figs) + + (append + (if (eq? (ly:music-property (car figs) 'bracket-start) #t) + (list i) + '()) + (if (eq? (ly:music-property (car figs) 'bracket-stop) #t) + (list i) + '()) + + acc))))) + + (set! (ly:grob-property grob 'text) + (make-bracketed-y-column-markup + (sort (filter-brackets 0 figures '()) <) + (map fig-to-markup figures) + )))