lxml 6.0.0__cp311-cp311-win_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lxml/ElementInclude.py +244 -0
- lxml/__init__.py +22 -0
- lxml/_elementpath.cp311-win_arm64.pyd +0 -0
- lxml/_elementpath.py +343 -0
- lxml/apihelpers.pxi +1801 -0
- lxml/builder.cp311-win_arm64.pyd +0 -0
- lxml/builder.py +243 -0
- lxml/classlookup.pxi +580 -0
- lxml/cleanup.pxi +215 -0
- lxml/cssselect.py +101 -0
- lxml/debug.pxi +36 -0
- lxml/docloader.pxi +178 -0
- lxml/doctestcompare.py +488 -0
- lxml/dtd.pxi +479 -0
- lxml/etree.cp311-win_arm64.pyd +0 -0
- lxml/etree.h +244 -0
- lxml/etree.pyx +3853 -0
- lxml/etree_api.h +204 -0
- lxml/extensions.pxi +830 -0
- lxml/html/ElementSoup.py +10 -0
- lxml/html/__init__.py +1927 -0
- lxml/html/_diffcommand.py +86 -0
- lxml/html/_difflib.cp311-win_arm64.pyd +0 -0
- lxml/html/_difflib.py +2106 -0
- lxml/html/_html5builder.py +100 -0
- lxml/html/_setmixin.py +56 -0
- lxml/html/builder.py +173 -0
- lxml/html/clean.py +21 -0
- lxml/html/defs.py +135 -0
- lxml/html/diff.cp311-win_arm64.pyd +0 -0
- lxml/html/diff.py +972 -0
- lxml/html/formfill.py +299 -0
- lxml/html/html5parser.py +260 -0
- lxml/html/soupparser.py +314 -0
- lxml/html/usedoctest.py +13 -0
- lxml/includes/__init__.pxd +0 -0
- lxml/includes/__init__.py +0 -0
- lxml/includes/c14n.pxd +25 -0
- lxml/includes/config.pxd +3 -0
- lxml/includes/dtdvalid.pxd +18 -0
- lxml/includes/etree_defs.h +379 -0
- lxml/includes/etreepublic.pxd +237 -0
- lxml/includes/extlibs/__init__.py +0 -0
- lxml/includes/extlibs/zconf.h +543 -0
- lxml/includes/extlibs/zlib.h +1938 -0
- lxml/includes/htmlparser.pxd +56 -0
- lxml/includes/libexslt/__init__.py +0 -0
- lxml/includes/libexslt/exslt.h +108 -0
- lxml/includes/libexslt/exsltconfig.h +70 -0
- lxml/includes/libexslt/exsltexports.h +63 -0
- lxml/includes/libexslt/libexslt.h +29 -0
- lxml/includes/libxml/HTMLparser.h +320 -0
- lxml/includes/libxml/HTMLtree.h +147 -0
- lxml/includes/libxml/SAX.h +204 -0
- lxml/includes/libxml/SAX2.h +173 -0
- lxml/includes/libxml/__init__.py +0 -0
- lxml/includes/libxml/c14n.h +128 -0
- lxml/includes/libxml/catalog.h +182 -0
- lxml/includes/libxml/chvalid.h +230 -0
- lxml/includes/libxml/debugXML.h +217 -0
- lxml/includes/libxml/dict.h +81 -0
- lxml/includes/libxml/encoding.h +233 -0
- lxml/includes/libxml/entities.h +151 -0
- lxml/includes/libxml/globals.h +529 -0
- lxml/includes/libxml/hash.h +236 -0
- lxml/includes/libxml/list.h +137 -0
- lxml/includes/libxml/nanoftp.h +186 -0
- lxml/includes/libxml/nanohttp.h +81 -0
- lxml/includes/libxml/parser.h +1265 -0
- lxml/includes/libxml/parserInternals.h +662 -0
- lxml/includes/libxml/pattern.h +100 -0
- lxml/includes/libxml/relaxng.h +218 -0
- lxml/includes/libxml/schemasInternals.h +958 -0
- lxml/includes/libxml/schematron.h +142 -0
- lxml/includes/libxml/threads.h +94 -0
- lxml/includes/libxml/tree.h +1314 -0
- lxml/includes/libxml/uri.h +94 -0
- lxml/includes/libxml/valid.h +448 -0
- lxml/includes/libxml/xinclude.h +129 -0
- lxml/includes/libxml/xlink.h +189 -0
- lxml/includes/libxml/xmlIO.h +369 -0
- lxml/includes/libxml/xmlautomata.h +146 -0
- lxml/includes/libxml/xmlerror.h +919 -0
- lxml/includes/libxml/xmlexports.h +50 -0
- lxml/includes/libxml/xmlmemory.h +228 -0
- lxml/includes/libxml/xmlmodule.h +57 -0
- lxml/includes/libxml/xmlreader.h +428 -0
- lxml/includes/libxml/xmlregexp.h +222 -0
- lxml/includes/libxml/xmlsave.h +88 -0
- lxml/includes/libxml/xmlschemas.h +246 -0
- lxml/includes/libxml/xmlschemastypes.h +152 -0
- lxml/includes/libxml/xmlstring.h +140 -0
- lxml/includes/libxml/xmlunicode.h +202 -0
- lxml/includes/libxml/xmlversion.h +526 -0
- lxml/includes/libxml/xmlwriter.h +488 -0
- lxml/includes/libxml/xpath.h +575 -0
- lxml/includes/libxml/xpathInternals.h +632 -0
- lxml/includes/libxml/xpointer.h +137 -0
- lxml/includes/libxslt/__init__.py +0 -0
- lxml/includes/libxslt/attributes.h +39 -0
- lxml/includes/libxslt/documents.h +93 -0
- lxml/includes/libxslt/extensions.h +262 -0
- lxml/includes/libxslt/extra.h +72 -0
- lxml/includes/libxslt/functions.h +78 -0
- lxml/includes/libxslt/imports.h +75 -0
- lxml/includes/libxslt/keys.h +53 -0
- lxml/includes/libxslt/libxslt.h +36 -0
- lxml/includes/libxslt/namespaces.h +68 -0
- lxml/includes/libxslt/numbersInternals.h +73 -0
- lxml/includes/libxslt/preproc.h +43 -0
- lxml/includes/libxslt/security.h +104 -0
- lxml/includes/libxslt/templates.h +77 -0
- lxml/includes/libxslt/transform.h +207 -0
- lxml/includes/libxslt/trio.h +216 -0
- lxml/includes/libxslt/triodef.h +220 -0
- lxml/includes/libxslt/variables.h +118 -0
- lxml/includes/libxslt/win32config.h +51 -0
- lxml/includes/libxslt/xslt.h +110 -0
- lxml/includes/libxslt/xsltInternals.h +1992 -0
- lxml/includes/libxslt/xsltconfig.h +179 -0
- lxml/includes/libxslt/xsltexports.h +64 -0
- lxml/includes/libxslt/xsltlocale.h +44 -0
- lxml/includes/libxslt/xsltutils.h +343 -0
- lxml/includes/lxml-version.h +3 -0
- lxml/includes/relaxng.pxd +64 -0
- lxml/includes/schematron.pxd +34 -0
- lxml/includes/tree.pxd +492 -0
- lxml/includes/uri.pxd +5 -0
- lxml/includes/xinclude.pxd +22 -0
- lxml/includes/xmlerror.pxd +852 -0
- lxml/includes/xmlparser.pxd +303 -0
- lxml/includes/xmlschema.pxd +35 -0
- lxml/includes/xpath.pxd +136 -0
- lxml/includes/xslt.pxd +190 -0
- lxml/isoschematron/__init__.py +348 -0
- lxml/isoschematron/resources/rng/iso-schematron.rng +709 -0
- lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl +75 -0
- lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl +77 -0
- lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl +313 -0
- lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl +1160 -0
- lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl +55 -0
- lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl +1796 -0
- lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl +588 -0
- lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt +84 -0
- lxml/iterparse.pxi +438 -0
- lxml/lxml.etree.h +244 -0
- lxml/lxml.etree_api.h +204 -0
- lxml/nsclasses.pxi +281 -0
- lxml/objectify.cp311-win_arm64.pyd +0 -0
- lxml/objectify.pyx +2149 -0
- lxml/objectpath.pxi +332 -0
- lxml/parser.pxi +2059 -0
- lxml/parsertarget.pxi +180 -0
- lxml/proxy.pxi +619 -0
- lxml/public-api.pxi +178 -0
- lxml/pyclasslookup.py +3 -0
- lxml/readonlytree.pxi +565 -0
- lxml/relaxng.pxi +165 -0
- lxml/sax.cp311-win_arm64.pyd +0 -0
- lxml/sax.py +286 -0
- lxml/saxparser.pxi +875 -0
- lxml/schematron.pxi +173 -0
- lxml/serializer.pxi +1849 -0
- lxml/usedoctest.py +13 -0
- lxml/xinclude.pxi +67 -0
- lxml/xmlerror.pxi +1654 -0
- lxml/xmlid.pxi +179 -0
- lxml/xmlschema.pxi +215 -0
- lxml/xpath.pxi +487 -0
- lxml/xslt.pxi +957 -0
- lxml/xsltext.pxi +242 -0
- lxml-6.0.0.dist-info/METADATA +163 -0
- lxml-6.0.0.dist-info/RECORD +177 -0
- lxml-6.0.0.dist-info/WHEEL +5 -0
- lxml-6.0.0.dist-info/licenses/LICENSE.txt +31 -0
- lxml-6.0.0.dist-info/licenses/LICENSES.txt +29 -0
- lxml-6.0.0.dist-info/top_level.txt +1 -0
lxml/lxml.etree_api.h
ADDED
@@ -0,0 +1,204 @@
|
|
1
|
+
/* Generated by Cython 3.1.2 */
|
2
|
+
|
3
|
+
#ifndef __PYX_HAVE_API__lxml__etree
|
4
|
+
#define __PYX_HAVE_API__lxml__etree
|
5
|
+
#ifdef __MINGW64__
|
6
|
+
#define MS_WIN64
|
7
|
+
#endif
|
8
|
+
#include "Python.h"
|
9
|
+
#include "lxml.etree.h"
|
10
|
+
|
11
|
+
static struct LxmlElement *(*__pyx_api_f_4lxml_5etree_deepcopyNodeToDocument)(struct LxmlDocument *, xmlNode *) = 0;
|
12
|
+
#define deepcopyNodeToDocument __pyx_api_f_4lxml_5etree_deepcopyNodeToDocument
|
13
|
+
static struct LxmlElementTree *(*__pyx_api_f_4lxml_5etree_elementTreeFactory)(struct LxmlElement *) = 0;
|
14
|
+
#define elementTreeFactory __pyx_api_f_4lxml_5etree_elementTreeFactory
|
15
|
+
static struct LxmlElementTree *(*__pyx_api_f_4lxml_5etree_newElementTree)(struct LxmlElement *, PyObject *) = 0;
|
16
|
+
#define newElementTree __pyx_api_f_4lxml_5etree_newElementTree
|
17
|
+
static struct LxmlElementTree *(*__pyx_api_f_4lxml_5etree_adoptExternalDocument)(xmlDoc *, PyObject *, int) = 0;
|
18
|
+
#define adoptExternalDocument __pyx_api_f_4lxml_5etree_adoptExternalDocument
|
19
|
+
static struct LxmlElement *(*__pyx_api_f_4lxml_5etree_elementFactory)(struct LxmlDocument *, xmlNode *) = 0;
|
20
|
+
#define elementFactory __pyx_api_f_4lxml_5etree_elementFactory
|
21
|
+
static struct LxmlElement *(*__pyx_api_f_4lxml_5etree_makeElement)(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *) = 0;
|
22
|
+
#define makeElement __pyx_api_f_4lxml_5etree_makeElement
|
23
|
+
static struct LxmlElement *(*__pyx_api_f_4lxml_5etree_makeSubElement)(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *) = 0;
|
24
|
+
#define makeSubElement __pyx_api_f_4lxml_5etree_makeSubElement
|
25
|
+
static void (*__pyx_api_f_4lxml_5etree_setElementClassLookupFunction)(_element_class_lookup_function, PyObject *) = 0;
|
26
|
+
#define setElementClassLookupFunction __pyx_api_f_4lxml_5etree_setElementClassLookupFunction
|
27
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_lookupDefaultElementClass)(PyObject *, PyObject *, xmlNode *) = 0;
|
28
|
+
#define lookupDefaultElementClass __pyx_api_f_4lxml_5etree_lookupDefaultElementClass
|
29
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_lookupNamespaceElementClass)(PyObject *, PyObject *, xmlNode *) = 0;
|
30
|
+
#define lookupNamespaceElementClass __pyx_api_f_4lxml_5etree_lookupNamespaceElementClass
|
31
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_callLookupFallback)(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *) = 0;
|
32
|
+
#define callLookupFallback __pyx_api_f_4lxml_5etree_callLookupFallback
|
33
|
+
static int (*__pyx_api_f_4lxml_5etree_tagMatches)(xmlNode *, const xmlChar *, const xmlChar *) = 0;
|
34
|
+
#define tagMatches __pyx_api_f_4lxml_5etree_tagMatches
|
35
|
+
static struct LxmlDocument *(*__pyx_api_f_4lxml_5etree_documentOrRaise)(PyObject *) = 0;
|
36
|
+
#define documentOrRaise __pyx_api_f_4lxml_5etree_documentOrRaise
|
37
|
+
static struct LxmlElement *(*__pyx_api_f_4lxml_5etree_rootNodeOrRaise)(PyObject *) = 0;
|
38
|
+
#define rootNodeOrRaise __pyx_api_f_4lxml_5etree_rootNodeOrRaise
|
39
|
+
static int (*__pyx_api_f_4lxml_5etree_hasText)(xmlNode *) = 0;
|
40
|
+
#define hasText __pyx_api_f_4lxml_5etree_hasText
|
41
|
+
static int (*__pyx_api_f_4lxml_5etree_hasTail)(xmlNode *) = 0;
|
42
|
+
#define hasTail __pyx_api_f_4lxml_5etree_hasTail
|
43
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_textOf)(xmlNode *) = 0;
|
44
|
+
#define textOf __pyx_api_f_4lxml_5etree_textOf
|
45
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_tailOf)(xmlNode *) = 0;
|
46
|
+
#define tailOf __pyx_api_f_4lxml_5etree_tailOf
|
47
|
+
static int (*__pyx_api_f_4lxml_5etree_setNodeText)(xmlNode *, PyObject *) = 0;
|
48
|
+
#define setNodeText __pyx_api_f_4lxml_5etree_setNodeText
|
49
|
+
static int (*__pyx_api_f_4lxml_5etree_setTailText)(xmlNode *, PyObject *) = 0;
|
50
|
+
#define setTailText __pyx_api_f_4lxml_5etree_setTailText
|
51
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_attributeValue)(xmlNode *, xmlAttr *) = 0;
|
52
|
+
#define attributeValue __pyx_api_f_4lxml_5etree_attributeValue
|
53
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_attributeValueFromNsName)(xmlNode *, const xmlChar *, const xmlChar *) = 0;
|
54
|
+
#define attributeValueFromNsName __pyx_api_f_4lxml_5etree_attributeValueFromNsName
|
55
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_getAttributeValue)(struct LxmlElement *, PyObject *, PyObject *) = 0;
|
56
|
+
#define getAttributeValue __pyx_api_f_4lxml_5etree_getAttributeValue
|
57
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_iterattributes)(struct LxmlElement *, int) = 0;
|
58
|
+
#define iterattributes __pyx_api_f_4lxml_5etree_iterattributes
|
59
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_collectAttributes)(xmlNode *, int) = 0;
|
60
|
+
#define collectAttributes __pyx_api_f_4lxml_5etree_collectAttributes
|
61
|
+
static int (*__pyx_api_f_4lxml_5etree_setAttributeValue)(struct LxmlElement *, PyObject *, PyObject *) = 0;
|
62
|
+
#define setAttributeValue __pyx_api_f_4lxml_5etree_setAttributeValue
|
63
|
+
static int (*__pyx_api_f_4lxml_5etree_delAttribute)(struct LxmlElement *, PyObject *) = 0;
|
64
|
+
#define delAttribute __pyx_api_f_4lxml_5etree_delAttribute
|
65
|
+
static int (*__pyx_api_f_4lxml_5etree_delAttributeFromNsName)(xmlNode *, const xmlChar *, const xmlChar *) = 0;
|
66
|
+
#define delAttributeFromNsName __pyx_api_f_4lxml_5etree_delAttributeFromNsName
|
67
|
+
static int (*__pyx_api_f_4lxml_5etree_hasChild)(xmlNode *) = 0;
|
68
|
+
#define hasChild __pyx_api_f_4lxml_5etree_hasChild
|
69
|
+
static xmlNode *(*__pyx_api_f_4lxml_5etree_findChild)(xmlNode *, Py_ssize_t) = 0;
|
70
|
+
#define findChild __pyx_api_f_4lxml_5etree_findChild
|
71
|
+
static xmlNode *(*__pyx_api_f_4lxml_5etree_findChildForwards)(xmlNode *, Py_ssize_t) = 0;
|
72
|
+
#define findChildForwards __pyx_api_f_4lxml_5etree_findChildForwards
|
73
|
+
static xmlNode *(*__pyx_api_f_4lxml_5etree_findChildBackwards)(xmlNode *, Py_ssize_t) = 0;
|
74
|
+
#define findChildBackwards __pyx_api_f_4lxml_5etree_findChildBackwards
|
75
|
+
static xmlNode *(*__pyx_api_f_4lxml_5etree_nextElement)(xmlNode *) = 0;
|
76
|
+
#define nextElement __pyx_api_f_4lxml_5etree_nextElement
|
77
|
+
static xmlNode *(*__pyx_api_f_4lxml_5etree_previousElement)(xmlNode *) = 0;
|
78
|
+
#define previousElement __pyx_api_f_4lxml_5etree_previousElement
|
79
|
+
static void (*__pyx_api_f_4lxml_5etree_appendChild)(struct LxmlElement *, struct LxmlElement *) = 0;
|
80
|
+
#define appendChild __pyx_api_f_4lxml_5etree_appendChild
|
81
|
+
static int (*__pyx_api_f_4lxml_5etree_appendChildToElement)(struct LxmlElement *, struct LxmlElement *) = 0;
|
82
|
+
#define appendChildToElement __pyx_api_f_4lxml_5etree_appendChildToElement
|
83
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_pyunicode)(const xmlChar *) = 0;
|
84
|
+
#define pyunicode __pyx_api_f_4lxml_5etree_pyunicode
|
85
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_utf8)(PyObject *) = 0;
|
86
|
+
#define utf8 __pyx_api_f_4lxml_5etree_utf8
|
87
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_getNsTag)(PyObject *) = 0;
|
88
|
+
#define getNsTag __pyx_api_f_4lxml_5etree_getNsTag
|
89
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs)(PyObject *) = 0;
|
90
|
+
#define getNsTagWithEmptyNs __pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs
|
91
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_namespacedName)(xmlNode *) = 0;
|
92
|
+
#define namespacedName __pyx_api_f_4lxml_5etree_namespacedName
|
93
|
+
static PyObject *(*__pyx_api_f_4lxml_5etree_namespacedNameFromNsName)(const xmlChar *, const xmlChar *) = 0;
|
94
|
+
#define namespacedNameFromNsName __pyx_api_f_4lxml_5etree_namespacedNameFromNsName
|
95
|
+
static void (*__pyx_api_f_4lxml_5etree_iteratorStoreNext)(struct LxmlElementIterator *, struct LxmlElement *) = 0;
|
96
|
+
#define iteratorStoreNext __pyx_api_f_4lxml_5etree_iteratorStoreNext
|
97
|
+
static void (*__pyx_api_f_4lxml_5etree_initTagMatch)(struct LxmlElementTagMatcher *, PyObject *) = 0;
|
98
|
+
#define initTagMatch __pyx_api_f_4lxml_5etree_initTagMatch
|
99
|
+
static xmlNs *(*__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix)(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *) = 0;
|
100
|
+
#define findOrBuildNodeNsPrefix __pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix
|
101
|
+
static int __Pyx_ImportFunction_3_1_2(PyObject *module, const char *funcname, void (**f)(void), const char *sig);
|
102
|
+
|
103
|
+
#ifndef __PYX_HAVE_RT_ImportFunction_3_1_2
|
104
|
+
#define __PYX_HAVE_RT_ImportFunction_3_1_2
|
105
|
+
static int __Pyx_ImportFunction_3_1_2(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
|
106
|
+
PyObject *d = 0;
|
107
|
+
PyObject *cobj = 0;
|
108
|
+
union {
|
109
|
+
void (*fp)(void);
|
110
|
+
void *p;
|
111
|
+
} tmp;
|
112
|
+
d = PyObject_GetAttrString(module, "__pyx_capi__");
|
113
|
+
if (!d)
|
114
|
+
goto bad;
|
115
|
+
#if (defined(Py_LIMITED_API) && Py_LIMITED_API >= 0x030d0000) || (!defined(Py_LIMITED_API) && PY_VERSION_HEX >= 0x030d0000)
|
116
|
+
PyDict_GetItemStringRef(d, funcname, &cobj);
|
117
|
+
#else
|
118
|
+
cobj = PyDict_GetItemString(d, funcname);
|
119
|
+
Py_XINCREF(cobj);
|
120
|
+
#endif
|
121
|
+
if (!cobj) {
|
122
|
+
PyErr_Format(PyExc_ImportError,
|
123
|
+
"%.200s does not export expected C function %.200s",
|
124
|
+
PyModule_GetName(module), funcname);
|
125
|
+
goto bad;
|
126
|
+
}
|
127
|
+
if (!PyCapsule_IsValid(cobj, sig)) {
|
128
|
+
PyErr_Format(PyExc_TypeError,
|
129
|
+
"C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
|
130
|
+
PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
|
131
|
+
goto bad;
|
132
|
+
}
|
133
|
+
tmp.p = PyCapsule_GetPointer(cobj, sig);
|
134
|
+
*f = tmp.fp;
|
135
|
+
if (!(*f))
|
136
|
+
goto bad;
|
137
|
+
Py_DECREF(d);
|
138
|
+
Py_DECREF(cobj);
|
139
|
+
return 0;
|
140
|
+
bad:
|
141
|
+
Py_XDECREF(d);
|
142
|
+
Py_XDECREF(cobj);
|
143
|
+
return -1;
|
144
|
+
}
|
145
|
+
#endif
|
146
|
+
|
147
|
+
|
148
|
+
static int import_lxml__etree(void) {
|
149
|
+
PyObject *module = 0;
|
150
|
+
module = PyImport_ImportModule("lxml.etree");
|
151
|
+
if (!module) goto bad;
|
152
|
+
if (__Pyx_ImportFunction_3_1_2(module, "deepcopyNodeToDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_deepcopyNodeToDocument, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
|
153
|
+
if (__Pyx_ImportFunction_3_1_2(module, "elementTreeFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementTreeFactory, "struct LxmlElementTree *(struct LxmlElement *)") < 0) goto bad;
|
154
|
+
if (__Pyx_ImportFunction_3_1_2(module, "newElementTree", (void (**)(void))&__pyx_api_f_4lxml_5etree_newElementTree, "struct LxmlElementTree *(struct LxmlElement *, PyObject *)") < 0) goto bad;
|
155
|
+
if (__Pyx_ImportFunction_3_1_2(module, "adoptExternalDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_adoptExternalDocument, "struct LxmlElementTree *(xmlDoc *, PyObject *, int)") < 0) goto bad;
|
156
|
+
if (__Pyx_ImportFunction_3_1_2(module, "elementFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementFactory, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
|
157
|
+
if (__Pyx_ImportFunction_3_1_2(module, "makeElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeElement, "struct LxmlElement *(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
|
158
|
+
if (__Pyx_ImportFunction_3_1_2(module, "makeSubElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeSubElement, "struct LxmlElement *(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
|
159
|
+
if (__Pyx_ImportFunction_3_1_2(module, "setElementClassLookupFunction", (void (**)(void))&__pyx_api_f_4lxml_5etree_setElementClassLookupFunction, "void (_element_class_lookup_function, PyObject *)") < 0) goto bad;
|
160
|
+
if (__Pyx_ImportFunction_3_1_2(module, "lookupDefaultElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupDefaultElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
|
161
|
+
if (__Pyx_ImportFunction_3_1_2(module, "lookupNamespaceElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupNamespaceElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
|
162
|
+
if (__Pyx_ImportFunction_3_1_2(module, "callLookupFallback", (void (**)(void))&__pyx_api_f_4lxml_5etree_callLookupFallback, "PyObject *(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *)") < 0) goto bad;
|
163
|
+
if (__Pyx_ImportFunction_3_1_2(module, "tagMatches", (void (**)(void))&__pyx_api_f_4lxml_5etree_tagMatches, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
|
164
|
+
if (__Pyx_ImportFunction_3_1_2(module, "documentOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_documentOrRaise, "struct LxmlDocument *(PyObject *)") < 0) goto bad;
|
165
|
+
if (__Pyx_ImportFunction_3_1_2(module, "rootNodeOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_rootNodeOrRaise, "struct LxmlElement *(PyObject *)") < 0) goto bad;
|
166
|
+
if (__Pyx_ImportFunction_3_1_2(module, "hasText", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasText, "int (xmlNode *)") < 0) goto bad;
|
167
|
+
if (__Pyx_ImportFunction_3_1_2(module, "hasTail", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasTail, "int (xmlNode *)") < 0) goto bad;
|
168
|
+
if (__Pyx_ImportFunction_3_1_2(module, "textOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_textOf, "PyObject *(xmlNode *)") < 0) goto bad;
|
169
|
+
if (__Pyx_ImportFunction_3_1_2(module, "tailOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_tailOf, "PyObject *(xmlNode *)") < 0) goto bad;
|
170
|
+
if (__Pyx_ImportFunction_3_1_2(module, "setNodeText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setNodeText, "int (xmlNode *, PyObject *)") < 0) goto bad;
|
171
|
+
if (__Pyx_ImportFunction_3_1_2(module, "setTailText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setTailText, "int (xmlNode *, PyObject *)") < 0) goto bad;
|
172
|
+
if (__Pyx_ImportFunction_3_1_2(module, "attributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValue, "PyObject *(xmlNode *, xmlAttr *)") < 0) goto bad;
|
173
|
+
if (__Pyx_ImportFunction_3_1_2(module, "attributeValueFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValueFromNsName, "PyObject *(xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
|
174
|
+
if (__Pyx_ImportFunction_3_1_2(module, "getAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_getAttributeValue, "PyObject *(struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
|
175
|
+
if (__Pyx_ImportFunction_3_1_2(module, "iterattributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_iterattributes, "PyObject *(struct LxmlElement *, int)") < 0) goto bad;
|
176
|
+
if (__Pyx_ImportFunction_3_1_2(module, "collectAttributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_collectAttributes, "PyObject *(xmlNode *, int)") < 0) goto bad;
|
177
|
+
if (__Pyx_ImportFunction_3_1_2(module, "setAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_setAttributeValue, "int (struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
|
178
|
+
if (__Pyx_ImportFunction_3_1_2(module, "delAttribute", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttribute, "int (struct LxmlElement *, PyObject *)") < 0) goto bad;
|
179
|
+
if (__Pyx_ImportFunction_3_1_2(module, "delAttributeFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttributeFromNsName, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
|
180
|
+
if (__Pyx_ImportFunction_3_1_2(module, "hasChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasChild, "int (xmlNode *)") < 0) goto bad;
|
181
|
+
if (__Pyx_ImportFunction_3_1_2(module, "findChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChild, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
|
182
|
+
if (__Pyx_ImportFunction_3_1_2(module, "findChildForwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildForwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
|
183
|
+
if (__Pyx_ImportFunction_3_1_2(module, "findChildBackwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildBackwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
|
184
|
+
if (__Pyx_ImportFunction_3_1_2(module, "nextElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_nextElement, "xmlNode *(xmlNode *)") < 0) goto bad;
|
185
|
+
if (__Pyx_ImportFunction_3_1_2(module, "previousElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_previousElement, "xmlNode *(xmlNode *)") < 0) goto bad;
|
186
|
+
if (__Pyx_ImportFunction_3_1_2(module, "appendChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChild, "void (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
|
187
|
+
if (__Pyx_ImportFunction_3_1_2(module, "appendChildToElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChildToElement, "int (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
|
188
|
+
if (__Pyx_ImportFunction_3_1_2(module, "pyunicode", (void (**)(void))&__pyx_api_f_4lxml_5etree_pyunicode, "PyObject *(const xmlChar *)") < 0) goto bad;
|
189
|
+
if (__Pyx_ImportFunction_3_1_2(module, "utf8", (void (**)(void))&__pyx_api_f_4lxml_5etree_utf8, "PyObject *(PyObject *)") < 0) goto bad;
|
190
|
+
if (__Pyx_ImportFunction_3_1_2(module, "getNsTag", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTag, "PyObject *(PyObject *)") < 0) goto bad;
|
191
|
+
if (__Pyx_ImportFunction_3_1_2(module, "getNsTagWithEmptyNs", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs, "PyObject *(PyObject *)") < 0) goto bad;
|
192
|
+
if (__Pyx_ImportFunction_3_1_2(module, "namespacedName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedName, "PyObject *(xmlNode *)") < 0) goto bad;
|
193
|
+
if (__Pyx_ImportFunction_3_1_2(module, "namespacedNameFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedNameFromNsName, "PyObject *(const xmlChar *, const xmlChar *)") < 0) goto bad;
|
194
|
+
if (__Pyx_ImportFunction_3_1_2(module, "iteratorStoreNext", (void (**)(void))&__pyx_api_f_4lxml_5etree_iteratorStoreNext, "void (struct LxmlElementIterator *, struct LxmlElement *)") < 0) goto bad;
|
195
|
+
if (__Pyx_ImportFunction_3_1_2(module, "initTagMatch", (void (**)(void))&__pyx_api_f_4lxml_5etree_initTagMatch, "void (struct LxmlElementTagMatcher *, PyObject *)") < 0) goto bad;
|
196
|
+
if (__Pyx_ImportFunction_3_1_2(module, "findOrBuildNodeNsPrefix", (void (**)(void))&__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix, "xmlNs *(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
|
197
|
+
Py_DECREF(module); module = 0;
|
198
|
+
return 0;
|
199
|
+
bad:
|
200
|
+
Py_XDECREF(module);
|
201
|
+
return -1;
|
202
|
+
}
|
203
|
+
|
204
|
+
#endif /* !__PYX_HAVE_API__lxml__etree */
|
lxml/nsclasses.pxi
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
# module-level API for namespace implementations
|
2
|
+
|
3
|
+
cdef class LxmlRegistryError(LxmlError):
|
4
|
+
"""Base class of lxml registry errors.
|
5
|
+
"""
|
6
|
+
|
7
|
+
cdef class NamespaceRegistryError(LxmlRegistryError):
|
8
|
+
"""Error registering a namespace extension.
|
9
|
+
"""
|
10
|
+
|
11
|
+
|
12
|
+
@cython.internal
|
13
|
+
cdef class _NamespaceRegistry:
|
14
|
+
"Dictionary-like namespace registry"
|
15
|
+
cdef object _ns_uri
|
16
|
+
cdef bytes _ns_uri_utf
|
17
|
+
cdef dict _entries
|
18
|
+
cdef char* _c_ns_uri_utf
|
19
|
+
def __cinit__(self, ns_uri):
|
20
|
+
self._ns_uri = ns_uri
|
21
|
+
if ns_uri is None:
|
22
|
+
self._ns_uri_utf = None
|
23
|
+
self._c_ns_uri_utf = NULL
|
24
|
+
else:
|
25
|
+
self._ns_uri_utf = _utf8(ns_uri)
|
26
|
+
self._c_ns_uri_utf = _cstr(self._ns_uri_utf)
|
27
|
+
self._entries = {}
|
28
|
+
|
29
|
+
def update(self, class_dict_iterable):
|
30
|
+
"""update(self, class_dict_iterable)
|
31
|
+
|
32
|
+
Forgivingly update the registry.
|
33
|
+
|
34
|
+
``class_dict_iterable`` may be a dict or some other iterable
|
35
|
+
that yields (name, value) pairs.
|
36
|
+
|
37
|
+
If a value does not match the required type for this registry,
|
38
|
+
or if the name starts with '_', it will be silently discarded.
|
39
|
+
This allows registrations at the module or class level using
|
40
|
+
vars(), globals() etc."""
|
41
|
+
if hasattr(class_dict_iterable, 'items'):
|
42
|
+
class_dict_iterable = class_dict_iterable.items()
|
43
|
+
for name, item in class_dict_iterable:
|
44
|
+
if (name is None or name[:1] != '_') and callable(item):
|
45
|
+
self[name] = item
|
46
|
+
|
47
|
+
def __getitem__(self, name):
|
48
|
+
if name is not None:
|
49
|
+
name = _utf8(name)
|
50
|
+
return self._get(name)
|
51
|
+
|
52
|
+
def __delitem__(self, name):
|
53
|
+
if name is not None:
|
54
|
+
name = _utf8(name)
|
55
|
+
del self._entries[name]
|
56
|
+
|
57
|
+
cdef object _get(self, object name):
|
58
|
+
cdef python.PyObject* dict_result
|
59
|
+
dict_result = python.PyDict_GetItem(self._entries, name)
|
60
|
+
if dict_result is NULL:
|
61
|
+
raise KeyError, "Name not registered."
|
62
|
+
return <object>dict_result
|
63
|
+
|
64
|
+
cdef object _getForString(self, char* name):
|
65
|
+
cdef python.PyObject* dict_result
|
66
|
+
dict_result = python.PyDict_GetItem(self._entries, name)
|
67
|
+
if dict_result is NULL:
|
68
|
+
raise KeyError, "Name not registered."
|
69
|
+
return <object>dict_result
|
70
|
+
|
71
|
+
def __iter__(self):
|
72
|
+
return iter(self._entries)
|
73
|
+
|
74
|
+
def items(self):
|
75
|
+
return list(self._entries.items())
|
76
|
+
|
77
|
+
def iteritems(self):
|
78
|
+
return iter(self._entries.items())
|
79
|
+
|
80
|
+
def clear(self):
|
81
|
+
self._entries.clear()
|
82
|
+
|
83
|
+
def __call__(self, obj):
|
84
|
+
# Usage as decorator:
|
85
|
+
# ns = lookup.get_namespace("...")
|
86
|
+
# @ns('abc')
|
87
|
+
# class element(ElementBase): pass
|
88
|
+
#
|
89
|
+
# @ns
|
90
|
+
# class elementname(ElementBase): pass
|
91
|
+
|
92
|
+
if obj is None or python._isString(obj):
|
93
|
+
# @ns(None) or @ns('tag')
|
94
|
+
return partial(self.__deco, obj)
|
95
|
+
# plain @ns decorator
|
96
|
+
self[obj.__name__] = obj
|
97
|
+
return obj
|
98
|
+
|
99
|
+
def __deco(self, name, obj):
|
100
|
+
self[name] = obj
|
101
|
+
return obj
|
102
|
+
|
103
|
+
|
104
|
+
@cython.final
|
105
|
+
@cython.internal
|
106
|
+
cdef class _ClassNamespaceRegistry(_NamespaceRegistry):
|
107
|
+
"Dictionary-like registry for namespace implementation classes"
|
108
|
+
def __setitem__(self, name, item):
|
109
|
+
if not isinstance(item, type) or not issubclass(item, ElementBase):
|
110
|
+
raise NamespaceRegistryError, \
|
111
|
+
"Registered element classes must be subtypes of ElementBase"
|
112
|
+
if name is not None:
|
113
|
+
name = _utf8(name)
|
114
|
+
self._entries[name] = item
|
115
|
+
|
116
|
+
def __repr__(self):
|
117
|
+
return "Namespace(%r)" % self._ns_uri
|
118
|
+
|
119
|
+
|
120
|
+
cdef class ElementNamespaceClassLookup(FallbackElementClassLookup):
|
121
|
+
"""ElementNamespaceClassLookup(self, fallback=None)
|
122
|
+
|
123
|
+
Element class lookup scheme that searches the Element class in the
|
124
|
+
Namespace registry.
|
125
|
+
|
126
|
+
Usage:
|
127
|
+
|
128
|
+
>>> lookup = ElementNamespaceClassLookup()
|
129
|
+
>>> ns_elements = lookup.get_namespace("http://schema.org/Movie")
|
130
|
+
|
131
|
+
>>> @ns_elements
|
132
|
+
... class movie(ElementBase):
|
133
|
+
... "Element implementation for 'movie' tag (using class name) in schema namespace."
|
134
|
+
|
135
|
+
>>> @ns_elements("movie")
|
136
|
+
... class MovieElement(ElementBase):
|
137
|
+
... "Element implementation for 'movie' tag (explicit tag name) in schema namespace."
|
138
|
+
"""
|
139
|
+
cdef dict _namespace_registries
|
140
|
+
def __cinit__(self):
|
141
|
+
self._namespace_registries = {}
|
142
|
+
|
143
|
+
def __init__(self, ElementClassLookup fallback=None):
|
144
|
+
FallbackElementClassLookup.__init__(self, fallback)
|
145
|
+
self._lookup_function = _find_nselement_class
|
146
|
+
|
147
|
+
def get_namespace(self, ns_uri):
|
148
|
+
"""get_namespace(self, ns_uri)
|
149
|
+
|
150
|
+
Retrieve the namespace object associated with the given URI.
|
151
|
+
Pass None for the empty namespace.
|
152
|
+
|
153
|
+
Creates a new namespace object if it does not yet exist."""
|
154
|
+
if ns_uri:
|
155
|
+
ns_utf = _utf8(ns_uri)
|
156
|
+
else:
|
157
|
+
ns_utf = None
|
158
|
+
try:
|
159
|
+
return self._namespace_registries[ns_utf]
|
160
|
+
except KeyError:
|
161
|
+
registry = self._namespace_registries[ns_utf] = \
|
162
|
+
_ClassNamespaceRegistry(ns_uri)
|
163
|
+
return registry
|
164
|
+
|
165
|
+
cdef object _find_nselement_class(state, _Document doc, xmlNode* c_node):
|
166
|
+
cdef python.PyObject* dict_result
|
167
|
+
cdef ElementNamespaceClassLookup lookup
|
168
|
+
cdef _NamespaceRegistry registry
|
169
|
+
if state is None:
|
170
|
+
return _lookupDefaultElementClass(None, doc, c_node)
|
171
|
+
|
172
|
+
lookup = <ElementNamespaceClassLookup>state
|
173
|
+
if c_node.type != tree.XML_ELEMENT_NODE:
|
174
|
+
return _callLookupFallback(lookup, doc, c_node)
|
175
|
+
|
176
|
+
c_namespace_utf = _getNs(c_node)
|
177
|
+
if c_namespace_utf is not NULL:
|
178
|
+
dict_result = python.PyDict_GetItem(
|
179
|
+
lookup._namespace_registries, <unsigned char*>c_namespace_utf)
|
180
|
+
else:
|
181
|
+
dict_result = python.PyDict_GetItem(
|
182
|
+
lookup._namespace_registries, None)
|
183
|
+
if dict_result is not NULL:
|
184
|
+
registry = <_NamespaceRegistry>dict_result
|
185
|
+
classes = registry._entries
|
186
|
+
|
187
|
+
if c_node.name is not NULL:
|
188
|
+
dict_result = python.PyDict_GetItem(
|
189
|
+
classes, <unsigned char*>c_node.name)
|
190
|
+
else:
|
191
|
+
dict_result = NULL
|
192
|
+
|
193
|
+
if dict_result is NULL:
|
194
|
+
dict_result = python.PyDict_GetItem(classes, None)
|
195
|
+
|
196
|
+
if dict_result is not NULL:
|
197
|
+
return <object>dict_result
|
198
|
+
return _callLookupFallback(lookup, doc, c_node)
|
199
|
+
|
200
|
+
|
201
|
+
################################################################################
|
202
|
+
# XPath extension functions
|
203
|
+
|
204
|
+
cdef dict __FUNCTION_NAMESPACE_REGISTRIES
|
205
|
+
__FUNCTION_NAMESPACE_REGISTRIES = {}
|
206
|
+
|
207
|
+
def FunctionNamespace(ns_uri):
|
208
|
+
"""FunctionNamespace(ns_uri)
|
209
|
+
|
210
|
+
Retrieve the function namespace object associated with the given
|
211
|
+
URI.
|
212
|
+
|
213
|
+
Creates a new one if it does not yet exist. A function namespace
|
214
|
+
can only be used to register extension functions.
|
215
|
+
|
216
|
+
Usage:
|
217
|
+
|
218
|
+
>>> ns_functions = FunctionNamespace("http://schema.org/Movie")
|
219
|
+
|
220
|
+
>>> @ns_functions # uses function name
|
221
|
+
... def add2(x):
|
222
|
+
... return x + 2
|
223
|
+
|
224
|
+
>>> @ns_functions("add3") # uses explicit name
|
225
|
+
... def add_three(x):
|
226
|
+
... return x + 3
|
227
|
+
"""
|
228
|
+
ns_utf = _utf8(ns_uri) if ns_uri else None
|
229
|
+
try:
|
230
|
+
return __FUNCTION_NAMESPACE_REGISTRIES[ns_utf]
|
231
|
+
except KeyError:
|
232
|
+
registry = __FUNCTION_NAMESPACE_REGISTRIES[ns_utf] = \
|
233
|
+
_XPathFunctionNamespaceRegistry(ns_uri)
|
234
|
+
return registry
|
235
|
+
|
236
|
+
@cython.internal
|
237
|
+
cdef class _FunctionNamespaceRegistry(_NamespaceRegistry):
|
238
|
+
def __setitem__(self, name, item):
|
239
|
+
if not callable(item):
|
240
|
+
raise NamespaceRegistryError, \
|
241
|
+
"Registered functions must be callable."
|
242
|
+
if not name:
|
243
|
+
raise ValueError, \
|
244
|
+
"extensions must have non empty names"
|
245
|
+
self._entries[_utf8(name)] = item
|
246
|
+
|
247
|
+
def __repr__(self):
|
248
|
+
return "FunctionNamespace(%r)" % self._ns_uri
|
249
|
+
|
250
|
+
@cython.final
|
251
|
+
@cython.internal
|
252
|
+
cdef class _XPathFunctionNamespaceRegistry(_FunctionNamespaceRegistry):
|
253
|
+
cdef object _prefix
|
254
|
+
cdef bytes _prefix_utf
|
255
|
+
|
256
|
+
property prefix:
|
257
|
+
"Namespace prefix for extension functions."
|
258
|
+
def __del__(self):
|
259
|
+
self._prefix = None # no prefix configured
|
260
|
+
self._prefix_utf = None
|
261
|
+
def __get__(self):
|
262
|
+
if self._prefix is None:
|
263
|
+
return ''
|
264
|
+
else:
|
265
|
+
return self._prefix
|
266
|
+
def __set__(self, prefix):
|
267
|
+
if prefix == '':
|
268
|
+
prefix = None # empty prefix
|
269
|
+
self._prefix_utf = _utf8(prefix) if prefix is not None else None
|
270
|
+
self._prefix = prefix
|
271
|
+
|
272
|
+
cdef list _find_all_extension_prefixes():
|
273
|
+
"Internal lookup function to find all function prefixes for XSLT/XPath."
|
274
|
+
cdef _XPathFunctionNamespaceRegistry registry
|
275
|
+
cdef list ns_prefixes = []
|
276
|
+
for registry in __FUNCTION_NAMESPACE_REGISTRIES.itervalues():
|
277
|
+
if registry._prefix_utf is not None:
|
278
|
+
if registry._ns_uri_utf is not None:
|
279
|
+
ns_prefixes.append(
|
280
|
+
(registry._prefix_utf, registry._ns_uri_utf))
|
281
|
+
return ns_prefixes
|
Binary file
|