X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Ftranslation-functions.scm;h=a0b39edfe4d6cff355b8ed21eb7ecd4965fd2f14;hb=01df8ad908c92687d0c352e5ad5f067e52809423;hp=a535497962c07b9ae8ca5d79d1faf3901d1b7e10;hpb=6c2ef51262462ec2758d4c1ebf722be1119453c2;p=lilypond.git diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index a535497962..a0b39edfe4 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -17,6 +17,24 @@ ;;;; along with LilyPond. If not, see . +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; clefs + +(define-public (clef-octavation-markup oct style) + "The octavation sign formatting function. @var{oct} is supposed to be +a string holding the octavation number, @var{style} determines the +way the octavation number is displayed." + (let* ((delim (if (symbol? style) + (case style + ((parenthesized) (cons "(" ")")) + ((bracketed) (cons "[" "]")) + (else (cons "" ""))) + (cons "" ""))) + (text (string-concatenate (list (car delim) oct (cdr delim))))) + + (make-vcenter-markup text))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; metronome marks @@ -264,6 +282,12 @@ dot placement entries." (length (filter (lambda (x) (not (null? x))) art-list))) + (define (string-number event) + "Get the string-number from @var{event}. Return @var{#f} +if no string-number is present." + (let ((num (ly:event-property event 'string-number))) + (and (integer? num) (positive? num) num))) + (define (determine-frets-and-strings notes defined-strings @@ -286,7 +310,7 @@ along with @var{minimum-fret}, @var{maximum-stretch}, and (define (calc-fret pitch string tuning) "Calculate the fret to play @var{pitch} on @var{string} with @var{tuning}." - (- (ly:pitch-semitones pitch) (ly:pitch-semitones (list-ref tuning (1- string))))) + (* 2 (- (ly:pitch-tones pitch) (ly:pitch-tones (list-ref tuning (1- string)))))) (define (note-pitch note) "Get the pitch (in semitones) from @var{note}." @@ -300,21 +324,13 @@ if no fingering is present." (map (lambda (art) (let* ((num (ly:event-property art 'digit))) - (if (and (eq? 'fingering-event (ly:event-property art 'class)) + (if (and (ly:in-event-class? art 'fingering-event) (number? num) (> num 0)) (set! finger-found num)))) articulations) finger-found)) - (define (string-number event) - "Get the string-number from @var{event}. Return @var{#f} -if no string-number is present." - (let ((num (ly:event-property event 'string-number))) - (if (number? num) - num - #f))) - (define (delete-free-string string) (if (number? string) (set! free-strings @@ -342,6 +358,7 @@ notes?" (and (or (and (not restrain-open-strings) (eq? fret 0)) (>= fret minimum-fret)) + (integer? fret) (close-enough fret)))) (define (open-string string pitch) @@ -356,7 +373,10 @@ the current tuning?" tuning))) (if (< this-fret 0) (ly:warning (_ "Negative fret for pitch ~a on string ~a") - (car pitch-entry) string)) + (car pitch-entry) string) + (if (not (integer? this-fret)) + (ly:warning (_ "Missing fret for pitch ~a on string ~a") + (car pitch-entry) string))) (delete-free-string string) (set! specified-frets (cons this-fret specified-frets)) (list-set! string-fret-fingers @@ -374,16 +394,8 @@ the current tuning?" defined-strings defined-fingers)) ;;; body of determine-frets-and-strings - (let* ((pitch-alist (apply (lambda (mylist) - (let ((index -1)) - (map (lambda (note) - (begin - (set! index (1+ index)) - (cons (note-pitch note) - index))) - mylist))) - notes '())) - (pitches (map note-pitch notes))) + (let* ((pitches (map note-pitch notes)) + (pitch-alist (map cons pitches (iota (length pitches))))) ;; handle notes with strings assigned and fingering of 0 (for-each @@ -415,7 +427,7 @@ the current tuning?" (ly:context-property context 'handleNegativeFrets 'recalculate))) - (cond ((or (>= this-fret 0) + (cond ((or (and (>= this-fret 0) (integer? this-fret)) (eq? handle-negative 'include)) (set-fret! pitch-entry string finger)) ((eq? handle-negative 'recalculate) @@ -505,7 +517,7 @@ chords. Returns a placement-list." (defined-strings (map (lambda (x) (if (null? x) x - (ly:event-property x 'string-number))) + (or (string-number x) '()))) (car specified-info))) (defined-fingers (map (lambda (x) (if (null? x)