From: David Kastrup <dak@gnu.org>
Date: Wed, 9 May 2012 15:46:05 +0000 (+0200)
Subject: Issue 2525: Fix a number of display-lily shortcomings
X-Git-Tag: release/2.15.39-1~32
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c597a126f11943be74a98efee056ab54ae729315;p=lilypond.git

Issue 2525: Fix a number of display-lily shortcomings

Several postevents including non-shorthand articulations were printed with
redundant direction flag - , command events on single note events were
missing the required direction flag - , and a few other problems.
---

diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly
index fdec20519e..6e7a3ab24c 100644
--- a/input/regression/display-lily-tests.ly
+++ b/input/regression/display-lily-tests.ly
@@ -115,13 +115,13 @@ stderr of this run."
 \test ##[ { c-> c^> c_> } #]
 \test ##[ { c-. c^. c_. } #]
 \test ##[ { c-_ c^_ c__ } #]
-\test ##[ { c-\trill c^\trill c_\trill } #]
+\test ##[ { c\trill c^\trill c_\trill } #]
 \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 ##[ { < 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\glissando c^\glissando c_\glissando } #]	% GlissandoEvent
+\test ##[ { c\arpeggio c^\arpeggio c_\arpeggio } #] 	% ArpeggioEvent
 \test ##[ { c\p c^\ff c_\sfz } #] 			% AbsoluteDynamicEvent
 \test ##[ { c[ c] c^[ c^] c_[ c_] } #] 			% BeamEvent
 \test ##[ { c( c) c^( c^) c_( c_) } #] 			% SlurEvent
@@ -141,8 +141,8 @@ stderr of this run."
 \test ##[ \breathe #]
 \test ##[ { c \[ c \] } #]			% LigatureEvent
 \test ##[ \~ #]						% PesOrFlexaEvent
-\test ##[ { c-\bendAfter #3 } #]    % BendAfterEvent
-\test ##[ < c-\rightHandFinger #1 > #]    % StrokeFingerEvent
+\test ##[ c\bendAfter #3 #]    % BendAfterEvent
+\test ##[ c\rightHandFinger #1 #]    % StrokeFingerEvent
 
 \test ##[ \break #]
 \test ##[ \noBreak #]
diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm
index 782552dfeb..6d0449edfc 100644
--- a/scm/define-music-display-methods.scm
+++ b/scm/define-music-display-methods.scm
@@ -181,17 +181,22 @@ expression."
 			 ""
 			 tremolo-type))))
 
-(define-post-event-display-method ArticulationEvent (event parser) #t
-  (let ((articulation  (ly:music-property event 'articulation-type)))
-    (case (string->symbol articulation)
-      ((marcato) "^")
-      ((stopped) "+")
-      ((tenuto)	 "-")
-      ((staccatissimo) "|")
-      ((accent) ">")
-      ((staccato) ".")
-      ((portato) "_")
-      (else (format #f "\\~a" articulation)))))
+(define-display-method ArticulationEvent (event parser) #t
+  (let* ((articulation  (ly:music-property event 'articulation-type))
+	 (shorthand
+	  (case (string->symbol articulation)
+	    ((marcato) "^")
+	    ((stopped) "+")
+	    ((tenuto)	 "-")
+	    ((staccatissimo) "|")
+	    ((accent) ">")
+	    ((staccato) ".")
+	    ((portato) "_")
+	    (else #f))))
+    (format #f "~a~:[\\~;~]~a"
+	    (event-direction->lily-string event shorthand)
+	    shorthand
+	    (or shorthand articulation))))
 
 (define-post-event-display-method FingeringEvent (event parser) #t
   (ly:music-property event 'digit))
@@ -202,16 +207,16 @@ expression."
 (define-post-event-display-method MultiMeasureTextEvent (event parser) #t
   (markup->lily-string (ly:music-property event 'text)))
 
-(define-post-event-display-method BendAfterEvent (event parser) #t
+(define-post-event-display-method BendAfterEvent (event parser) #f
   (format #f "\\bendAfter #~a" (ly:music-property event 'delta-step)))
 
 (define-post-event-display-method HarmonicEvent (event parser) #f "\\harmonic")
-(define-post-event-display-method GlissandoEvent (event parser) #t "\\glissando")
-(define-post-event-display-method ArpeggioEvent (event parser) #t "\\arpeggio")
+(define-post-event-display-method GlissandoEvent (event parser) #f "\\glissando")
+(define-post-event-display-method ArpeggioEvent (event parser) #f "\\arpeggio")
 (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
+(define-post-event-display-method StrokeFingerEvent (event parser) #f
   (format #f "\\rightHandFinger #~a" (ly:music-property event 'digit)))
 
 (define-span-event-display-method BeamEvent (event parser) #f "[" "]")
@@ -494,7 +499,7 @@ Otherwise, return #f."
 ;;;
 
 (define (simple-note->lily-string event parser)
-  (format #f "~a~a~a~a~a~a~{~a~}" ; pitchname octave !? octave-check duration optional_rest articulations
+  (format #f "~a~a~a~a~a~a~:{~:[-~;~]~a~}" ; pitchname octave !? octave-check duration optional_rest articulations
 	  (note-name->lily-string (ly:music-property event 'pitch) parser)
 	  (octave->lily-string (ly:music-property event 'pitch))
 	  (let ((forced (ly:music-property event 'force-accidental))
@@ -519,7 +524,9 @@ Otherwise, return #f."
 	  (if ((make-music-type-predicate 'RestEvent) event)
 	      "\\rest" "")
 	  (map-in-order (lambda (event)
-			  (music->lily-string event parser))
+			  (list
+			   (post-event? event)
+			   (music->lily-string event parser)))
 			(ly:music-property event 'articulations))))
 
 (define-display-method NoteEvent (note parser)