diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | doc/libxslt-decl.txt | 12 | ||||
-rw-r--r-- | python/libxslt-python-api.xml | 6 | ||||
-rw-r--r-- | python/libxslt.c | 43 | ||||
-rw-r--r-- | python/libxsltclass.txt | 1 | ||||
-rwxr-xr-x | python/tests/basic.py | 5 |
6 files changed, 67 insertions, 6 deletions
@@ -1,3 +1,9 @@ +Sun Aug 25 17:01:40 CEST 2002 Daniel Veillard <daniel@veillard.com> + + * python/libxslt-python-api.xml python/libxslt.c + python/libxsltclass.txt python/tests/basic.py: applied a patch + from Ralf Mattes providing style.saveResultToString() + Fri Aug 23 13:53:50 CEST 2002 Daniel Veillard <daniel@veillard.com> * configure.in: preparing release 1.0.20 diff --git a/doc/libxslt-decl.txt b/doc/libxslt-decl.txt index 291356da..f7893c94 100644 --- a/doc/libxslt-decl.txt +++ b/doc/libxslt-decl.txt @@ -1,14 +1,14 @@ <MACRO> <NAME>LIBXSLT_DOTTED_VERSION</NAME> -#define LIBXSLT_DOTTED_VERSION "1.0.19" +#define LIBXSLT_DOTTED_VERSION "1.0.20" </MACRO> <MACRO> <NAME>LIBXSLT_VERSION</NAME> -#define LIBXSLT_VERSION 10019 +#define LIBXSLT_VERSION 10020 </MACRO> <MACRO> <NAME>LIBXSLT_VERSION_STRING</NAME> -#define LIBXSLT_VERSION_STRING "10019" +#define LIBXSLT_VERSION_STRING "10020" </MACRO> <MACRO> <NAME>WITH_XSLT_DEBUG</NAME> @@ -1580,15 +1580,15 @@ void </FUNCTION> <MACRO> <NAME>LIBXSLT_DOTTED_VERSION</NAME> -#define LIBXSLT_DOTTED_VERSION "1.0.19" +#define LIBXSLT_DOTTED_VERSION "1.0.20" </MACRO> <MACRO> <NAME>LIBXSLT_VERSION</NAME> -#define LIBXSLT_VERSION 10019 +#define LIBXSLT_VERSION 10020 </MACRO> <MACRO> <NAME>LIBXSLT_VERSION_STRING</NAME> -#define LIBXSLT_VERSION_STRING "10019" +#define LIBXSLT_VERSION_STRING "10020" </MACRO> <MACRO> <NAME>WITH_XSLT_DEBUG</NAME> diff --git a/python/libxslt-python-api.xml b/python/libxslt-python-api.xml index f8bfb803..7fa4b096 100644 --- a/python/libxslt-python-api.xml +++ b/python/libxslt-python-api.xml @@ -5,6 +5,12 @@ </file> </files> <symbols> + <function name='xsltSaveResultToString' file='python'> + <info>Have the stylesheet serialize the result of a transformation to a python string</info> + <return type='char *' info='The result document as a string' /> + <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/> + <arg name='result' type='xmlDocPtr' info='The result document'/> + </function> <function name='xsltApplyStylesheet' file='python'> <info>Apply the stylesheet to the document</info> <return type='xmlDocPtr' info="the result document or NULL in case of error"/> diff --git a/python/libxslt.c b/python/libxslt.c index 5809c203..9ab20f89 100644 --- a/python/libxslt.c +++ b/python/libxslt.c @@ -251,6 +251,49 @@ libxslt_xsltApplyStylesheet(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { return(py_retval); } +PyObject * +libxslt_xsltSaveResultToString(PyObject *self, PyObject *args) { + PyObject *py_retval; /* our final return value, a python string */ + xmlChar *buffer; + xmlChar *tmp; + int size = 0; + int emitted = 0; + xmlDocPtr result; + PyObject *pyobj_result; + xsltStylesheetPtr style; + PyObject *pyobj_style; + + if (!PyArg_ParseTuple(args, (char *)"OO:xsltSaveResultToString", &pyobj_style, &pyobj_result)) + goto FAIL; + result = (xmlDocPtr) PyxmlNode_Get(pyobj_result); + style = (xsltStylesheetPtr) Pystylesheet_Get(pyobj_style); + + + /* FIXME: We should probably add more restrictive error checking + * and raise an error instead of "just" returning NULL. + * FIXME: Documentation and code for xsltSaveResultToString diff + * -> emmitted will never be positive non-null. + */ + emitted = xsltSaveResultToString(&buffer, &size, result, style); + if(!buffer || emitted < 0) + goto FAIL; + /* We haven't tested the aberrant case of a transformation that + * renders to an empty string. For now we try to play it save. + */ + if(size) + { + buffer[size] = '\0'; + py_retval = PyString_FromString((char *) buffer); + xmlFree(buffer); + } + else + py_retval = PyString_FromString(""); + return(py_retval); + FAIL: + return(0); +} + + /************************************************************************ * * * Error message callback * diff --git a/python/libxsltclass.txt b/python/libxsltclass.txt index aebdd42a..43e71893 100644 --- a/python/libxsltclass.txt +++ b/python/libxsltclass.txt @@ -184,6 +184,7 @@ Class stylesheet() # functions from module python applyStylesheet() + saveResultToString() # functions from module transform newTransformContext() diff --git a/python/tests/basic.py b/python/tests/basic.py index 9eea288d..086ec5c0 100755 --- a/python/tests/basic.py +++ b/python/tests/basic.py @@ -1,4 +1,5 @@ #!/usr/bin/python -u +import sys import libxml2 import libxslt @@ -11,6 +12,10 @@ style = libxslt.parseStylesheetDoc(styledoc) doc = libxml2.parseFile("test.xml") result = style.applyStylesheet(doc, None) style.saveResultToFilename("foo", result, 0) +stringval = style.saveResultToString(result) +if (len(stringval) != 68): + print "Error in saveResultToString" + sys.exit(255) style.freeStylesheet() doc.freeDoc() result.freeDoc() |