diff --git a/lib/chibi/mime.scm b/lib/chibi/mime.scm index 148520b6..9e719d67 100644 --- a/lib/chibi/mime.scm +++ b/lib/chibi/mime.scm @@ -62,7 +62,7 @@ (let ((i (string-scan-colon-or-maybe-equal line))) (and i (let ((j (string-skip-white-space line (+ i 1)))) - (list (string->symbol (string-downcase (substring line 0 i))) + (list (string->symbol (string-downcase-ascii (substring line 0 i))) (substring line j (string-length line))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -72,14 +72,6 @@ (define (ces-convert str . x) str) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; inlined ascii-only srfi-13 string-downcase - -(define (string-downcase s) - (call-with-output-string - (lambda (out) - (string-for-each (lambda (ch) (write-char (char-downcase ch) out)) s)))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;> \subsubsection{RFC2822 Headers} @@ -162,13 +154,14 @@ (define (mime-split-name+value s) (let ((i (string-find s #\=))) (if i - (cons (string->symbol (string-downcase (string-trim (substring s 0 i)))) + (cons (string->symbol + (string-downcase-ascii (string-trim (substring s 0 i)))) (if (= i (string-length s)) "" (if (eqv? #\" (string-ref s (+ i 1))) (substring s (+ i 2) (- (string-length s) 1)) (substring s (+ i 1) (string-length s))))) - (cons (string->symbol (string-downcase (string-trim s))) "")))) + (cons (string->symbol (string-downcase-ascii (string-trim s))) "")))) ;;> \subsubsubsection{\scheme{(mime-parse-content-type str)}} ;;> Parses \var{str} as a Content-Type style-value returning the list diff --git a/lib/chibi/string.scm b/lib/chibi/string.scm index f21c4ba8..b27386b4 100644 --- a/lib/chibi/string.scm +++ b/lib/chibi/string.scm @@ -179,3 +179,13 @@ (define (make-string-searcher needle) (lambda (haystack) (string-contains haystack needle))) + +(define (string-downcase-ascii s) + (call-with-output-string + (lambda (out) + (string-for-each (lambda (ch) (write-char (char-downcase ch) out)) s)))) + +(define (string-upcase-ascii s) + (call-with-output-string + (lambda (out) + (string-for-each (lambda (ch) (write-char (char-downcase ch) out)) s)))) diff --git a/lib/chibi/string.sld b/lib/chibi/string.sld index aeee7140..170dd48f 100644 --- a/lib/chibi/string.sld +++ b/lib/chibi/string.sld @@ -10,6 +10,7 @@ string-prefix? string-suffix? string-find string-find-right string-skip string-skip-right string-fold string-fold-right string-map string-for-each - string-contains make-string-searcher) + string-contains make-string-searcher + string-downcase-ascii string-upcase-ascii) (import (chibi) (chibi ast) (chibi char-set base)) (include "string.scm"))