diff options
Diffstat (limited to 'WebCore/dom/XMLDocumentParserLibxml2.cpp')
-rw-r--r-- | WebCore/dom/XMLDocumentParserLibxml2.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/WebCore/dom/XMLDocumentParserLibxml2.cpp b/WebCore/dom/XMLDocumentParserLibxml2.cpp index 77b0af6..7a3285f 100644 --- a/WebCore/dom/XMLDocumentParserLibxml2.cpp +++ b/WebCore/dom/XMLDocumentParserLibxml2.cpp @@ -560,7 +560,7 @@ XMLDocumentParser::XMLDocumentParser(Document* document, FrameView* frameView) , m_lastErrorLine(0) , m_lastErrorColumn(0) , m_pendingScript(0) - , m_scriptStartLine(0) + , m_scriptStartPosition(TextPosition1::belowRangePosition()) , m_parsingFragment(false) , m_scriptingPermission(FragmentScriptingAllowed) { @@ -587,7 +587,7 @@ XMLDocumentParser::XMLDocumentParser(DocumentFragment* fragment, Element* parent , m_lastErrorLine(0) , m_lastErrorColumn(0) , m_pendingScript(0) - , m_scriptStartLine(0) + , m_scriptStartPosition(TextPosition1::belowRangePosition()) , m_parsingFragment(true) , m_scriptingPermission(scriptingPermission) { @@ -819,7 +819,7 @@ void XMLDocumentParser::startElementNs(const xmlChar* xmlLocalName, const xmlCha ScriptElement* scriptElement = toScriptElement(newElement.get()); if (scriptElement) - m_scriptStartLine = lineNumber(); + m_scriptStartPosition = textPositionOneBased(); m_currentNode->deprecatedParserAddChild(newElement.get()); @@ -910,7 +910,7 @@ void XMLDocumentParser::endElementNs() } else m_scriptElement = 0; } else - m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartLine)); + scriptElement->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition)); // JavaScript may have detached the parser if (isDetached()) @@ -1376,14 +1376,39 @@ void* xmlDocPtrForString(CachedResourceLoader* cachedResourceLoader, const Strin int XMLDocumentParser::lineNumber() const { + // FIXME: The implementation probably returns 1-based int, but method should return 0-based. return context() ? context()->input->line : 1; } int XMLDocumentParser::columnNumber() const { + // FIXME: The implementation probably returns 1-based int, but method should return 0-based. return context() ? context()->input->col : 1; } +TextPosition0 XMLDocumentParser::textPosition() const +{ + xmlParserCtxtPtr context = this->context(); + if (!context) + return TextPosition0::minimumPosition(); + // FIXME: The context probably contains 1-based numbers, but we treat them as 0-based, + // to be consistent with fixme's in lineNumber() and columnNumber + // methods. + return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->line), + WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->col)); +} + +// This method has a correct implementation, in contrast to textPosition() method. +// It should replace textPosition(). +TextPosition1 XMLDocumentParser::textPositionOneBased() const +{ + xmlParserCtxtPtr context = this->context(); + if (!context) + return TextPosition1::minimumPosition(); + return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(context->input->line), + WTF::OneBasedNumber::fromOneBasedInt(context->input->col)); +} + void XMLDocumentParser::stopParsing() { DocumentParser::stopParsing(); |