From d65c28e4c325cd3193c158bb92f6abf5e397aae1 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sun, 26 Feb 2017 20:45:22 +0100 Subject: [PATCH] Issue 5079/3: Let \afterGrace start a Bottom context Previously, an \afterGrace as the first expression of music outside of an existing Bottom context caused quite weird results. --- ly/music-functions-init.ly | 27 +++++++++++----------- scm/define-music-display-methods.scm | 34 ++++++++++++++++------------ 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 9fe6561345..4bd7d03fa6 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -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, diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 51dbdadb13..aa87f9978c 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -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 -- 2.39.2