X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-music-display-methods.scm;h=9a3a4c10691cfb1bb14ac43910c2fdf562a42895;hb=b4d2995d3f6c35dde371c25a68e03a555401b6e5;hp=a8a80489d443f2a8790787dcbc674a47432d950d;hpb=8ecc147c9397499e09b0a6d52c897645a5e4b001;p=lilypond.git diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index a8a80489d4..9a3a4c1069 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -58,7 +58,7 @@ (args (cdr expr))) (if (eqv? cmd simple-markup) ;; a simple markup (format #f "~s" (car args)) - (format #f "\\~a~{ ~a~}" + (format #f "\\~a~{ ~a~}" (proc->command cmd) (map-in-order arg->string args)))))) (cond ((string? markup-expr) @@ -134,7 +134,7 @@ ;;; post events ;;; -(define post-event? (make-music-type-predicate +(define post-event? (make-music-type-predicate 'StringNumberEvent 'ArticulationEvent 'FingeringEvent @@ -247,7 +247,7 @@ ;;; (define-display-method GraceMusic (expr parser) - (format #f "\\grace ~a" + (format #f "\\grace ~a" (music->lily-string (ly:music-property expr 'element) parser))) ;; \acciaccatura \appoggiatura \grace @@ -265,7 +265,7 @@ ?stop)))) ;; we check whether ?start and ?stop look like ;; startAppoggiaturaMusic stopAppoggiaturaMusic - (and (with-music-match (?start (music + (and (with-music-match (?start (music 'SequentialMusic elements ((music 'EventChord @@ -276,7 +276,7 @@ 'SlurEvent span-direction START)))))) #t) - (with-music-match (?stop (music + (with-music-match (?stop (music 'SequentialMusic elements ((music 'EventChord @@ -300,7 +300,7 @@ ?stop)))) ;; we check whether ?start and ?stop look like ;; startAcciaccaturaMusic stopAcciaccaturaMusic - (and (with-music-match (?start (music + (and (with-music-match (?start (music 'SequentialMusic elements ((music 'EventChord @@ -318,7 +318,7 @@ grob-value "grace" symbol 'Stem))))) #t) - (with-music-match (?stop (music + (with-music-match (?stop (music 'SequentialMusic elements ((music 'ContextSpeccedMusic @@ -357,7 +357,7 @@ (define-display-method SequentialMusic (seq parser) (let ((force-line-break (and (*force-line-break*) - ;; hm + ;; hm (> (length (ly:music-property seq 'elements)) (*max-element-number-before-break*)))) (elements (ly:music-property seq 'elements)) @@ -424,7 +424,7 @@ Otherwise, return #f." (format #f "\\afterGrace ~a ~a" (music->lily-string ?before-grace parser) (music->lily-string ?grace parser)))) - + ;;; ;;; Chords ;;; @@ -439,7 +439,7 @@ Otherwise, return #f." ;; tagged_post_event: '-' \tag embedded_scm post_event (let* ((elements (ly:music-property chord 'elements)) - (simple-elements (filter (make-music-type-predicate + (simple-elements (filter (make-music-type-predicate 'NoteEvent 'ClusterNoteEvent 'RestEvent 'MultiMeasureRestEvent 'SkipEvent 'LyricEvent) elements))) @@ -448,7 +448,13 @@ Otherwise, return #f." ;; and BreathingEvent (\breathe) (music->lily-string (car elements) parser) (if (and (not (null? simple-elements)) - (null? (cdr 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)))) ;; simple_element : note | figure | rest | mmrest | lyric_element | skip (let* ((simple-element (car simple-elements)) (duration (ly:music-property simple-element 'duration)) @@ -475,7 +481,7 @@ Otherwise, return #f." (music->lily-string music parser)) chord-elements) (duration->lily-string (ly:music-property (car chord-elements) - 'duration)) + 'duration)) (map-in-order (lambda (music) (music->lily-string music parser)) post-events)))) @@ -562,7 +568,7 @@ Otherwise, return #f." (if (or (null? pitch-alist) (null? tonic)) "\\key \\default" - (let ((c-pitch-alist (ly:transpose-key-alist pitch-alist + (let ((c-pitch-alist (ly:transpose-key-alist pitch-alist (ly:pitch-diff (ly:make-pitch 0 0 0) tonic)))) (format #f "\\key ~a \\~a~a" (note-name->lily-string (ly:music-property key 'tonic) parser) @@ -607,7 +613,7 @@ Otherwise, return #f." (else fig)) (if (null? alteration) "" - (cond + (cond ((= alteration DOUBLE-FLAT) "--") ((= alteration FLAT) "-") ((= alteration NATURAL) "!") @@ -655,7 +661,7 @@ Otherwise, return #f." (parameterize ((*force-line-break* #f) (*time-factor-numerator* (/ num nd-gcd)) (*time-factor-denominator* (/ den nd-gcd))) - (format #f "\\times ~a/~a ~a" + (format #f "\\times ~a/~a ~a" num den (music->lily-string (ly:music-property times 'element) parser))))) @@ -725,7 +731,7 @@ Otherwise, return #f." ;;; ;;; Contexts -;;; +;;; (define-display-method ContextSpeccedMusic (expr parser) (let ((id (ly:music-property expr 'context-id)) @@ -742,8 +748,8 @@ Otherwise, return #f." "" (format #f " = ~s" id)) (if (null? operations) - "" - (format #f " \\with {~{~a~}~%~v_}" + "" + (format #f " \\with {~{~a~}~%~v_}" (parameterize ((*indent* (+ (*indent*) 2))) (map (lambda (op) (format #f "~%~v_\\~a ~s" @@ -810,8 +816,8 @@ Otherwise, return #f." (if (and (not (null? once))) "\\once " "") - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) property (property-value->lily-string value parser) @@ -819,8 +825,8 @@ Otherwise, return #f." (define-display-method PropertyUnset (expr parser) (format #f "\\unset ~a~a~a" - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) (ly:music-property expr 'symbol) (new-line->lily-string))) @@ -841,8 +847,8 @@ Otherwise, return #f." (not once)) "" "\\once ") - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) symbol (if (null? (cdr properties)) @@ -850,13 +856,13 @@ Otherwise, return #f." properties) (property-value->lily-string value parser) (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))) (format #f "\\revert ~a~a #'~a~a" - (if (eqv? (*current-context*) 'Bottom) - "" + (if (eqv? (*current-context*) 'Bottom) + "" (format #f "~a . " (*current-context*))) symbol (if (null? (cdr properties)) @@ -924,7 +930,7 @@ Otherwise, return #f." symbol 'tempoText))))) (format #f "\\tempo ~a" (scheme-expr->lily-string ?tempo-text))))) -;;; \clef +;;; \clef (define clef-name-alist #f) (define-public (memoize-clef-names clefs) "Initialize `clef-name-alist', if not already set." @@ -972,14 +978,14 @@ Otherwise, return #f." (define-extra-display-method ContextSpeccedMusic (expr parser) "If `expr' is a time signature set, return \"\\time ...\". Otherwise, return #f." - (with-music-match (expr (music + (with-music-match (expr (music 'ContextSpeccedMusic - element (music + element (music 'ContextSpeccedMusic context-type 'Timing - element (music + element (music 'SequentialMusic - elements ((music + elements ((music 'PropertySet value ?num+den symbol 'timeSignatureFraction) @@ -1032,7 +1038,7 @@ Otherwise, return #f." (define (moment->duration moment) (let ((result (assoc (- moment) moment-duration-alist =))) - (and result + (and result (cdr result)))) (define-extra-display-method ContextSpeccedMusic (expr parser)