* mm-view.el (mm-inline-text-html-render-with-w3m): Make it simple and fast.
authorKatsumi Yamaoka <yamaoka@jpl.org>
Thu, 4 Dec 2008 10:53:38 +0000 (10:53 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Thu, 4 Dec 2008 10:53:38 +0000 (10:53 +0000)
* gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.

lisp/ChangeLog
lisp/gnus-art.el
lisp/mm-view.el

index d5f0d34..53cb048 100644 (file)
@@ -1,3 +1,12 @@
+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.
+
+       * lpath.el: Bind w3m-link-map for Emacs 21, 22, and XEmacs.
+
 2008-12-04  Naohiro Aota  <nao.aota@gmail.com>
 
        * mm-view.el (mm-inline-text-html-render-with-w3m): Put special keymap
@@ -5,8 +14,6 @@
 
        * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
 
-       * lpath.el: Bind w3m-link-map for Emacs 21, 22, and XEmacs.
-
 2008-12-03  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * nnimap.el (nnimap-retrieve-headers-progress): Don't use nnimap-demule
index 7d96a34..a5d09f4 100644 (file)
@@ -2728,37 +2728,33 @@ charset defined in `gnus-summary-show-article-charset-alist' is used."
   (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'.
 
index fd01a01..3f86642 100644 (file)
        (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 ()