From: David Kastrup Date: Wed, 25 Jul 2012 15:47:58 +0000 (+0200) Subject: Issue 2696/4: Fix display of tuplet music, also when nested. X-Git-Tag: release/2.15.42-1~19 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c00378e120b9ecc68c811cbe9a640dadd61c1ac6;p=lilypond.git Issue 2696/4: Fix display of tuplet music, also when nested. --- diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 9505c3e2b0..9631da734d 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -107,13 +107,12 @@ expression." ;;; (define*-public (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*)) (force-duration (*force-duration*)) - (time-factor-numerator (*time-factor-numerator*)) - (time-factor-denominator (*time-factor-denominator*)) + (time-scale (*time-scale*)) remember) (if remember (*previous-duration* ly-duration)) (let ((log2 (ly:duration-log ly-duration)) (dots (ly:duration-dot-count ly-duration)) - (num+den (ly:duration-factor ly-duration))) + (scale (ly:duration-scale ly-duration))) (if (or force-duration (not prev-duration) (not (equal? ly-duration prev-duration))) (string-append (case log2 ((-1) "\\breve") @@ -121,17 +120,9 @@ expression." ((-3) "\\maxima") (else (number->string (expt 2 log2)))) (make-string dots #\.) - (let ((num? (not (or (= 1 (car num+den)) - (and time-factor-numerator - (= (car num+den) time-factor-numerator))))) - (den? (not (or (= 1 (cdr num+den)) - (and time-factor-denominator - (= (cdr num+den) time-factor-denominator)))))) - (cond (den? - (format #f "*~a/~a" (car num+den) (cdr num+den))) - (num? - (format #f "*~a" (car num+den))) - (else "")))) + (let ((end-scale (/ scale time-scale))) + (if (= end-scale 1) "" + (format #f "*~a" end-scale)))) ""))) ;;; @@ -670,10 +661,17 @@ Otherwise, return #f." (define-display-method TimeScaledMusic (times parser) (let* ((num (ly:music-property times 'numerator)) (den (ly:music-property times 'denominator)) - (nd-gcd (gcd num den))) + (scale (/ num den)) + (dur (*previous-duration*)) + (time-scale (*time-scale*))) + (parameterize ((*force-line-break* #f) - (*time-factor-numerator* (/ num nd-gcd)) - (*time-factor-denominator* (/ den nd-gcd))) + (*previous-duration* + (ly:make-duration (ly:duration-log dur) + (ly:duration-dot-count dur) + (* (ly:duration-scale dur) + scale))) + (*time-scale* (* time-scale scale))) (format #f "\\times ~a/~a ~a" num den diff --git a/scm/display-lily.scm b/scm/display-lily.scm index 058534acfe..16f809fc8b 100644 --- a/scm/display-lily.scm +++ b/scm/display-lily.scm @@ -285,8 +285,7 @@ inside body." (define *max-element-number-before-break* (make-parameter 6)) ;; \times factor (used in durations) -(define *time-factor-denominator* (make-parameter #f)) -(define *time-factor-numerator* (make-parameter #f)) +(define *time-scale* (make-parameter 1)) (define *current-context* (make-parameter 'Bottom))