shr.el (shr-encode-url-chars): New function.
authorKatsumi Yamaoka <yamaoka@jpl.org>
Tue, 5 Oct 2010 00:39:29 +0000 (00:39 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Tue, 5 Oct 2010 00:39:29 +0000 (00:39 +0000)
lisp/ChangeLog
lisp/shr.el

index 715c738..7374e2c 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * shr.el (shr-encode-url-chars): New function, that's an alias to
+       browse-url-url-encode-chars or a copy of it.
+       (shr-tag-img): Use it.
+
 2010-10-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * shr.el (shr-tag-blockquote): Ensure paragraph after quote, too.
index 59d7b78..e97ca1d 100644 (file)
@@ -191,6 +191,25 @@ redirects somewhere else."
        (copy-region-as-kill (point-min) (point-max))
        (message "Copied %s" url))))))
 
+(eval-and-compile
+  (defalias 'shr-encode-url-chars
+    ;; Neither Emacs 22 nor XEmacs provides this function.
+    (if (fboundp 'browse-url-url-encode-chars)
+       'browse-url-url-encode-chars
+      (lambda (text chars)
+       "URL-encode the chars in TEXT that match CHARS.
+CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
+       (let ((encoded-text (copy-sequence text))
+             (s 0))
+         (while (setq s (string-match chars encoded-text s))
+           (setq encoded-text
+                 (replace-match (format "%%%x"
+                                        (string-to-char
+                                         (match-string 0 encoded-text)))
+                                t t encoded-text)
+                 s (1+ s)))
+         encoded-text)))))
+
 (defun shr-tag-img (cont)
   (when (and (> (current-column) 0)
             (not (eq shr-state 'image)))
@@ -204,7 +223,7 @@ redirects somewhere else."
        ((and shr-blocked-images
             (string-match shr-blocked-images url))
        (insert alt))
-       ((url-is-cached (browse-url-url-encode-chars url "[&)$ ]"))
+       ((url-is-cached (shr-encode-url-chars url "[&)$ ]"))
        (shr-put-image (shr-get-image-data url) (point) alt))
        (t
        (insert alt)