1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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
- :arg walker: the treewalker to use to walk the tree to convert it
- :arg handler: SAX handler to use
- """
- 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()
|