]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/chord-name.scm
Merge branch 'master' into lilypond/translation
[lilypond.git] / scm / chord-name.scm
index 06b11784596c609c5b95b64e37ac6afb7a14d01a..0542893cc02726e42a400f494d861d8dec90ce66 100644 (file)
@@ -60,7 +60,7 @@
        ))))
 
 (define-public (note-name->markup pitch lowercase?)
-  "Return pitch markup for PITCH."
+  "Return pitch markup for @var{pitch}."
   (make-line-markup
    (list
     (make-simple-markup
           (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))
 
 (define-public ((chord-name->italian-markup re-with-eacute) pitch lowercase?)
-  "Return pitch markup for PITCH, using italian/french note names.
-   If re-with-eacute is set to #t, french 'ré' is returned for D instead of 're'
-"
+  "Return pitch markup for @var{pitch}, using Italian/@/French note names.
+If @var{re-with-eacute} is set to @code{#t}, french `ré' is returned for
+pitch@tie{}D instead of `re'."
+
   (let* ((name (ly:pitch-notename pitch))
          (alt (ly:pitch-alteration pitch)))
     (make-line-markup
@@ -169,3 +170,31 @@ FOOBAR-MARKUP) if OMIT-ROOT is given and non-false.
         (alist (map chord-to-exception-entry elts)))
     (filter (lambda (x) (cdr x)) alist)))
 
+(define-public (capo-handler pitches bass inversion context)
+  (let ((chord-function
+          (ly:context-property context 'chordNameFunction 'jazz-chord-names))
+        (capo-pitch (ly:context-property context 'capoPitch #f)))
+    (if (not capo-pitch)
+        (chord-function pitches bass inversion context)  ;; call the chordNameFunction as of old
+        (let* ((new-pitches   ;; else transpose the pitches and do the chord twice
+               (map (lambda (p)
+                       (ly:pitch-transpose p capo-pitch))
+                    pitches))
+               (new-bass
+                 (if (ly:pitch? bass)
+                     (ly:pitch-transpose bass capo-pitch)
+                     '()))
+               (new-inversion
+                 (if (ly:pitch? inversion)
+                     (ly:pitch-transpose inversion capo-pitch)
+                     '()))
+               (capo-markup
+                 (make-parenthesize-markup
+                   (chord-function new-pitches new-bass new-inversion context)))
+               (name-markup (chord-function pitches bass  inversion context))
+               (capo-vertical (ly:context-property context 'capoVertical #f)))
+          (if capo-vertical
+              (make-column-markup (list name-markup capo-markup))
+              (make-line-markup (list name-markup
+                                      (make-hspace-markup 1)
+                                      capo-markup)))))))