summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2014-06-22 23:14:43 +0200
committerAndreas Schwab <schwab@linux-m68k.org>2014-06-22 23:14:43 +0200
commitf76c98dd13ae5ab69d014d2459b3ed8eaf82c2f8 (patch)
tree99418fb95b681581063ad81f700a00ba8b4c502d
parentf3953a24ea8b800170bde3db98565f2040b2f915 (diff)
downloademacs-f76c98dd13ae5ab69d014d2459b3ed8eaf82c2f8.tar.gz
* html2text.el (html2text-get-attr): Rewrite to handle spaces in quoted
attribute values. (Bug#17834)
-rw-r--r--lisp/gnus/ChangeLog5
-rw-r--r--lisp/gnus/html2text.el80
2 files changed, 19 insertions, 66 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index c9a23e47e6c..4ad3a6de63e 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,8 @@
+2014-06-22 Andreas Schwab <schwab@linux-m68k.org>
+
+ * html2text.el (html2text-get-attr): Rewrite to handle spaces in quoted
+ attribute values. (Bug#17834)
+
2014-05-28 Andreas Schwab <schwab@linux-m68k.org>
* html2text.el (html2text-get-attr): Fix typo when splitting value from
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index 78cecd92356..22ee1c3921e 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -179,72 +179,20 @@ formatting, and then moved afterward.")
(defun html2text-get-attr (p1 p2)
(goto-char p1)
- (re-search-forward " +[^ ]" p2 t)
- (let* ((attr-string (buffer-substring-no-properties (1- (point)) (1- p2)))
- (tmp-list (split-string attr-string))
- (attr-list)
- (counter 0)
- (prev (car tmp-list))
- (this (nth 1 tmp-list))
- (next (nth 2 tmp-list))
- (index 1))
-
- (cond
- ;; size=3
- ((string-match "[^ ]=[^ ]" prev)
- (let ((attr (nth 0 (split-string prev "=")))
- (value (substring prev (1+ (string-match "=" prev)))))
- (setq attr-list (cons (list attr value) attr-list))))
- ;; size= 3
- ((string-match "[^ ]=\\'" prev)
- (setq attr-list (cons (list (substring prev 0 -1) this) attr-list))))
-
- (while (< index (length tmp-list))
- (cond
- ;; size=3
- ((string-match "[^ ]=[^ ]" this)
- (let ((attr (nth 0 (split-string this "=")))
- (value (substring this (1+ (string-match "=" this)))))
- (setq attr-list (cons (list attr value) attr-list))))
- ;; size =3
- ((string-match "\\`=[^ ]" this)
- (setq attr-list (cons (list prev (substring this 1)) attr-list)))
- ;; size= 3
- ((string-match "[^ ]=\\'" this)
- (setq attr-list (cons (list (substring this 0 -1) next) attr-list)))
- ;; size = 3
- ((string= "=" this)
- (setq attr-list (cons (list prev next) attr-list))))
- (setq index (1+ index))
- (setq prev this)
- (setq this next)
- (setq next (nth (1+ index) tmp-list)))
- ;;
- ;; Tags with no accompanying "=" i.e. value=nil
- ;;
- (setq prev (car tmp-list))
- (setq this (nth 1 tmp-list))
- (setq next (nth 2 tmp-list))
- (setq index 1)
-
- (when (and (not (string-match "=" prev))
- (not (string= (substring this 0 1) "=")))
- (setq attr-list (cons (list prev nil) attr-list)))
- (while (< index (1- (length tmp-list)))
- (when (and (not (string-match "=" this))
- (not (or (string= (substring next 0 1) "=")
- (string= (substring prev -1) "="))))
- (setq attr-list (cons (list this nil) attr-list)))
- (setq index (1+ index))
- (setq prev this)
- (setq this next)
- (setq next (nth (1+ index) tmp-list)))
-
- (when (and this
- (not (string-match "=" this))
- (not (string= (substring prev -1) "=")))
- (setq attr-list (cons (list this nil) attr-list)))
- ;; return - value
+ (re-search-forward "\\s-+" p2 t)
+ (let (attr-list)
+ (while (re-search-forward "[-a-z0-9._]+" p2 t)
+ (setq attr-list
+ (cons
+ (list (match-string 0)
+ (when (looking-at "\\s-*=")
+ (goto-char (match-end 0))
+ (skip-chars-forward "[:space:]")
+ (when (or (looking-at "\"[^\"]*\"\\|'[^']*'")
+ (looking-at "[-a-z0-9._:]+"))
+ (goto-char (match-end 0))
+ (match-string 0))))
+ attr-list)))
attr-list))
;;