X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=scm%2Fdefine-music-display-methods.scm;h=e7b258dfed37fd15c0538b30ad01858a170ab5d6;hb=cb2a453c1957c882e2941de7eaccc351a8cf6d3b;hp=0f957151f8e312f67954e067bf26786756338179;hpb=cda4f0162f2acac8aa617bdec3d3d9af414746fd;p=lilypond.git diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 0f957151f8..e7b258dfed 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -1,7 +1,7 @@ ;;; define-music-display-methods.scm -- data for displaying music ;;; expressions using LilyPond notation. ;;; -;;; (c) 2005--2006 Nicolas Sceaux +;;; (c) 2005--2007 Nicolas Sceaux ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -155,6 +155,7 @@ 'HarmonicEvent 'BeamForbidEvent 'AbsoluteDynamicEvent + 'TupletSpanEvent 'TrillSpanEvent 'GlissandoEvent 'ArpeggioEvent @@ -598,6 +599,7 @@ Otherwise, return #f." (fig (ly:music-property figure 'figure)) (bracket-start (ly:music-property figure 'bracket-start)) (bracket-stop (ly:music-property figure 'bracket-stop))) + (format #f "~a~a~a~a" (if (null? bracket-start) "" "[") (cond ((null? fig) "_") @@ -605,12 +607,12 @@ Otherwise, return #f." (else fig)) (if (null? alteration) "" - (case alteration - ((-4) "--") - ((-2) "-") - ((0) "!") - ((2) "+") - ((4) "++") + (cond + ((= alteration DOUBLE-FLAT) "--") + ((= alteration FLAT) "-") + ((= alteration NATURAL) "!") + ((= alteration SHARP) "+") + ((= alteration DOUBLE-SHARP) "++") (else ""))) (if (null? bracket-stop) "" "]")))) @@ -687,9 +689,6 @@ Otherwise, return #f." (define-display-method UnfoldedRepeatedMusic (expr parser) (repeat->lily-string expr "unfold" parser)) -(define-display-method FoldedRepeatedMusic (expr parser) - (repeat->lily-string expr "fold" parser)) - (define-display-method PercentRepeatedMusic (expr parser) (repeat->lily-string expr "percent" parser)) @@ -882,27 +881,59 @@ Otherwise, return #f." "\\melismaEnd")) ;;; \tempo +;;; Check for all three different syntaxes of tempo: +;;; \tempo string duration=note, \tempo duration=note and \tempo string (define-extra-display-method ContextSpeccedMusic (expr parser) "If expr is a tempo, return \"\\tempo x = nnn\", otherwise return #f." - (with-music-match (expr (music 'ContextSpeccedMusic + (or (with-music-match (expr (music 'ContextSpeccedMusic + element (music 'SequentialMusic + elements ((music 'PropertySet + value ?unit-text + symbol 'tempoText) + (music 'PropertySet + symbol 'tempoWholesPerMinute) + (music 'PropertySet + value ?unit-duration + symbol 'tempoUnitDuration) + (music 'PropertySet + value ?unit-count + symbol 'tempoUnitCount))))) + (format #f "\\tempo ~a ~a = ~a" + (scheme-expr->lily-string ?unit-text) + (duration->lily-string ?unit-duration #:force-duration #t) + ?unit-count)) + (with-music-match (expr (music 'ContextSpeccedMusic + element (music 'SequentialMusic + elements ((music 'PropertyUnset + symbol 'tempoText) + (music 'PropertySet + symbol 'tempoWholesPerMinute) + (music 'PropertySet + value ?unit-duration + symbol 'tempoUnitDuration) + (music 'PropertySet + value ?unit-count + symbol 'tempoUnitCount))))) + (format #f "\\tempo ~a = ~a" + (duration->lily-string ?unit-duration #:force-duration #t) + ?unit-count)) + (with-music-match (expr (music 'ContextSpeccedMusic element (music 'SequentialMusic elements ((music 'PropertySet - symbol 'tempoWholesPerMinute) - (music 'PropertySet - value ?unit-duration - symbol 'tempoUnitDuration) - (music 'PropertySet - value ?unit-count - symbol 'tempoUnitCount))))) - (format #f "\\tempo ~a = ~a" - (duration->lily-string ?unit-duration #:force-duration #t) - ?unit-count))) + value ?tempo-text + symbol 'tempoText))))) + (format #f "\\tempo ~a" (scheme-expr->lily-string ?tempo-text))))) ;;; \clef -(define clef-name-alist (map (lambda (name+vals) - (cons (cdr name+vals) - (car name+vals))) - supported-clefs)) +(define clef-name-alist #f) +(define-public (memoize-clef-names clefs) + "Initialize `clef-name-alist', if not already set." + (if (not clef-name-alist) + (set! clef-name-alist + (map (lambda (name+vals) + (cons (cdr name+vals) + (car name+vals))) + clefs)))) (define-extra-display-method ContextSpeccedMusic (expr parser) "If `expr' is a clef change, return \"\\clef ...\" @@ -914,13 +945,15 @@ Otherwise, return #f." value ?clef-glyph symbol 'clefGlyph) (music 'PropertySet - symbol 'middleCPosition) + symbol 'middleCClefPosition) (music 'PropertySet value ?clef-position symbol 'clefPosition) (music 'PropertySet value ?clef-octavation - symbol 'clefOctavation))))) + symbol 'clefOctavation) + (music 'ApplyContext + procedure ly:set-middle-C!))))) (let ((clef-prop+name (assoc (list ?clef-glyph ?clef-position 0) clef-name-alist))) (if clef-prop+name