X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-html.el;h=540694f34fb46416b99a82c7234339aafa36910f;hb=3fcc475da6338d7c33f4144cd6ec3f3226a954b9;hp=63a14b204fb6e04bdc42aac60adc77e0f5d94121;hpb=18dcc19728f44683458222282945f3c6b83fd908;p=gnus diff --git a/lisp/gnus-html.el b/lisp/gnus-html.el index 63a14b204..540694f34 100644 --- a/lisp/gnus-html.el +++ b/lisp/gnus-html.el @@ -1,6 +1,6 @@ ;;; gnus-html.el --- Render HTML in a buffer. -;; Copyright (C) 2010 Free Software Foundation, Inc. +;; Copyright (C) 2010-2014 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: html, web @@ -38,13 +38,17 @@ (require 'url-cache) (require 'xml) (require 'browse-url) +(require 'mm-util) (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." :version "24.1" :group 'gnus-art - :type 'integer) + ;; FIXME hardly the friendliest type. The allowed value is actually + ;; any time value, but we are assuming no-one cares about USEC and + ;; PSEC here. It would be better to eg make it a number of minutes. + :type '(list integer integer)) (defcustom gnus-html-image-automatic-caching t "Whether automatically cache retrieve images." @@ -135,7 +139,8 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")." (charset (mail-content-type-get (mm-handle-type handle) 'charset))) (when (and charset - (setq charset (mm-charset-to-coding-system charset)) + (setq charset (mm-charset-to-coding-system + charset nil t)) (not (eq charset 'ascii))) (insert (prog1 (mm-decode-coding-string (buffer-string) charset) @@ -215,16 +220,16 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")." (mm-with-part handle (buffer-string)) nil t)))) (if image - (progn - (gnus-put-image - (gnus-rescale-image - image (gnus-html-maximum-image-size)) - (gnus-string-or (prog1 - (buffer-substring start end) - (delete-region start end)) - "*") - 'cid) - (gnus-add-image 'cid image)) + (gnus-add-image + 'cid + (gnus-put-image + (gnus-rescale-image + image (gnus-html-maximum-image-size)) + (gnus-string-or (prog1 + (buffer-substring start end) + (delete-region start end)) + "*") + 'cid)) (widget-convert-button 'link start end :action 'gnus-html-insert-image @@ -386,29 +391,28 @@ Use ALT-TEXT for the image string." "Retrieve IMAGE, and place it into BUFFER on arrival." (gnus-message 8 "gnus-html-schedule-image-fetching: buffer %s, image %s" buffer image) - (let ((args (list (car image) - 'gnus-html-image-fetched - (list buffer image)))) - (when (> (length (if (featurep 'xemacs) - (cdr (split-string (function-arglist 'url-retrieve))) - (help-function-arglist 'url-retrieve))) - 4) - (setq args (nconc args (list t)))) + (if (fboundp 'url-queue-retrieve) + (url-queue-retrieve (car image) + 'gnus-html-image-fetched + (list buffer image) t t) (ignore-errors - (apply #'url-retrieve args)))) + (url-retrieve (car image) + 'gnus-html-image-fetched + (list buffer image))))) (defun gnus-html-image-fetched (status buffer image) "Callback function called when image has been fetched." (unless (plist-get status :error) - (when gnus-html-image-automatic-caching - (url-store-in-cache (current-buffer))) (when (and (or (search-forward "\n\n" nil t) (search-forward "\r\n\r\n" nil t)) - (buffer-live-p buffer)) - (let ((data (buffer-substring (point) (point-max)))) - (with-current-buffer buffer - (let ((inhibit-read-only t)) - (gnus-html-put-image data (car image) (cadr image))))))) + (not (eobp))) + (when gnus-html-image-automatic-caching + (url-store-in-cache (current-buffer))) + (when (buffer-live-p buffer) + (let ((data (buffer-substring (point) (point-max)))) + (with-current-buffer buffer + (let ((inhibit-read-only t)) + (gnus-html-put-image data (car image) (cadr image)))))))) (kill-buffer (current-buffer))) (defun gnus-html-get-image-data (url) @@ -435,6 +439,9 @@ Return a string with image data." (truncate (* gnus-max-image-proportion (- (nth 3 edges) (nth 1 edges))))))) +;; Behind display-graphic-p test. +(declare-function image-size "image.c" (spec &optional pixels frame)) + (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) @@ -484,8 +491,14 @@ Return a string with image data." (gnus-put-text-property start (point) 'gnus-alt-text alt-text) (when url - (gnus-put-text-property start (point) - 'image-url url)) + (gnus-add-text-properties + start (point) + `(image-url + ,url + image-displayer + (lambda (url start end) + (gnus-html-display-image url start end + ,alt-text))))) (gnus-add-image 'external image) t) ;; Bad image, try to show something else