]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/chord-entry.scm
Imported Upstream version 2.16.0
[lilypond.git] / scm / chord-entry.scm
index 93a1c80a1c46577a953d9bbca0e17dc0a1936582..d8587dcf839cefc843f734c9abf97ed6af6b993c 100644 (file)
@@ -1,17 +1,30 @@
-;;;
-;;; Generate chord names for the parser.
-;;;
-;;;
-
-(define-public (construct-chord root duration modifications)
-  " Build a chord on root using modifiers in MODIFICATIONS. NoteEvent
-have duration DURATION..
-
-Notes: natural 11 is left from chord if not explicitly specified.
-
-Entry point for the parser. 
-
-"
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;;
+;;;; LilyPond is free software: you can redistribute it and/or modify
+;;;; it under the terms of the GNU General Public License as published by
+;;;; the Free Software Foundation, either version 3 of the License, or
+;;;; (at your option) any later version.
+;;;;
+;;;; LilyPond is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;;; GNU General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+
+; for define-safe-public when byte-compiling using Guile V2
+(use-modules (scm safe-utility-defs))
+
+(define-public (construct-chord-elements root duration modifications)
+  "Build a chord on root using modifiers in @var{modifications}.
+@code{NoteEvents} have duration @var{duration}.
+
+Notes: Natural 11 is left from chord if not explicitly specified.
+
+Entry point for the parser."
   (let* ((flat-mods (flatten-list modifications))
         (base-chord (stack-thirds (ly:make-pitch 0 4 0) the-canonical-chord))
         (complete-chord '())
@@ -22,23 +35,23 @@ Entry point for the parser.
         (start-additions #t))
 
     (define (interpret-inversion chord mods)
-      "Read /FOO   part. Side effect: INVERSION is set."
-      (if (and (>  (length mods) 1) (eq? (car mods) 'chord-slash))
+      "Read /FOO part.  Side effect: INVERSION is set."
+      (if (and (> (length mods) 1) (eq? (car mods) 'chord-slash))
          (begin
            (set! inversion (cadr mods))
            (set! mods (cddr mods))))
       (interpret-bass chord mods))
-      
+
     (define (interpret-bass chord mods)
-      "Read /+FOO   part. Side effect: BASS is set."
-      (if (and (>  (length mods) 1) (eq? (car mods) 'chord-bass))
+      "Read /+FOO part.  Side effect: BASS is set."
+      (if (and (> (length mods) 1) (eq? (car mods) 'chord-bass))
          (begin
            (set! bass (cadr mods))
            (set! mods (cddr mods))))
       (if (pair? mods)
-         (scm-error  'chord-format "construct-chord" "Spurious garbage following chord: ~A" mods #f))
+         (ly:warning (_ "Spurious garbage following chord: ~A") mods))
       chord)
-      
+
     (define (interpret-removals         chord mods)
       (define (inner-interpret chord mods)
        (if (and (pair? mods) (ly:pitch? (car mods)))
@@ -48,9 +61,9 @@ Entry point for the parser.
       (if (and (pair? mods) (eq? (car mods) 'chord-caret))
          (inner-interpret chord (cdr mods))
          (interpret-inversion chord mods)))
-    
-    (define (interpret-additions  chord mods)
-      "Interpret additions. TODO: should restrict modifier use?"
+
+    (define (interpret-additions chord mods)
+      "Interpret additions.  TODO: should restrict modifier use?"
       (cond ((null? mods) chord)
            ((ly:pitch? (car mods))
             (if (= (pitch-step (car mods)) 11)
@@ -70,14 +83,14 @@ Entry point for the parser.
                            0 -1))
                     (ly:pitch-notename p)
                     (ly:pitch-alteration p)))
-    
+
     (define (process-inversion complete-chord)
       "Take out inversion from COMPLETE-CHORD, and put it at the bottom.
 Return (INVERSION . REST-OF-CHORD).
 
 Side effect: put original pitch in INVERSION.
 If INVERSION is not in COMPLETE-CHORD, it will be set as a BASS, overriding
-the bass specified.  
+the bass specified.
 
 "
       (let* ((root (car complete-chord))
@@ -99,11 +112,11 @@ the bass specified.
            rest-of-chord)))
     ;; root is always one octave too low.
     ;; something weird happens when this is removed,
-    ;; every other chord is octavated. --hwn... hmmm. 
+    ;; every other chord is octavated. --hwn... hmmm.
     (set! root (ly:pitch-transpose root (ly:make-pitch 1 0 0)))
     ;; skip the leading : , we need some of the stuff following it.
     (if (pair? flat-mods)
-       (if (eq? (car flat-mods)  'chord-colon)
+       (if (eq? (car flat-mods) 'chord-colon)
            (set! flat-mods (cdr flat-mods))
            (set! start-additions #f)))
     ;; remember modifier
@@ -111,12 +124,12 @@ the bass specified.
        (begin
          (set! lead-mod (car flat-mods))
          (set! flat-mods (cdr flat-mods))))
-    ;; extract first  number if present, and build pitch list.
+    ;; extract first number if present, and build pitch list.
     (if (and (pair? flat-mods)
             (ly:pitch?  (car flat-mods))
             (not (eq? lead-mod sus-modifier)))
        (begin
-         (if (=  (pitch-step (car flat-mods)) 11)
+         (if (= (pitch-step (car flat-mods)) 11)
              (set! explicit-11 #t))
          (set! base-chord
                (stack-thirds (car flat-mods) the-canonical-chord))
@@ -136,9 +149,9 @@ the bass specified.
             (get-step 3 complete-chord)
             (= 0 (ly:pitch-alteration (get-step 11 complete-chord)))
             (= 0 (ly:pitch-alteration (get-step 3 complete-chord))))
-       (set! complete-chord (remove-step 11  complete-chord)))
+       (set! complete-chord (remove-step 11 complete-chord)))
     ;; must do before processing inversion/bass, since they are
-    ;; not relative to the root. 
+    ;; not relative to the root.
     (set! complete-chord (map (lambda (x) (ly:pitch-transpose x root))
                              complete-chord))
     (if inversion
@@ -150,16 +163,16 @@ the bass specified.
          (write-me "\n*******\n" flat-mods)
          (write-me "root: " root)
          (write-me "base chord: " base-chord)
-         (write-me "complete  chord: " complete-chord)
+         (write-me "complete chord: " complete-chord)
          (write-me "inversion: " inversion)
          (write-me "bass: " bass)))
     (if inversion
-       (make-chord (cdr complete-chord) bass duration (car complete-chord)
+       (make-chord-elements (cdr complete-chord) bass duration (car complete-chord)
                    inversion)
-       (make-chord complete-chord bass duration #f #f))))
+       (make-chord-elements complete-chord bass duration #f #f))))
 
 
-(define (make-chord pitches bass duration inversion original-inv-pitch)
+(define (make-chord-elements pitches bass duration inversion original-inv-pitch)
   "Make EventChord with notes corresponding to PITCHES, BASS and
 DURATION, and INVERSION."
   (define (make-note-ev pitch)
@@ -180,32 +193,32 @@ DURATION, and INVERSION."
                (- (ly:pitch-octave inversion)
                   (ly:pitch-octave original-inv-pitch)))
          (set! nots (cons inv-note nots))))
-    (make-event-chord nots)))
+    nots))
 
 ;;;;;;;;;;;;;;;;
 ; chord modifiers change the pitch list.
 
-(define (aug-modifier  pitches)
-  (set! pitches         (replace-step (ly:make-pitch 0 4 SHARP) pitches))
+(define (aug-modifier pitches)
+  (set! pitches (replace-step (ly:make-pitch 0 4 SHARP) pitches))
   (replace-step (ly:make-pitch 0 2 0) pitches))
 
-(define (minor-modifier         pitches)
+(define (minor-modifier pitches)
   (replace-step (ly:make-pitch 0 2 FLAT) pitches))
 
-(define (maj7-modifier pitches)
+(define (maj7-modifier pitches)
   (set! pitches (remove-step 7 pitches))
   (cons (ly:make-pitch 0 6 0) pitches))
 
-(define (dim-modifier  pitches)
+(define (dim-modifier pitches)
   (set! pitches (replace-step (ly:make-pitch 0 2 FLAT) pitches))
   (set! pitches (replace-step (ly:make-pitch 0 4 FLAT) pitches))
   (set! pitches (replace-step (ly:make-pitch 0 6 DOUBLE-FLAT) pitches))
   pitches)
 
-(define (sus-modifier  pitches)
+(define (sus-modifier pitches)
   (remove-step (pitch-step (ly:make-pitch 0 2 0)) pitches))
 
-(define-public default-chord-modifier-list
+(define-safe-public default-chord-modifier-list
   `((m . ,minor-modifier)
     (min . ,minor-modifier)
     (aug . , aug-modifier)
@@ -218,17 +231,18 @@ DURATION, and INVERSION."
   (map (lambda (n)
         (define (nca x)
           (if (= x 7) FLAT 0))
+        
         (if (>= n 8)
             (ly:make-pitch 1 (- n 8) (nca n))
             (ly:make-pitch 0 (- n 1) (nca n))))
        '(1 3 5 7 9 11 13)))
 
 (define (stack-thirds upper-step base)
-  "Stack thirds listed in BASE until we reach UPPER-STEP. Add
+  "Stack thirds listed in BASE until we reach UPPER-STEP.  Add
 UPPER-STEP separately."
   (cond ((null? base) '())
        ((> (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
-        (cons (car base) (stack-thirds upper-step  (cdr base))))
+        (cons (car base) (stack-thirds upper-step (cdr base))))
        ((<= (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
         (list upper-step))
        (else '())))