]> git.donarmstrong.com Git - lilypond.git/commitdiff
Really fix #741.
authorNeil Puttock <n.puttock@gmail.com>
Sat, 18 Jul 2009 22:51:54 +0000 (23:51 +0100)
committerNeil Puttock <n.puttock@gmail.com>
Sat, 18 Jul 2009 22:51:54 +0000 (23:51 +0100)
Since \harmonic only works inside chords, ensure \displayLilyMusic
interprets a single note harmonic as a note_chord_element.

input/regression/display-lily-tests.ly
scm/define-music-display-methods.scm

index f8e49a1cb371353f9fbfb2312b55e37ece721fd7..80d41549ee04b3c67a777f3c8f254b2c32a0dd7c 100644 (file)
@@ -124,7 +124,7 @@ stderr of this run."
 \test "" ##[ { c-1  c^2  c_3  } #]                     % FingerEvent
 \test "" ##[ { c-"foo"  c^"foo"  c_"foo"  } #] % TextScriptEvent
 \test "" ##[ { R1*4-"foo"  R^"foo"  R_"foo"  } #]      % MultiMeasureTextEvent
-\test "" ##[ { c4-\harmonic  c^\harmonic  c_\harmonic  } #]    % HarmonicEvent
+\test "" ##[ { < c\harmonic >4 < c e\harmonic > } #]   % HarmonicEvent
 \test "" ##[ { c-\glissando  c^\glissando  c_\glissando  } #] % GlissandoEvent
 \test "" ##[ { c-\arpeggio  c^\arpeggio  c_\arpeggio  } #]     % ArpeggioEvent
 \test "" ##[ { c\p  c^\ff  c_\sfz  } #]                % AbsoluteDynamicEvent
index a8a80489d443f2a8790787dcbc674a47432d950d..9a3a4c10691cfb1bb14ac43910c2fdf562a42895 100644 (file)
@@ -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)
 ;;; post events
 ;;;
 
-(define post-event? (make-music-type-predicate 
+(define post-event? (make-music-type-predicate
                     'StringNumberEvent
                     'ArticulationEvent
                     'FingeringEvent
 ;;;
 
 (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
                                              ?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
                                                          'SlurEvent
                                                          span-direction START))))))
                           #t)
-         (with-music-match (?stop (music 
+         (with-music-match (?stop (music
                                    'SequentialMusic
                                    elements ((music
                                               'EventChord
                                              ?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
                                                        grob-value "grace"
                                                        symbol 'Stem)))))
                           #t)
-        (with-music-match (?stop (music 
+        (with-music-match (?stop (music
                                   'SequentialMusic
                                   elements ((music
                                              'ContextSpeccedMusic
 
 (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)