about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py')
-rw-r--r--.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py b/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py
new file mode 100644
index 00000000..385cca60
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py
@@ -0,0 +1,87 @@
+# Copyright (c) 2010-2024 openpyxl
+
+"""
+XML compatibility functions
+"""
+
+# Python stdlib imports
+import re
+from functools import partial
+
+from openpyxl import DEFUSEDXML, LXML
+
+if LXML is True:
+    from lxml.etree import (
+    Element,
+    SubElement,
+    register_namespace,
+    QName,
+    xmlfile,
+    XMLParser,
+    )
+    from lxml.etree import fromstring, tostring
+    # do not resolve entities
+    safe_parser = XMLParser(resolve_entities=False)
+    fromstring = partial(fromstring, parser=safe_parser)
+
+else:
+    from xml.etree.ElementTree import (
+    Element,
+    SubElement,
+    fromstring,
+    tostring,
+    QName,
+    register_namespace
+    )
+    from et_xmlfile import xmlfile
+    if DEFUSEDXML is True:
+        from defusedxml.ElementTree import fromstring
+
+from xml.etree.ElementTree import iterparse
+if DEFUSEDXML is True:
+    from defusedxml.ElementTree import iterparse
+
+from openpyxl.xml.constants import (
+    CHART_NS,
+    DRAWING_NS,
+    SHEET_DRAWING_NS,
+    CHART_DRAWING_NS,
+    SHEET_MAIN_NS,
+    REL_NS,
+    VTYPES_NS,
+    COREPROPS_NS,
+    CUSTPROPS_NS,
+    DCTERMS_NS,
+    DCTERMS_PREFIX,
+    XML_NS
+)
+
+register_namespace(DCTERMS_PREFIX, DCTERMS_NS)
+register_namespace('dcmitype', 'http://purl.org/dc/dcmitype/')
+register_namespace('cp', COREPROPS_NS)
+register_namespace('c', CHART_NS)
+register_namespace('a', DRAWING_NS)
+register_namespace('s', SHEET_MAIN_NS)
+register_namespace('r', REL_NS)
+register_namespace('vt', VTYPES_NS)
+register_namespace('xdr', SHEET_DRAWING_NS)
+register_namespace('cdr', CHART_DRAWING_NS)
+register_namespace('xml', XML_NS)
+register_namespace('cust', CUSTPROPS_NS)
+
+
+tostring = partial(tostring, encoding="utf-8")
+
+NS_REGEX = re.compile("({(?P<namespace>.*)})?(?P<localname>.*)")
+
+def localname(node):
+    if callable(node.tag):
+        return "comment"
+    m = NS_REGEX.match(node.tag)
+    return m.group('localname')
+
+
+def whitespace(node):
+    stripped = node.text.strip()
+    if stripped and node.text != stripped:
+        node.set("{%s}space" % XML_NS, "preserve")