summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--doc/libxslt-decl.txt12
-rw-r--r--python/libxslt-python-api.xml6
-rw-r--r--python/libxslt.c43
-rw-r--r--python/libxsltclass.txt1
-rwxr-xr-xpython/tests/basic.py5
6 files changed, 67 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 828e5cfc..4df62c34 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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()