summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2002-02-07 22:34:59 +0000
committerDaniel Veillard <veillard@src.gnome.org>2002-02-07 22:34:59 +0000
commit3146d5356fa192ef3f27f74ef634b3d7bd411c8e (patch)
treeb1102bbf1d80170b702f563f5e142bdcd276226a
parent9de2bd46fce5d8e9ba9185dbb6044570887603cc (diff)
downloadlibxslt-3146d5356fa192ef3f27f74ef634b3d7bd411c8e.tar.gz
libxslt-3146d5356fa192ef3f27f74ef634b3d7bd411c8e.tar.bz2
libxslt-3146d5356fa192ef3f27f74ef634b3d7bd411c8e.zip
fixup the script and rebuid the API cleanup provided accessors for a lot
* doc/libxslt-api.xml doc/libxslt-decl.txt doc/libxslt-refs.xml doc/parsedecl.py: fixup the script and rebuid the API * libxslt/extensions.h: cleanup * python/generator.py python/libxslt-python-api.xml python/libxslt.c python/libxsltclass.txt: provided accessors for a lot of the tructures involved in the transformation. Stylesheet and transformation python object don't free automatically the encapsulated object when deallocated. * python/tests/Makefile.am python/tests/basic.py python/tests/extfunc.py python/tests/pyxsltproc.py: updated the examples Daniel
-rw-r--r--ChangeLog14
-rw-r--r--doc/libxslt-api.xml12
-rw-r--r--doc/libxslt-decl.txt13
-rw-r--r--doc/libxslt-refs.xml13
-rwxr-xr-xdoc/parsedecl.py6
-rw-r--r--libxslt/extensions.h6
-rwxr-xr-xpython/generator.py32
-rw-r--r--python/libxslt-python-api.xml157
-rw-r--r--python/libxslt.c5
-rw-r--r--python/libxsltclass.txt31
-rw-r--r--python/tests/Makefile.am2
-rwxr-xr-xpython/tests/basic.py2
-rwxr-xr-xpython/tests/extfunc.py21
-rwxr-xr-xpython/tests/pyxsltproc.py3
14 files changed, 277 insertions, 40 deletions
diff --git a/ChangeLog b/ChangeLog
index 62500950..77ab5d33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Thu Feb 7 23:21:18 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxslt-api.xml doc/libxslt-decl.txt doc/libxslt-refs.xml
+ doc/parsedecl.py: fixup the script and rebuid the API
+ * libxslt/extensions.h: cleanup
+ * python/generator.py python/libxslt-python-api.xml python/libxslt.c
+ python/libxsltclass.txt: provided accessors for a lot of the
+ tructures involved in the transformation. Stylesheet and
+ transformation python object don't free automatically the
+ encapsulated object when deallocated.
+ * python/tests/Makefile.am python/tests/basic.py
+ python/tests/extfunc.py python/tests/pyxsltproc.py:
+ updated the examples
+
Thu Feb 7 17:59:27 CET 2002 Daniel Veillard <daniel@veillard.com>
* xsltproc/xsltproc.c: small fix
diff --git a/doc/libxslt-api.xml b/doc/libxslt-api.xml
index 6c0be4e6..f939795c 100644
--- a/doc/libxslt-api.xml
+++ b/doc/libxslt-api.xml
@@ -69,7 +69,7 @@
<exports symbol='xsltExtElementLookup'/>
<exports symbol='xsltExtModuleElementLookup'/>
<exports symbol='xsltUnregisterExtModuleElement'/>
- <exports symbol='void'/>
+ <exports symbol='xsltTopLevelFunction'/>
<exports symbol='xsltRegisterExtModuleTopLevel'/>
<exports symbol='xsltExtModuleTopLevelLookup'/>
<exports symbol='xsltUnregisterExtModuleTopLevel'/>
@@ -423,11 +423,6 @@
<macro name='XSLT_XT_NAMESPACE' file='extra'>
<info>This is James Clark&apos;s XT processor namespace for extensions</info>
</macro>
- <function name='void' file='extensions'>
- <return type='typedef'/>
- <arg name='style' type='*xsltTopLevelFunction) (xsltStylesheetPtr'/>
- <arg name='inst' type='xmlNodePtr'/>
- </function>
<function name='xslAddCall' file='xsltutils'>
<info>Add template &quot;call&quot; to call stack</info>
<return type='int' info=': 1 on sucess 0 otherwise an error may be printed if WITH_XSLT_DEBUG_BREAKPOINTS is defined '/>
@@ -1499,6 +1494,11 @@
<info>Used for gathering profiling data</info>
<return type='long' info='the number of tenth of milliseconds since the beginning of the profiling '/>
</function>
+ <functype name='xsltTopLevelFunction' file='extensions'>
+ <return type='void'/>
+ <arg name='style' type='xsltStylesheetPtr'/>
+ <arg name='inst' type='xmlNodePtr'/>
+ </functype>
<struct name='xsltTransformContext' file='xsltInternals'/>
<typedef name='xsltTransformContextPtr' file='xsltInternals'/>
<functype name='xsltTransformFunction' file='xsltInternals'>
diff --git a/doc/libxslt-decl.txt b/doc/libxslt-decl.txt
index 2d2f4e30..c22babf2 100644
--- a/doc/libxslt-decl.txt
+++ b/doc/libxslt-decl.txt
@@ -797,11 +797,12 @@ const xmlChar *name,const xmlChar *URI
<RETURNS>int </RETURNS>
const xmlChar *name,const xmlChar *URI
</FUNCTION>
-<FUNCTION>
-<NAME>void</NAME>
-<RETURNS>typedef </RETURNS>
-*xsltTopLevelFunction) (xsltStylesheetPtr style,xmlNodePtr inst
-</FUNCTION>
+<USER_FUNCTION>
+<NAME>xsltTopLevelFunction</NAME>
+<RETURNS>void </RETURNS>
+xsltStylesheetPtr style,
+ xmlNodePtr inst
+</USER_FUNCTION>
<FUNCTION>
<NAME>xsltRegisterExtModuleTopLevel</NAME>
<RETURNS>int </RETURNS>
@@ -809,7 +810,7 @@ const xmlChar *name,const xmlChar *URI,xsltTopLevelFunction function
</FUNCTION>
<FUNCTION>
<NAME>xsltExtModuleTopLevelLookup</NAME>
-<RETURNS>xsltTopLevelFunction</RETURNS>
+<RETURNS>xsltTopLevelFunction </RETURNS>
const xmlChar *name,const xmlChar *URI
</FUNCTION>
<FUNCTION>
diff --git a/doc/libxslt-refs.xml b/doc/libxslt-refs.xml
index 3dea1054..7a59d933 100644
--- a/doc/libxslt-refs.xml
+++ b/doc/libxslt-refs.xml
@@ -35,7 +35,6 @@
<reference name='XSLT_TODO' href='html/libxslt-xsltutils.html#XSLT-TODO-CAPS'/>
<reference name='XSLT_XALAN_NAMESPACE' href='html/libxslt-extra.html#XSLT-XALAN-NAMESPACE-CAPS'/>
<reference name='XSLT_XT_NAMESPACE' href='html/libxslt-extra.html#XSLT-XT-NAMESPACE-CAPS'/>
- <reference name='void' href='html/libxslt-extensions.html#VOID'/>
<reference name='xslAddCall' href='html/libxslt-xsltutils.html#XSLADDCALL'/>
<reference name='xslDropCall' href='html/libxslt-xsltutils.html#XSLDROPCALL'/>
<reference name='xslHandleDebugger' href='html/libxslt-transform.html#XSLHANDLEDEBUGGER'/>
@@ -283,9 +282,6 @@
<ref name='XSLT_XALAN_NAMESPACE'/>
<ref name='XSLT_XT_NAMESPACE'/>
</letter>
- <letter name='v'>
- <ref name='void'/>
- </letter>
<letter name='x'>
<ref name='xslAddCall'/>
<ref name='xslDropCall'/>
@@ -495,7 +491,6 @@
</type>
<type name='typedef'>
<ref name='xsltElemPreCompPtr'/>
- <ref name='void'/>
</type>
<type name='void *'>
<ref name='xsltStyleExtInitFunction'/>
@@ -593,9 +588,6 @@
<type name='*xsltPreComputeFunction) (xsltStylesheetPtr'>
<ref name='xsltElemPreCompPtr'/>
</type>
- <type name='*xsltTopLevelFunction) (xsltStylesheetPtr'>
- <ref name='void'/>
- </type>
<type name='FILE *'>
<ref name='xsltApplyStylesheetUser'/>
<ref name='xsltProfileStylesheet'/>
@@ -813,7 +805,7 @@
<ref name='xsltElemPreCompPtr'/>
<ref name='xsltNewElemPreComp'/>
<ref name='xsltInitElemPreComp'/>
- <ref name='void'/>
+ <ref name='xsltTopLevelFunction'/>
<ref name='xsltPreComputeExtModuleElement'/>
<ref name='xsltParseStylesheetImport'/>
<ref name='xsltParseStylesheetInclude'/>
@@ -972,6 +964,7 @@
<ref name='xsltShutdownExts'/>
<ref name='xsltNewElemPreComp'/>
<ref name='xsltInitElemPreComp'/>
+ <ref name='xsltTopLevelFunction'/>
<ref name='xsltRegisterExtPrefix'/>
<ref name='xsltCheckExtPrefix'/>
<ref name='xsltFreeExts'/>
@@ -1134,7 +1127,7 @@
<ref name='xsltExtElementLookup'/>
<ref name='xsltExtModuleElementLookup'/>
<ref name='xsltUnregisterExtModuleElement'/>
- <ref name='void'/>
+ <ref name='xsltTopLevelFunction'/>
<ref name='xsltRegisterExtModuleTopLevel'/>
<ref name='xsltExtModuleTopLevelLookup'/>
<ref name='xsltUnregisterExtModuleTopLevel'/>
diff --git a/doc/parsedecl.py b/doc/parsedecl.py
index 1e76ba47..33b2fdb9 100755
--- a/doc/parsedecl.py
+++ b/doc/parsedecl.py
@@ -800,7 +800,11 @@ def link(id):
target = string.upper(ids[id])
else:
target = string.upper(id)
- file = 'html/libxslt-' + string.lower(hash[id]) + '.html';
+ if hash.has_key(id):
+ module = string.lower(hash[id])
+ else:
+ module = 'index'
+ file = 'html/libxslt-' + module + '.html';
return file + '#' + target
print "Saving XML crossreferences libxslt-refs.xml"
diff --git a/libxslt/extensions.h b/libxslt/extensions.h
index 537994a7..bdffcd62 100644
--- a/libxslt/extensions.h
+++ b/libxslt/extensions.h
@@ -149,15 +149,13 @@ int xsltUnregisterExtModuleElement (const xmlChar *name,
/*
* top-level elements
*/
-typedef void
- (*xsltTopLevelFunction) (xsltStylesheetPtr style,
+typedef void (*xsltTopLevelFunction) (xsltStylesheetPtr style,
xmlNodePtr inst);
int xsltRegisterExtModuleTopLevel (const xmlChar *name,
const xmlChar *URI,
xsltTopLevelFunction function);
-xsltTopLevelFunction
- xsltExtModuleTopLevelLookup (const xmlChar *name,
+xsltTopLevelFunction xsltExtModuleTopLevelLookup (const xmlChar *name,
const xmlChar *URI);
int xsltUnregisterExtModuleTopLevel (const xmlChar *name,
const xmlChar *URI);
diff --git a/python/generator.py b/python/generator.py
index 41c83bde..ef857e8c 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -526,8 +526,7 @@ classes_ancestor = {
"xpathParserContext" : "libxml2.xpathParserContext",
}
classes_destructors = {
- "stylesheet": "xsltFreeStylesheet",
- "transformCtxt": "xsltFreeTransformContext",
+ "xpathContext" : "pass"
}
function_classes = {}
@@ -578,6 +577,24 @@ def nameFixup(function, classe, type, file):
elif name[0:10] == "xmlNodeGet" and file == "python_accessor":
func = name[10:]
func = string.lower(func[0:1]) + func[1:]
+ elif name[0:18] == "xsltXPathParserGet" and file == "python_accessor":
+ func = name[18:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:12] == "xsltXPathGet" and file == "python_accessor":
+ func = name[12:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:16] == "xsltTransformGet" and file == "python_accessor":
+ func = name[16:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:16] == "xsltTransformSet" and file == "python_accessor":
+ func = name[13:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:17] == "xsltStylesheetGet" and file == "python_accessor":
+ func = name[17:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:17] == "xsltStylesheetSet" and file == "python_accessor":
+ func = name[14:]
+ func = string.lower(func[0:1]) + func[1:]
elif name[0:l] == classe:
func = name[l:]
func = string.lower(func[0:1]) + func[1:]
@@ -784,10 +801,13 @@ for classname in classes_list:
classes.write(" self._o = None\n\n");
if classes_destructors.has_key(classname):
classes.write(" def __del__(self):\n")
- classes.write(" if self._o != None:\n")
- classes.write(" _libxslt.%s(self._o)\n" %
- classes_destructors[classname]);
- classes.write(" self._o = None\n\n");
+ if classes_destructors[classname] == "pass":
+ classes.write(" pass\n")
+ else:
+ classes.write(" if self._o != None:\n")
+ classes.write(" _libxslt.%s(self._o)\n" %
+ classes_destructors[classname]);
+ classes.write(" self._o = None\n\n");
flist = function_classes[classname]
flist.sort(functionCompare)
oldfile = ""
diff --git a/python/libxslt-python-api.xml b/python/libxslt-python-api.xml
index 03a02f20..69621925 100644
--- a/python/libxslt-python-api.xml
+++ b/python/libxslt-python-api.xml
@@ -23,6 +23,163 @@
<info>Cleanup all libxslt and libxml2 memory allocated</info>
<return type='void'/>
</function>
+ <function name='xsltXPathParserGetContext' file='python_accessor'>
+ <info>Get the xpathContext from an xpathParserContext</info>
+ <return type='xmlXPathContextPtr' info="The XPath context" field="context"/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath parser context'/>
+ </function>
+ <function name='xsltXPathGetContextDoc' file='python_accessor'>
+ <info>Get the doc from an xpathContext</info>
+ <return type='xmlDocPtr' info="The doc context" field="doc"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltXPathGetContextNode' file='python_accessor'>
+ <info>Get the current node from an xpathContext</info>
+ <return type='xmlNodePtr' info="The node context" field="node"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltXPathGetContextPosition' file='python_accessor'>
+ <info>Get the current node from an xpathContext</info>
+ <return type='int' info="The node context" field="proximityPosition"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltXPathGetContextSize' file='python_accessor'>
+ <info>Get the current node from an xpathContext</info>
+ <return type='int' info="The node context" field="contextSize"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltXPathGetFunction' file='python_accessor'>
+ <info>Get the current function name xpathContext</info>
+ <return type='const xmlChar *' info="The function name" field="function"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltXPathGetFunctionURI' file='python_accessor'>
+ <info>Get the current function name URI xpathContext</info>
+ <return type='const xmlChar *' info="The function name URI" field="functionURI"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltXPathGetTransformContext' file='python_accessor'>
+ <info>Get the transformation context from an xpathContext</info>
+ <return type='xsltTransformContextPtr' info="The node context" field="extra"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xsltTransformGetStyle' file='python_accessor'>
+ <info>Get the stylesheet from a transformation</info>
+ <return type='xsltStylesheetPtr' info="The stylesheet" field="style"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetCurrent' file='python_accessor'>
+ <info>Get the current() node of a transformation</info>
+ <return type='xmlNodePtr' info="The node" field="node"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetOutputDoc' file='python_accessor'>
+ <info>Get the output document of a transformation</info>
+ <return type='xmlDocPtr' info="The output doc" field="output"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetOutputURI' file='python_accessor'>
+ <info>Get the output URI of a transformation if known</info>
+ <return type='const char *' info="The output URI" field="outputFile"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetInsertNode' file='python_accessor'>
+ <info>Get the insertion node in the output document</info>
+ <return type='xmlNodePtr' info="The insertion node" field="insert"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetInstruction' file='python_accessor'>
+ <info>Get the instruction node in the stylesheet</info>
+ <return type='xmlNodePtr' info="The instruction node" field="inst"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetMode' file='python_accessor'>
+ <info>Get the mode of a transformation</info>
+ <return type='const xmlChar *' info="The mode" field="mode"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetModeURI' file='python_accessor'>
+ <info>Get the mode URI of a transformation</info>
+ <return type='const xmlChar *' info="The mode URI" field="modeURI"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetContext' file='python_accessor'>
+ <info>Get the XPath context of a transformation</info>
+ <return type='xmlXPathContextPtr' info="The XPath context" field="xpathCtxt"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformGetPrivate' file='python_accessor'>
+ <info>Get the private field of a transformation</info>
+ <return type='pythonObject *' info="The private field" field="_private"/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ </function>
+ <function name='xsltTransformSetPrivate' file='python_accessor'>
+ <info>Set the private field of a transformation</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
+ <arg name='_private' type='pythonObject *' info='The private field'/>
+ </function>
+ <function name='xsltStylesheetGetParent' file='python_accessor'>
+ <info>Get the parent of a stylesheet</info>
+ <return type='xsltStylesheetPtr' info="The parent" field="parent"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetNext' file='python_accessor'>
+ <info>Get the next sibling of a stylesheet</info>
+ <return type='xsltStylesheetPtr' info="The next sibling" field="next"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetImports' file='python_accessor'>
+ <info>Get the imports of a stylesheet</info>
+ <return type='xsltStylesheetPtr' info="The next sibling" field="imports"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetDoc' file='python_accessor'>
+ <info>Get the document of a stylesheet</info>
+ <return type='xmlDocPtr' info="The XML document" field="doc"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetMethod' file='python_accessor'>
+ <info>Get the output method of a stylesheet</info>
+ <return type='xmlChar *' info="The output method" field="method"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetMethodURI' file='python_accessor'>
+ <info>Get the output method URI of a stylesheet</info>
+ <return type='xmlChar *' info="The output method URI" field="methodURI"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetVersion' file='python_accessor'>
+ <info>Get the output version of a stylesheet</info>
+ <return type='xmlChar *' info="The output version" field="version"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetEncoding' file='python_accessor'>
+ <info>Get the output encoding of a stylesheet</info>
+ <return type='xmlChar *' info="The output encoding" field="encoding"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetDoctypePublic' file='python_accessor'>
+ <info>Get the output PUBLIC of a stylesheet</info>
+ <return type='xmlChar *' info="The output PUBLIC" field="doctypePublic"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetDoctypeSystem' file='python_accessor'>
+ <info>Get the output SYSTEM of a stylesheet</info>
+ <return type='xmlChar *' info="The output SYSTEM" field="doctypeSystem"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetGetPrivate' file='python_accessor'>
+ <info>Get the private field of a stylesheet</info>
+ <return type='pythonObject *' info="The private field" field="_private"/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ </function>
+ <function name='xsltStylesheetSetPrivate' file='python_accessor'>
+ <info>Set the private field of a stylesheet</info>
+ <return type='void'/>
+ <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
+ <arg name='_private' type='pythonObject *' info='The private field'/>
+ </function>
<!--
<function name='xsltRegisterXPathFunction' file='python'>
<info>Register a Python written function to the XPath interpreter</info>
diff --git a/python/libxslt.c b/python/libxslt.c
index 7028c5ca..d9bc5b8c 100644
--- a/python/libxslt.c
+++ b/python/libxslt.c
@@ -181,11 +181,12 @@ libxslt_xmlXPathFuncCallback(xmlXPathParserContextPtr ctxt, int nargs) {
return;
}
- list = PyTuple_New(nargs);
+ list = PyTuple_New(nargs + 1);
+ PyTuple_SetItem(list, 0, libxml_xmlXPathParserContextPtrWrap(ctxt));
for (i = 0;i < nargs;i++) {
obj = valuePop(ctxt);
cur = libxml_xmlXPathObjectPtrWrap(obj);
- PyTuple_SetItem(list, i, cur);
+ PyTuple_SetItem(list, i + 1, cur);
}
result = PyEval_CallObject(current_function, list);
Py_DECREF(list);
diff --git a/python/libxsltclass.txt b/python/libxsltclass.txt
index 0bb2798f..abc5cd99 100644
--- a/python/libxsltclass.txt
+++ b/python/libxsltclass.txt
@@ -46,6 +46,8 @@ xslDropCall()
Class xpathParserContext(libxml2.xpathParserContext)
+ # accessors
+ context()
# functions from module extra
functionNodeSet()
@@ -62,10 +64,28 @@ Class xpathParserContext(libxml2.xpathParserContext)
Class xpathContext(libxml2.xpathContext)
+ # accessors
+ contextDoc()
+ contextNode()
+ contextPosition()
+ contextSize()
+ function()
+ functionURI()
+ transformContext()
# functions from module functions
registerAllFunctions()
Class transformCtxt()
+ # accessors
+ context()
+ current()
+ insertNode()
+ instruction()
+ mode()
+ modeURI()
+ outputDoc()
+ outputURI()
+ style()
# functions from module attributes
applyAttributeSet()
@@ -119,6 +139,17 @@ Class transformCtxt()
printErrorContext()
saveProfiling()
Class stylesheet()
+ # accessors
+ doc()
+ doctypePublic()
+ doctypeSystem()
+ encoding()
+ imports()
+ method()
+ methodURI()
+ next()
+ parent()
+ version()
# functions from module attributes
freeAttributeSetsHashes()
diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am
index df032649..478e1087 100644
--- a/python/tests/Makefile.am
+++ b/python/tests/Makefile.am
@@ -26,6 +26,6 @@ clean:
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(EXAMPLE_DIR)
- -(for test in $(TESTSPY) $(XMLS); \
+ -(for test in $(TESTSPY) $(XMLS) $(EXTRAS); \
do @INSTALL@ -m 0644 $$test $(DESTDIR)$(EXAMPLE_DIR) ; done)
diff --git a/python/tests/basic.py b/python/tests/basic.py
index 1c62cde4..9eea288d 100755
--- a/python/tests/basic.py
+++ b/python/tests/basic.py
@@ -11,7 +11,7 @@ style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("test.xml")
result = style.applyStylesheet(doc, None)
style.saveResultToFilename("foo", result, 0)
-style = None
+style.freeStylesheet()
doc.freeDoc()
result.freeDoc()
diff --git a/python/tests/extfunc.py b/python/tests/extfunc.py
index 7e8b2845..c8f2fe24 100755
--- a/python/tests/extfunc.py
+++ b/python/tests/extfunc.py
@@ -6,7 +6,22 @@ import libxslt
# Memory debug specific
libxml2.debugMemory(1)
-def f(str):
+nodeName = None
+
+def f(ctx, str):
+ global nodeName
+
+ #
+ # Small check to verify the context is correcly accessed
+ #
+ try:
+ pctxt = libxslt.xpathParserContext(_obj=ctx)
+ ctxt = pctxt.context()
+ tctxt = ctxt.transformContext()
+ nodeName = tctxt.insertNode().name
+ except:
+ pass
+
import string
return string.upper(str)
@@ -27,7 +42,7 @@ styledoc = libxml2.parseDoc("""
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseDoc("<doc/>")
result = style.applyStylesheet(doc, { "bar": "'success'" })
-style = None
+style.freeStylesheet()
doc.freeDoc()
root = result.children
@@ -37,6 +52,8 @@ if root.name != "article":
if root.content != "SUCCESS":
print "Unexpected root node content, extension function failed"
sys.exit(1)
+if nodeName != 'article':
+ print "The function callback failed to access its context"
result.freeDoc()
diff --git a/python/tests/pyxsltproc.py b/python/tests/pyxsltproc.py
index fed201fd..fd21521e 100755
--- a/python/tests/pyxsltproc.py
+++ b/python/tests/pyxsltproc.py
@@ -283,7 +283,8 @@ def main(args = None):
xsltProcess(doc, cur, args[i])
i = i + 1
- cur = None
+ if cur != None:
+ cur.freeStylesheet()
params = None
if __name__ == "__main__":