X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-music-display-methods.scm;h=259c0ccaaebbb42e2c8eaeec3051ddedd7512249;hb=ab8dfc6e8f3de3cefc8fab09a4993acaec460720;hp=574ba04678a4aaae15d77b0c89ce76c5e72df5d5;hpb=c1d5bb448321d688185e0c6b798575d4c325ae80;p=lilypond.git diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 574ba04678..259c0ccaae 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. ;;; -;;; Copyright (C) 2005--2011 Nicolas Sceaux +;;; Copyright (C) 2005--2012 Nicolas Sceaux ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -16,7 +16,8 @@ ;;; (define (scheme-expr->lily-string scm-arg) (cond ((or (number? scm-arg) - (string? scm-arg)) + (string? scm-arg) + (boolean? scm-arg)) (format #f "~s" scm-arg)) ((or (symbol? scm-arg) (list? scm-arg)) @@ -157,6 +158,7 @@ expression." 'SlurEvent 'SostenutoEvent 'StringNumberEvent + 'StrokeFingerEvent 'SustainEvent 'TextScriptEvent 'TextSpanEvent @@ -236,6 +238,9 @@ expression." (define-post-event-display-method AbsoluteDynamicEvent (event parser) #f (format #f "\\~a" (ly:music-property event 'text))) +(define-post-event-display-method StrokeFingerEvent (event parser) #t + (format #f "\\rightHandFinger #~a" (ly:music-property event 'digit))) + (define-span-event-display-method BeamEvent (event parser) #f "[" "]") (define-span-event-display-method SlurEvent (event parser) #f "(" ")") (define-span-event-display-method CrescendoEvent (event parser) #f "\\<" "\\!") @@ -324,7 +329,7 @@ expression." 'OverrideProperty grob-property-path '(stroke-style) grob-value "grace" - symbol 'Stem))))) + symbol 'Flag))))) #t) (with-music-match (?stop (music 'SequentialMusic @@ -333,7 +338,7 @@ expression." element (music 'RevertProperty grob-property-path '(stroke-style) - symbol 'Stem)) + symbol 'Flag)) (music 'EventChord elements ((music @@ -372,7 +377,7 @@ expression." (chord? (make-music-type-predicate 'EventChord)) (cluster? (make-music-type-predicate 'ClusterNoteEvent)) (note? (make-music-type-predicate 'NoteEvent))) - (format #f "~a~a{~v%~v_~{~a ~}~v%~v_}" + (format #f "~a~a{~v%~v_~{~a~^ ~}~v%~v_}" (if (any (lambda (e) (and (chord? e) (any cluster? (ly:music-property e 'elements)))) @@ -410,7 +415,7 @@ expression." (music->lily-string music parser)) elements)) (if force-line-break 1 0) - (if force-line-break (*indent*) 0)))) + (if force-line-break (*indent*) 1)))) (define-display-method SimultaneousMusic (sim parser) (parameterize ((*indent* (+ 3 (*indent*)))) @@ -457,16 +462,18 @@ Otherwise, return #f." (music->lily-string (car elements) parser) (if (and (not (null? simple-elements)) (null? (cdr simple-elements)) - ;; special case: if this simple_element has a HarmonicEvent in its - ;; 'articulations list, it should be interpreted instead as a - ;; note_chord_element, since \harmonic only works inside chords, - ;; even for single notes, e.g., < c\harmonic > - (null? (filter (make-music-type-predicate 'HarmonicEvent) - (ly:music-property (car simple-elements) 'articulations)))) + ;; special case: if this simple_element has any post_events in + ;; its 'articulations list, it should be interpreted instead + ;; as a note_chord_element to prevent spurious output, e.g., + ;; \displayLilyMusic < c-1\4 >8 -> c-1\48 + (null? (filter post-event? + (ly:music-property (car simple-elements) 'articulations))) + ;; same for simple_element with \tweak + (null? (ly:music-property (car simple-elements) 'tweaks))) ;; simple_element : note | figure | rest | mmrest | lyric_element | skip (let* ((simple-element (car simple-elements)) (duration (ly:music-property simple-element 'duration)) - (lily-string (format #f "~a~a~a~{~a ~}" + (lily-string (format #f "~a~a~a~{~a~^ ~}" (music->lily-string simple-element parser) (duration->lily-string duration) (if (and ((make-music-type-predicate 'RestEvent) simple-element) @@ -484,7 +491,7 @@ Otherwise, return #f." (post-events (filter post-event? elements))) (if (not (null? chord-elements)) ;; note_chord_element : '<' (notepitch | drumpitch)* '>" duration post_events - (let ((lily-string (format #f "< ~{~a ~}>~a~{~a ~}" + (let ((lily-string (format #f "< ~{~a ~}>~a~{~a~^ ~}" (map-in-order (lambda (music) (music->lily-string music parser)) chord-elements) @@ -496,13 +503,13 @@ Otherwise, return #f." (*previous-duration* (ly:music-property (car chord-elements) 'duration)) lily-string) ;; command_element - (format #f "~{~a ~}" (map-in-order (lambda (music) + (format #f "~{~a~^ ~}" (map-in-order (lambda (music) (music->lily-string music parser)) elements)))))))) (define-display-method MultiMeasureRestMusic (mmrest parser) (let* ((dur (ly:music-property mmrest 'duration)) - (ly (format #f "R~a~{~a ~}" + (ly (format #f "R~a~{~a~^ ~}" (duration->lily-string dur) (map-in-order (lambda (music) (music->lily-string music parser)) @@ -690,6 +697,8 @@ Otherwise, return #f." ;;; Repeats ;;; +(define-display-method AlternativeEvent (alternative parser) "") + (define (repeat->lily-string expr repeat-type parser) (format #f "\\repeat ~a ~a ~a ~a" repeat-type @@ -849,10 +858,8 @@ Otherwise, return #f." (define-display-method OverrideProperty (expr parser) (let* ((symbol (ly:music-property expr 'symbol)) - (property-path (ly:music-property expr 'grob-property-path)) - (properties (if (pair? property-path) - property-path - (list (ly:music-property expr 'grob-property)))) + (properties (ly:music-property expr 'grob-property-path + (list (ly:music-property expr 'grob-property)))) (value (ly:music-property expr 'grob-value)) (once (ly:music-property expr 'once))) @@ -872,8 +879,9 @@ Otherwise, return #f." (new-line->lily-string)))) (define-display-method RevertProperty (expr parser) - (let ((symbol (ly:music-property expr 'symbol)) - (properties (ly:music-property expr 'grob-property-path))) + (let* ((symbol (ly:music-property expr 'symbol)) + (properties (ly:music-property expr 'grob-property-path + (list (ly:music-property expr 'grob-property))))) (format #f "\\revert ~a~a #'~a~a" (if (eqv? (*current-context*) 'Bottom) "" @@ -894,8 +902,8 @@ Otherwise, return #f." num den (new-line->lily-string)) (format #f - "#(set-time-signature ~a ~a '~a)~a" - num den structure + "\\time #'~a ~a/~a~a" + structure num den (new-line->lily-string))))) ;;; \melisma and \melismaEnd