[plt-scheme] Mailto Not Working in Help Desk (see PR 6241)
The url parser is not really set up for mailto urls at all. The fix you
suggest doesn't work in general.n According to rfc1738, this is the
syntax of a mailto url:
mailto:<rfc822-addr-spec>
and that syntax doesn't conform to the standard url syntax at all, so
there needs to be specialized url parsing, and presumably a new struct,
and this means that lots and lots of code may have to change.
That's why I haven't gotten to this yet.
Thanks,
Robby
At Fri, 30 Dec 2005 07:36:40 -0800, "Williams, M. Douglas" wrote:
> The Help Desk has a neat feature that when it shows doc.txt file, it scans
> them for ftp and http urls and e-mail addresses and displays them as links.
> Unfortunately, the e-mail links don't work correctly - they prepend '///' on
> the front of the e-mail address. Unfortunately, because of the way Outlook
> works - I'm sure it's a feature - it isn't easy (or possible?) to get rid of
> this in the address line in Outlook 2003. I came across it when I was
> submitting my packages to PLaneT and tried to follow the link and it didn't
> work. (And I then klutzed up typing it and it took even longer.)
>
>
>
> This bug has apparently been around for a while since Problem Report 6241
> dated May 2, 2003 deals with it in Version 204 and it's still open. The PR
> is assigned to Robby Findler.
>
>
>
> It turns out that the problem is in the way urls are parsed into an internal
> format and then turned back into strings. There is no special parser for
> mailto: urls and for some reason the general url->string function for these
> generic urls adds the three slashes.
>
>
>
> The following fix to the url->string function in the url-unit.ss file in the
> net collection corrects the problem, but needs to be verified.
>
>
>
> (define url->string
>
> (lambda (url)
>
> (let ((scheme (url-scheme url))
>
> (user (url-user url))
>
> (host (url-host url))
>
> (port (url-port url))
>
> (path (url-path url))
>
> (query (url-query url))
>
> (fragment (url-fragment url)))
>
> (cond
>
> ((and scheme (string=? scheme "file"))
>
> (string-append "file:"
>
> (url->file-path url)
>
> (or (and (not fragment) "")
>
> (string-append "#" fragment))))
>
> ;;; added ---v
>
> ((and scheme (string=? scheme "mailto"))
>
> (string-append "mailto:"
>
> (car path)))
>
> ;;; ---------^
>
> (else
>
> (let ((sa string-append))
>
> (sa (if scheme (sa scheme "://") "")
>
> (if user (sa (uri-encode user) "@") "")
>
> (if host host "")
>
> (if port (sa ":" (number->string port)) "")
>
> ; There used to be a "/" here, but
> that causes an
>
> ; extra leading slash -- wonder why
> it ever worked!
>
> (combine-path-strings path)
>
> ;(if query (sa "?" (uri-encode query)) "")
>
> (if (null? query) "" (sa "?" (alist->form-urlencoded
> query)))
>
> (if fragment (sa "#" (uri-encode fragment)) ""))))))))
>
>
>
> This fixes the particular problem with mailto: urls in the help desk. I
> can't see that it would break anything else.
>
>
>
> This fix is based on how the parser actually parses mailto: urls - with
> url-scheme = "mailto" and url-path = ("<the address>"). One could debate
> that there should be code in the parser to handle mailto: urls, but there
> isn't.
>
>
>
> Doug
>
>
>
> M. Douglas Williams, Ph.D.
>
> Sr. Scientist
>
> Science Applications International Corporation
>
> 4B Inverness Drive East, Suite 210
>
> Englewood, CO 80112
>
> office: (303) 217-4421
>
> cell: (303) 229-0315
>
> m.douglas.williams at saic.com <mailto:m.douglas.williams at saic.com>
>
>
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme