- (if (gnus-html-image-url-blocked-p
- url
- (if (buffer-live-p gnus-summary-buffer)
- (with-current-buffer gnus-summary-buffer
- gnus-blocked-images)
- gnus-blocked-images))
- (progn
- (widget-convert-button
- 'link start end
- :action 'gnus-html-insert-image
- :help-echo url
- :keymap gnus-html-image-map
- :button-keymap gnus-html-image-map)
- (let ((overlay (gnus-make-overlay start end))
- (spec (list url
- (set-marker (make-marker) start)
- (set-marker (make-marker) end))))
- (gnus-overlay-put overlay 'local-map gnus-html-image-map)
- (gnus-overlay-put overlay 'gnus-image spec)
- (gnus-put-text-property
- start end
- 'gnus-image spec)))
- (let ((file (gnus-html-image-id url))
- width height alt-text)
- (when (string-match "height=\"?\\([0-9]+\\)" parameters)
- (setq height (string-to-number (match-string 1 parameters))))
- (when (string-match "width=\"?\\([0-9]+\\)" parameters)
- (setq width (string-to-number (match-string 1 parameters))))
- (when (string-match "\\(alt\\|title\\)=\"\\([^\"]+\\)"
- parameters)
- (setq alt-text (match-string 2 parameters)))
- ;; Don't fetch images that are really small. They're
- ;; probably tracking pictures.
- (when (and (or (null height)
- (> height 4))
- (or (null width)
- (> width 4)))
- (if (file-exists-p file)
- ;; It's already cached, so just insert it.
- (let ((string (buffer-substring start end)))
- ;; Delete the IMG text.
- (delete-region start end)
- (gnus-html-put-image file (point) string url alt-text))
- ;; We don't have it, so schedule it for fetching
- ;; asynchronously.
- (push (list url
- (set-marker (make-marker) start)
- (point-marker))
- images))))))))
- (when images
- (gnus-html-schedule-image-fetching (current-buffer) (nreverse images)))))
+ (let ((alt-text (when (string-match "\\(alt\\|title\\)=\"\\([^\"]+\\)"
+ parameters)
+ (xml-substitute-special (match-string 2 parameters)))))
+ (gnus-put-text-property start end 'gnus-image-url url)
+ (if (gnus-html-image-url-blocked-p
+ url
+ (if (buffer-live-p gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
+ gnus-blocked-images)
+ gnus-blocked-images))
+ (progn
+ (widget-convert-button
+ 'link start end
+ :action 'gnus-html-insert-image
+ :help-echo url
+ :keymap gnus-html-image-map
+ :button-keymap gnus-html-image-map)
+ (let ((overlay (gnus-make-overlay start end))
+ (spec (list url start end alt-text)))
+ (gnus-overlay-put overlay 'local-map gnus-html-image-map)
+ (gnus-overlay-put overlay 'gnus-image spec)
+ (gnus-put-text-property
+ start end
+ 'gnus-image spec)))
+ ;; Non-blocked url
+ (let ((width
+ (when (string-match "width=\"?\\([0-9]+\\)" parameters)
+ (string-to-number (match-string 1 parameters))))
+ (height
+ (when (string-match "height=\"?\\([0-9]+\\)" parameters)
+ (string-to-number (match-string 1 parameters)))))
+ ;; Don't fetch images that are really small. They're
+ ;; probably tracking pictures.
+ (when (and (or (null height)
+ (> height 4))
+ (or (null width)
+ (> width 4)))
+ (gnus-html-display-image url start end alt-text))))))))))
+
+(defun gnus-html-display-image (url start end alt-text)
+ "Display image at URL on text from START to END.
+Use ALT-TEXT for the image string."
+ (if (gnus-html-cache-expired url gnus-html-image-cache-ttl)
+ ;; We don't have it, so schedule it for fetching
+ ;; asynchronously.
+ (gnus-html-schedule-image-fetching
+ (current-buffer)
+ (list url alt-text))
+ ;; It's already cached, so just insert it.
+ (gnus-html-put-image (gnus-html-get-image-data url) url alt-text)))