]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/bass-figure.scm
* scm/bass-figure.scm (format-bass-figure): don't set
[lilypond.git] / scm / bass-figure.scm
index 9c72b95ed07977e162df4e8bf7d372433aa6be81..104793b86ffe57ea54dd63060cd4de6f161d15f0 100644 (file)
@@ -5,34 +5,19 @@
  "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:get-mus-property f1 'bracket-stop) '())
-    )
-  (define (no-start-bracket? f1 f2)
-    (eq? (ly:get-mus-property f2 'bracket-start) '())
-    )
 
+(define-public (format-bass-figure figures context grob)
   ;; TODO: support slashed numerals here.
   (define (fig-to-markup fig-music)
     (let*
-       ((align-accs (eq? #t (ly:get-context-property context 'alignBassFigureAccidentals)))
-        (fig  (ly:get-mus-property fig-music 'figure))
-        (acc  (ly:get-mus-property fig-music 'alteration))
+       ((align-accs (eq? #t (ly:context-property context 'alignBassFigureAccidentals)))
+        (fig  (ly:music-property fig-music 'figure))
+        (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 "")
                                  (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:get-mus-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)
+        )))