diff lisp/gnus/mm-view.el @ 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 c20a057aefda
children a9dc0e7c3f2b
line wrap: on
line diff
--- 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 ()