Module: wine Branch: master Commit: 42db8b439fcd75d53fbd06f170e460dae92e1461 URL: http://source.winehq.org/git/wine.git/?a=commit;h=42db8b439fcd75d53fbd06f170...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Thu Apr 24 22:22:14 2008 +1000
msxml3: Corrected transformNode.
---
dlls/msxml3/node.c | 44 +++++++++++++++++++++++++++++++++----------- dlls/msxml3/tests/domdoc.c | 22 +++++++++++++++++----- 2 files changed, 50 insertions(+), 16 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 246598d..f67a9f9 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -44,6 +44,10 @@ # include <libxslt/xsltInternals.h> #endif
+#ifdef HAVE_LIBXML2 +# include <libxml/HTMLtree.h> +#endif + #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(msxml); @@ -1065,21 +1069,39 @@ static HRESULT WINAPI xmlnode_transformNode( result = xsltApplyStylesheet(xsltSS, This->node->doc, NULL); if(result) { - xmlBufferPtr pXmlBuf; - int nSize; + const xmlChar *pContent;
- pXmlBuf = xmlBufferCreate(); - if(pXmlBuf) + if(result->type == XML_HTML_DOCUMENT_NODE) { - nSize = xmlNodeDump(pXmlBuf, NULL, (xmlNodePtr)result, 0, 0); - if(nSize > 0) + xmlOutputBufferPtr pOutput = xmlAllocOutputBuffer(NULL); + if(pOutput) { - const xmlChar *pContent; - - pContent = xmlBufferContent(pXmlBuf); - *xmlString = bstr_from_xmlChar(pContent); + htmlDocContentDumpOutput(pOutput, result->doc, NULL); + if(pOutput) + { + pContent = xmlBufferContent(pOutput->buffer); + *xmlString = bstr_from_xmlChar(pContent); + } + + xmlOutputBufferClose(pOutput); + } + } + else + { + xmlBufferPtr pXmlBuf; + int nSize;
- xmlBufferFree(pXmlBuf); + pXmlBuf = xmlBufferCreate(); + if(pXmlBuf) + { + nSize = xmlNodeDump(pXmlBuf, NULL, (xmlNodePtr)result, 0, 0); + if(nSize > 0) + { + pContent = xmlBufferContent(pXmlBuf); + *xmlString = bstr_from_xmlChar(pContent); + + xmlBufferFree(pXmlBuf); + } } } } diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 9d84435..072ed2f 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -143,10 +143,9 @@ static const CHAR szTransformSSXML[] = "</xsl:stylesheet>";
static const CHAR szTransformOutput[] = -"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" -"<html><body><h1>\n" -"Hello World\n" -"</h1></body></html>\n"; +"<html><body><h1>" +"Hello World" +"</h1></body></html>";
static const WCHAR szNonExistentFile[] = { 'c', ':', '\', 'N', 'o', 'n', 'e', 'x', 'i', 's', 't', 'e', 'n', 't', '.', 'x', 'm', 'l', 0 @@ -242,6 +241,19 @@ static VARIANT _variantbstr_(const char *str) return v; }
+static BOOL compareIgnoreReturns(BSTR sLeft, BSTR sRight) +{ + for (;;) + { + while (*sLeft == '\r' || *sLeft == '\n') sLeft++; + while (*sRight == '\r' || *sRight == '\n') sRight++; + if (*sLeft != *sRight) return FALSE; + if (!*sLeft) return TRUE; + sLeft++; + sRight++; + } +} + static void get_str_for_type(DOMNodeType type, char *buf) { switch (type) @@ -3193,7 +3205,7 @@ static void test_testTransforms(void)
hr = IXMLDOMDocument_transformNode(doc, pNode, &bOut); ok(hr == S_OK, "ret %08x\n", hr ); - ok( !lstrcmpW( bOut, _bstr_(szTransformOutput) ), "Stylesheet output not correct\n"); + ok( compareIgnoreReturns( bOut, _bstr_(szTransformOutput)), "Stylesheet output not correct\n");
IXMLDOMNode_Release(pNode); }