[gnus git] branch master updated: m0-11-155-g3937bb5 =1= gnus-art.el (gnus-article-browse-html-save-cid-content, gnus-article-browse-html-parts): Make cid file names relative if and only if html doesn't specify <base> directory

Katsumi <[email protected]> Thu, 12 Feb 2015 10:39:28 +0100
Newsgroups gmane.emacs.gnus.cvs
Message-ID <[email protected]>
       via  3937bb5c3b28bc4322eaa47c72de007cb47761c5 (commit)
      from  7a783418c081e681aa35d06bd1ffc3521849dd5d (commit)


- Log -----------------------------------------------------------------
commit 3937bb5c3b28bc4322eaa47c72de007cb47761c5
Author: Katsumi Yamaoka <[email protected]>
Date:   Thu Feb 12 09:39:20 2015 +0000

    gnus-art.el (gnus-article-browse-html-save-cid-content, gnus-article-browse-html-parts): Make cid file names relative if and only if html doesn't specify <base> directory

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fed4701..64a9673 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-12  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-article-browse-html-save-cid-content)
+	(gnus-article-browse-html-parts): Make cid file names relative if and
+	only if html doesn't specify <base> directory.
+
 2015-02-11  Lars Ingebrigtsen  <[email protected]>
 
 	* gnus-art.el (gnus-treat-buttonize): Don't re-buttonize URLs in HTML
diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el
index a7140cf..1e31630 100644
--- a/lisp/gnus-art.el
+++ b/lisp/gnus-art.el
@@ -2793,11 +2793,12 @@ summary buffer."
     (setq gnus-article-browse-html-temp-list nil))
   gnus-article-browse-html-temp-list)
 
-(defun gnus-article-browse-html-save-cid-content (cid handles directory)
+(defun gnus-article-browse-html-save-cid-content (cid handles directory abs)
   "Find CID content in HANDLES and save it in a file in DIRECTORY.
-Return file name."
+Return absolute file name if ABS is non-nil, otherwise relative to
+the parent of DIRECTORY."
   (save-match-data
-    (let (file)
+    (let (file afile)
       (catch 'found
 	(dolist (handle handles)
 	  (cond
@@ -2807,19 +2808,21 @@ Return file name."
 	   ((not (or (bufferp (car handle)) (stringp (car handle)))))
 	   ((equal (mm-handle-media-supertype handle) "multipart")
 	    (when (setq file (gnus-article-browse-html-save-cid-content
-			      cid handle directory))
+			      cid handle directory abs))
 	      (throw 'found file)))
 	   ((equal (concat "<" cid ">") (mm-handle-id handle))
-	    (setq file
-		  (expand-file-name
-		   (or (mm-handle-filename handle)
+	    (setq file (or (mm-handle-filename handle)
 			   (concat
 			    (make-temp-name "cid")
 			    (car (rassoc (car (mm-handle-type handle))
 					 mailcap-mime-extensions))))
-		   directory))
-	    (mm-save-part-to-file handle file)
-	    (throw 'found file))))))))
+		  afile (expand-file-name file directory))
+	    (mm-save-part-to-file handle afile)
+	    (throw 'found (if abs
+			      afile
+			    (concat (file-name-nondirectory
+				     (directory-file-name directory))
+				    "/" file))))))))))
 
 (defun gnus-article-browse-html-parts (list &optional header)
   "View all \"text/html\" parts from LIST.
@@ -2855,8 +2858,13 @@ message header will be added to the bodies of the \"text/html\" parts."
 	       (insert content)
 	       ;; resolve cid contents
 	       (let ((case-fold-search t)
-		     cid-file)
+		     abs st cid-file)
 		 (goto-char (point-min))
+		 (when (re-search-forward "<head[\t\n >]" nil t)
+		   (setq st (match-end 0)
+			 abs (or
+			      (not (re-search-forward "</head[\t\n >]" nil t))
+			      (re-search-backward "<base[\t\n >]" st t))))
 		 (while (re-search-forward "\
 <img[\t\n ]+\\(?:[^\t\n >]+[\t\n ]+\\)*src=\"\\(cid:\\([^\"]+\\)\\)\""
 					   nil t)
@@ -2870,17 +2878,19 @@ message header will be added to the bodies of the \"text/html\" parts."
 				(match-string 2)
 				(with-current-buffer gnus-article-buffer
 				  gnus-article-mime-handles)
-				cid-dir))
-		     (when (eq system-type 'cygwin)
+				cid-dir abs))
+		     (when abs
 		       (setq cid-file
-			     (concat "/" (substring
+			     (if (eq system-type 'cygwin)
+				 (concat "file:///"
+					 (substring
 					  (with-output-to-string
 					    (call-process "cygpath" nil
 							  standard-output
 							  nil "-m" cid-file))
-					  0 -1))))
-		     (replace-match (concat "file://" cid-file)
-				    nil nil nil 1))))
+					  0 -1))
+			       (concat "file://" cid-file))))
+		     (replace-match cid-file nil nil nil 1))))
 	       (unless content (setq content (buffer-string))))
 	     (when (or charset header (not file))
 	       (setq tmp-file (mm-make-temp-file

-----------------------------------------------------------------------
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we listed those
revisions in full, above.

Summary of changes:
 lisp/ChangeLog   |    6 ++++++
 lisp/gnus-art.el |   52 +++++++++++++++++++++++++++++++---------------------
 2 files changed, 37 insertions(+), 21 deletions(-)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnus Project".

The branch, master has been updated


hooks/post-receive
-- 
Gnus Project