summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--input/regression/tablature-micro-tone.ly17
-rw-r--r--scm/translation-functions.scm22
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 <e, a, d ges beh eeh'>
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)