2010-03-30 Martin Stjernholm <mast@lysator.liu.se>
[gnus] / lisp / mm-view.el
index fd01a01..42e21ca 100644 (file)
@@ -1,7 +1,7 @@
 ;;; mm-view.el --- functions for viewing MIME objects
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-;;   2007, 2008  Free Software Foundation, Inc.
+;;   2007, 2008, 2009, 2010  Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
        (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 ()