X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-music-display-methods.scm;h=10aecbd1db6794f29b3ee54f9cb99bdef23e47b4;hb=aafcc4147ae2fea2ba1d95c7a54963c61f21b963;hp=718c501e77d69a43df3d94cf1a01282c79ce922b;hpb=906b0e079785805e6cdf564c447460d958f6f6f9;p=lilypond.git diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 718c501e77..10aecbd1db 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -126,8 +126,7 @@ expression." ;;; post events ;;; -(define (post-event? m) - (music-is-of-type? m 'post-event)) +(define post-event? (music-type-predicate 'post-event)) (define* (event-direction->lily-string event #:optional (required #t)) (let ((direction (ly:music-property event 'direction))) @@ -418,7 +417,7 @@ Otherwise, return #f." (chord-repeat (ly:music-property chord 'duration))) (call-with-values (lambda () - (partition (lambda (m) (music-is-of-type? m 'rhythmic-event)) + (partition (music-type-predicate 'rhythmic-event) elements)) (lambda (chord-elements other-elements) (cond ((pair? chord-elements) @@ -642,7 +641,8 @@ Otherwise, return #f." (define-display-method AutoChangeMusic (m) (format #f "\\autochange ~a" - (music->lily-string (ly:music-property m 'element)))) + (music->lily-string + (ly:music-property (ly:music-property m 'element) 'element)))) (define-display-method ContextChange (m) (format #f "\\change ~a = \"~a\"" @@ -809,7 +809,8 @@ Otherwise, return #f." (new-line->lily-string)))) (define-display-method PropertyUnset (expr) - (format #f "\\unset ~a~a~a" + (format #f "~a\\unset ~a~a~a" + (if (ly:music-property expr 'once #f) "\\once " "") (if (eqv? (*current-context*) 'Bottom) "" (format #f "~a . " (*current-context*))) @@ -839,8 +840,11 @@ Otherwise, return #f." (define-display-method RevertProperty (expr) (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" + (list (ly:music-property expr + 'grob-property)))) + (once (ly:music-property expr 'once #f))) + (format #f "~a\\revert ~{~a~^.~}~a" + (if once "\\once " "") (if (eqv? (*current-context*) 'Bottom) (cons symbol properties) (cons* (*current-context*) symbol properties)) @@ -984,9 +988,11 @@ Otherwise, return #f." (define-display-method ApplyOutputEvent (applyoutput) (let ((proc (ly:music-property applyoutput 'procedure)) - (ctx (ly:music-property applyoutput 'context-type))) - (format #f "\\applyOutput #'~a #~a" + (ctx (ly:music-property applyoutput 'context-type)) + (grob (ly:music-property applyoutput 'symbol))) + (format #f "\\applyOutput ~a~@[.~a~] #~a" ctx + (and (symbol? grob) grob) (or (procedure-name proc) (with-output-to-string (lambda () @@ -1002,31 +1008,19 @@ Otherwise, return #f." ;;; \partcombine (define-display-method PartCombineMusic (expr) - (format #f "\\partcombine ~{~a ~}" - (map-in-order (lambda (music) - (music->lily-string music)) - (ly:music-property expr 'elements)))) - -(define-extra-display-method PartCombineMusic (expr) - (with-music-match (expr (music 'PartCombineMusic - direction ?dir - elements ((music 'UnrelativableMusic - element (music 'ContextSpeccedMusic - context-id "one" - context-type 'Voice - element ?sequence1)) - (music 'UnrelativableMusic - element (music 'ContextSpeccedMusic - context-id "two" - context-type 'Voice - element ?sequence2))))) - (format #f "\\partcombine~a ~a~a~a" - (cond ((equal? ?dir UP) "Up") - ((equal? ?dir DOWN) "Down") - (else "")) - (music->lily-string ?sequence1) - (new-line->lily-string) - (music->lily-string ?sequence2)))) + (let ((dir (ly:music-property expr 'direction))) + (format #f "\\partcombine~a ~a~a~a" + (cond ((equal? dir UP) "Up") + ((equal? dir DOWN) "Down") + (else "")) + (music->lily-string (car (ly:music-property expr 'elements))) + (new-line->lily-string) + (music->lily-string (cadr (ly:music-property expr 'elements)))))) + +(define-display-method PartCombinePartMusic (expr) + (with-music-match ((ly:music-property expr 'element) + (music 'ContextSpeccedMusic element ?part)) + (format #f "~a" (music->lily-string ?part)))) (define-extra-display-method ContextSpeccedMusic (expr) "If `expr' is a \\partcombine expression, return \"\\partcombine ...\". @@ -1123,6 +1117,23 @@ Otherwise, return #f." (*omit-duration* #t)) (music->lily-string (ly:music-property expr 'element))))) +;; \autochange +(define-extra-display-method SimultaneousMusic (expr) + (with-music-match (expr (music 'SimultaneousMusic + elements ((music 'ContextSpeccedMusic + context-id "up" + context-type 'Staff + element ?ac-music) + (music 'ContextSpeccedMusic + context-id "up" + context-type 'Staff) + (music 'ContextSpeccedMusic + context-id "down" + context-type 'Staff)))) + (with-music-match (?ac-music (music 'AutoChangeMusic)) + (format #f "~a" + (music->lily-string ?ac-music))))) + ;; \addlyrics (define-extra-display-method SimultaneousMusic (expr) (with-music-match (expr (music 'SimultaneousMusic