X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fclef.scm;h=997ef4c05cfb3c3c07fcc5bcd409fcf4b9693888;hb=21497b2395aa5cc9c7b53942802763d49202a646;hp=666b5bae6efaa3abf17d018b494579338e9bdd15;hpb=f9a3a6ccb7cab73028819954312508f1bdb2dfff;p=lilypond.git diff --git a/scm/clef.scm b/scm/clef.scm index 666b5bae6e..997ef4c05c 100644 --- a/scm/clef.scm +++ b/scm/clef.scm @@ -1,9 +1,8 @@ - -;; ;; (name . (glyph clef-position octavation)) -;; -- the name clefOctavation is misleading the value 7 is 1 octave not 7 Octaves. ;; +;; -- the name clefOctavation is misleading. The value 7 is 1 octave, not 7 Octaves. + (define supported-clefs '( ("treble" . ("clefs-G" -2 0)) ("violin" . ("clefs-G" -2 0)) @@ -13,13 +12,15 @@ ("soprano" . ("clefs-C" -4 0)) ("mezzosoprano" . ("clefs-C" -2 0)) ("alto" . ("clefs-C" 0 0)) + ("C" . ("clefs-C" 0 0)) ("tenor" . ("clefs-C" 2 0)) ("baritone" . ("clefs-C" 4 0)) ("varbaritone" . ("clefs-F" 0 0)) ("bass" . ("clefs-F" 2 0)) ("F" . ( "clefs-F" 2 0)) ("subbass" . ("clefs-F" 4 0)) - ("none" . ("" 0 0)) + ("percussion" . ("clefs-percussion" 0 0)) + ("tab" . ("clefs-tab" 0 0)) ;; should move mensural stuff to separate file? ("vaticana_do1" . ("clefs-vaticana_do" -1 0)) @@ -37,26 +38,70 @@ ("hufnagel_do3" . ("clefs-hufnagel_do" 3 0)) ("hufnagel_fa1" . ("clefs-hufnagel_fa" -1 0)) ("hufnagel_fa2" . ("clefs-hufnagel_fa" 1 0)) - ("hufnagel" . ("clefs-hufnagel_do_fa" 4 0)) - ("mensural1_c1" . ("clefs-mensural1_c" -4 0)) - ("mensural1_c2" . ("clefs-mensural1_c" -2 0)) - ("mensural1_c3" . ("clefs-mensural1_c" 0 0)) - ("mensural1_c4" . ("clefs-mensural1_c" 2 0)) - ("mensural2_c1" . ("clefs-mensural2_c" -4 0)) - ("mensural2_c2" . ("clefs-mensural2_c" -2 0)) - ("mensural2_c3" . ("clefs-mensural2_c" 0 0)) - ("mensural2_c4" . ("clefs-mensural2_c" 2 0)) - ("mensural2_c5" . ("clefs-mensural2_c" 4 0)) - ("mensural3_c1" . ("clefs-mensural3_c" -2 0)) - ("mensural3_c2" . ("clefs-mensural3_c" 0 0)) - ("mensural3_c3" . ("clefs-mensural3_c" 2 0)) - ("mensural3_c4" . ("clefs-mensural3_c" 4 0)) + ("hufnagel_do_fa" . ("clefs-hufnagel_do_fa" 4 0)) + ("mensural_c1" . ("clefs-mensural_c" -2 0)) + ("mensural_c2" . ("clefs-mensural_c" 0 0)) + ("mensural_c3" . ("clefs-mensural_c" 2 0)) + ("mensural_c4" . ("clefs-mensural_c" 4 0)) ("mensural_f" . ("clefs-mensural_f" 2 0)) + ("mensural_g" . ("clefs-mensural_g" -2 0)) + ("neo_mensural_c1" . ("clefs-neo_mensural_c" -4 0)) + ("neo_mensural_c2" . ("clefs-neo_mensural_c" -2 0)) + ("neo_mensural_c3" . ("clefs-neo_mensural_c" 0 0)) + ("neo_mensural_c4" . ("clefs-neo_mensural_c" 2 0)) + ("petrucci_c1" . ("clefs-petrucci_c1" -4 0)) + ("petrucci_c2" . ("clefs-petrucci_c2" -2 0)) + ("petrucci_c3" . ("clefs-petrucci_c3" 0 0)) + ("petrucci_c4" . ("clefs-petrucci_c4" 2 0)) + ("petrucci_c5" . ("clefs-petrucci_c5" 4 0)) + ("petrucci_f" . ("clefs-petrucci_f" 2 0)) + ("petrucci_g" . ("clefs-petrucci_g" -2 0)) ) ) -(define (clef-name-to-properties cl) + +;; "an alist mapping GLYPHNAME to the position of the central C for that symbol" +(define c0-pitch-alist + '(("clefs-G" . -4) + ("clefs-C" . 0) + ("clefs-F" . 4) + ("clefs-percussion" . 0) + ("clefs-tab" . 0 ) + ("clefs-vaticana_do" . 0) + ("clefs-vaticana_fa" . 4) + ("clefs-medicaea_do" . 0) + ("clefs-medicaea_fa" . 4) + ("clefs-hufnagel_do" . 0) + ("clefs-hufnagel_fa" . 4) + ("clefs-hufnagel_do_fa" . 0) + ("clefs-mensural_c" . 0) + ("clefs-mensural_f" . 4) + ("clefs-mensural_g" . -4) + ("clefs-neo_mensural_c" . 0) + ("clefs-petrucci_c1" . 0) + ("clefs-petrucci_c2" . 0) + ("clefs-petrucci_c3" . 0) + ("clefs-petrucci_c4" . 0) + ("clefs-petrucci_c5" . 0) + ("clefs-petrucci_f" . 4) + ("clefs-petrucci_g" . -4) + ) +) + +(define-public (make-clef-set cl) + "Generate the clef setting commands for a clef with name CL." + (define (make-prop-set props) + (let* + ( + (m (make-music-by-name 'PropertySet)) + ) + + (map (lambda (x) (ly:set-mus-property! m (car x) (cdr x))) props) + m + )) + (let ((e '()) + (c0 0) (oct 0) (l (string-length cl)) ) @@ -65,31 +110,46 @@ (if (equal? "8" (substring cl (- l 1) l)) (begin (if (equal? "^" (substring cl (- l 2) (- l 1))) - (set! oct 7) - (set! oct -7)) + (set! oct -7) + (set! oct 7)) (set! cl (substring cl 0 (- l 2))))) (set! e (assoc cl supported-clefs)) + (if (pair? e) - `(((symbol . clefGlyph) - (iterator-ctor . ,Property_iterator::constructor) - (value . ,(cadr e)) - ) - ((symbol . clefPosition) - (iterator-ctor . ,Property_iterator::constructor) - (value . ,(caddr e)) - ) - ,(if (not (equal? oct 0)) - `((symbol . clefOctavation) - (iterator-ctor . ,Property_iterator::constructor) - (value . ,oct) - )) + (let* + ( + (musics (map make-prop-set + + `(((symbol . clefGlyph) + (value . ,(cadr e)) + ) + ((symbol . centralCPosition) + (value . ,(+ oct (caddr e) (cdr (assoc (cadr e) c0-pitch-alist)))) + ) + ((symbol . clefPosition) + (value . ,(caddr e)) + ) + ((symbol . clefOctavation) + (value . ,(- oct)) + ) + ))) + (seq (make-music-by-name 'SequentialMusic)) + (csp (make-music-by-name 'ContextSpeccedMusic)) + ) + + (ly:set-mus-property! seq 'elements musics) + (ly:set-mus-property! csp 'element seq) + (ly:set-mus-property! csp 'context-type "Staff") + + csp ) (begin - (ly-warn (string-append "Unknown clef type `" cl "'\nSee scm/lily.scm for supported clefs")) - '()) + (ly:warn (format "Unknown clef type `~a' +See scm/lily.scm for supported clefs" cl)) + (make-music-by-name 'Music) + + ) ))) - -