comparison env/lib/python3.9/site-packages/bleach/_vendor/html5lib/treeadapters/sax.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 from __future__ import absolute_import, division, unicode_literals
2
3 from xml.sax.xmlreader import AttributesNSImpl
4
5 from ..constants import adjustForeignAttributes, unadjustForeignAttributes
6
7 prefix_mapping = {}
8 for prefix, localName, namespace in adjustForeignAttributes.values():
9 if prefix is not None:
10 prefix_mapping[prefix] = namespace
11
12
13 def to_sax(walker, handler):
14 """Call SAX-like content handler based on treewalker walker
15
16 :arg walker: the treewalker to use to walk the tree to convert it
17
18 :arg handler: SAX handler to use
19
20 """
21 handler.startDocument()
22 for prefix, namespace in prefix_mapping.items():
23 handler.startPrefixMapping(prefix, namespace)
24
25 for token in walker:
26 type = token["type"]
27 if type == "Doctype":
28 continue
29 elif type in ("StartTag", "EmptyTag"):
30 attrs = AttributesNSImpl(token["data"],
31 unadjustForeignAttributes)
32 handler.startElementNS((token["namespace"], token["name"]),
33 token["name"],
34 attrs)
35 if type == "EmptyTag":
36 handler.endElementNS((token["namespace"], token["name"]),
37 token["name"])
38 elif type == "EndTag":
39 handler.endElementNS((token["namespace"], token["name"]),
40 token["name"])
41 elif type in ("Characters", "SpaceCharacters"):
42 handler.characters(token["data"])
43 elif type == "Comment":
44 pass
45 else:
46 assert False, "Unknown token type"
47
48 for prefix, namespace in prefix_mapping.items():
49 handler.endPrefixMapping(prefix)
50 handler.endDocument()