From 46a056a27c59a31ed53f20e27f8e2772dcbea0d0 Mon Sep 17 00:00:00 2001 From: Thomas Morley Date: Sat, 27 Aug 2016 00:32:30 +0200 Subject: [PATCH] Issue 4960 Fix micro-tones assigned to strings in TabStaff This is an oversight from issue 4643 Also extending input/regression/tablature-micro-tone.ly to cover this case. --- input/regression/tablature-micro-tone.ly | 17 +++++++++++++---- scm/translation-functions.scm | 22 +++++++++++++++------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/input/regression/tablature-micro-tone.ly b/input/regression/tablature-micro-tone.ly index 461dd2f824..a7f891c048 100644 --- a/input/regression/tablature-micro-tone.ly +++ b/input/regression/tablature-micro-tone.ly @@ -8,11 +8,17 @@ in @code{Score}-context. @code{FretBoards} will print those micro-tones only if they can be found in the chosen settings for @code{stringTunings}, otherwise a warning (surpressed here) will be printed and an empty @code{FretBoard} returned. Which should be the -case here for the first pitch: @code{gih}" +case for the last four of the examples pitches. +Micro-tones assigned to strings work nicely." } #(ly:set-option 'warning-as-error #f) -#(ly:expect-warning (_ "No string for pitch ~a (given frets ~a)") #{ gih #} '()) +#(for-each + (lambda (pitch) + (ly:expect-warning (_ "No string for pitch ")) + (ly:expect-warning (_ "Requested string for pitch requires negative fret")) + (ly:expect-warning (_ "Ignoring string request and recalculating."))) + (iota 4)) \layout { \context { @@ -24,8 +30,7 @@ case here for the first pitch: @code{gih}" custom-tuning = \stringTuning mus = \relative { - gih4 - eeses' + eeses'4 eeseh ees eeh @@ -34,6 +39,10 @@ mus = \relative { eis eisih eisis + geseh,,\6 + geh\6 + gih\6 + gisih\6 } << diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index 22f8648c31..0ed0deff0a 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -427,13 +427,21 @@ the current tuning?" (ly:warning (_ "No open string for pitch ~a") pitch))) ;; here we handle assigned strings - (let ((this-fret - (calc-fret pitch string tuning)) - (handle-negative - (ly:context-property context - 'handleNegativeFrets - 'recalculate))) - (cond ((or (and (>= this-fret 0) (integer? this-fret)) + (let* ((this-fret + (calc-fret pitch string tuning)) + (possible-fret? + (and (>= this-fret 0) + (if (and + (ly:context-property + context 'supportNonIntegerFret #f) + (null? rest)) + (integer? (truncate this-fret)) + (integer? this-fret)))) + (handle-negative + (ly:context-property context + 'handleNegativeFrets + 'recalculate))) + (cond ((or possible-fret? (eq? handle-negative 'include)) (set-fret! pitch-entry string finger)) ((eq? handle-negative 'recalculate) -- 2.39.2