Be more liberal when extracting forwards as MIME
[gnus] / lisp / shr.el
index 7af8e31..41f1224 100644 (file)
@@ -35,6 +35,7 @@
 
 (defgroup shr nil
   "Simple HTML Renderer"
+  :version "24.1"
   :group 'mail)
 
 (defcustom shr-max-image-proportion 0.9
@@ -159,7 +160,7 @@ DOM should be a parse tree as generated by
       (goto-char start)
       (while (not (eobp))
        (end-of-line)
-       (when (> (current-column) width)
+       (when (> (shr-previous-newline-padding-width (current-column)) width)
          (dolist (overlay (overlays-at (point)))
            (when (overlay-get overlay 'before-string)
              (overlay-put overlay 'before-string nil))))
@@ -188,7 +189,8 @@ redirects somewhere else."
             (when (re-search-forward ".utm_.*" nil t)
               (replace-match "" t t))
             (message "Copied %s" (buffer-string))
-            (copy-region-as-kill (point-min) (point-max)))))))
+            (copy-region-as-kill (point-min) (point-max)))))
+       nil t))
      ;; Copy the URL to the kill ring.
      (t
       (with-temp-buffer
@@ -231,7 +233,7 @@ the URL of the image to the kill buffer instead."
       (message "Inserting %s..." url)
       (url-retrieve url 'shr-image-fetched
                    (list (current-buffer) (1- (point)) (point-marker))
-                   t))))
+                   t t))))
 
 ;;; Utility functions.
 
@@ -510,7 +512,8 @@ the URL of the image to the kill buffer instead."
     (if (not url)
        (message "No link under point")
       (url-retrieve (shr-encode-url url)
-                   'shr-store-contents (list url directory)))))
+                   'shr-store-contents (list url directory)
+                   nil t))))
 
 (defun shr-store-contents (status url directory)
   (unless (plist-get status :error)
@@ -521,20 +524,21 @@ the URL of the image to the kill buffer instead."
                                      directory)))))
 
 (defun shr-image-fetched (status buffer start end)
-  (when (and (buffer-name buffer)
-            (not (plist-get status :error)))
-    (url-store-in-cache (current-buffer))
-    (when (or (search-forward "\n\n" nil t)
-             (search-forward "\r\n\r\n" nil t))
-      (let ((data (buffer-substring (point) (point-max))))
-        (with-current-buffer buffer
-         (save-excursion
-           (let ((alt (buffer-substring start end))
-                 (inhibit-read-only t))
-             (delete-region start end)
-             (goto-char start)
-             (funcall shr-put-image-function data alt)))))))
-  (kill-buffer (current-buffer)))
+  (let ((image-buffer (current-buffer)))
+    (when (and (buffer-name buffer)
+              (not (plist-get status :error)))
+      (url-store-in-cache image-buffer)
+      (when (or (search-forward "\n\n" nil t)
+               (search-forward "\r\n\r\n" nil t))
+       (let ((data (buffer-substring (point) (point-max))))
+         (with-current-buffer buffer
+           (save-excursion
+             (let ((alt (buffer-substring start end))
+                   (inhibit-read-only t))
+               (delete-region start end)
+               (goto-char start)
+               (funcall shr-put-image-function data alt)))))))
+    (kill-buffer image-buffer)))
 
 (defun shr-put-image (data alt)
   "Put image DATA with a string ALT.  Return image."
@@ -617,7 +621,7 @@ START, and END.  Note that START and END should be markers."
                   (delete-region (point) end))))
         (url-retrieve url 'shr-image-fetched
                       (list (current-buffer) start end)
-                      t)))))
+                      t t)))))
 
 (defun shr-heading (cont &rest types)
   (shr-ensure-paragraph)
@@ -927,13 +931,10 @@ ones, in case fg and bg are nil."
            (let ((file (url-cache-create-filename (shr-encode-url url))))
              (when (file-exists-p file)
                (delete-file file))))
-         (funcall
-          (if (fboundp 'url-queue-retrieve)
-              'url-queue-retrieve
-            'url-retrieve)
+         (url-queue-retrieve
           (shr-encode-url url) 'shr-image-fetched
           (list (current-buffer) start (set-marker (make-marker) (1- (point))))
-          t)))
+          t t)))
        (when (zerop shr-table-depth) ;; We are not in a table.
          (put-text-property start (point) 'keymap shr-map)
          (put-text-property start (point) 'shr-alt alt)
@@ -1363,10 +1364,10 @@ ones, in case fg and bg are nil."
            (when (memq (car column) '(td th))
              (let ((width (cdr (assq :width (cdr column)))))
                (when (and width
-                          (string-match "\\([0-9]+\\)%" width))
-                 (aset columns i
-                       (/ (string-to-number (match-string 1 width))
-                          100.0))))
+                          (string-match "\\([0-9]+\\)%" width)
+                          (not (zerop (setq width (string-to-number
+                                                   (match-string 1 width))))))
+                 (aset columns i (/ width 100.0))))
              (setq i (1+ i)))))))
     columns))