* lisp/xml.el (xml-parse-attlist): Do not strip 'symbol-qnames from
xml-ns argument (reverts
aea67018) (Bug#26533).
(xml-maybe-do-ns): Properly handle default namespace by not
interning new symbol when 'special' flag is set.
* tests/lisp/xml-tests.el (xml-parse-test--namespace-attribute-qnames)
(xml-parse-namespace-attribute-qnames): Add test for Bug#26533.
(if symbol-qnames (cdr xml-ns) xml-ns)))
"")))
(if (and symbol-qnames
+ (not special)
(not (string= prefix "xmlns")))
(intern (concat ns lname))
(cons ns (if special "" lname))))
(defun xml-parse-attlist (&optional xml-ns)
"Return the attribute-list after point.
Leave point at the first non-blank character after the tag."
- (let* ((attlist ())
- (symbol-qnames (eq (car-safe xml-ns) 'symbol-qnames))
- (xml-ns (if symbol-qnames (cdr xml-ns) xml-ns))
- end-pos name)
+ (let ((attlist ())
+ end-pos name)
(skip-syntax-forward " ")
(while (looking-at (eval-when-compile
(concat "\\(" xml-name-re "\\)\\s-*=\\s-*")))
(should (equal (cdr xml-parse-test--default-namespace-qnames)
(xml-parse-region nil nil nil nil 'symbol-qnames)))))
+;; Test bug #26533 (proper expansion in prefixed attributes with 'symbol-qnames)
+(defvar xml-parse-test--namespace-attribute-qnames
+ (cons "<something xmlns:a=\"myns:\"><whatever a:b='c'></whatever></something>"
+ '((something
+ ((("http://www.w3.org/2000/xmlns/" . "a")
+ . "myns:"))
+ (whatever
+ ((myns:b . "c")))))))
+
+(ert-deftest xml-parse-namespace-attribute-qnames ()
+ (with-temp-buffer
+ (insert (car xml-parse-test--namespace-attribute-qnames))
+ (should (equal (cdr xml-parse-test--namespace-attribute-qnames)
+ (xml-parse-region nil nil nil nil 'symbol-qnames)))))
+
;; Local Variables:
;; no-byte-compile: t
;; End: