changeset 100208:c5f2603d7595

* mm-view.el (mm-inline-text-html-render-with-w3m): Make it simple and fast. * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Thu, 04 Dec 2008 10:53:18 +0000
parents b8bed9009983
children 1ccd98fcab8c
files lisp/gnus/ChangeLog lisp/gnus/gnus-art.el lisp/gnus/mm-view.el
diffstat 3 files changed, 51 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Thu Dec 04 08:53:26 2008 +0000
+++ b/lisp/gnus/ChangeLog	Thu Dec 04 10:53:18 2008 +0000
@@ -1,3 +1,10 @@
+2008-12-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* mm-view.el (mm-inline-text-html-render-with-w3m): Make it simple and
+	fast.
+
+	* gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
+
 2008-12-04  Naohiro Aota  <nao.aota@gmail.com>
 
 	* mm-view.el (mm-inline-text-html-render-with-w3m): Put special keymap
--- a/lisp/gnus/gnus-art.el	Thu Dec 04 08:53:26 2008 +0000
+++ b/lisp/gnus/gnus-art.el	Thu Dec 04 10:53:18 2008 +0000
@@ -2728,37 +2728,33 @@
   (let ((w3m-safe-url-regexp mm-w3m-safe-url-regexp)
 	w3m-force-redisplay)
     (w3m-region (point-min) (point-max)))
+  ;; Put the mark meaning this part was rendered by emacs-w3m.
+  (put-text-property (point-min) (point-max) 'mm-inline-text-html-with-w3m t)
   (when (and mm-inline-text-html-with-w3m-keymap
 	     (boundp 'w3m-minor-mode-map)
 	     w3m-minor-mode-map)
     (if (and (boundp 'w3m-link-map)
 	     w3m-link-map)
-	(let ((begin (point-min))
-	      (map (copy-keymap w3m-link-map))
-	      end)
+	(let* ((start (point-min))
+	       (end (point-max))
+	       (on (get-text-property start 'w3m-href-anchor))
+	       (map (copy-keymap w3m-link-map))
+	       next)
 	  (set-keymap-parent map w3m-minor-mode-map)
-	  (while (setq end (next-single-property-change begin
-							'w3m-href-anchor))
-	    (add-text-properties
-	     begin end
-	     (list 'keymap (if (get-text-property begin 'w3m-href-anchor)
-			       map
-			     w3m-minor-mode-map)
-		   ;; Put the mark meaning this part was rendered by emacs-w3m.
-		   'mm-inline-text-html-with-w3m t))
-	    (setq begin end))
-	  (add-text-properties
-	   begin (point-max)
-	   (list 'keymap (if (get-text-property begin 'w3m-href-anchor)
-			     map
-			   w3m-minor-mode-map)
-		 ;; Put the mark meaning this part was rendered by emacs-w3m.
-		 'mm-inline-text-html-with-w3m t)))
-      (add-text-properties
-       (point-min) (point-max)
-       (list 'keymap w3m-minor-mode-map
-	     ;; Put the mark meaning this part was rendered by emacs-w3m.
-	     'mm-inline-text-html-with-w3m t)))))
+	  (while (< start end)
+	    (if on
+		(progn
+		  (setq next (or (text-property-any start end
+						    'w3m-href-anchor nil)
+				 end))
+		  (put-text-property start next 'keymap map))
+	      (setq next (or (text-property-not-all start end
+						    'w3m-href-anchor nil)
+			     end))
+	      (put-text-property start next 'keymap w3m-minor-mode-map))
+	    (setq start next
+		  on (not on))))
+      (put-text-property (point-min) (point-max) 'keymap w3m-minor-mode-map))))
 
 (defvar charset) ;; Bound by `article-wash-html'.
 
--- a/lisp/gnus/mm-view.el	Thu Dec 04 08:53:26 2008 +0000
+++ b/lisp/gnus/mm-view.el	Thu Dec 04 10:53:18 2008 +0000
@@ -258,40 +258,35 @@
 	(let ((w3m-safe-url-regexp mm-w3m-safe-url-regexp)
 	      w3m-force-redisplay)
 	  (w3m-region (point-min) (point-max) nil charset))
+	;; Put the mark meaning this part was rendered by emacs-w3m.
+	(put-text-property (point-min) (point-max)
+			   'mm-inline-text-html-with-w3m t)
 	(when (and mm-inline-text-html-with-w3m-keymap
 		   (boundp 'w3m-minor-mode-map)
 		   w3m-minor-mode-map)
 	  (if (and (boundp 'w3m-link-map)
 		   w3m-link-map)
-	      (let ((begin (point-min))
-		    (map (copy-keymap w3m-link-map))
-		    end)
+	      (let* ((start (point-min))
+		     (end (point-max))
+		     (on (get-text-property start 'w3m-href-anchor))
+		     (map (copy-keymap w3m-link-map))
+		     next)
 		(set-keymap-parent map w3m-minor-mode-map)
-		(while (setq end (next-single-property-change
-				  begin 'w3m-href-anchor))
-		  (add-text-properties
-		   begin end
-		   (list 'keymap (if (get-text-property begin 'w3m-href-anchor)
-				     map
-				   w3m-minor-mode-map)
-			 ;; Put the mark meaning this part was rendered
-			 ;; by emacs-w3m.
-			 'mm-inline-text-html-with-w3m t))
-		  (setq begin end))
-		(add-text-properties
-		 begin (point-max)
-		 (list 'keymap (if (get-text-property begin 'w3m-href-anchor)
-				   map
-				 w3m-minor-mode-map)
-		       ;; Put the mark meaning this part was rendered
-		       ;; by emacs-w3m.
-		       'mm-inline-text-html-with-w3m t)))
-	    (add-text-properties
-	     (point-min) (point-max)
-	     (list 'keymap w3m-minor-mode-map
-		   ;; Put the mark meaning this part was rendered
-		   ;; by emacs-w3m.
-		   'mm-inline-text-html-with-w3m t))))
+		(while (< start end)
+		  (if on
+		      (progn
+			(setq next (or (text-property-any start end
+							  'w3m-href-anchor nil)
+				       end))
+			(put-text-property start next 'keymap map))
+		    (setq next (or (text-property-not-all start end
+							  'w3m-href-anchor nil)
+				   end))
+		    (put-text-property start next 'keymap w3m-minor-mode-map))
+		  (setq start next
+			on (not on))))
+	    (put-text-property (point-min) (point-max)
+			       'keymap w3m-minor-mode-map)))
 	(mm-handle-set-undisplayer
 	 handle
 	 `(lambda ()