mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-27 07:37:33 +00:00
xml: Properly handle symbol-qnames for attribute parsing
* 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.
This commit is contained in:
parent
630df0587e
commit
09eaf661eb
@ -437,6 +437,7 @@ in the XML-NS argument."
|
||||
(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))))
|
||||
@ -646,10 +647,8 @@ surpassed `xml-entity-expansion-limit'"))))
|
||||
(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-*")))
|
||||
|
@ -149,6 +149,21 @@ Parser is called with and without 'symbol-qnames argument.")
|
||||
(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:
|
||||
|
Loading…
Reference in New Issue
Block a user