From: plugd Date: Mon, 9 Aug 2021 08:16:38 +0000 (+0200) Subject: Merged Alex's IRI support, with tiny changes. X-Git-Tag: v3.3.0~22 X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=commitdiff_plain;h=58e018e92e7c6667c9c163f13a1592248d654b53 Merged Alex's IRI support, with tiny changes. --- 58e018e92e7c6667c9c163f13a1592248d654b53 diff --cc elpher.el index 11ca3c1,925afa3..9bdc49e --- a/elpher.el +++ b/elpher.el @@@ -340,6 -340,6 +340,8 @@@ the start page. (if (cdr p) (concat "/" (mapconcat #'identity (cdr p) "/")) "")))) ++ (when (url-host url) ++ (setf (url-host url) (puny-encode-domain (url-host url)))) (when (or (equal "gopher" (url-type url)) (equal "gophers" (url-type url))) ;; Gopher defaults @@@ -502,9 -514,32 +504,22 @@@ If no address is defined, returns 0. ( "Create a page with address and display string defined by URL. The URL is unhexed prior to its use as a display string to improve readability." - (elpher-make-page (elpher-decode (url-unhex-string url)) + (elpher-make-page (elpher-url-to-iri url) (elpher-address-from-url url))) + (defun elpher-url-to-iri (url) + "Return an IRI for URL. + Decode percent-escapes and handle punycode in the domain name. + Drop the password, if any." + (let* ((address (elpher-address-from-url (elpher-decode (url-unhex-string url)))) + (host (url-host address)) + (pass (url-password address))) + (when host + (setf (url-host address) (puny-decode-domain host))) + (when pass ; RFC 3986 says we should not render + (setf (url-password address) nil)) ; the password as clear text + (url-recreate-url address))) + -(defun elpher-encode-url (iri) - "Return an URL for the IRI. -Encode and use percent-escapes, use punycode for the domain name -if necessary." - (let* ((address (url-generic-parse-url iri)) - (host (url-host address))) - (when host - (setf (url-host address) (puny-encode-domain host))) - (url-recreate-url address))) - (defvar elpher-current-page nil "The current page for this Elpher buffer.") @@@ -1462,6 -1494,6 +1477,8 @@@ treatment that a separate function is w (setf (url-filename address) (concat (file-name-directory (url-filename current-address)) (url-filename address))))) ++ (when (url-host address) ++ (setf (url-host address) (puny-encode-domain (url-host address)))) (unless (url-type address) (setf (url-type address) (url-type current-address))) (when (equal (url-type address) "gemini")