aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/py/javatoolkit/xml/sax.py')
-rw-r--r--src/py/javatoolkit/xml/sax.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/py/javatoolkit/xml/sax.py b/src/py/javatoolkit/xml/sax.py
new file mode 100644
index 0000000..d3d2a4c
--- /dev/null
+++ b/src/py/javatoolkit/xml/sax.py
@@ -0,0 +1,44 @@
+# Copyright 2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import io
+import xml.sax
+import xml.sax.xmlreader
+
+def _make_parser(*, content_handler=None, dtd_handler=None, entity_resolver=None, error_handler=None, locale=None, features=None, properties=None):
+ parser = xml.sax.make_parser()
+
+ if content_handler is not None:
+ parser.setContentHandler(content_handler)
+ if dtd_handler is not None:
+ parser.setDTDHandler(dtd_handler)
+ if entity_resolver is not None:
+ parser.setEntityResolver(entity_resolver)
+ if error_handler is not None:
+ parser.setErrorHandler(error_handler)
+ if locale is not None:
+ parser.setLocale(locale)
+ if features is not None:
+ for feature, value in features.items():
+ parser.setFeature(feature, value)
+ if properties is not None:
+ for property, value in properties.items():
+ parser.setProperty(property, value)
+
+ return parser
+
+def parse(source, *, content_handler=None, dtd_handler=None, entity_resolver=None, error_handler=None, locale=None, features=None, properties=None):
+ parser = _make_parser(content_handler=content_handler, dtd_handler=dtd_handler, entity_resolver=entity_resolver, error_handler=error_handler, locale=locale, features=features, properties=properties)
+
+ parser.parse(source)
+
+def parse_string(string, *, content_handler=None, dtd_handler=None, entity_resolver=None, error_handler=None, locale=None, features=None, properties=None):
+ parser = _make_parser(content_handler=content_handler, dtd_handler=dtd_handler, entity_resolver=entity_resolver, error_handler=error_handler, locale=locale, features=features, properties=properties)
+
+ inputsource = xml.sax.xmlreader.InputSource()
+ if isinstance(string, str):
+ inputsource.setCharacterStream(io.StringIO(string))
+ else:
+ inputsource.setByteStream(io.BytesIO(string))
+
+ parser.parse(inputsource)