diff --git a/collects/mzlib/match.ss b/collects/mzlib/match.ss index fe9b21b..c0a2a0b 100644 --- a/collects/mzlib/match.ss +++ b/collects/mzlib/match.ss @@ -227,13 +227,13 @@ (map (lambda (c) (syntax-case c (=>) - [(p (=> i) e) + [(p (=> i) e e1 ...) `(,(:ucall parse-pattern (syntax p)) (=> ,(syntax i)) - ,(syntax e))] - [(p e) + ,@(syntax->list (syntax (e e1 ...))))] + [(p e e1 ...) `(,(:ucall parse-pattern (syntax p)) - ,(syntax e))] + ,@(syntax->list (syntax (e e1 ...))))] [_else (match:syntax-err c diff --git a/collects/mzlib/string.ss b/collects/mzlib/string.ss index e14d4b5..51c6566 100644 --- a/collects/mzlib/string.ss +++ b/collects/mzlib/string.ss @@ -7,8 +7,11 @@ read-from-string-all expr->string newline-string + string->literal-regexp-string regexp-match-exact?) + (require (lib "etc.ss")) + (define make-string-do! (lambda (translate) (lambda (s) @@ -103,6 +106,22 @@ (define newline-string (string #\newline)) + (define string->literal-regexp-string + (opt-lambda (s [case-sens? #t]) + (list->string + (apply + append + (map + (lambda (c) + (cond + [(memq c '(#\$ #\| #\\ #\[ #\] #\. #\* #\? #\+ #\( #\) #\^)) + (list #\\ c)] + [(and (char-alphabetic? c) + (not case-sens?)) + (list #\[ (char-upcase c) (char-downcase c) #\])] + [else (list c)])) + (string->list s)))))) + (define regexp-match-exact? (lambda (p s) (let ([m (regexp-match p s)])