X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fparser-clef.scm;h=ea9f67fade20959cfb49300c21e52aba51770d2b;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=a18ab2cdac4fbd4952d84466f3703108e7b8886f;hpb=abce4dafb98d26ae58663bf9aa3b07a0dd43ced0;p=lilypond.git diff --git a/scm/parser-clef.scm b/scm/parser-clef.scm index a18ab2cdac..ea9f67fade 100644 --- a/scm/parser-clef.scm +++ b/scm/parser-clef.scm @@ -1,31 +1,50 @@ -;;;; clef.scm -- Clef settings +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter +;;;; Copyright (C) 2004--2015 Han-Wen Nienhuys ;;;; -;;;; (c) 2004--2006 Han-Wen Nienhuys +;;;; 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 . -;; (name . (glyph clef-position octavation)) +;; (name . (glyph clef-position transposition)) ;; -;; -- the name clefOctavation is misleading. The value 7 is 1 octave, -;; not 7 Octaves. +;; -- the name clefTransposition is a bit misleading. Value 7 means +;; a transposition of an octave, not a seventh. (define-public supported-clefs '(("treble" . ("clefs.G" -2 0)) ("violin" . ("clefs.G" -2 0)) ("G" . ("clefs.G" -2 0)) ("G2" . ("clefs.G" -2 0)) + ("GG" . ("clefs.GG" -2 0)) + ("tenorG" . ("clefs.tenorG" -2 0)) ("french" . ("clefs.G" -4 0)) ("soprano" . ("clefs.C" -4 0)) ("mezzosoprano" . ("clefs.C" -2 0)) ("alto" . ("clefs.C" 0 0)) ("C" . ("clefs.C" 0 0)) + ("varC" . ("clefs.varC" 0 0)) + ("altovarC" . ("clefs.varC" 0 0)) ("tenor" . ("clefs.C" 2 0)) + ("tenorvarC" . ("clefs.varC" 2 0)) ("baritone" . ("clefs.C" 4 0)) + ("baritonevarC" . ("clefs.varC" 4 0)) ("varbaritone" . ("clefs.F" 0 0)) + ("baritonevarF" . ("clefs.F" 0 0)) ("bass" . ("clefs.F" 2 0)) ("F" . ("clefs.F" 2 0)) ("subbass" . ("clefs.F" 4 0)) ("percussion" . ("clefs.percussion" 0 0)) + ("varpercussion" . ("clefs.varpercussion" 0 0)) ("tab" . ("clefs.tab" 0 0)) ;; should move mensural stuff to separate file? @@ -46,16 +65,23 @@ ("hufnagel-fa1" . ("clefs.hufnagel.fa" -1 0)) ("hufnagel-fa2" . ("clefs.hufnagel.fa" 1 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-c1" . ("clefs.mensural.c" -4 0)) + ("mensural-c2" . ("clefs.mensural.c" -2 0)) + ("mensural-c3" . ("clefs.mensural.c" 0 0)) + ("mensural-c4" . ("clefs.mensural.c" 2 0)) + ("mensural-c5" . ("clefs.mensural.c" 4 0)) + ("blackmensural-c1" . ("clefs.blackmensural.c" -4 0)) + ("blackmensural-c2" . ("clefs.blackmensural.c" -2 0)) + ("blackmensural-c3" . ("clefs.blackmensural.c" 0 0)) + ("blackmensural-c4" . ("clefs.blackmensural.c" 2 0)) + ("blackmensural-c5" . ("clefs.blackmensural.c" 4 0)) ("mensural-f" . ("clefs.mensural.f" 2 0)) ("mensural-g" . ("clefs.mensural.g" -2 0)) ("neomensural-c1" . ("clefs.neomensural.c" -4 0)) ("neomensural-c2" . ("clefs.neomensural.c" -2 0)) ("neomensural-c3" . ("clefs.neomensural.c" 0 0)) ("neomensural-c4" . ("clefs.neomensural.c" 2 0)) + ("neomensural-c5" . ("clefs.neomensural.c" 4 0)) ("petrucci-c1" . ("clefs.petrucci.c1" -4 0)) ("petrucci-c2" . ("clefs.petrucci.c2" -2 0)) ("petrucci-c3" . ("clefs.petrucci.c3" 0 0)) @@ -63,16 +89,22 @@ ("petrucci-c5" . ("clefs.petrucci.c5" 4 0)) ("petrucci-f3" . ("clefs.petrucci.f" 0 0)) ("petrucci-f4" . ("clefs.petrucci.f" 2 0)) + ("petrucci-f5" . ("clefs.petrucci.f" 4 0)) ("petrucci-f" . ("clefs.petrucci.f" 2 0)) - ("petrucci-g" . ("clefs.petrucci.g" -2 0)))) + ("petrucci-g" . ("clefs.petrucci.g" -2 0)) + ("kievan-do" . ("clefs.kievan.do" 0 0)))) ;; "an alist mapping GLYPHNAME to the position of the middle C for ;; that symbol" (define c0-pitch-alist '(("clefs.G" . -4) + ("clefs.GG" . 3) + ("clefs.tenorG" . 3) ("clefs.C" . 0) + ("clefs.varC" . 0) ("clefs.F" . 4) ("clefs.percussion" . 0) + ("clefs.varpercussion" . 0) ("clefs.tab" . 0 ) ("clefs.vaticana.do" . 0) ("clefs.vaticana.fa" . 4) @@ -84,6 +116,7 @@ ("clefs.mensural.c" . 0) ("clefs.mensural.f" . 4) ("clefs.mensural.g" . -4) + ("clefs.blackmensural.c" . 0) ("clefs.neomensural.c" . 0) ("clefs.petrucci.c1" . 0) ("clefs.petrucci.c2" . 0) @@ -91,42 +124,72 @@ ("clefs.petrucci.c4" . 0) ("clefs.petrucci.c5" . 0) ("clefs.petrucci.f" . 4) - ("clefs.petrucci.g" . -4))) + ("clefs.petrucci.g" . -4) + ("clefs.kievan.do" . 0))) (define-public (make-clef-set clef-name) - "Generate the clef setting commands for a clef with name CLEF-NAME." - (define (make-prop-set props) - (let ((m (make-music 'PropertySet))) - (map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props) - m)) - (let ((e '()) - (c0 0) - (oct 0) - (match (string-match "^(.*)([_^])([0-9]+)$" clef-name))) - (if match - (begin - (set! clef-name (match:substring match 1)) - (set! oct - (* (if (equal? (match:substring match 2) "^") -1 1) - (- (string->number (match:substring match 3)) 1))))) - (set! e (assoc clef-name supported-clefs)) - (if (pair? e) - (let* ((musics (map make-prop-set - `(((symbol . clefGlyph) (value . ,(cadr e))) - ((symbol . middleCPosition) - (value . ,(+ oct - (caddr e) - (cdr (assoc (cadr e) c0-pitch-alist))))) - ((symbol . clefPosition) (value . ,(caddr e))) - ((symbol . clefOctavation) (value . ,(- oct)))))) - (seq (make-music 'SequentialMusic - 'elements musics)) - (csp (make-music 'ContextSpeccedMusic))) - (context-spec-music seq 'Staff)) - (begin - (ly:warning (_ "unknown clef type `~a'") clef-name) - (ly:warning (_ "supported clefs: ~a") - (string-join - (sort (map car supported-clefs) stringnumber (match:substring match 4)))) + 0)) + (style (cond ((not match) 'default) + ((equal? (match:substring match 3) "(") 'parenthesized) + ((equal? (match:substring match 3) "[") 'bracketed) + (else 'default)))) + (if e + (let ((musics (list + (make-property-set 'clefGlyph (car e)) + (make-property-set 'middleCClefPosition + (+ oct (cadr e) + (assoc-get (car e) c0-pitch-alist))) + (make-property-set 'clefPosition (cadr e)) + (make-property-set 'clefTransposition (- oct)) + (make-property-set 'clefTranspositionStyle style) + (make-apply-context ly:set-middle-C!)))) + (context-spec-music (make-sequential-music musics) 'Staff)) + (begin + (ly:warning (_ "unknown clef type `~a'") clef-name) + (ly:warning (_ "supported clefs: ~a") + (string-join + (sort (map car supported-clefs) string