diff options
author | Steve Block <steveblock@google.com> | 2009-10-08 17:19:54 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2009-10-20 00:41:58 +0100 |
commit | 231d4e3152a9c27a73b6ac7badbe6be673aa3ddf (patch) | |
tree | a6c7e2d6cd7bfa7011cc39abbb436142d7a4a7c8 /WebCore/dom/XMLTokenizerQt.cpp | |
parent | e196732677050bd463301566a68a643b6d14b907 (diff) | |
download | external_webkit-231d4e3152a9c27a73b6ac7badbe6be673aa3ddf.zip external_webkit-231d4e3152a9c27a73b6ac7badbe6be673aa3ddf.tar.gz external_webkit-231d4e3152a9c27a73b6ac7badbe6be673aa3ddf.tar.bz2 |
Merge webkit.org at R49305 : Automatic merge by git.
Change-Id: I8968561bc1bfd72b8923b7118d3728579c6dbcc7
Diffstat (limited to 'WebCore/dom/XMLTokenizerQt.cpp')
-rw-r--r-- | WebCore/dom/XMLTokenizerQt.cpp | 55 |
1 files changed, 15 insertions, 40 deletions
diff --git a/WebCore/dom/XMLTokenizerQt.cpp b/WebCore/dom/XMLTokenizerQt.cpp index 16c637f..04405d6 100644 --- a/WebCore/dom/XMLTokenizerQt.cpp +++ b/WebCore/dom/XMLTokenizerQt.cpp @@ -50,6 +50,7 @@ #include "ScriptSourceCode.h" #include "ScriptValue.h" #include "TextResourceDecoder.h" +#include "TransformSource.h" #include <QDebug> #include <wtf/Platform.h> #include <wtf/StringExtras.h> @@ -237,7 +238,7 @@ void XMLTokenizer::doWrite(const String& parseString) return; } -void XMLTokenizer::initializeParserContext(const char* chunk) +void XMLTokenizer::initializeParserContext(const char*) { m_parserStopped = false; m_sawError = false; @@ -248,45 +249,19 @@ void XMLTokenizer::initializeParserContext(const char* chunk) void XMLTokenizer::doEnd() { #if ENABLE(XSLT) - #warning Look at XMLTokenizerLibXml.cpp -#endif - - if (m_stream.error() == QXmlStreamReader::PrematureEndOfDocumentError || (m_wroteText && !m_sawFirstElement)) { - handleError(fatal, qPrintable(m_stream.errorString()), lineNumber(), - columnNumber()); + if (m_sawXSLTransform) { + m_doc->setTransformSource(new TransformSource(m_originalSourceForTransform)); + m_doc->setParsing(false); // Make the doc think it's done, so it will apply xsl sheets. + m_doc->updateStyleSelector(); + m_doc->setParsing(true); + m_parserStopped = true; } -} - -#if ENABLE(XSLT) -void* xmlDocPtrForString(DocLoader* docLoader, const String& source, const String& url) -{ - if (source.isEmpty()) - return 0; - - // Parse in a single chunk into an xmlDocPtr - // FIXME: Hook up error handlers so that a failure to parse the main document results in - // good error messages. - const UChar BOM = 0xFEFF; - const unsigned char BOMHighByte = *reinterpret_cast<const unsigned char*>(&BOM); - - xmlGenericErrorFunc oldErrorFunc = xmlGenericError; - void* oldErrorContext = xmlGenericErrorContext; - - setLoaderForLibXMLCallbacks(docLoader); - xmlSetGenericErrorFunc(0, errorFunc); - - xmlDocPtr sourceDoc = xmlReadMemory(reinterpret_cast<const char*>(source.characters()), - source.length() * sizeof(UChar), - url.latin1().data(), - BOMHighByte == 0xFF ? "UTF-16LE" : "UTF-16BE", - XSLT_PARSE_OPTIONS); - - setLoaderForLibXMLCallbacks(0); - xmlSetGenericErrorFunc(oldErrorContext, oldErrorFunc); +#endif - return sourceDoc; + if (m_stream.error() == QXmlStreamReader::PrematureEndOfDocumentError + || (m_wroteText && !m_sawFirstElement && !m_sawXSLTransform)) + handleError(fatal, qPrintable(m_stream.errorString()), lineNumber(), columnNumber()); } -#endif int XMLTokenizer::lineNumber() const { @@ -683,7 +658,7 @@ void XMLTokenizer::parseProcessingInstruction() #if ENABLE(XSLT) m_sawXSLTransform = !m_sawFirstElement && pi->isXSL(); - if (m_sawXSLTransform && !m_doc->transformSourceDocument())) + if (m_sawXSLTransform && !m_doc->transformSourceDocument()) stopParsing(); #endif } @@ -692,7 +667,7 @@ void XMLTokenizer::parseCdata() { exitText(); - RefPtr<Node> newNode = new CDATASection(m_doc, m_stream.text()); + RefPtr<Node> newNode = CDATASection::create(m_doc, m_stream.text()); if (!m_currentNode->addChild(newNode.get())) return; if (m_view && !newNode->attached()) @@ -703,7 +678,7 @@ void XMLTokenizer::parseComment() { exitText(); - RefPtr<Node> newNode = new Comment(m_doc, m_stream.text()); + RefPtr<Node> newNode = Comment::create(m_doc, m_stream.text()); m_currentNode->addChild(newNode.get()); if (m_view && !newNode->attached()) newNode->attach(); |