X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Flily-library.scm;h=0d09beae53b5c6f9e994c10cbc5dbe0cd192eb47;hb=5693fcf8ea6357d19f3f4960c81e443104424ab6;hp=2c364187b377e49e0eecd729b98989ed3103b7c4;hpb=920d8abeb968629bbf993792df4e49b1f8f72559;p=lilypond.git diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 2c364187b3..0d09beae53 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -4,8 +4,10 @@ ;;;; source file of the GNU LilyPond music typesetter ;;;; ;;;; (c) 1998--2006 Jan Nieuwenhuizen -;;;; Han-Wen Nienhuys +;;;; Han-Wen Nienhuys +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; constants. (define-public X 0) (define-public Y 1) @@ -28,11 +30,17 @@ (define-safe-public DOUBLE-SHARP 4) (define-safe-public SEMI-TONE 2) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; moments + (define-public ZERO-MOMENT (ly:make-moment 0 1)) (define-public (moment-min a b) (if (ly:moment ((a b c) (d e f) (g)) " @@ -301,7 +374,7 @@ found." (if (null? lst) '() (let* ((c (split-one sep? lst '()))) - (cons (reverse! (car c) '()) (split-list (cdr c) sep?))))) + (cons (reverse! (car c) '()) (split-list-by-separator (cdr c) sep?))))) (define-public (offset-add a b) (cons (+ (car a) (car b)) @@ -310,22 +383,53 @@ found." (define-public (offset-flip-y o) (cons (car o) (- (cdr o)))) +(define-public (offset-scale o scale) + (cons (* (car o) scale) + (* (cdr o) scale))) + (define-public (ly:list->offsets accum coords) (if (null? coords) accum (cons (cons (car coords) (cadr coords)) (ly:list->offsets accum (cddr coords))))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; numbers + +(if (not (defined? 'nan?)) ;; guile 1.6 compat + (define-public (nan? x) (not (or (< 0.0 x) + (> 0.0 x) + (= 0.0 x))))) + +(if (not (defined? 'inf?)) + (define-public (inf? x) (= (/ 1.0 x) 0.0))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; intervals + (define-public (interval-length x) "Length of the number-pair X, when an interval" (max 0 (- (cdr x) (car x)))) (define-public interval-start car) +(define-public (ordered-cons a b) + (cons (min a b) + (max a b))) + (define-public interval-end cdr) +(define-public (interval-index interval dir) + "Interpolate INTERVAL between between left (DIR=-1) and right (DIR=+1)" + + (* (+ (interval-start interval) (interval-end interval) + (* dir (- (interval-end interval) (interval-start interval)))) + 0.5)) + (define-public (interval-center x) "Center the number-pair X, when an interval" - (/ (+ (car x) (cdr x)) 2)) + (if (interval-empty? x) + 0.0 + (/ (+ (car x) (cdr x)) 2))) (define-public interval-start car) (define-public interval-end cdr) @@ -348,6 +452,47 @@ found." (cons (min (car i1) (car i2)) (max (cdr i1) (cdr i2)))) +(define-public (interval-sane? i) + (not (or (nan? (car i)) + (inf? (car i)) + (nan? (cdr i)) + (inf? (cdr i)) + (> (car i) (cdr i))))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; + + +(define-public (string-encode-integer i) + (cond + ((= i 0) "o") + ((< i 0) (string-append "n" (string-encode-integer (- i)))) + (else (string-append + (make-string 1 (integer->char (+ 65 (modulo i 26)))) + (string-encode-integer (quotient i 26)))))) + +(define-public (ly:numbers->string lst) + (string-join (map ly:number->string lst) " ")) + +(define (number->octal-string x) + (let* ((n (inexact->exact x)) + (n64 (quotient n 64)) + (n8 (quotient (- n (* n64 64)) 8))) + (string-append + (number->string n64) + (number->string n8) + (number->string (remainder (- n (+ (* n64 64) (* n8 8))) 8))))) + +(define-public (ly:inexact->string x radix) + (let ((n (inexact->exact x))) + (number->string n radix))) + +(define-public (ly:number-pair->string c) + (string-append (ly:number->string (car c)) " " + (ly:number->string (cdr c)))) + + (define-public (write-me message x) "Return X. Display MESSAGE and write X. Handy for debugging, possibly turned off." @@ -386,6 +531,7 @@ possibly turned off." (define matches '()) (define end-of-prev-match 0) (define (notice match) + (set! matches (cons (substring (match:string match) end-of-prev-match (match:start match)) @@ -408,6 +554,8 @@ possibly turned off." 0 (if (< x 0) -1 1))) +(define-public (car< a b) (< (car a) (car b))) + (define-public (symbolstring lst) (symbol->string r))) @@ -464,7 +612,7 @@ possibly turned off." (string-append input-file-name ": 0: " (_ "warning: ") (format #f - (_ "no \\version statement found, add~afor future compatibility") + (_ "no \\version statement found, please add~afor future compatibility") (format #f "\n\n\\version ~s\n\n" (lilypond-version)))))) (define-public (old-relative-not-used-message input-file-name)