diff options
author | Donald Stufft <donald@stufft.io> | 2014-05-03 01:13:28 -0400 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2014-05-03 01:13:28 -0400 |
commit | 0e72f65bf4e5ea6b8fd17d02fe4cae0ba7da5113 (patch) | |
tree | 5c04afcabe3c7087e38b8114b19de437f2cf4ab3 /pip/_vendor/html5lib/treeadapters/sax.py | |
parent | bdef6cebfb4e92a388cf84ed55cbd4ead8ef269c (diff) | |
parent | 93098d0c6781dd7019dfa43d9030f14b28f1bf2d (diff) | |
download | pip-1.5.5.tar.gz |
Merge branch '1.5.X'1.5.5
Conflicts:
.travis/py34.sh
CHANGES.txt
PROJECT.txt
Diffstat (limited to 'pip/_vendor/html5lib/treeadapters/sax.py')
-rw-r--r-- | pip/_vendor/html5lib/treeadapters/sax.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/pip/_vendor/html5lib/treeadapters/sax.py b/pip/_vendor/html5lib/treeadapters/sax.py new file mode 100644 index 000000000..ad47df956 --- /dev/null +++ b/pip/_vendor/html5lib/treeadapters/sax.py @@ -0,0 +1,44 @@ +from __future__ import absolute_import, division, unicode_literals + +from xml.sax.xmlreader import AttributesNSImpl + +from ..constants import adjustForeignAttributes, unadjustForeignAttributes + +prefix_mapping = {} +for prefix, localName, namespace in adjustForeignAttributes.values(): + if prefix is not None: + prefix_mapping[prefix] = namespace + + +def to_sax(walker, handler): + """Call SAX-like content handler based on treewalker walker""" + handler.startDocument() + for prefix, namespace in prefix_mapping.items(): + handler.startPrefixMapping(prefix, namespace) + + for token in walker: + type = token["type"] + if type == "Doctype": + continue + elif type in ("StartTag", "EmptyTag"): + attrs = AttributesNSImpl(token["data"], + unadjustForeignAttributes) + handler.startElementNS((token["namespace"], token["name"]), + token["name"], + attrs) + if type == "EmptyTag": + handler.endElementNS((token["namespace"], token["name"]), + token["name"]) + elif type == "EndTag": + handler.endElementNS((token["namespace"], token["name"]), + token["name"]) + elif type in ("Characters", "SpaceCharacters"): + handler.characters(token["data"]) + elif type == "Comment": + pass + else: + assert False, "Unknown token type" + + for prefix, namespace in prefix_mapping.items(): + handler.endPrefixMapping(prefix) + handler.endDocument() |