X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-html.el;h=8571fdbe9112f9302922c012fd7b7f73ee38a7a7;hb=77f6f02bf2e5678361dc4489ad5b13502ded0021;hp=bcbf1bdd96f00471b6b319dcfc66e1525c3c09dc;hpb=66768786a1f73831efb8d7ed531d5e21b44612dd;p=gnus
diff --git a/lisp/gnus-html.el b/lisp/gnus-html.el
index bcbf1bdd9..8571fdbe9 100644
--- a/lisp/gnus-html.el
+++ b/lisp/gnus-html.el
@@ -37,7 +37,7 @@
(require 'url-cache)
(require 'xml)
(require 'browse-url)
-(require 'help-fns)
+(eval-and-compile (unless (featurep 'xemacs) (require 'help-fns)))
(defcustom gnus-html-image-cache-ttl (days-to-time 7)
"Time used to determine if we should use images from the cache."
@@ -57,12 +57,6 @@
:group 'gnus-art
:type 'integer)
-(defcustom gnus-blocked-images "."
- "Images that have URLs matching this regexp will be blocked."
- :version "24.1"
- :group 'gnus-art
- :type 'regexp)
-
(defcustom gnus-max-image-proportion 0.9
"How big pictures displayed are in relation to the window they're in.
A value of 0.7 means that they are allowed to take up 70% of the
@@ -191,17 +185,16 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
;; URLs with cid: have their content stashed in other
;; parts of the MIME structure, so just insert them
;; immediately.
- (let ((handle (mm-get-content-id
- (setq url (match-string 1 url))))
- image)
- (when handle
- (mm-with-part handle
- (setq image (gnus-create-image (buffer-string)
- nil t))))
+ (let* ((handle (mm-get-content-id
+ (setq url (match-string 1 url))))
+ (image (when handle
+ (gnus-create-image (mm-with-part handle (buffer-string))
+ nil t))))
(when image
(let ((string (buffer-substring start end)))
(delete-region start end)
- (gnus-put-image image (gnus-string-or string "*") 'cid)
+ (gnus-put-image (gnus-rescale-image image (gnus-html-maximum-image-size))
+ (gnus-string-or string "*") 'cid)
(gnus-add-image 'cid image))))
;; Normal, external URL.
(let ((alt-text (when (string-match "\\(alt\\|title\\)=\"\\([^\"]+\\)"
@@ -212,8 +205,8 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
url
(if (buffer-live-p gnus-summary-buffer)
(with-current-buffer gnus-summary-buffer
- gnus-blocked-images)
- gnus-blocked-images))
+ (gnus-blocked-images))
+ (gnus-blocked-images)))
(progn
(widget-convert-button
'link start end
@@ -266,7 +259,7 @@ Use ALT-TEXT for the image string."
(setq tag (match-string 1)
parameters (match-string 2)
start (match-beginning 0))
- (when (plusp (length parameters))
+ (when (> (length parameters) 0)
(set-text-properties 0 (1- (length parameters)) nil parameters))
(delete-region start (point))
(when (search-forward (concat "" tag ">") nil t)
@@ -282,7 +275,7 @@ Use ALT-TEXT for the image string."
(setq url (match-string 1 parameters))
(gnus-message 8 "gnus-html-wash-tags: fetching link URL %s" url)
(gnus-article-add-button start end
- 'browse-url url
+ 'browse-url (mm-url-decode-entities-string url)
url)
(let ((overlay (gnus-make-overlay start end)))
(gnus-overlay-put overlay 'evaporate t)
@@ -367,9 +360,13 @@ Use ALT-TEXT for the image string."
(let ((args (list (car image)
'gnus-html-image-fetched
(list buffer image))))
- (when (> (length (help-function-arglist 'url-retrieve)) 4)
+ (when (> (length (if (featurep 'xemacs)
+ (cdr (split-string (function-arglist 'url-retrieve)))
+ (help-function-arglist 'url-retrieve)))
+ 4)
(setq args (nconc args (list t))))
- (apply #'url-retrieve args)))
+ (ignore-errors
+ (apply #'url-retrieve args))))
(defun gnus-html-image-fetched (status buffer image)
"Callback function called when image has been fetched."
@@ -395,7 +392,22 @@ Return a string with image data."
(search-forward "\r\n\r\n" nil t))
(buffer-substring (point) (point-max)))))
+(defun gnus-html-maximum-image-size ()
+ "Return the maximum size of an image according to `gnus-max-image-proportion'."
+ (let ((edges (gnus-window-inside-pixel-edges
+ (get-buffer-window (current-buffer)))))
+ ;; (width . height)
+ (cons
+ ;; Aimed width
+ (truncate
+ (* gnus-max-image-proportion
+ (- (nth 2 edges) (nth 0 edges))))
+ ;; Aimed height
+ (truncate (* gnus-max-image-proportion
+ (- (nth 3 edges) (nth 1 edges)))))))
+
(defun gnus-html-put-image (data url &optional alt-text)
+ "Put an image with DATA from URL and optional ALT-TEXT."
(when (gnus-graphic-display-p)
(let* ((start (text-property-any (point-min) (point-max)
'gnus-image-url url))
@@ -431,7 +443,7 @@ Return a string with image data."
(= (car size) 30)
(= (cdr size) 30))))
;; Good image, add it!
- (let ((image (gnus-html-rescale-image image data size)))
+ (let ((image (gnus-rescale-image image (gnus-html-maximum-image-size))))
(delete-region start end)
(gnus-put-image image alt-text 'external)
(gnus-put-text-property start (point) 'help-echo alt-text)
@@ -454,31 +466,6 @@ Return a string with image data."
(gnus-add-image 'internal image))
nil))))))))
-(defun gnus-html-rescale-image (image data size)
- (if (or (not (fboundp 'imagemagick-types))
- (not (get-buffer-window (current-buffer))))
- image
- (let* ((width (car size))
- (height (cdr size))
- (edges (gnus-window-inside-pixel-edges
- (get-buffer-window (current-buffer))))
- (window-width (truncate (* gnus-max-image-proportion
- (- (nth 2 edges) (nth 0 edges)))))
- (window-height (truncate (* gnus-max-image-proportion
- (- (nth 3 edges) (nth 1 edges)))))
- scaled-image)
- (when (> height window-height)
- (setq image (or (create-image data 'imagemagick t
- :height window-height)
- image))
- (setq size (image-size image t)))
- (when (> (car size) window-width)
- (setq image (or
- (create-image data 'imagemagick t
- :width window-width)
- image)))
- image)))
-
(defun gnus-html-image-url-blocked-p (url blocked-images)
"Find out if URL is blocked by BLOCKED-IMAGES."
(let ((ret (and blocked-images
@@ -504,10 +491,11 @@ This only works if the article in question is HTML."
(defun gnus-html-prefetch-images (summary)
(when (buffer-live-p summary)
(let ((blocked-images (with-current-buffer summary
- gnus-blocked-images)))
+ (gnus-blocked-images))))
(save-match-data
- (while (re-search-forward "]+src=[\"']\\([^\"']+\\)" nil t)
- (let ((url (gnus-html-encode-url (match-string 1))))
+ (while (re-search-forward "]+src=[\"']\\(http[^\"']+\\)" nil t)
+ (let ((url (gnus-html-encode-url
+ (mm-url-decode-entities-string (match-string 1)))))
(unless (gnus-html-image-url-blocked-p url blocked-images)
(when (gnus-html-cache-expired url gnus-html-image-cache-ttl)
(gnus-html-schedule-image-fetching nil