]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 5079/3: Let \afterGrace start a Bottom context
authorDavid Kastrup <dak@gnu.org>
Sun, 26 Feb 2017 19:45:22 +0000 (20:45 +0100)
committerDavid Kastrup <dak@gnu.org>
Tue, 7 Mar 2017 12:36:55 +0000 (13:36 +0100)
Previously, an \afterGrace as the first expression of music outside of
an existing Bottom context caused quite weird results.

ly/music-functions-init.ly
scm/define-music-display-methods.scm

index 9fe65613454f9c987b9b3d601b4a7afd3c7f2a17..4bd7d03fa69fd03fdfa45fe7cb5295470878bc0f 100644 (file)
@@ -67,19 +67,20 @@ given fraction of the main note's duration has passed.  If
 @code{afterGraceFraction} which has a default value of @code{3/4}.")
    (let ((main-length (ly:music-length main))
          (fraction (or fraction (ly:parser-lookup 'afterGraceFraction))))
-     (make-simultaneous-music
-      (list
-       main
-       (make-sequential-music
-        (list
-
-         (make-music 'SkipMusic
-                     'duration (ly:make-duration
-                                0 0
-                                (* (ly:moment-main main-length)
-                                   (/ (car fraction) (cdr fraction)))))
-         (make-music 'GraceMusic
-                     'element grace)))))))
+     (descend-to-context
+      (make-simultaneous-music
+       (list
+        main
+        (make-sequential-music
+         (list
+          (make-music 'SkipMusic
+                      'duration (ly:make-duration
+                                 0 0
+                                 (* (ly:moment-main main-length)
+                                    (/ (car fraction) (cdr fraction)))))
+          (make-music 'GraceMusic
+                      'element grace)))))
+      'Bottom)))
 
 
 %% music identifiers not allowed at top-level,
index 51dbdadb13869362f5d6a908f8a234e2d5cd8c65..aa87f9978c3ac0ace19b003a34180d2b47ff92f7 100644 (file)
@@ -385,20 +385,6 @@ expression."
                                         (music->lily-string music))
                                       (ly:music-property sim 'elements)))))
 
-(define-extra-display-method SimultaneousMusic (expr)
-  "If `sim' is an \afterGrace expression, return \"\\afterGrace ...\".
-Otherwise, return #f."
-  ;; TODO: do something with afterGraceFraction?
-  (with-music-match (expr (music 'SimultaneousMusic
-                                 elements (?before-grace
-                                           (music 'SequentialMusic
-                                                  elements ((music 'SkipMusic)
-                                                            (music 'GraceMusic
-                                                                   element ?grace))))))
-                    (format #f "\\afterGrace ~a ~a"
-                            (music->lily-string ?before-grace)
-                            (music->lily-string ?grace))))
-
 ;;;
 ;;; Chords
 ;;;
@@ -739,6 +725,26 @@ Otherwise, return #f."
             (parameterize ((*current-context* ctype))
                           (music->lily-string music)))))
 
+;; \afterGrace
+(define-extra-display-method ContextSpeccedMusic (expr)
+  "If `sim' is an \afterGrace expression, return \"\\afterGrace ...\".
+Otherwise, return #f."
+  ;; TODO: do something with afterGraceFraction?
+  (with-music-match
+   (expr (music 'ContextSpeccedMusic
+                context-type 'Bottom
+                element
+                (music 'SimultaneousMusic
+                       elements (?before-grace
+                                 (music 'SequentialMusic
+                                        elements ((music 'SkipMusic)
+                                                  (music 'GraceMusic
+                                                         element ?grace)))))))
+   (format #f "\\afterGrace ~a ~a"
+           (music->lily-string ?before-grace)
+            (music->lily-string ?grace))))
+
+
 ;; special cases: \figures \lyrics \drums
 (define-extra-display-method ContextSpeccedMusic (expr)
   (with-music-match (expr (music 'ContextSpeccedMusic