apply Andy's diff (and adjust the documentation correspondingly)

closes PR 12652
This commit is contained in:
Robby Findler 2012-03-27 12:09:16 -05:00
parent b3002cfab0
commit fdf3fa6492
2 changed files with 16 additions and 5 deletions

View File

@ -1,5 +1,6 @@
#lang scribble/doc
@(require "common.rkt" scribble/bnf
(only-in net/url url-regexp)
(for-label net/url net/url-unit net/url-sig
net/head net/uri-codec net/tcp-sig
(only-in net/url-connect current-https-protocol)
@ -95,7 +96,7 @@ An HTTP connection is created as a @deftech{pure port} or a
have been removed, so that what remains is purely the first content
fragment. An impure port is one that still has its MIME headers.
@defproc[(string->url [str string?]) url?]{
@defproc[(string->url [str (and/c (or/c string? bytes?) url-regexp)]) url?]{
Parses the URL specified by @racket[str] into a @racket[url]
struct. The @racket[string->url] procedure uses
@ -122,6 +123,16 @@ parsed as an absolute path, and the parsing details depend on
]}
@defthing[url-regexp regexp?]{
This is a regular expression based on the one in
Appendix B of RFC 3986 for recognizing urls.
This is the precise regexp:
@centered{@tt{@(object-name url-regexp)}}
}
@defproc[(combine-url/relative [base url?] [relative string?]) url?]{

View File

@ -433,7 +433,7 @@
;; `*' instead of `+' for the scheme part (it is checked later anyway, and
;; we don't want to parse it as a path element), and the user@host:port is
;; parsed here.
(define url-rx
(define url-regexp
(regexp (string-append
"^"
"(?:" ; / scheme-colon-opt
@ -488,8 +488,7 @@
[query (if query (form-urlencoded->alist query) '())]
[fragment (uri-decode/maybe fragment)])
(make-url scheme user host port abs? path query fragment))))
(cdr (or (regexp-match url-rx str)
(url-error "Invalid URL string: ~e" str)))))
(cdr (regexp-match url-regexp str))))
(define (uri-decode/maybe f) (friendly-decode/maybe f uri-decode))
@ -661,7 +660,8 @@
(provide (struct-out url) (struct-out path/param))
(provide/contract
(string->url ((or/c bytes? string?) . -> . url?))
[url-regexp regexp?]
(string->url (url-regexp . -> . url?))
(path->url ((or/c path-string? path-for-some-system?) . -> . url?))
(url->string (url? . -> . string?))
(url->path (->* (url?) ((one-of/c 'unix 'windows)) path-for-some-system?))