Re: [xslt] Release candidate 1 of libxslt-1.1.27
- From: Daniel Veillard <veillard redhat com>
- To: Phil Shafer <phil juniper net>
- Cc: The Gnome XSLT library mailing-list <xslt gnome org>
- Subject: Re: [xslt] Release candidate 1 of libxslt-1.1.27
- Date: Fri, 7 Sep 2012 21:41:25 +0800
On Fri, Sep 07, 2012 at 08:35:34AM -0400, Phil Shafer wrote:
> Daniel Veillard writes:
> > I tagged the git and pushed a tarball of the rc1 to:
> > ftp://xmlsoft.org/libxslt/
>
> Please consider this patch that adds append functionality to
> the <redirect:write> element via the "append" attribute.
> This attribute is already supported in Xalan and SAXON.
Just wondering, shouldn't that attribute be namespaced ?
Where is this described ?
>
> Index: branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/transform.c
> ===================================================================
> --- branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/transform.c (revision 384559)
> +++ branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/transform.c (revision 384560)
> @@ -3216,6 +3215,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xml
> const xmlChar *doctypePublic;
> const xmlChar *doctypeSystem;
> const xmlChar *version;
> + int redirect_write_append = 0;
>
> if ((ctxt == NULL) || (node == NULL) || (inst == NULL) || (comp == NULL))
> return;
> @@ -3630,10 +3630,25 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xml
> }
>
> /*
> - * Save the result
> + * Calls to redirect:write also take an optional attribute append.
> + * Attribute append="true|yes" which will attempt to simply append
> + * to an existing file instead of always opening a new file. The
> + * default behavior of always overwriting the file still happens
> + * if we donot specify append.
> */
> + prop = xsltEvalAttrValueTemplate(ctxt, inst, (const xmlChar *)"append",
> + NULL);
> + if (prop != NULL) {
> + if (xmlStrEqual(prop, (const xmlChar *) "true") ||
> + xmlStrEqual(prop, (const xmlChar *) "yes")) {
> + style->omitXmlDeclaration = 1;
> + redirect_write_append = 1;
> + } else
> + style->omitXmlDeclaration = 0;
> + }
> +
> ret = xsltSaveResultToFilename((const char *) filename,
> - res, style, 0);
> + res, style, 0, redirect_write_append);
> if (ret < 0) {
> xsltTransformError(ctxt, NULL, inst,
> "xsltDocumentElem: unable to save to %s\n",
> @@ -6339,7 +6354,7 @@ xsltRunStylesheetUser(xsltStylesheetPtr style, xml
> /* TODO: incomplete, IObuf output not progressive */
> ret = xsltSaveResultTo(IObuf, tmp, style);
> } else {
> - ret = xsltSaveResultToFilename(output, tmp, style, 0);
> + ret = xsltSaveResultToFilename(output, tmp, style, 0, 0);
> }
> xmlFreeDoc(tmp);
> return (ret);
> Index: branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/xsltutils.c
> ===================================================================
> --- branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/xsltutils.c (revision 384559)
> +++ branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/xsltutils.c (revision 384560)
> @@ -1582,7 +1582,7 @@ xsltSaveResultTo(xmlOutputBufferPtr buf, xmlDocPtr
> */
> int
> xsltSaveResultToFilename(const char *URL, xmlDocPtr result,
> - xsltStylesheetPtr style, int compression) {
> + xsltStylesheetPtr style, int compression, int mode) {
That we cant do it changes a public API, we need a new function to
add the mode.
> xmlOutputBufferPtr buf;
> const xmlChar *encoding;
> int ret;
> @@ -1601,9 +1601,9 @@ xsltSaveResultToFilename(const char *URL, xmlDocPt
> (xmlStrEqual((const xmlChar *)encoder->name,
> (const xmlChar *) "UTF-8")))
> encoder = NULL;
> - buf = xmlOutputBufferCreateFilename(URL, encoder, compression);
> + buf = xmlOutputBufferCreateFilename(URL, encoder, compression, mode);
> } else {
> - buf = xmlOutputBufferCreateFilename(URL, NULL, compression);
> + buf = xmlOutputBufferCreateFilename(URL, NULL, compression, mode);
> }
> if (buf == NULL)
> return(-1);
> Index: branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/xsltutils.h
> ===================================================================
> --- branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/xsltutils.h (revision 384559)
> +++ branches/IB4_10_5_BRANCH/gpl-dist/libxslt/libxslt/xsltutils.h (revision 384560)
> @@ -221,7 +221,8 @@ XSLTPUBFUN int XSLTCALL
> xsltSaveResultToFilename (const char *URI,
> xmlDocPtr result,
> xsltStylesheetPtr style,
> - int compression);
> + int compression,
> + int mode);
> XSLTPUBFUN int XSLTCALL
> xsltSaveResultToFile (FILE *file,
> xmlDocPtr result,
> Index: branches/IB4_10_5_BRANCH/dist/php/ext/dom/node.c
> ===================================================================
> --- branches/IB4_10_5_BRANCH/dist/php/ext/dom/node.c (revision 384559)
> +++ branches/IB4_10_5_BRANCH/dist/php/ext/dom/node.c (revision 384560)
> @@ -1807,7 +1807,7 @@ static void dom_canonicalization(INTERNAL_FUNCTION
> }
>
> if (mode == 1) {
> - buf = xmlOutputBufferCreateFilename(file, NULL, 0);
> + buf = xmlOutputBufferCreateFilename(file, NULL, 0, 0);
> } else {
> buf = xmlAllocOutputBuffer(NULL);
> }
Err, what is this ?
> Index: branches/IB4_10_5_BRANCH/dist/php/ext/xsl/xsltprocessor.c
> ===================================================================
> --- branches/IB4_10_5_BRANCH/dist/php/ext/xsl/xsltprocessor.c (revision 384559)
> +++ branches/IB4_10_5_BRANCH/dist/php/ext/xsl/xsltprocessor.c (revision 384560)
> @@ -551,7 +551,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
>
> ret = -1;
> if (newdocp) {
> - ret = xsltSaveResultToFilename(uri, newdocp, sheetp, 0);
> + ret = xsltSaveResultToFilename(uri, newdocp, sheetp, 0, 0);
> xmlFreeDoc(newdocp);
> }
>
> Index: branches/IB4_10_5_BRANCH/dist/php/ext/simplexml/simplexml.c
> ===================================================================
> --- branches/IB4_10_5_BRANCH/dist/php/ext/simplexml/simplexml.c (revision 384559)
> +++ branches/IB4_10_5_BRANCH/dist/php/ext/simplexml/simplexml.c (revision 384560)
> @@ -1247,7 +1247,7 @@ SXE_METHOD(asXML)
> RETURN_TRUE;
> }
> } else {
> - outbuf = xmlOutputBufferCreateFilename(filename, NULL, 0);
> + outbuf = xmlOutputBufferCreateFilename(filename, NULL, 0, 0);
>
> if (outbuf == NULL) {
> RETURN_FALSE;
> Index: branches/IB4_10_5_BRANCH/dist/libxml2/include/libxml/xmlIO.h
> ===================================================================
> --- branches/IB4_10_5_BRANCH/dist/libxml2/include/libxml/xmlIO.h (revision 384559)
> +++ branches/IB4_10_5_BRANCH/dist/libxml2/include/libxml/xmlIO.h (revision 384560)
> @@ -86,7 +86,7 @@ typedef int (XMLCALL *xmlOutputMatchCallback) (cha
> *
> * Returns an Output context or NULL in case or error
> */
> -typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
> +typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename, int mode);
> /**
> * xmlOutputWriteCallback:
> * @context: an Output context
> @@ -225,7 +225,7 @@ XMLPUBFUN xmlOutputBufferPtr XMLCALL
> XMLPUBFUN xmlOutputBufferPtr XMLCALL
> xmlOutputBufferCreateFilename (const char *URI,
> xmlCharEncodingHandlerPtr encoder,
> - int compression);
> + int compression, int mode);
Changing public APIs of libxml2 too, sorry that's unrealistic ...
What does this actually do ? maybe the implementation can be done
in libxslt, but your current patch is really unusable as-is, sorry !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel veillard com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]