diff options
author | Jiang Jiang <jiang.jiang@nokia.com> | 2011-07-08 07:57:45 (GMT) |
---|---|---|
committer | Jiang Jiang <jiang.jiang@nokia.com> | 2011-07-08 07:57:45 (GMT) |
commit | 978e22d6529d7cbe9472749352d632eefd22cd07 (patch) | |
tree | ac92a4f489c0a93a48eb502457c679659e472ac0 /src/3rdparty/webkit/WebCore/xml | |
parent | cb11bb0df08f134bbded52fd4140197a01570a0e (diff) | |
parent | 1dd26ea2486db87b61e8e9f70a1e04f7386405ef (diff) | |
download | Qt-978e22d6529d7cbe9472749352d632eefd22cd07.zip Qt-978e22d6529d7cbe9472749352d632eefd22cd07.tar.gz Qt-978e22d6529d7cbe9472749352d632eefd22cd07.tar.bz2 |
Merge remote branch 'mainline/4.8' into staging
Conflicts:
dist/changes-4.8.0
Diffstat (limited to 'src/3rdparty/webkit/WebCore/xml')
73 files changed, 0 insertions, 9759 deletions
diff --git a/src/3rdparty/webkit/WebCore/xml/DOMParser.cpp b/src/3rdparty/webkit/WebCore/xml/DOMParser.cpp deleted file mode 100644 index 448dcb1..0000000 --- a/src/3rdparty/webkit/WebCore/xml/DOMParser.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" -#include "DOMParser.h" - -#include "DOMImplementation.h" -#include "PlatformString.h" - -namespace WebCore { - -PassRefPtr<Document> DOMParser::parseFromString(const String& str, const String& contentType) -{ - if (!DOMImplementation::isXMLMIMEType(contentType)) - return 0; - - RefPtr<Document> doc = DOMImplementation::createDocument(contentType, 0, false); - - doc->open(); - doc->write(str); - doc->finishParsing(); - doc->close(); - - return doc.release(); -} - -} diff --git a/src/3rdparty/webkit/WebCore/xml/DOMParser.h b/src/3rdparty/webkit/WebCore/xml/DOMParser.h deleted file mode 100644 index 5036d22..0000000 --- a/src/3rdparty/webkit/WebCore/xml/DOMParser.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2003, 2006 Apple Computer, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef DOMParser_h -#define DOMParser_h - -#include <wtf/RefCounted.h> -#include "Document.h" - -namespace WebCore { - - class String; - - class DOMParser : public RefCounted<DOMParser> { - public: - static PassRefPtr<DOMParser> create() { return adoptRef(new DOMParser); } - - PassRefPtr<Document> parseFromString(const String& str, const String& contentType); - - private: - DOMParser() { } - }; - -} - -#endif // XMLSerializer.h diff --git a/src/3rdparty/webkit/WebCore/xml/DOMParser.idl b/src/3rdparty/webkit/WebCore/xml/DOMParser.idl deleted file mode 100644 index 90a8b52..0000000 --- a/src/3rdparty/webkit/WebCore/xml/DOMParser.idl +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2006 Apple Computer, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -module xpath { - interface [CanBeConstructed] DOMParser { - Document parseFromString(in DOMString str, in DOMString contentType); - }; -} diff --git a/src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.cpp b/src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.cpp deleted file mode 100644 index 11faea6..0000000 --- a/src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2007 Alexey Proskuryakov (ap@nypop.com) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "NativeXPathNSResolver.h" - -#if ENABLE(XPATH) - -#include "Node.h" -#include "PlatformString.h" -#include "XMLNames.h" - -namespace WebCore { - -NativeXPathNSResolver::NativeXPathNSResolver(PassRefPtr<Node> node) - : m_node(node) -{ -} - -NativeXPathNSResolver::~NativeXPathNSResolver() -{ -} - -String NativeXPathNSResolver::lookupNamespaceURI(const String& prefix) -{ - // This is not done by Node::lookupNamespaceURI as per the DOM3 Core spec, - // but the XPath spec says that we should do it for XPathNSResolver. - if (prefix == "xml") - return XMLNames::xmlNamespaceURI; - - return m_node ? m_node->lookupNamespaceURI(prefix) : String(); -} - -} // namespace WebCore - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.h b/src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.h deleted file mode 100644 index 212b929..0000000 --- a/src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2007 Alexey Proskuryakov (ap@nypop.com) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NativeXPathNSResolver_h -#define NativeXPathNSResolver_h - -#if ENABLE(XPATH) - -#include "XPathNSResolver.h" -#include "Node.h" -#include <wtf/RefPtr.h> - -namespace WebCore { - - class NativeXPathNSResolver : public XPathNSResolver { - public: - static PassRefPtr<NativeXPathNSResolver> create(PassRefPtr<Node> node) { return adoptRef(new NativeXPathNSResolver(node)); } - virtual ~NativeXPathNSResolver(); - - virtual String lookupNamespaceURI(const String& prefix); - - private: - NativeXPathNSResolver(PassRefPtr<Node>); - RefPtr<Node> m_node; - }; - -} // namespace WebCore - -#endif // ENABLE(XPATH) - -#endif // NativeXPathNSResolver_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.cpp b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.cpp deleted file mode 100644 index f10b589..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.cpp +++ /dev/null @@ -1,1003 +0,0 @@ -/* - * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. - * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org> - * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org> - * Copyright (C) 2008 David Levin <levin@chromium.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" -#include "XMLHttpRequest.h" - -#include "Blob.h" -#include "Cache.h" -#include "CString.h" -#include "CrossOriginAccessControl.h" -#include "DOMFormData.h" -#include "DOMImplementation.h" -#include "Document.h" -#include "Event.h" -#include "EventException.h" -#include "EventListener.h" -#include "EventNames.h" -#include "HTTPParsers.h" -#include "InspectorTimelineAgent.h" -#include "ResourceError.h" -#include "ResourceRequest.h" -#include "SecurityOrigin.h" -#include "Settings.h" -#include "TextResourceDecoder.h" -#include "ThreadableLoader.h" -#include "XMLHttpRequestException.h" -#include "XMLHttpRequestProgressEvent.h" -#include "XMLHttpRequestUpload.h" -#include "markup.h" -#include <wtf/StdLibExtras.h> -#include <wtf/RefCountedLeakCounter.h> - -#if USE(JSC) -#include "JSDOMBinding.h" -#include "JSDOMWindow.h" -#include <runtime/Protect.h> -#endif - -namespace WebCore { - -#ifndef NDEBUG -static WTF::RefCountedLeakCounter xmlHttpRequestCounter("XMLHttpRequest"); -#endif - -struct XMLHttpRequestStaticData : Noncopyable { - XMLHttpRequestStaticData(); - String m_proxyHeaderPrefix; - String m_secHeaderPrefix; - HashSet<String, CaseFoldingHash> m_forbiddenRequestHeaders; -}; - -XMLHttpRequestStaticData::XMLHttpRequestStaticData() - : m_proxyHeaderPrefix("proxy-") - , m_secHeaderPrefix("sec-") -{ - m_forbiddenRequestHeaders.add("accept-charset"); - m_forbiddenRequestHeaders.add("accept-encoding"); - m_forbiddenRequestHeaders.add("access-control-request-headers"); - m_forbiddenRequestHeaders.add("access-control-request-method"); - m_forbiddenRequestHeaders.add("connection"); - m_forbiddenRequestHeaders.add("content-length"); - m_forbiddenRequestHeaders.add("content-transfer-encoding"); - m_forbiddenRequestHeaders.add("cookie"); - m_forbiddenRequestHeaders.add("cookie2"); - m_forbiddenRequestHeaders.add("date"); - m_forbiddenRequestHeaders.add("expect"); - m_forbiddenRequestHeaders.add("host"); - m_forbiddenRequestHeaders.add("keep-alive"); - m_forbiddenRequestHeaders.add("origin"); - m_forbiddenRequestHeaders.add("referer"); - m_forbiddenRequestHeaders.add("te"); - m_forbiddenRequestHeaders.add("trailer"); - m_forbiddenRequestHeaders.add("transfer-encoding"); - m_forbiddenRequestHeaders.add("upgrade"); - m_forbiddenRequestHeaders.add("user-agent"); - m_forbiddenRequestHeaders.add("via"); -} - -// Determines if a string is a valid token, as defined by -// "token" in section 2.2 of RFC 2616. -static bool isValidToken(const String& name) -{ - unsigned length = name.length(); - for (unsigned i = 0; i < length; i++) { - UChar c = name[i]; - - if (c >= 127 || c <= 32) - return false; - - if (c == '(' || c == ')' || c == '<' || c == '>' || c == '@' || - c == ',' || c == ';' || c == ':' || c == '\\' || c == '\"' || - c == '/' || c == '[' || c == ']' || c == '?' || c == '=' || - c == '{' || c == '}') - return false; - } - - return true; -} - -static bool isValidHeaderValue(const String& name) -{ - // FIXME: This should really match name against - // field-value in section 4.2 of RFC 2616. - - return !name.contains('\r') && !name.contains('\n'); -} - -static bool isSetCookieHeader(const AtomicString& name) -{ - return equalIgnoringCase(name, "set-cookie") || equalIgnoringCase(name, "set-cookie2"); -} - -static const XMLHttpRequestStaticData* staticData = 0; - -static const XMLHttpRequestStaticData* createXMLHttpRequestStaticData() -{ - staticData = new XMLHttpRequestStaticData; - return staticData; -} - -static const XMLHttpRequestStaticData* initializeXMLHttpRequestStaticData() -{ - // Uses dummy to avoid warnings about an unused variable. - AtomicallyInitializedStatic(const XMLHttpRequestStaticData*, dummy = createXMLHttpRequestStaticData()); - return dummy; -} - -XMLHttpRequest::XMLHttpRequest(ScriptExecutionContext* context) - : ActiveDOMObject(context, this) - , m_async(true) - , m_includeCredentials(false) - , m_state(UNSENT) - , m_responseText("") - , m_createdDocument(false) - , m_error(false) - , m_uploadEventsAllowed(true) - , m_uploadComplete(false) - , m_sameOriginRequest(true) - , m_didTellLoaderAboutRequest(false) - , m_receivedLength(0) - , m_lastSendLineNumber(0) - , m_exceptionCode(0) - , m_progressEventThrottle(this) -{ - initializeXMLHttpRequestStaticData(); -#ifndef NDEBUG - xmlHttpRequestCounter.increment(); -#endif -} - -XMLHttpRequest::~XMLHttpRequest() -{ - if (m_didTellLoaderAboutRequest) { - cache()->loader()->nonCacheRequestComplete(m_url); - m_didTellLoaderAboutRequest = false; - } - if (m_upload) - m_upload->disconnectXMLHttpRequest(); - -#ifndef NDEBUG - xmlHttpRequestCounter.decrement(); -#endif -} - -Document* XMLHttpRequest::document() const -{ - ASSERT(scriptExecutionContext()->isDocument()); - return static_cast<Document*>(scriptExecutionContext()); -} - -#if ENABLE(DASHBOARD_SUPPORT) -bool XMLHttpRequest::usesDashboardBackwardCompatibilityMode() const -{ - if (scriptExecutionContext()->isWorkerContext()) - return false; - Settings* settings = document()->settings(); - return settings && settings->usesDashboardBackwardCompatibilityMode(); -} -#endif - -XMLHttpRequest::State XMLHttpRequest::readyState() const -{ - return m_state; -} - -const ScriptString& XMLHttpRequest::responseText() const -{ - return m_responseText; -} - -Document* XMLHttpRequest::responseXML() const -{ - if (m_state != DONE) - return 0; - - if (!m_createdDocument) { - if ((m_response.isHTTP() && !responseIsXML()) || scriptExecutionContext()->isWorkerContext()) { - // The W3C spec requires this. - m_responseXML = 0; - } else { - m_responseXML = Document::create(0); - m_responseXML->open(); - m_responseXML->setURL(m_url); - // FIXME: Set Last-Modified. - m_responseXML->write(String(m_responseText)); - m_responseXML->finishParsing(); - m_responseXML->close(); - - if (!m_responseXML->wellFormed()) - m_responseXML = 0; - } - m_createdDocument = true; - } - - return m_responseXML.get(); -} - -XMLHttpRequestUpload* XMLHttpRequest::upload() -{ - if (!m_upload) - m_upload = XMLHttpRequestUpload::create(this); - return m_upload.get(); -} - -void XMLHttpRequest::changeState(State newState) -{ - if (m_state != newState) { - m_state = newState; - callReadyStateChangeListener(); - } -} - -void XMLHttpRequest::callReadyStateChangeListener() -{ - if (!scriptExecutionContext()) - return; - -#if ENABLE(INSPECTOR) - InspectorTimelineAgent* timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()); - bool callTimelineAgentOnReadyStateChange = timelineAgent && hasEventListeners(eventNames().readystatechangeEvent); - if (callTimelineAgentOnReadyStateChange) - timelineAgent->willChangeXHRReadyState(m_url.string(), m_state); -#endif - - m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().readystatechangeEvent), m_state == DONE ? FlushProgressEvent : DoNotFlushProgressEvent); - -#if ENABLE(INSPECTOR) - if (callTimelineAgentOnReadyStateChange && (timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()))) - timelineAgent->didChangeXHRReadyState(); -#endif - - if (m_state == DONE && !m_error) { -#if ENABLE(INSPECTOR) - timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()); - bool callTimelineAgentOnLoad = timelineAgent && hasEventListeners(eventNames().loadEvent); - if (callTimelineAgentOnLoad) - timelineAgent->willLoadXHR(m_url.string()); -#endif - - m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().loadEvent)); - -#if ENABLE(INSPECTOR) - if (callTimelineAgentOnLoad && (timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()))) - timelineAgent->didLoadXHR(); -#endif - } -} - -void XMLHttpRequest::setWithCredentials(bool value, ExceptionCode& ec) -{ - if (m_state != OPENED || m_loader) { - ec = INVALID_STATE_ERR; - return; - } - - m_includeCredentials = value; -} - -void XMLHttpRequest::open(const String& method, const KURL& url, ExceptionCode& ec) -{ - open(method, url, true, ec); -} - -void XMLHttpRequest::open(const String& method, const KURL& url, bool async, ExceptionCode& ec) -{ - internalAbort(); - State previousState = m_state; - m_state = UNSENT; - m_error = false; - - m_uploadComplete = false; - - // clear stuff from possible previous load - clearResponse(); - clearRequest(); - - ASSERT(m_state == UNSENT); - - if (!isValidToken(method)) { - ec = SYNTAX_ERR; - return; - } - - // Method names are case sensitive. But since Firefox uppercases method names it knows, we'll do the same. - String methodUpper(method.upper()); - - if (methodUpper == "TRACE" || methodUpper == "TRACK" || methodUpper == "CONNECT") { - ec = SECURITY_ERR; - return; - } - - m_url = url; - - if (methodUpper == "COPY" || methodUpper == "DELETE" || methodUpper == "GET" || methodUpper == "HEAD" - || methodUpper == "INDEX" || methodUpper == "LOCK" || methodUpper == "M-POST" || methodUpper == "MKCOL" || methodUpper == "MOVE" - || methodUpper == "OPTIONS" || methodUpper == "POST" || methodUpper == "PROPFIND" || methodUpper == "PROPPATCH" || methodUpper == "PUT" - || methodUpper == "UNLOCK") - m_method = methodUpper; - else - m_method = method; - - m_async = async; - - ASSERT(!m_loader); - - // Check previous state to avoid dispatching readyState event - // when calling open several times in a row. - if (previousState != OPENED) - changeState(OPENED); - else - m_state = OPENED; -} - -void XMLHttpRequest::open(const String& method, const KURL& url, bool async, const String& user, ExceptionCode& ec) -{ - KURL urlWithCredentials(url); - urlWithCredentials.setUser(user); - - open(method, urlWithCredentials, async, ec); -} - -void XMLHttpRequest::open(const String& method, const KURL& url, bool async, const String& user, const String& password, ExceptionCode& ec) -{ - KURL urlWithCredentials(url); - urlWithCredentials.setUser(user); - urlWithCredentials.setPass(password); - - open(method, urlWithCredentials, async, ec); -} - -bool XMLHttpRequest::initSend(ExceptionCode& ec) -{ - if (!scriptExecutionContext()) - return false; - - if (m_state != OPENED || m_loader) { - ec = INVALID_STATE_ERR; - return false; - } - - m_error = false; - return true; -} - -void XMLHttpRequest::send(ExceptionCode& ec) -{ - send(String(), ec); -} - -void XMLHttpRequest::send(Document* document, ExceptionCode& ec) -{ - ASSERT(document); - - if (!initSend(ec)) - return; - - if (m_method != "GET" && m_method != "HEAD" && m_url.protocolInHTTPFamily()) { - String contentType = getRequestHeader("Content-Type"); - if (contentType.isEmpty()) { -#if ENABLE(DASHBOARD_SUPPORT) - if (usesDashboardBackwardCompatibilityMode()) - setRequestHeaderInternal("Content-Type", "application/x-www-form-urlencoded"); - else -#endif - // FIXME: this should include the charset used for encoding. - setRequestHeaderInternal("Content-Type", "application/xml"); - } - - // FIXME: According to XMLHttpRequest Level 2, this should use the Document.innerHTML algorithm - // from the HTML5 specification to serialize the document. - String body = createMarkup(document); - - // FIXME: this should use value of document.inputEncoding to determine the encoding to use. - TextEncoding encoding = UTF8Encoding(); - m_requestEntityBody = FormData::create(encoding.encode(body.characters(), body.length(), EntitiesForUnencodables)); - if (m_upload) - m_requestEntityBody->setAlwaysStream(true); - } - - createRequest(ec); -} - -void XMLHttpRequest::send(const String& body, ExceptionCode& ec) -{ - if (!initSend(ec)) - return; - - if (!body.isNull() && m_method != "GET" && m_method != "HEAD" && m_url.protocolInHTTPFamily()) { - String contentType = getRequestHeader("Content-Type"); - if (contentType.isEmpty()) { -#if ENABLE(DASHBOARD_SUPPORT) - if (usesDashboardBackwardCompatibilityMode()) - setRequestHeaderInternal("Content-Type", "application/x-www-form-urlencoded"); - else -#endif - setRequestHeaderInternal("Content-Type", "application/xml"); - } - - m_requestEntityBody = FormData::create(UTF8Encoding().encode(body.characters(), body.length(), EntitiesForUnencodables)); - if (m_upload) - m_requestEntityBody->setAlwaysStream(true); - } - - createRequest(ec); -} - -void XMLHttpRequest::send(Blob* body, ExceptionCode& ec) -{ - if (!initSend(ec)) - return; - - if (m_method != "GET" && m_method != "HEAD" && m_url.protocolInHTTPFamily()) { - // FIXME: Should we set a Content-Type if one is not set. - // FIXME: add support for uploading bundles. - m_requestEntityBody = FormData::create(); -#if ENABLE(BLOB_SLICE) - m_requestEntityBody->appendFileRange(body->path(), body->start(), body->length(), body->modificationTime()); -#else - m_requestEntityBody->appendFile(body->path(), false); -#endif - } - - createRequest(ec); -} - -void XMLHttpRequest::send(DOMFormData* body, ExceptionCode& ec) -{ - if (!initSend(ec)) - return; - - if (m_method != "GET" && m_method != "HEAD" && m_url.protocolInHTTPFamily()) { - m_requestEntityBody = FormData::createMultiPart(*body, document()); - - String contentType = getRequestHeader("Content-Type"); - if (contentType.isEmpty()) { - contentType = "multipart/form-data; boundary="; - contentType += m_requestEntityBody->boundary().data(); - setRequestHeaderInternal("Content-Type", contentType); - } - } - - createRequest(ec); -} - -void XMLHttpRequest::createRequest(ExceptionCode& ec) -{ - // The presence of upload event listeners forces us to use preflighting because POSTing to an URL that does not - // permit cross origin requests should look exactly like POSTing to an URL that does not respond at all. - // Also, only async requests support upload progress events. - bool forcePreflight = false; - if (m_async) { - m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().loadstartEvent)); - if (m_requestEntityBody && m_upload) { - forcePreflight = m_upload->hasEventListeners(); - m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().loadstartEvent)); - } - } - - m_sameOriginRequest = scriptExecutionContext()->securityOrigin()->canRequest(m_url); - - // We also remember whether upload events should be allowed for this request in case the upload listeners are - // added after the request is started. - m_uploadEventsAllowed = !isSimpleCrossOriginAccessRequest(m_method, m_requestHeaders); - - ResourceRequest request(m_url); - request.setHTTPMethod(m_method); - - if (m_requestEntityBody) { - ASSERT(m_method != "GET"); - ASSERT(m_method != "HEAD"); - request.setHTTPBody(m_requestEntityBody.release()); - } - - if (m_requestHeaders.size() > 0) - request.addHTTPHeaderFields(m_requestHeaders); - - ThreadableLoaderOptions options; - options.sendLoadCallbacks = true; - options.sniffContent = false; - options.forcePreflight = forcePreflight; - options.allowCredentials = m_sameOriginRequest || m_includeCredentials; - options.crossOriginRequestPolicy = UseAccessControl; - - m_exceptionCode = 0; - m_error = false; - - if (m_async) { - if (m_upload) - request.setReportUploadProgress(true); - - // ThreadableLoader::create can return null here, for example if we're no longer attached to a page. - // This is true while running onunload handlers. - // FIXME: Maybe we need to be able to send XMLHttpRequests from onunload, <http://bugs.webkit.org/show_bug.cgi?id=10904>. - // FIXME: Maybe create() can return null for other reasons too? - m_loader = ThreadableLoader::create(scriptExecutionContext(), this, request, options); - if (m_loader) { - // Neither this object nor the JavaScript wrapper should be deleted while - // a request is in progress because we need to keep the listeners alive, - // and they are referenced by the JavaScript wrapper. - setPendingActivity(this); - - // For now we should only balance the nonCached request count for main-thread XHRs and not - // Worker XHRs, as the Cache is not thread-safe. - // This will become irrelevant after https://bugs.webkit.org/show_bug.cgi?id=27165 is resolved. - if (!scriptExecutionContext()->isWorkerContext()) { - ASSERT(isMainThread()); - ASSERT(!m_didTellLoaderAboutRequest); - cache()->loader()->nonCacheRequestInFlight(m_url); - m_didTellLoaderAboutRequest = true; - } - } - } else - ThreadableLoader::loadResourceSynchronously(scriptExecutionContext(), request, *this, options); - - if (!m_exceptionCode && m_error) - m_exceptionCode = XMLHttpRequestException::NETWORK_ERR; - ec = m_exceptionCode; -} - -void XMLHttpRequest::abort() -{ - // internalAbort() calls dropProtection(), which may release the last reference. - RefPtr<XMLHttpRequest> protect(this); - - bool sendFlag = m_loader; - - internalAbort(); - - m_responseText = ""; - m_createdDocument = false; - m_responseXML = 0; - - // Clear headers as required by the spec - m_requestHeaders.clear(); - - if ((m_state <= OPENED && !sendFlag) || m_state == DONE) - m_state = UNSENT; - else { - ASSERT(!m_loader); - changeState(DONE); - m_state = UNSENT; - } - - m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().abortEvent)); - if (!m_uploadComplete) { - m_uploadComplete = true; - if (m_upload && m_uploadEventsAllowed) - m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().abortEvent)); - } -} - -void XMLHttpRequest::internalAbort() -{ - bool hadLoader = m_loader; - - m_error = true; - - // FIXME: when we add the support for multi-part XHR, we will have to think be careful with this initialization. - m_receivedLength = 0; - - if (hadLoader) { - m_loader->cancel(); - m_loader = 0; - } - - m_decoder = 0; - - if (hadLoader) - dropProtection(); -} - -void XMLHttpRequest::clearResponse() -{ - m_response = ResourceResponse(); - m_responseText = ""; - m_createdDocument = false; - m_responseXML = 0; -} - -void XMLHttpRequest::clearRequest() -{ - m_requestHeaders.clear(); - m_requestEntityBody = 0; -} - -void XMLHttpRequest::genericError() -{ - clearResponse(); - clearRequest(); - m_error = true; - - changeState(DONE); -} - -void XMLHttpRequest::networkError() -{ - genericError(); - m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().errorEvent)); - if (!m_uploadComplete) { - m_uploadComplete = true; - if (m_upload && m_uploadEventsAllowed) - m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().errorEvent)); - } - internalAbort(); -} - -void XMLHttpRequest::abortError() -{ - genericError(); - m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().abortEvent)); - if (!m_uploadComplete) { - m_uploadComplete = true; - if (m_upload && m_uploadEventsAllowed) - m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().abortEvent)); - } -} - -void XMLHttpRequest::dropProtection() -{ -#if USE(JSC) - // The XHR object itself holds on to the responseText, and - // thus has extra cost even independent of any - // responseText or responseXML objects it has handed - // out. But it is protected from GC while loading, so this - // can't be recouped until the load is done, so only - // report the extra cost at that point. - JSC::JSGlobalData* globalData = scriptExecutionContext()->globalData(); - if (hasCachedDOMObjectWrapper(globalData, this)) - globalData->heap.reportExtraMemoryCost(m_responseText.size() * 2); -#endif - - unsetPendingActivity(this); -} - -void XMLHttpRequest::overrideMimeType(const String& override) -{ - m_mimeTypeOverride = override; -} - -static void reportUnsafeUsage(ScriptExecutionContext* context, const String& message) -{ - if (!context) - return; - // FIXME: It's not good to report the bad usage without indicating what source line it came from. - // We should pass additional parameters so we can tell the console where the mistake occurred. - context->addMessage(ConsoleDestination, JSMessageSource, LogMessageType, ErrorMessageLevel, message, 1, String()); -} - -void XMLHttpRequest::setRequestHeader(const AtomicString& name, const String& value, ExceptionCode& ec) -{ - if (m_state != OPENED || m_loader) { -#if ENABLE(DASHBOARD_SUPPORT) - if (usesDashboardBackwardCompatibilityMode()) - return; -#endif - - ec = INVALID_STATE_ERR; - return; - } - - if (!isValidToken(name) || !isValidHeaderValue(value)) { - ec = SYNTAX_ERR; - return; - } - - // A privileged script (e.g. a Dashboard widget) can set any headers. - if (!scriptExecutionContext()->securityOrigin()->canLoadLocalResources() && !isSafeRequestHeader(name)) { - reportUnsafeUsage(scriptExecutionContext(), "Refused to set unsafe header \"" + name + "\""); - return; - } - - setRequestHeaderInternal(name, value); -} - -void XMLHttpRequest::setRequestHeaderInternal(const AtomicString& name, const String& value) -{ - pair<HTTPHeaderMap::iterator, bool> result = m_requestHeaders.add(name, value); - if (!result.second) - result.first->second += ", " + value; -} - -bool XMLHttpRequest::isSafeRequestHeader(const String& name) const -{ - return !staticData->m_forbiddenRequestHeaders.contains(name) && !name.startsWith(staticData->m_proxyHeaderPrefix, false) - && !name.startsWith(staticData->m_secHeaderPrefix, false); -} - -String XMLHttpRequest::getRequestHeader(const AtomicString& name) const -{ - return m_requestHeaders.get(name); -} - -String XMLHttpRequest::getAllResponseHeaders(ExceptionCode& ec) const -{ - if (m_state < HEADERS_RECEIVED) { - ec = INVALID_STATE_ERR; - return ""; - } - - Vector<UChar> stringBuilder; - - HTTPHeaderMap::const_iterator end = m_response.httpHeaderFields().end(); - for (HTTPHeaderMap::const_iterator it = m_response.httpHeaderFields().begin(); it!= end; ++it) { - // Hide Set-Cookie header fields from the XMLHttpRequest client for these reasons: - // 1) If the client did have access to the fields, then it could read HTTP-only - // cookies; those cookies are supposed to be hidden from scripts. - // 2) There's no known harm in hiding Set-Cookie header fields entirely; we don't - // know any widely used technique that requires access to them. - // 3) Firefox has implemented this policy. - if (isSetCookieHeader(it->first) && !scriptExecutionContext()->securityOrigin()->canLoadLocalResources()) - continue; - - if (!m_sameOriginRequest && !isOnAccessControlResponseHeaderWhitelist(it->first)) - continue; - - stringBuilder.append(it->first.characters(), it->first.length()); - stringBuilder.append(':'); - stringBuilder.append(' '); - stringBuilder.append(it->second.characters(), it->second.length()); - stringBuilder.append('\r'); - stringBuilder.append('\n'); - } - - return String::adopt(stringBuilder); -} - -String XMLHttpRequest::getResponseHeader(const AtomicString& name, ExceptionCode& ec) const -{ - if (m_state < HEADERS_RECEIVED) { - ec = INVALID_STATE_ERR; - return String(); - } - - // See comment in getAllResponseHeaders above. - if (isSetCookieHeader(name) && !scriptExecutionContext()->securityOrigin()->canLoadLocalResources()) { - reportUnsafeUsage(scriptExecutionContext(), "Refused to get unsafe header \"" + name + "\""); - return String(); - } - - if (!m_sameOriginRequest && !isOnAccessControlResponseHeaderWhitelist(name)) { - reportUnsafeUsage(scriptExecutionContext(), "Refused to get unsafe header \"" + name + "\""); - return String(); - } - return m_response.httpHeaderField(name); -} - -String XMLHttpRequest::responseMIMEType() const -{ - String mimeType = extractMIMETypeFromMediaType(m_mimeTypeOverride); - if (mimeType.isEmpty()) { - if (m_response.isHTTP()) - mimeType = extractMIMETypeFromMediaType(m_response.httpHeaderField("Content-Type")); - else - mimeType = m_response.mimeType(); - } - if (mimeType.isEmpty()) - mimeType = "text/xml"; - - return mimeType; -} - -bool XMLHttpRequest::responseIsXML() const -{ - return DOMImplementation::isXMLMIMEType(responseMIMEType()); -} - -int XMLHttpRequest::status(ExceptionCode& ec) const -{ - if (m_response.httpStatusCode()) - return m_response.httpStatusCode(); - - if (m_state == OPENED) { - // Firefox only raises an exception in this state; we match it. - // Note the case of local file requests, where we have no HTTP response code! Firefox never raises an exception for those, but we match HTTP case for consistency. - ec = INVALID_STATE_ERR; - } - - return 0; -} - -String XMLHttpRequest::statusText(ExceptionCode& ec) const -{ - if (!m_response.httpStatusText().isNull()) - return m_response.httpStatusText(); - - if (m_state == OPENED) { - // See comments in status() above. - ec = INVALID_STATE_ERR; - } - - return String(); -} - -void XMLHttpRequest::didFail(const ResourceError& error) -{ - if (m_didTellLoaderAboutRequest) { - cache()->loader()->nonCacheRequestComplete(m_url); - m_didTellLoaderAboutRequest = false; - } - - // If we are already in an error state, for instance we called abort(), bail out early. - if (m_error) - return; - - if (error.isCancellation()) { - m_exceptionCode = XMLHttpRequestException::ABORT_ERR; - abortError(); - return; - } - - m_exceptionCode = XMLHttpRequestException::NETWORK_ERR; - networkError(); -} - -void XMLHttpRequest::didFailRedirectCheck() -{ - networkError(); -} - -void XMLHttpRequest::didFinishLoading(unsigned long identifier) -{ - if (m_didTellLoaderAboutRequest) { - cache()->loader()->nonCacheRequestComplete(m_url); - m_didTellLoaderAboutRequest = false; - } - - if (m_error) - return; - - if (m_state < HEADERS_RECEIVED) - changeState(HEADERS_RECEIVED); - - if (m_decoder) - m_responseText += m_decoder->flush(); - - scriptExecutionContext()->resourceRetrievedByXMLHttpRequest(identifier, m_responseText); -#if ENABLE(INSPECTOR) - scriptExecutionContext()->addMessage(InspectorControllerDestination, JSMessageSource, LogMessageType, LogMessageLevel, "XHR finished loading: \"" + m_url + "\".", m_lastSendLineNumber, m_lastSendURL); -#endif - - bool hadLoader = m_loader; - m_loader = 0; - - changeState(DONE); - m_decoder = 0; - - if (hadLoader) - dropProtection(); -} - -void XMLHttpRequest::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) -{ - if (!m_upload) - return; - - if (m_uploadEventsAllowed) - m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().progressEvent, true, static_cast<unsigned>(bytesSent), static_cast<unsigned>(totalBytesToBeSent))); - - if (bytesSent == totalBytesToBeSent && !m_uploadComplete) { - m_uploadComplete = true; - if (m_uploadEventsAllowed) - m_upload->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().loadEvent)); - } -} - -void XMLHttpRequest::didReceiveResponse(const ResourceResponse& response) -{ - m_response = response; - m_responseEncoding = extractCharsetFromMediaType(m_mimeTypeOverride); - if (m_responseEncoding.isEmpty()) - m_responseEncoding = response.textEncodingName(); -} - -void XMLHttpRequest::didReceiveAuthenticationCancellation(const ResourceResponse& failureResponse) -{ - m_response = failureResponse; -} - -void XMLHttpRequest::didReceiveData(const char* data, int len) -{ - if (m_error) - return; - - if (m_state < HEADERS_RECEIVED) - changeState(HEADERS_RECEIVED); - - if (!m_decoder) { - if (!m_responseEncoding.isEmpty()) - m_decoder = TextResourceDecoder::create("text/plain", m_responseEncoding); - // allow TextResourceDecoder to look inside the m_response if it's XML or HTML - else if (responseIsXML()) { - m_decoder = TextResourceDecoder::create("application/xml"); - // Don't stop on encoding errors, unlike it is done for other kinds of XML resources. This matches the behavior of previous WebKit versions, Firefox and Opera. - m_decoder->useLenientXMLDecoding(); - } else if (responseMIMEType() == "text/html") - m_decoder = TextResourceDecoder::create("text/html", "UTF-8"); - else - m_decoder = TextResourceDecoder::create("text/plain", "UTF-8"); - } - - if (!len) - return; - - if (len == -1) - len = strlen(data); - - m_responseText += m_decoder->decode(data, len); - - if (!m_error) { - long long expectedLength = m_response.expectedContentLength(); - m_receivedLength += len; - - bool lengthComputable = expectedLength && m_receivedLength <= expectedLength; - m_progressEventThrottle.dispatchProgressEvent(lengthComputable, static_cast<unsigned>(m_receivedLength), static_cast<unsigned>(expectedLength)); - - if (m_state != LOADING) - changeState(LOADING); - else - // Firefox calls readyStateChanged every time it receives data, 4449442 - callReadyStateChangeListener(); - } -} - -bool XMLHttpRequest::canSuspend() const -{ - return !m_loader; -} - -void XMLHttpRequest::suspend() -{ - m_progressEventThrottle.suspend(); -} - -void XMLHttpRequest::resume() -{ - m_progressEventThrottle.resume(); -} - -void XMLHttpRequest::stop() -{ - internalAbort(); -} - -void XMLHttpRequest::contextDestroyed() -{ - ASSERT(!m_loader); - ActiveDOMObject::contextDestroyed(); -} - -ScriptExecutionContext* XMLHttpRequest::scriptExecutionContext() const -{ - return ActiveDOMObject::scriptExecutionContext(); -} - -EventTargetData* XMLHttpRequest::eventTargetData() -{ - return &m_eventTargetData; -} - -EventTargetData* XMLHttpRequest::ensureEventTargetData() -{ - return &m_eventTargetData; -} - -} // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.h b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.h deleted file mode 100644 index ca308cc..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. - * Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@nypop.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef XMLHttpRequest_h -#define XMLHttpRequest_h - -#include "ActiveDOMObject.h" -#include "AtomicStringHash.h" -#include "EventListener.h" -#include "EventNames.h" -#include "EventTarget.h" -#include "FormData.h" -#include "ResourceResponse.h" -#include "ScriptString.h" -#include "ThreadableLoaderClient.h" -#include "XMLHttpRequestProgressEventThrottle.h" -#include <wtf/OwnPtr.h> - -namespace WebCore { - -class Blob; -class Document; -class DOMFormData; -class ResourceRequest; -class TextResourceDecoder; -class ThreadableLoader; - -class XMLHttpRequest : public RefCounted<XMLHttpRequest>, public EventTarget, private ThreadableLoaderClient, public ActiveDOMObject { -public: - static PassRefPtr<XMLHttpRequest> create(ScriptExecutionContext* context) { return adoptRef(new XMLHttpRequest(context)); } - ~XMLHttpRequest(); - - // These exact numeric values are important because JS expects them. - enum State { - UNSENT = 0, - OPENED = 1, - HEADERS_RECEIVED = 2, - LOADING = 3, - DONE = 4 - }; - - virtual XMLHttpRequest* toXMLHttpRequest() { return this; } - - virtual void contextDestroyed(); - virtual bool canSuspend() const; - virtual void suspend(); - virtual void resume(); - virtual void stop(); - - virtual ScriptExecutionContext* scriptExecutionContext() const; - - String statusText(ExceptionCode&) const; - int status(ExceptionCode&) const; - State readyState() const; - bool withCredentials() const { return m_includeCredentials; } - void setWithCredentials(bool, ExceptionCode&); - void open(const String& method, const KURL&, ExceptionCode&); - void open(const String& method, const KURL&, bool async, ExceptionCode&); - void open(const String& method, const KURL&, bool async, const String& user, ExceptionCode&); - void open(const String& method, const KURL&, bool async, const String& user, const String& password, ExceptionCode&); - void send(ExceptionCode&); - void send(Document*, ExceptionCode&); - void send(const String&, ExceptionCode&); - void send(Blob*, ExceptionCode&); - void send(DOMFormData*, ExceptionCode&); - void abort(); - void setRequestHeader(const AtomicString& name, const String& value, ExceptionCode&); - void overrideMimeType(const String& override); - String getAllResponseHeaders(ExceptionCode&) const; - String getResponseHeader(const AtomicString& name, ExceptionCode&) const; - const ScriptString& responseText() const; - Document* responseXML() const; - void setLastSendLineNumber(unsigned lineNumber) { m_lastSendLineNumber = lineNumber; } - void setLastSendURL(const String& url) { m_lastSendURL = url; } - - XMLHttpRequestUpload* upload(); - XMLHttpRequestUpload* optionalUpload() const { return m_upload.get(); } - - DEFINE_ATTRIBUTE_EVENT_LISTENER(readystatechange); - DEFINE_ATTRIBUTE_EVENT_LISTENER(abort); - DEFINE_ATTRIBUTE_EVENT_LISTENER(error); - DEFINE_ATTRIBUTE_EVENT_LISTENER(load); - DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart); - DEFINE_ATTRIBUTE_EVENT_LISTENER(progress); - - using RefCounted<XMLHttpRequest>::ref; - using RefCounted<XMLHttpRequest>::deref; - -private: - XMLHttpRequest(ScriptExecutionContext*); - - virtual void refEventTarget() { ref(); } - virtual void derefEventTarget() { deref(); } - virtual EventTargetData* eventTargetData(); - virtual EventTargetData* ensureEventTargetData(); - - Document* document() const; - -#if ENABLE(DASHBOARD_SUPPORT) - bool usesDashboardBackwardCompatibilityMode() const; -#endif - - virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent); - virtual void didReceiveResponse(const ResourceResponse&); - virtual void didReceiveData(const char* data, int lengthReceived); - virtual void didFinishLoading(unsigned long identifier); - virtual void didFail(const ResourceError&); - virtual void didFailRedirectCheck(); - virtual void didReceiveAuthenticationCancellation(const ResourceResponse&); - - String responseMIMEType() const; - bool responseIsXML() const; - - bool initSend(ExceptionCode&); - - String getRequestHeader(const AtomicString& name) const; - void setRequestHeaderInternal(const AtomicString& name, const String& value); - bool isSafeRequestHeader(const String&) const; - - void changeState(State newState); - void callReadyStateChangeListener(); - void dropProtection(); - void internalAbort(); - void clearResponse(); - void clearRequest(); - - void createRequest(ExceptionCode&); - - void genericError(); - void networkError(); - void abortError(); - - RefPtr<XMLHttpRequestUpload> m_upload; - - KURL m_url; - String m_method; - HTTPHeaderMap m_requestHeaders; - RefPtr<FormData> m_requestEntityBody; - String m_mimeTypeOverride; - bool m_async; - bool m_includeCredentials; - - RefPtr<ThreadableLoader> m_loader; - State m_state; - - ResourceResponse m_response; - String m_responseEncoding; - - RefPtr<TextResourceDecoder> m_decoder; - - // Unlike most strings in the DOM, we keep this as a ScriptString, not a WebCore::String. - // That's because these strings can easily get huge (they are filled from the network with - // no parsing) and because JS can easily observe many intermediate states, so it's very useful - // to be able to share the buffer with JavaScript versions of the whole or partial string. - // In contrast, this string doesn't interact much with the rest of the engine so it's not that - // big a cost that it isn't a String. - ScriptString m_responseText; - mutable bool m_createdDocument; - mutable RefPtr<Document> m_responseXML; - - bool m_error; - - bool m_uploadEventsAllowed; - bool m_uploadComplete; - - bool m_sameOriginRequest; - bool m_didTellLoaderAboutRequest; - - // Used for onprogress tracking - long long m_receivedLength; - - unsigned m_lastSendLineNumber; - String m_lastSendURL; - ExceptionCode m_exceptionCode; - - EventTargetData m_eventTargetData; - - XMLHttpRequestProgressEventThrottle m_progressEventThrottle; -}; - -} // namespace WebCore - -#endif // XMLHttpRequest_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.idl b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.idl deleted file mode 100644 index 5a86fe5..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.idl +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -module xml { - - interface [ - CustomConstructor, - CustomMarkFunction, - EventTarget, - NoStaticTables - ] XMLHttpRequest { - // From XMLHttpRequestEventTarget - // event handler attributes - attribute EventListener onabort; - attribute EventListener onerror; - attribute EventListener onload; - attribute EventListener onloadstart; - attribute EventListener onprogress; - - // event handler attributes - attribute EventListener onreadystatechange; - - // state - const unsigned short UNSENT = 0; - const unsigned short OPENED = 1; - const unsigned short HEADERS_RECEIVED = 2; - const unsigned short LOADING = 3; - const unsigned short DONE = 4; - - readonly attribute unsigned short readyState; - - // request - attribute boolean withCredentials - setter raises(DOMException); - // void open(in DOMString method, in DOMString url); - // void open(in DOMString method, in DOMString url, in boolean async); - // void open(in DOMString method, in DOMString url, in boolean async, in DOMString user); - [Custom] void open(in DOMString method, in DOMString url, in boolean async, in DOMString user, in DOMString password) - raises(DOMException); - - [Custom] void setRequestHeader(in DOMString header, in DOMString value) - raises(DOMException); - - // void send(); - // void send(in DOMString data); - [Custom] void send(in Document data) - raises(DOMException); - - void abort(); - - readonly attribute XMLHttpRequestUpload upload; - - // response - [ConvertNullStringTo=Undefined] DOMString getAllResponseHeaders() - raises(DOMException); - [Custom, ConvertNullStringTo=Null] DOMString getResponseHeader(in DOMString header) - raises(DOMException); - readonly attribute [CustomGetter] DOMString responseText; // The custom getter implements ConvertNullStringTo=Null - readonly attribute Document responseXML; - readonly attribute unsigned short status - getter raises(DOMException); - readonly attribute DOMString statusText - getter raises(DOMException); - - // Extension - [Custom] void overrideMimeType(in DOMString override); - - // EventTarget interface - [JSCCustom] void addEventListener(in DOMString type, - in EventListener listener, - in boolean useCapture); - [JSCCustom] void removeEventListener(in DOMString type, - in EventListener listener, - in boolean useCapture); - boolean dispatchEvent(in Event evt) - raises(EventException); - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.h b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.h deleted file mode 100644 index 737cab0..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XMLHttpRequestException_h -#define XMLHttpRequestException_h - -#include "ExceptionBase.h" - -namespace WebCore { - - class XMLHttpRequestException : public ExceptionBase { - public: - static PassRefPtr<XMLHttpRequestException> create(const ExceptionCodeDescription& description) - { - return adoptRef(new XMLHttpRequestException(description)); - } - - static const int XMLHttpRequestExceptionOffset = 500; - static const int XMLHttpRequestExceptionMax = 699; - - enum XMLHttpRequestExceptionCode { - NETWORK_ERR = XMLHttpRequestExceptionOffset + 101, - ABORT_ERR - }; - - private: - XMLHttpRequestException(const ExceptionCodeDescription& description) - : ExceptionBase(description) - { - } - }; - -} // namespace WebCore - -#endif // XMLHttpRequestException_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.idl b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.idl deleted file mode 100644 index 7121468..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.idl +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -module xml { - - interface [ - NoStaticTables - ] XMLHttpRequestException { - - readonly attribute unsigned short code; - readonly attribute DOMString name; - readonly attribute DOMString message; - -#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT - // Override in a Mozilla compatible format - [DontEnum] DOMString toString(); -#endif - - // XMLHttpRequestExceptionCode - const unsigned short NETWORK_ERR = 101; - const unsigned short ABORT_ERR = 102; - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.h b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.h deleted file mode 100644 index 27f3b8c..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All rights reserved. - * Copyright (C) 2008 Julien Chaffraix <jchaffraix@webkit.org>. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XMLHttpRequestProgressEvent_h -#define XMLHttpRequestProgressEvent_h - -#include "ProgressEvent.h" - -namespace WebCore { - - class XMLHttpRequestProgressEvent : public ProgressEvent { - public: - static PassRefPtr<XMLHttpRequestProgressEvent> create() - { - return adoptRef(new XMLHttpRequestProgressEvent); - } - static PassRefPtr<XMLHttpRequestProgressEvent> create(const AtomicString& type, bool lengthComputable = false, unsigned loaded = 0, unsigned total = 0) - { - return adoptRef(new XMLHttpRequestProgressEvent(type, lengthComputable, loaded, total)); - } - - virtual bool isXMLHttpRequestProgressEvent() const { return true; } - - // Those 2 methods are to be compatible with Firefox and are only a wrapper on top of the real implementation. - unsigned position() const { return loaded(); } - unsigned totalSize() const { return total(); } - - private: - XMLHttpRequestProgressEvent() { } - XMLHttpRequestProgressEvent(const AtomicString& type, bool lengthComputable, unsigned loaded, unsigned total) - : ProgressEvent(type, lengthComputable, loaded, total) - { - } - }; - -} // namespace WebCore - -#endif // XMLHttpRequestProgressEvent_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.idl b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.idl deleted file mode 100644 index bc5055a..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.idl +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -module events { - - interface [ - NoStaticTables - // We should also inherit from LSProgressEvent when the idl is added. - ] XMLHttpRequestProgressEvent : ProgressEvent { - readonly attribute unsigned long position; - readonly attribute unsigned long totalSize; - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp deleted file mode 100644 index 0eb6398..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2010 Julien Chaffraix <jchaffraix@webkit.org> - * All right reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XMLHttpRequestProgressEventThrottle.h" - -#include "EventTarget.h" -#include "XMLHttpRequestProgressEvent.h" - -namespace WebCore { - -const double XMLHttpRequestProgressEventThrottle::minimumProgressEventDispatchingIntervalInSeconds = .05; // 50 ms per specification. - -XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle(EventTarget* target) - : m_target(target) - , m_loaded(0) - , m_total(0) - , m_suspended(false) -{ - ASSERT(target); -} - -XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle() -{ -} - -void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(bool lengthComputable, unsigned loaded, unsigned total) -{ - ASSERT(!suspended()); - if (!isActive()) { - // The timer is not active so the least frequent event for now is every byte. - // Just go ahead and dispatch the event. - - // We should not have any pending loaded & total information from a previous run. - ASSERT(!m_loaded); - ASSERT(!m_total); - - dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().progressEvent, lengthComputable, loaded, total)); - startRepeating(minimumProgressEventDispatchingIntervalInSeconds); - return; - } - - // The timer is already active so minimumProgressEventDispatchingIntervalInSeconds is the least frequent event. - m_lengthComputable = lengthComputable; - m_loaded = loaded; - m_total = total; -} - -void XMLHttpRequestProgressEventThrottle::dispatchEvent(PassRefPtr<Event> event, ProgressEventAction progressEventAction) -{ - ASSERT(!suspended()); - // We should not have any pending events from a previous resume. - ASSERT(!m_pausedEvent); - - if (progressEventAction == FlushProgressEvent) - flushProgressEvent(); - - m_target->dispatchEvent(event); -} - -void XMLHttpRequestProgressEventThrottle::flushProgressEvent() -{ - if (!hasEventToDispatch()) - return; - - PassRefPtr<Event> event = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, m_lengthComputable, m_loaded, m_total); - m_loaded = 0; - m_total = 0; - - // We stop the timer as this is called when no more events are supposed to occur. - stop(); - - m_target->dispatchEvent(event); -} - -void XMLHttpRequestProgressEventThrottle::dispatchPausedEvent() -{ - ASSERT(!suspended()); - if (!m_pausedEvent) - return; - - m_target->dispatchEvent(m_pausedEvent); - m_pausedEvent = 0; -} - -void XMLHttpRequestProgressEventThrottle::fired() -{ - ASSERT(isActive()); - ASSERT(!suspended()); - ASSERT(!m_pausedEvent); - if (!hasEventToDispatch()) { - // No progress event was queued since the previous dispatch, we can safely stop the timer. - stop(); - return; - } - - m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().progressEvent, m_lengthComputable, m_loaded, m_total)); - m_total = 0; - m_loaded = 0; -} - -bool XMLHttpRequestProgressEventThrottle::hasEventToDispatch() const -{ - return (m_total || m_loaded) && isActive(); -} - -void XMLHttpRequestProgressEventThrottle::suspend() -{ - ASSERT(!m_pausedEvent); - - m_suspended = true; - // If we have a progress event waiting to be dispatched, - // just queue it. - if (hasEventToDispatch()) { - m_pausedEvent = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, m_lengthComputable, m_loaded, m_total); - m_total = 0; - m_loaded = 0; - } - stop(); -} - -void XMLHttpRequestProgressEventThrottle::resume() -{ - ASSERT(!m_loaded); - ASSERT(!m_total); - - m_suspended = false; - dispatchPausedEvent(); -} - -} // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEventThrottle.h b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEventThrottle.h deleted file mode 100644 index f51aea1..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEventThrottle.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2010 Julien Chaffraix <jchaffraix@webkit.org> - * All right reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XMLHttpRequestProgressEventThrottle_h -#define XMLHttpRequestProgressEventThrottle_h - -#include "Timer.h" -#include "wtf/PassRefPtr.h" -#include "wtf/Vector.h" - -namespace WebCore { - -class Event; -class EventTarget; - -enum ProgressEventAction { - DoNotFlushProgressEvent, - FlushProgressEvent -}; - -// This implements the XHR2 progress event dispatching: "dispatch a progress event called progress -// about every 50ms or for every byte received, whichever is least frequent". -class XMLHttpRequestProgressEventThrottle : public TimerBase { -public: - XMLHttpRequestProgressEventThrottle(EventTarget*); - virtual ~XMLHttpRequestProgressEventThrottle(); - - void dispatchProgressEvent(bool lengthComputable, unsigned loaded, unsigned total); - void dispatchEvent(PassRefPtr<Event>, ProgressEventAction = DoNotFlushProgressEvent); - - void suspend(); - void resume(); - - bool suspended() const { return m_suspended; } - -private: - static const double minimumProgressEventDispatchingIntervalInSeconds; - - virtual void fired(); - void dispatchPausedEvent(); - void flushProgressEvent(); - - bool hasEventToDispatch() const; - - // Weak pointer to our XMLHttpRequest object as it is the one holding us. - EventTarget* m_target; - - bool m_lengthComputable; - unsigned m_loaded; - unsigned m_total; - - bool m_suspended; - RefPtr<Event> m_pausedEvent; -}; - -} // namespace WebCore - -#endif // XMLHttpRequestProgressEventThrottle_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.cpp b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.cpp deleted file mode 100644 index 9d0fafc..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XMLHttpRequestUpload.h" - -#include "AtomicString.h" -#include "Event.h" -#include "EventException.h" -#include "EventNames.h" -#include "XMLHttpRequest.h" -#include "XMLHttpRequestProgressEvent.h" -#include <wtf/Assertions.h> - -namespace WebCore { - -XMLHttpRequestUpload::XMLHttpRequestUpload(XMLHttpRequest* xmlHttpRequest) - : m_xmlHttpRequest(xmlHttpRequest) -{ -} - -ScriptExecutionContext* XMLHttpRequestUpload::scriptExecutionContext() const -{ - XMLHttpRequest* xmlHttpRequest = associatedXMLHttpRequest(); - if (!xmlHttpRequest) - return 0; - return xmlHttpRequest->scriptExecutionContext(); -} - -EventTargetData* XMLHttpRequestUpload::eventTargetData() -{ - return &m_eventTargetData; -} - -EventTargetData* XMLHttpRequestUpload::ensureEventTargetData() -{ - return &m_eventTargetData; -} - -} // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.h b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.h deleted file mode 100644 index 7640643..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XMLHttpRequestUpload_h -#define XMLHttpRequestUpload_h - -#include "AtomicStringHash.h" -#include "EventListener.h" -#include "EventNames.h" -#include "EventTarget.h" -#include <wtf/HashMap.h> -#include <wtf/RefCounted.h> -#include <wtf/RefPtr.h> -#include <wtf/PassRefPtr.h> -#include <wtf/Vector.h> - -namespace WebCore { - - class AtomicStringImpl; - class ScriptExecutionContext; - class XMLHttpRequest; - - class XMLHttpRequestUpload : public RefCounted<XMLHttpRequestUpload>, public EventTarget { - public: - static PassRefPtr<XMLHttpRequestUpload> create(XMLHttpRequest* xmlHttpRequest) - { - return adoptRef(new XMLHttpRequestUpload(xmlHttpRequest)); - } - - virtual XMLHttpRequestUpload* toXMLHttpRequestUpload() { return this; } - - XMLHttpRequest* associatedXMLHttpRequest() const { return m_xmlHttpRequest; } - void disconnectXMLHttpRequest() { m_xmlHttpRequest = 0; } - - ScriptExecutionContext* scriptExecutionContext() const; - - DEFINE_ATTRIBUTE_EVENT_LISTENER(abort); - DEFINE_ATTRIBUTE_EVENT_LISTENER(error); - DEFINE_ATTRIBUTE_EVENT_LISTENER(load); - DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart); - DEFINE_ATTRIBUTE_EVENT_LISTENER(progress); - - using RefCounted<XMLHttpRequestUpload>::ref; - using RefCounted<XMLHttpRequestUpload>::deref; - - private: - XMLHttpRequestUpload(XMLHttpRequest*); - - virtual void refEventTarget() { ref(); } - virtual void derefEventTarget() { deref(); } - virtual EventTargetData* eventTargetData(); - virtual EventTargetData* ensureEventTargetData(); - - XMLHttpRequest* m_xmlHttpRequest; - EventTargetData m_eventTargetData; - }; - -} // namespace WebCore - -#endif // XMLHttpRequestUpload_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.idl b/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.idl deleted file mode 100644 index a712a37..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.idl +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -module xml { - - interface [ - CustomMarkFunction, - EventTarget, - NoStaticTables - ] XMLHttpRequestUpload { - // From XMLHttpRequestEventTarget - // event handler attributes - attribute EventListener onabort; - attribute EventListener onerror; - attribute EventListener onload; - attribute EventListener onloadstart; - attribute EventListener onprogress; - - // EventTarget interface - [JSCCustom] void addEventListener(in DOMString type, - in EventListener listener, - in boolean useCapture); - [JSCCustom] void removeEventListener(in DOMString type, - in EventListener listener, - in boolean useCapture); - boolean dispatchEvent(in Event evt) - raises(EventException); - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XMLSerializer.cpp b/src/3rdparty/webkit/WebCore/xml/XMLSerializer.cpp deleted file mode 100644 index 7b49897..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLSerializer.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2003, 2006 Apple Inc. All rights reserved. - * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" -#include "XMLSerializer.h" - -#include "Document.h" -#include "ExceptionCode.h" -#include "markup.h" - -namespace WebCore { - -String XMLSerializer::serializeToString(Node* node, ExceptionCode& ec) -{ - if (!node) - return String(); - - if (!node->document()) { - // Due to the fact that DocumentType nodes are created by the DOMImplementation - // and not the Document, it is possible for it to not have a Document associated - // with it. It should be the only type of node where this is possible. - ASSERT(node->nodeType() == Node::DOCUMENT_TYPE_NODE); - - ec = INVALID_ACCESS_ERR; - return String(); - } - - return createMarkup(node); -} - -} // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/xml/XMLSerializer.h b/src/3rdparty/webkit/WebCore/xml/XMLSerializer.h deleted file mode 100644 index 33e94b7..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLSerializer.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2003, 2006 Apple Computer, Inc. - * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef XMLSerializer_h -#define XMLSerializer_h - -#include <wtf/RefCounted.h> -#include "PlatformString.h" - -namespace WebCore { - - typedef int ExceptionCode; - - class Node; - - class XMLSerializer : public RefCounted<XMLSerializer> { - public: - static PassRefPtr<XMLSerializer> create() { return adoptRef(new XMLSerializer); } - - String serializeToString(Node*, ExceptionCode&); - - private: - XMLSerializer() { } - }; - -} // namespace WebCore - -#endif // XMLSerializer_h diff --git a/src/3rdparty/webkit/WebCore/xml/XMLSerializer.idl b/src/3rdparty/webkit/WebCore/xml/XMLSerializer.idl deleted file mode 100644 index 8c59446..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XMLSerializer.idl +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2006 Apple Computer, Inc. - * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -module xpath { - - interface [CanBeConstructed] XMLSerializer { - DOMString serializeToString(in Node node) - raises(DOMException); - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.cpp b/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.cpp deleted file mode 100644 index 8fb203f..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathEvaluator.h" - -#if ENABLE(XPATH) - -#include "ExceptionCode.h" -#include "NativeXPathNSResolver.h" -#include "Node.h" -#include "XPathExpression.h" -#include "XPathResult.h" -#include "XPathUtil.h" - -namespace WebCore { - -using namespace XPath; - -PassRefPtr<XPathExpression> XPathEvaluator::createExpression(const String& expression, - XPathNSResolver* resolver, - ExceptionCode& ec) -{ - return XPathExpression::createExpression(expression, resolver, ec); -} - -PassRefPtr<XPathNSResolver> XPathEvaluator::createNSResolver(Node* nodeResolver) -{ - return NativeXPathNSResolver::create(nodeResolver); -} - -PassRefPtr<XPathResult> XPathEvaluator::evaluate(const String& expression, - Node* contextNode, - XPathNSResolver* resolver, - unsigned short type, - XPathResult* result, - ExceptionCode& ec) -{ - if (!isValidContextNode(contextNode)) { - ec = NOT_SUPPORTED_ERR; - return 0; - } - - ec = 0; - RefPtr<XPathExpression> expr = createExpression(expression, resolver, ec); - if (ec) - return 0; - - return expr->evaluate(contextNode, type, result, ec); -} - -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.h b/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.h deleted file mode 100644 index c8e456e..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathEvaluator_h -#define XPathEvaluator_h - -#if ENABLE(XPATH) - -#include <wtf/RefCounted.h> -#include <wtf/PassRefPtr.h> - -namespace WebCore { - - typedef int ExceptionCode; - - class Node; - class String; - class XPathExpression; - class XPathNSResolver; - class XPathResult; - - class XPathEvaluator : public RefCounted<XPathEvaluator> { - public: - static PassRefPtr<XPathEvaluator> create() { return adoptRef(new XPathEvaluator); } - - PassRefPtr<XPathExpression> createExpression(const String& expression, XPathNSResolver*, ExceptionCode&); - PassRefPtr<XPathNSResolver> createNSResolver(Node* nodeResolver); - PassRefPtr<XPathResult> evaluate(const String& expression, Node* contextNode, - XPathNSResolver*, unsigned short type, XPathResult*, ExceptionCode&); - - private: - XPathEvaluator() { } - }; - -} - -#endif // ENABLE(XPATH) - -#endif // XPathEvaluator_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.idl b/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.idl deleted file mode 100644 index c075b01..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathEvaluator.idl +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2006 Apple Computer, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -module xpath { - interface [CanBeConstructed, Conditional=XPATH] XPathEvaluator { - XPathExpression createExpression(in DOMString expression, - in XPathNSResolver resolver) - raises(core::DOMException); - - XPathNSResolver createNSResolver(in Node nodeResolver); - - XPathResult evaluate(in DOMString expression, - in Node contextNode, - in XPathNSResolver resolver, - in unsigned short type, - in XPathResult inResult) - raises(DOMException); - }; -} diff --git a/src/3rdparty/webkit/WebCore/xml/XPathException.h b/src/3rdparty/webkit/WebCore/xml/XPathException.h deleted file mode 100644 index 45ad628..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathException.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathException_h -#define XPathException_h - -#include "ExceptionBase.h" - -#if ENABLE(XPATH) - -namespace WebCore { - - class XPathException : public ExceptionBase { - public: - static PassRefPtr<XPathException> create(const ExceptionCodeDescription& description) - { - return adoptRef(new XPathException(description)); - } - - static const int XPathExceptionOffset = 400; - static const int XPathExceptionMax = 499; - - enum XPathExceptionCode { - INVALID_EXPRESSION_ERR = XPathExceptionOffset + 51, - TYPE_ERR - }; - - private: - XPathException(const ExceptionCodeDescription& description) - : ExceptionBase(description) - { - } - }; - -} // namespace WebCore - -#endif // ENABLE(XPATH) - -#endif // XPathException_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathException.idl b/src/3rdparty/webkit/WebCore/xml/XPathException.idl deleted file mode 100644 index d5a9af6..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathException.idl +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -module xpath { - - interface [ - Conditional=XPATH - ] XPathException { - - readonly attribute unsigned short code; - readonly attribute DOMString name; - readonly attribute DOMString message; - -#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT - // Override in a Mozilla compatible format - [DontEnum] DOMString toString(); -#endif - - // XPathExceptionCode - const unsigned short INVALID_EXPRESSION_ERR = 51; - const unsigned short TYPE_ERR = 52; - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XPathExpression.cpp b/src/3rdparty/webkit/WebCore/xml/XPathExpression.cpp deleted file mode 100644 index 6188426..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathExpression.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathExpression.h" - -#if ENABLE(XPATH) - -#include "Document.h" -#include "PlatformString.h" -#include "XPathException.h" -#include "XPathExpressionNode.h" -#include "XPathNSResolver.h" -#include "XPathParser.h" -#include "XPathResult.h" -#include "XPathUtil.h" - -namespace WebCore { - -using namespace XPath; - -PassRefPtr<XPathExpression> XPathExpression::createExpression(const String& expression, XPathNSResolver* resolver, ExceptionCode& ec) -{ - RefPtr<XPathExpression> expr = XPathExpression::create(); - Parser parser; - - expr->m_topExpression = parser.parseStatement(expression, resolver, ec); - if (!expr->m_topExpression) - return 0; - - return expr.release(); -} - -XPathExpression::~XPathExpression() -{ - delete m_topExpression; -} - -PassRefPtr<XPathResult> XPathExpression::evaluate(Node* contextNode, unsigned short type, XPathResult*, ExceptionCode& ec) -{ - if (!isValidContextNode(contextNode)) { - ec = NOT_SUPPORTED_ERR; - return 0; - } - - EvaluationContext& evaluationContext = Expression::evaluationContext(); - evaluationContext.node = contextNode; - evaluationContext.size = 1; - evaluationContext.position = 1; - evaluationContext.hadTypeConversionError = false; - RefPtr<XPathResult> result = XPathResult::create(contextNode->document(), m_topExpression->evaluate()); - evaluationContext.node = 0; // Do not hold a reference to the context node, as this may prevent the whole document from being destroyed in time. - - if (evaluationContext.hadTypeConversionError) { - // It is not specified what to do if type conversion fails while evaluating an expression, and INVALID_EXPRESSION_ERR is not exactly right - // when the failure happens in an otherwise valid expression because of a variable. But XPathEvaluator does not support variables, so it's close enough. - ec = XPathException::INVALID_EXPRESSION_ERR; - return 0; - } - - if (type != XPathResult::ANY_TYPE) { - ec = 0; - result->convertTo(type, ec); - if (ec) - return 0; - } - - return result; -} - -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathExpression.h b/src/3rdparty/webkit/WebCore/xml/XPathExpression.h deleted file mode 100644 index a2b75d7..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathExpression.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathExpression_h -#define XPathExpression_h - -#if ENABLE(XPATH) - -#include <wtf/RefCounted.h> -#include <wtf/PassRefPtr.h> - -namespace WebCore { - - typedef int ExceptionCode; - - class Node; - class String; - class XPathNSResolver; - class XPathResult; - - namespace XPath { - class Expression; - } - - class XPathExpression : public RefCounted<XPathExpression> { - public: - static PassRefPtr<XPathExpression> create() { return adoptRef(new XPathExpression); } - ~XPathExpression(); - - static PassRefPtr<XPathExpression> createExpression(const String& expression, XPathNSResolver*, ExceptionCode&); - PassRefPtr<XPathResult> evaluate(Node* contextNode, unsigned short type, XPathResult*, ExceptionCode&); - - private: - XPathExpression() { } - - XPath::Expression* m_topExpression; - }; - -} - -#endif // ENABLE(XPATH) - -#endif // XPathExpression_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathExpression.idl b/src/3rdparty/webkit/WebCore/xml/XPathExpression.idl deleted file mode 100644 index 6b6ceeb..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathExpression.idl +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2006 Apple Computer, Inc. - * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -module xpath { - - - interface [ - Conditional=XPATH - ] XPathExpression { - [OldStyleObjC] XPathResult evaluate(in Node contextNode, - in unsigned short type, - in XPathResult inResult) - raises(DOMException); - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.cpp b/src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.cpp deleted file mode 100644 index 4656f8d..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathExpressionNode.h" - -#if ENABLE(XPATH) - -#include "Node.h" -#include <wtf/StdLibExtras.h> - -namespace WebCore { -namespace XPath { - -EvaluationContext& Expression::evaluationContext() -{ - DEFINE_STATIC_LOCAL(EvaluationContext, evaluationContext, ()); - return evaluationContext; -} - -Expression::Expression() - : m_isContextNodeSensitive(false) - , m_isContextPositionSensitive(false) - , m_isContextSizeSensitive(false) -{ -} - -Expression::~Expression() -{ - deleteAllValues(m_subExpressions); -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.h b/src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.h deleted file mode 100644 index 38070b9..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathExpressionNode_h -#define XPathExpressionNode_h - -#if ENABLE(XPATH) - -#include "StringHash.h" -#include "Node.h" -#include "XPathValue.h" -#include <wtf/HashMap.h> -#include <wtf/Vector.h> - -namespace WebCore { - - namespace XPath { - - struct EvaluationContext : FastAllocBase { - RefPtr<Node> node; - unsigned long size; - unsigned long position; - HashMap<String, String> variableBindings; - - bool hadTypeConversionError; - }; - - class ParseNode { - public: - virtual ~ParseNode() { } - }; - - class Expression : public ParseNode, public Noncopyable { - public: - static EvaluationContext& evaluationContext(); - - Expression(); - virtual ~Expression(); - - virtual Value evaluate() const = 0; - - void addSubExpression(Expression* expr) - { - m_subExpressions.append(expr); - m_isContextNodeSensitive |= expr->m_isContextNodeSensitive; - m_isContextPositionSensitive |= expr->m_isContextPositionSensitive; - m_isContextSizeSensitive |= expr->m_isContextSizeSensitive; - } - - bool isContextNodeSensitive() const { return m_isContextNodeSensitive; } - bool isContextPositionSensitive() const { return m_isContextPositionSensitive; } - bool isContextSizeSensitive() const { return m_isContextSizeSensitive; } - void setIsContextNodeSensitive(bool value) { m_isContextNodeSensitive = value; } - void setIsContextPositionSensitive(bool value) { m_isContextPositionSensitive = value; } - void setIsContextSizeSensitive(bool value) { m_isContextSizeSensitive = value; } - - virtual Value::Type resultType() const = 0; - - protected: - unsigned subExprCount() const { return m_subExpressions.size(); } - Expression* subExpr(unsigned i) { return m_subExpressions[i]; } - const Expression* subExpr(unsigned i) const { return m_subExpressions[i]; } - - private: - Vector<Expression*> m_subExpressions; - - // Evaluation details that can be used for optimization. - bool m_isContextNodeSensitive; - bool m_isContextPositionSensitive; - bool m_isContextSizeSensitive; - }; - - } - -} - -#endif // ENABLE(XPATH) - -#endif // EXPRESSION_H - diff --git a/src/3rdparty/webkit/WebCore/xml/XPathFunctions.cpp b/src/3rdparty/webkit/WebCore/xml/XPathFunctions.cpp deleted file mode 100644 index 1089f7c..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathFunctions.cpp +++ /dev/null @@ -1,733 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathFunctions.h" - -#if ENABLE(XPATH) - -#include "Document.h" -#include "Element.h" -#include "NamedNodeMap.h" -#include "ProcessingInstruction.h" -#include "XMLNames.h" -#include "XPathUtil.h" -#include "XPathValue.h" -#include <wtf/MathExtras.h> - -namespace WebCore { -namespace XPath { - -static inline bool isWhitespace(UChar c) -{ - return c == ' ' || c == '\n' || c == '\r' || c == '\t'; -} - - -#define DEFINE_FUNCTION_CREATOR(Class) static Function* create##Class() { return new Class; } - -class Interval { -public: - static const int Inf = -1; - - Interval(); - Interval(int value); - Interval(int min, int max); - - bool contains(int value) const; - -private: - int m_min; - int m_max; -}; - -struct FunctionRec { - typedef Function *(*FactoryFn)(); - FactoryFn factoryFn; - Interval args; -}; - -static HashMap<String, FunctionRec>* functionMap; - -class FunLast : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -public: - FunLast() { setIsContextSizeSensitive(true); } -}; - -class FunPosition : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -public: - FunPosition() { setIsContextPositionSensitive(true); } -}; - -class FunCount : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -}; - -class FunId : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NodeSetValue; } -}; - -class FunLocalName : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -public: - FunLocalName() { setIsContextNodeSensitive(true); } // local-name() with no arguments uses context node. -}; - -class FunNamespaceURI : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -public: - FunNamespaceURI() { setIsContextNodeSensitive(true); } // namespace-uri() with no arguments uses context node. -}; - -class FunName : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -public: - FunName() { setIsContextNodeSensitive(true); } // name() with no arguments uses context node. -}; - -class FunString : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -public: - FunString() { setIsContextNodeSensitive(true); } // string() with no arguments uses context node. -}; - -class FunConcat : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -}; - -class FunStartsWith : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -}; - -class FunContains : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -}; - -class FunSubstringBefore : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -}; - -class FunSubstringAfter : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -}; - -class FunSubstring : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -}; - -class FunStringLength : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -public: - FunStringLength() { setIsContextNodeSensitive(true); } // string-length() with no arguments uses context node. -}; - -class FunNormalizeSpace : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -public: - FunNormalizeSpace() { setIsContextNodeSensitive(true); } // normalize-space() with no arguments uses context node. -}; - -class FunTranslate : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } -}; - -class FunBoolean : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -}; - -class FunNot : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -}; - -class FunTrue : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -}; - -class FunFalse : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -}; - -class FunLang : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::BooleanValue; } -public: - FunLang() { setIsContextNodeSensitive(true); } // lang() always works on context node. -}; - -class FunNumber : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -public: - FunNumber() { setIsContextNodeSensitive(true); } // number() with no arguments uses context node. -}; - -class FunSum : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -}; - -class FunFloor : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -}; - -class FunCeiling : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -}; - -class FunRound : public Function { - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } -public: - static double round(double); -}; - -DEFINE_FUNCTION_CREATOR(FunLast) -DEFINE_FUNCTION_CREATOR(FunPosition) -DEFINE_FUNCTION_CREATOR(FunCount) -DEFINE_FUNCTION_CREATOR(FunId) -DEFINE_FUNCTION_CREATOR(FunLocalName) -DEFINE_FUNCTION_CREATOR(FunNamespaceURI) -DEFINE_FUNCTION_CREATOR(FunName) - -DEFINE_FUNCTION_CREATOR(FunString) -DEFINE_FUNCTION_CREATOR(FunConcat) -DEFINE_FUNCTION_CREATOR(FunStartsWith) -DEFINE_FUNCTION_CREATOR(FunContains) -DEFINE_FUNCTION_CREATOR(FunSubstringBefore) -DEFINE_FUNCTION_CREATOR(FunSubstringAfter) -DEFINE_FUNCTION_CREATOR(FunSubstring) -DEFINE_FUNCTION_CREATOR(FunStringLength) -DEFINE_FUNCTION_CREATOR(FunNormalizeSpace) -DEFINE_FUNCTION_CREATOR(FunTranslate) - -DEFINE_FUNCTION_CREATOR(FunBoolean) -DEFINE_FUNCTION_CREATOR(FunNot) -DEFINE_FUNCTION_CREATOR(FunTrue) -DEFINE_FUNCTION_CREATOR(FunFalse) -DEFINE_FUNCTION_CREATOR(FunLang) - -DEFINE_FUNCTION_CREATOR(FunNumber) -DEFINE_FUNCTION_CREATOR(FunSum) -DEFINE_FUNCTION_CREATOR(FunFloor) -DEFINE_FUNCTION_CREATOR(FunCeiling) -DEFINE_FUNCTION_CREATOR(FunRound) - -#undef DEFINE_FUNCTION_CREATOR - -inline Interval::Interval() - : m_min(Inf), m_max(Inf) -{ -} - -inline Interval::Interval(int value) - : m_min(value), m_max(value) -{ -} - -inline Interval::Interval(int min, int max) - : m_min(min), m_max(max) -{ -} - -inline bool Interval::contains(int value) const -{ - if (m_min == Inf && m_max == Inf) - return true; - - if (m_min == Inf) - return value <= m_max; - - if (m_max == Inf) - return value >= m_min; - - return value >= m_min && value <= m_max; -} - -void Function::setArguments(const Vector<Expression*>& args) -{ - ASSERT(!subExprCount()); - - // Some functions use context node as implicit argument, so when explicit arguments are added, they may no longer be context node sensitive. - if (m_name != "lang" && !args.isEmpty()) - setIsContextNodeSensitive(false); - - Vector<Expression*>::const_iterator end = args.end(); - for (Vector<Expression*>::const_iterator it = args.begin(); it != end; it++) - addSubExpression(*it); -} - -Value FunLast::evaluate() const -{ - return Expression::evaluationContext().size; -} - -Value FunPosition::evaluate() const -{ - return Expression::evaluationContext().position; -} - -Value FunId::evaluate() const -{ - Value a = arg(0)->evaluate(); - Vector<UChar> idList; // A whitespace-separated list of IDs - - if (a.isNodeSet()) { - const NodeSet& nodes = a.toNodeSet(); - for (size_t i = 0; i < nodes.size(); ++i) { - String str = stringValue(nodes[i]); - idList.append(str.characters(), str.length()); - idList.append(' '); - } - } else { - String str = a.toString(); - idList.append(str.characters(), str.length()); - } - - Document* contextDocument = evaluationContext().node->document(); - NodeSet result; - HashSet<Node*> resultSet; - - size_t startPos = 0; - size_t length = idList.size(); - while (true) { - while (startPos < length && isWhitespace(idList[startPos])) - ++startPos; - - if (startPos == length) - break; - - size_t endPos = startPos; - while (endPos < length && !isWhitespace(idList[endPos])) - ++endPos; - - // If there are several nodes with the same id, id() should return the first one. - // In WebKit, getElementById behaves so, too, although its behavior in this case is formally undefined. - Node* node = contextDocument->getElementById(String(&idList[startPos], endPos - startPos)); - if (node && resultSet.add(node).second) - result.append(node); - - startPos = endPos; - } - - result.markSorted(false); - - return Value(result, Value::adopt); -} - -static inline String expandedNameLocalPart(Node* node) -{ - // The local part of an XPath expanded-name matches DOM local name for most node types, except for namespace nodes and processing instruction nodes. - ASSERT(node->nodeType() != Node::XPATH_NAMESPACE_NODE); // Not supported yet. - if (node->nodeType() == Node::PROCESSING_INSTRUCTION_NODE) - return static_cast<ProcessingInstruction*>(node)->target(); - return node->localName().string(); -} - -static inline String expandedName(Node* node) -{ - const AtomicString& prefix = node->prefix(); - return prefix.isEmpty() ? expandedNameLocalPart(node) : prefix + ":" + expandedNameLocalPart(node); -} - -Value FunLocalName::evaluate() const -{ - if (argCount() > 0) { - Value a = arg(0)->evaluate(); - if (!a.isNodeSet()) - return ""; - - Node* node = a.toNodeSet().firstNode(); - return node ? expandedNameLocalPart(node) : ""; - } - - return expandedNameLocalPart(evaluationContext().node.get()); -} - -Value FunNamespaceURI::evaluate() const -{ - if (argCount() > 0) { - Value a = arg(0)->evaluate(); - if (!a.isNodeSet()) - return ""; - - Node* node = a.toNodeSet().firstNode(); - return node ? node->namespaceURI().string() : ""; - } - - return evaluationContext().node->namespaceURI().string(); -} - -Value FunName::evaluate() const -{ - if (argCount() > 0) { - Value a = arg(0)->evaluate(); - if (!a.isNodeSet()) - return ""; - - Node* node = a.toNodeSet().firstNode(); - return node ? expandedName(node) : ""; - } - - return expandedName(evaluationContext().node.get()); -} - -Value FunCount::evaluate() const -{ - Value a = arg(0)->evaluate(); - - return double(a.toNodeSet().size()); -} - -Value FunString::evaluate() const -{ - if (!argCount()) - return Value(Expression::evaluationContext().node.get()).toString(); - return arg(0)->evaluate().toString(); -} - -Value FunConcat::evaluate() const -{ - Vector<UChar, 1024> result; - - unsigned count = argCount(); - for (unsigned i = 0; i < count; ++i) { - String str(arg(i)->evaluate().toString()); - result.append(str.characters(), str.length()); - } - - return String(result.data(), result.size()); -} - -Value FunStartsWith::evaluate() const -{ - String s1 = arg(0)->evaluate().toString(); - String s2 = arg(1)->evaluate().toString(); - - if (s2.isEmpty()) - return true; - - return s1.startsWith(s2); -} - -Value FunContains::evaluate() const -{ - String s1 = arg(0)->evaluate().toString(); - String s2 = arg(1)->evaluate().toString(); - - if (s2.isEmpty()) - return true; - - return s1.contains(s2) != 0; -} - -Value FunSubstringBefore::evaluate() const -{ - String s1 = arg(0)->evaluate().toString(); - String s2 = arg(1)->evaluate().toString(); - - if (s2.isEmpty()) - return ""; - - int i = s1.find(s2); - - if (i == -1) - return ""; - - return s1.left(i); -} - -Value FunSubstringAfter::evaluate() const -{ - String s1 = arg(0)->evaluate().toString(); - String s2 = arg(1)->evaluate().toString(); - - int i = s1.find(s2); - if (i == -1) - return ""; - - return s1.substring(i + s2.length()); -} - -Value FunSubstring::evaluate() const -{ - String s = arg(0)->evaluate().toString(); - long pos = static_cast<long>(FunRound::round(arg(1)->evaluate().toNumber())); - bool haveLength = argCount() == 3; - long len = -1; - if (haveLength) { - double doubleLen = arg(2)->evaluate().toNumber(); - if (isnan(doubleLen)) - return ""; - len = static_cast<long>(FunRound::round(doubleLen)); - } - - if (pos > long(s.length())) - return ""; - - if (haveLength && pos < 1) { - len -= 1 - pos; - pos = 1; - if (len < 1) - return ""; - } - - return s.substring(pos - 1, len); -} - -Value FunStringLength::evaluate() const -{ - if (!argCount()) - return Value(Expression::evaluationContext().node.get()).toString().length(); - return arg(0)->evaluate().toString().length(); -} - -Value FunNormalizeSpace::evaluate() const -{ - if (!argCount()) { - String s = Value(Expression::evaluationContext().node.get()).toString(); - return s.simplifyWhiteSpace(); - } - - String s = arg(0)->evaluate().toString(); - return s.simplifyWhiteSpace(); -} - -Value FunTranslate::evaluate() const -{ - String s1 = arg(0)->evaluate().toString(); - String s2 = arg(1)->evaluate().toString(); - String s3 = arg(2)->evaluate().toString(); - String newString; - - // FIXME: Building a String a character at a time is quite slow. - for (unsigned i1 = 0; i1 < s1.length(); ++i1) { - UChar ch = s1[i1]; - int i2 = s2.find(ch); - - if (i2 == -1) - newString += String(&ch, 1); - else if ((unsigned)i2 < s3.length()) { - UChar c2 = s3[i2]; - newString += String(&c2, 1); - } - } - - return newString; -} - -Value FunBoolean::evaluate() const -{ - return arg(0)->evaluate().toBoolean(); -} - -Value FunNot::evaluate() const -{ - return !arg(0)->evaluate().toBoolean(); -} - -Value FunTrue::evaluate() const -{ - return true; -} - -Value FunLang::evaluate() const -{ - String lang = arg(0)->evaluate().toString(); - - Attribute* languageAttribute = 0; - Node* node = evaluationContext().node.get(); - while (node) { - NamedNodeMap* attrs = node->attributes(); - if (attrs) - languageAttribute = attrs->getAttributeItem(XMLNames::langAttr); - if (languageAttribute) - break; - node = node->parentNode(); - } - - if (!languageAttribute) - return false; - - String langValue = languageAttribute->value(); - while (true) { - if (equalIgnoringCase(langValue, lang)) - return true; - - // Remove suffixes one by one. - int index = langValue.reverseFind('-'); - if (index == -1) - break; - langValue = langValue.left(index); - } - - return false; -} - -Value FunFalse::evaluate() const -{ - return false; -} - -Value FunNumber::evaluate() const -{ - if (!argCount()) - return Value(Expression::evaluationContext().node.get()).toNumber(); - return arg(0)->evaluate().toNumber(); -} - -Value FunSum::evaluate() const -{ - Value a = arg(0)->evaluate(); - if (!a.isNodeSet()) - return 0.0; - - double sum = 0.0; - const NodeSet& nodes = a.toNodeSet(); - // To be really compliant, we should sort the node-set, as floating point addition is not associative. - // However, this is unlikely to ever become a practical issue, and sorting is slow. - - for (unsigned i = 0; i < nodes.size(); i++) - sum += Value(stringValue(nodes[i])).toNumber(); - - return sum; -} - -Value FunFloor::evaluate() const -{ - return floor(arg(0)->evaluate().toNumber()); -} - -Value FunCeiling::evaluate() const -{ - return ceil(arg(0)->evaluate().toNumber()); -} - -double FunRound::round(double val) -{ - if (!isnan(val) && !isinf(val)) { - if (signbit(val) && val >= -0.5) - val *= 0; // negative zero - else - val = floor(val + 0.5); - } - return val; -} - -Value FunRound::evaluate() const -{ - return round(arg(0)->evaluate().toNumber()); -} - -struct FunctionMapping { - const char* name; - FunctionRec function; -}; - -static void createFunctionMap() -{ - static const FunctionMapping functions[] = { - { "boolean", { &createFunBoolean, 1 } }, - { "ceiling", { &createFunCeiling, 1 } }, - { "concat", { &createFunConcat, Interval(2, Interval::Inf) } }, - { "contains", { &createFunContains, 2 } }, - { "count", { &createFunCount, 1 } }, - { "false", { &createFunFalse, 0 } }, - { "floor", { &createFunFloor, 1 } }, - { "id", { &createFunId, 1 } }, - { "lang", { &createFunLang, 1 } }, - { "last", { &createFunLast, 0 } }, - { "local-name", { &createFunLocalName, Interval(0, 1) } }, - { "name", { &createFunName, Interval(0, 1) } }, - { "namespace-uri", { &createFunNamespaceURI, Interval(0, 1) } }, - { "normalize-space", { &createFunNormalizeSpace, Interval(0, 1) } }, - { "not", { &createFunNot, 1 } }, - { "number", { &createFunNumber, Interval(0, 1) } }, - { "position", { &createFunPosition, 0 } }, - { "round", { &createFunRound, 1 } }, - { "starts-with", { &createFunStartsWith, 2 } }, - { "string", { &createFunString, Interval(0, 1) } }, - { "string-length", { &createFunStringLength, Interval(0, 1) } }, - { "substring", { &createFunSubstring, Interval(2, 3) } }, - { "substring-after", { &createFunSubstringAfter, 2 } }, - { "substring-before", { &createFunSubstringBefore, 2 } }, - { "sum", { &createFunSum, 1 } }, - { "translate", { &createFunTranslate, 3 } }, - { "true", { &createFunTrue, 0 } }, - }; - const unsigned int numFunctions = sizeof(functions) / sizeof(functions[0]); - - functionMap = new HashMap<String, FunctionRec>; - for (unsigned i = 0; i < numFunctions; ++i) - functionMap->set(functions[i].name, functions[i].function); -} - -Function* createFunction(const String& name, const Vector<Expression*>& args) -{ - if (!functionMap) - createFunctionMap(); - - HashMap<String, FunctionRec>::iterator functionMapIter = functionMap->find(name); - FunctionRec* functionRec = 0; - - if (functionMapIter == functionMap->end() || !(functionRec = &functionMapIter->second)->args.contains(args.size())) - return 0; - - Function* function = functionRec->factoryFn(); - function->setArguments(args); - function->setName(name); - return function; -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathFunctions.h b/src/3rdparty/webkit/WebCore/xml/XPathFunctions.h deleted file mode 100644 index 62d687f..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathFunctions.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathFunctions_h -#define XPathFunctions_h - -#if ENABLE(XPATH) - -#include "XPathExpressionNode.h" - -namespace WebCore { - - namespace XPath { - - class Function : public Expression { - public: - void setArguments(const Vector<Expression*>&); - void setName(const String& name) { m_name = name; } - protected: - Expression* arg(int pos) { return subExpr(pos); } - const Expression* arg(int pos) const { return subExpr(pos); } - unsigned int argCount() const { return subExprCount(); } - String name() const { return m_name; } - - private: - String m_name; - }; - - Function* createFunction(const String& name, const Vector<Expression*>& args = Vector<Expression*>()); - - } // namespace XPath - -} // namespace WebCore - -#endif // ENABLE(XPATH) - -#endif // XPathFunctions_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathGrammar.y b/src/3rdparty/webkit/WebCore/xml/XPathGrammar.y deleted file mode 100644 index 14e9fa3..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathGrammar.y +++ /dev/null @@ -1,558 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Inc. All rights reserved. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -%{ - -#include "config.h" - -#if ENABLE(XPATH) - -#include "XPathFunctions.h" -#include "XPathNSResolver.h" -#include "XPathParser.h" -#include "XPathPath.h" -#include "XPathPredicate.h" -#include "XPathVariableReference.h" -#include <wtf/FastMalloc.h> - -#define YYMALLOC fastMalloc -#define YYFREE fastFree - -#define YYENABLE_NLS 0 -#define YYLTYPE_IS_TRIVIAL 1 -#define YYDEBUG 0 -#define YYMAXDEPTH 10000 -#define YYPARSE_PARAM parserParameter -#define PARSER static_cast<Parser*>(parserParameter) - -using namespace WebCore; -using namespace XPath; - -%} - -%pure_parser - -%union -{ - Step::Axis axis; - Step::NodeTest* nodeTest; - NumericOp::Opcode numop; - EqTestOp::Opcode eqop; - String* str; - Expression* expr; - Vector<Predicate*>* predList; - Vector<Expression*>* argList; - Step* step; - LocationPath* locationPath; -} - -%{ - -static int xpathyylex(YYSTYPE* yylval) { return Parser::current()->lex(yylval); } -static void xpathyyerror(const char*) { } - -%} - -%left <numop> MULOP -%left <eqop> EQOP RELOP -%left PLUS MINUS -%left OR AND -%token <axis> AXISNAME -%token <str> NODETYPE PI FUNCTIONNAME LITERAL -%token <str> VARIABLEREFERENCE NUMBER -%token DOTDOT SLASHSLASH -%token <str> NAMETEST -%token XPATH_ERROR - -%type <locationPath> LocationPath -%type <locationPath> AbsoluteLocationPath -%type <locationPath> RelativeLocationPath -%type <step> Step -%type <axis> AxisSpecifier -%type <step> DescendantOrSelf -%type <nodeTest> NodeTest -%type <expr> Predicate -%type <predList> OptionalPredicateList -%type <predList> PredicateList -%type <step> AbbreviatedStep -%type <expr> Expr -%type <expr> PrimaryExpr -%type <expr> FunctionCall -%type <argList> ArgumentList -%type <expr> Argument -%type <expr> UnionExpr -%type <expr> PathExpr -%type <expr> FilterExpr -%type <expr> OrExpr -%type <expr> AndExpr -%type <expr> EqualityExpr -%type <expr> RelationalExpr -%type <expr> AdditiveExpr -%type <expr> MultiplicativeExpr -%type <expr> UnaryExpr - -%% - -Expr: - OrExpr - { - PARSER->m_topExpr = $1; - } - ; - -LocationPath: - RelativeLocationPath - { - $$->setAbsolute(false); - } - | - AbsoluteLocationPath - { - $$->setAbsolute(true); - } - ; - -AbsoluteLocationPath: - '/' - { - $$ = new LocationPath; - PARSER->registerParseNode($$); - } - | - '/' RelativeLocationPath - { - $$ = $2; - } - | - DescendantOrSelf RelativeLocationPath - { - $$ = $2; - $$->insertFirstStep($1); - PARSER->unregisterParseNode($1); - } - ; - -RelativeLocationPath: - Step - { - $$ = new LocationPath; - $$->appendStep($1); - PARSER->unregisterParseNode($1); - PARSER->registerParseNode($$); - } - | - RelativeLocationPath '/' Step - { - $$->appendStep($3); - PARSER->unregisterParseNode($3); - } - | - RelativeLocationPath DescendantOrSelf Step - { - $$->appendStep($2); - $$->appendStep($3); - PARSER->unregisterParseNode($2); - PARSER->unregisterParseNode($3); - } - ; - -Step: - NodeTest OptionalPredicateList - { - if ($2) { - $$ = new Step(Step::ChildAxis, *$1, *$2); - PARSER->deletePredicateVector($2); - } else - $$ = new Step(Step::ChildAxis, *$1); - PARSER->deleteNodeTest($1); - PARSER->registerParseNode($$); - } - | - NAMETEST OptionalPredicateList - { - String localName; - String namespaceURI; - if (!PARSER->expandQName(*$1, localName, namespaceURI)) { - PARSER->m_gotNamespaceError = true; - YYABORT; - } - - if ($2) { - $$ = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI), *$2); - PARSER->deletePredicateVector($2); - } else - $$ = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI)); - PARSER->deleteString($1); - PARSER->registerParseNode($$); - } - | - AxisSpecifier NodeTest OptionalPredicateList - { - if ($3) { - $$ = new Step($1, *$2, *$3); - PARSER->deletePredicateVector($3); - } else - $$ = new Step($1, *$2); - PARSER->deleteNodeTest($2); - PARSER->registerParseNode($$); - } - | - AxisSpecifier NAMETEST OptionalPredicateList - { - String localName; - String namespaceURI; - if (!PARSER->expandQName(*$2, localName, namespaceURI)) { - PARSER->m_gotNamespaceError = true; - YYABORT; - } - - if ($3) { - $$ = new Step($1, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI), *$3); - PARSER->deletePredicateVector($3); - } else - $$ = new Step($1, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI)); - PARSER->deleteString($2); - PARSER->registerParseNode($$); - } - | - AbbreviatedStep - ; - -AxisSpecifier: - AXISNAME - | - '@' - { - $$ = Step::AttributeAxis; - } - ; - -NodeTest: - NODETYPE '(' ')' - { - if (*$1 == "node") - $$ = new Step::NodeTest(Step::NodeTest::AnyNodeTest); - else if (*$1 == "text") - $$ = new Step::NodeTest(Step::NodeTest::TextNodeTest); - else if (*$1 == "comment") - $$ = new Step::NodeTest(Step::NodeTest::CommentNodeTest); - - PARSER->deleteString($1); - PARSER->registerNodeTest($$); - } - | - PI '(' ')' - { - $$ = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest); - PARSER->deleteString($1); - PARSER->registerNodeTest($$); - } - | - PI '(' LITERAL ')' - { - $$ = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, $3->stripWhiteSpace()); - PARSER->deleteString($1); - PARSER->deleteString($3); - PARSER->registerNodeTest($$); - } - ; - -OptionalPredicateList: - /* empty */ - { - $$ = 0; - } - | - PredicateList - ; - -PredicateList: - Predicate - { - $$ = new Vector<Predicate*>; - $$->append(new Predicate($1)); - PARSER->unregisterParseNode($1); - PARSER->registerPredicateVector($$); - } - | - PredicateList Predicate - { - $$->append(new Predicate($2)); - PARSER->unregisterParseNode($2); - } - ; - -Predicate: - '[' Expr ']' - { - $$ = $2; - } - ; - -DescendantOrSelf: - SLASHSLASH - { - $$ = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); - PARSER->registerParseNode($$); - } - ; - -AbbreviatedStep: - '.' - { - $$ = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); - PARSER->registerParseNode($$); - } - | - DOTDOT - { - $$ = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); - PARSER->registerParseNode($$); - } - ; - -PrimaryExpr: - VARIABLEREFERENCE - { - $$ = new VariableReference(*$1); - PARSER->deleteString($1); - PARSER->registerParseNode($$); - } - | - '(' Expr ')' - { - $$ = $2; - } - | - LITERAL - { - $$ = new StringExpression(*$1); - PARSER->deleteString($1); - PARSER->registerParseNode($$); - } - | - NUMBER - { - $$ = new Number($1->toDouble()); - PARSER->deleteString($1); - PARSER->registerParseNode($$); - } - | - FunctionCall - ; - -FunctionCall: - FUNCTIONNAME '(' ')' - { - $$ = createFunction(*$1); - if (!$$) - YYABORT; - PARSER->deleteString($1); - PARSER->registerParseNode($$); - } - | - FUNCTIONNAME '(' ArgumentList ')' - { - $$ = createFunction(*$1, *$3); - if (!$$) - YYABORT; - PARSER->deleteString($1); - PARSER->deleteExpressionVector($3); - PARSER->registerParseNode($$); - } - ; - -ArgumentList: - Argument - { - $$ = new Vector<Expression*>; - $$->append($1); - PARSER->unregisterParseNode($1); - PARSER->registerExpressionVector($$); - } - | - ArgumentList ',' Argument - { - $$->append($3); - PARSER->unregisterParseNode($3); - } - ; - -Argument: - Expr - ; - -UnionExpr: - PathExpr - | - UnionExpr '|' PathExpr - { - $$ = new Union; - $$->addSubExpression($1); - $$->addSubExpression($3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -PathExpr: - LocationPath - { - $$ = $1; - } - | - FilterExpr - | - FilterExpr '/' RelativeLocationPath - { - $3->setAbsolute(true); - $$ = new Path(static_cast<Filter*>($1), $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - | - FilterExpr DescendantOrSelf RelativeLocationPath - { - $3->insertFirstStep($2); - $3->setAbsolute(true); - $$ = new Path(static_cast<Filter*>($1), $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($2); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -FilterExpr: - PrimaryExpr - | - PrimaryExpr PredicateList - { - $$ = new Filter($1, *$2); - PARSER->unregisterParseNode($1); - PARSER->deletePredicateVector($2); - PARSER->registerParseNode($$); - } - ; - -OrExpr: - AndExpr - | - OrExpr OR AndExpr - { - $$ = new LogicalOp(LogicalOp::OP_Or, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -AndExpr: - EqualityExpr - | - AndExpr AND EqualityExpr - { - $$ = new LogicalOp(LogicalOp::OP_And, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -EqualityExpr: - RelationalExpr - | - EqualityExpr EQOP RelationalExpr - { - $$ = new EqTestOp($2, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -RelationalExpr: - AdditiveExpr - | - RelationalExpr RELOP AdditiveExpr - { - $$ = new EqTestOp($2, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -AdditiveExpr: - MultiplicativeExpr - | - AdditiveExpr PLUS MultiplicativeExpr - { - $$ = new NumericOp(NumericOp::OP_Add, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - | - AdditiveExpr MINUS MultiplicativeExpr - { - $$ = new NumericOp(NumericOp::OP_Sub, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -MultiplicativeExpr: - UnaryExpr - | - MultiplicativeExpr MULOP UnaryExpr - { - $$ = new NumericOp($2, $1, $3); - PARSER->unregisterParseNode($1); - PARSER->unregisterParseNode($3); - PARSER->registerParseNode($$); - } - ; - -UnaryExpr: - UnionExpr - | - MINUS UnaryExpr - { - $$ = new Negative; - $$->addSubExpression($2); - PARSER->unregisterParseNode($2); - PARSER->registerParseNode($$); - } - ; - -%% - -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.cpp b/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.cpp deleted file mode 100644 index 3dde1f2..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathNSResolver.h" - -#if ENABLE(XPATH) - -namespace WebCore { - -XPathNSResolver::~XPathNSResolver() -{ -} - -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.h b/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.h deleted file mode 100644 index 04b5f80..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathNSResolver_h -#define XPathNSResolver_h - -#if ENABLE(XPATH) - -#include <wtf/RefCounted.h> - -namespace WebCore { - - class String; - - class XPathNSResolver : public RefCounted<XPathNSResolver> { - public: - virtual ~XPathNSResolver(); - virtual String lookupNamespaceURI(const String& prefix) = 0; - - protected: - XPathNSResolver() { } - }; - -} - -#endif // ENABLE(XPATH) - -#endif // XPathNSResolver_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.idl b/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.idl deleted file mode 100644 index 4e996c2..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNSResolver.idl +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2006 Apple Computer, Inc. - * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -module xpath { - - interface [ObjCProtocol, Conditional=XPATH, OmitConstructor] XPathNSResolver { - [ConvertNullStringTo=Null] DOMString lookupNamespaceURI(in DOMString prefix); - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNamespace.cpp b/src/3rdparty/webkit/WebCore/xml/XPathNamespace.cpp deleted file mode 100644 index 9646402..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNamespace.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathNamespace.h" - -#if ENABLE(XPATH) - -#include "Element.h" - -namespace WebCore { - -XPathNamespace::XPathNamespace(PassRefPtr<Element> ownerElement, const AtomicString& prefix, const AtomicString& uri) - : Node(ownerElement->document(), CreateOther) - , m_ownerElement(ownerElement) - , m_prefix(prefix) - , m_uri(uri) -{ -} - -Document* XPathNamespace::ownerDocument() const -{ - return m_ownerElement->ownerDocument(); -} - -Element* XPathNamespace::ownerElement() const -{ - return m_ownerElement.get(); -} - -const AtomicString& XPathNamespace::prefix() const -{ - return m_prefix; -} - -String XPathNamespace::nodeName() const -{ - return "#namespace"; -} - -String XPathNamespace::nodeValue() const -{ - return m_uri; -} - -const AtomicString& XPathNamespace::namespaceURI() const -{ - return m_uri; -} - -Node::NodeType XPathNamespace::nodeType() const -{ - return Node::XPATH_NAMESPACE_NODE; -} - -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNamespace.h b/src/3rdparty/webkit/WebCore/xml/XPathNamespace.h deleted file mode 100644 index 996cb9a..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNamespace.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathNamespace_h -#define XPathNamespace_h - -#if ENABLE(XPATH) - -#include "AtomicString.h" -#include "Node.h" - -namespace WebCore { - - // FIXME: This class is never instantiated. Maybe it should be removed. - - class XPathNamespace : public Node { - private: - XPathNamespace(PassRefPtr<Element> ownerElement, const AtomicString& prefix, const AtomicString& uri); - - virtual Document* ownerDocument() const; - virtual Element* ownerElement() const; - - virtual const AtomicString& prefix() const; - virtual String nodeName() const; - virtual String nodeValue() const; - virtual const AtomicString& namespaceURI() const; - - virtual NodeType nodeType() const; - - RefPtr<Element> m_ownerElement; - AtomicString m_prefix; - AtomicString m_uri; - }; - -} - -#endif // ENABLE(XPATH) - -#endif // XPathNamespace_h - diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNodeSet.cpp b/src/3rdparty/webkit/WebCore/xml/XPathNodeSet.cpp deleted file mode 100644 index ba9423e..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNodeSet.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#if ENABLE(XPATH) -#include "XPathNodeSet.h" - -#include "Attr.h" -#include "Element.h" -#include "Node.h" - -namespace WebCore { -namespace XPath { - -static inline Node* parentWithDepth(unsigned depth, const Vector<Node*>& parents) -{ - ASSERT(parents.size() >= depth + 1); - return parents[parents.size() - 1 - depth]; -} - -static void sortBlock(unsigned from, unsigned to, Vector<Vector<Node*> >& parentMatrix, bool mayContainAttributeNodes) -{ - ASSERT(from + 1 < to); // Should not call this function with less that two nodes to sort. - unsigned minDepth = UINT_MAX; - for (unsigned i = from; i < to; ++i) { - unsigned depth = parentMatrix[i].size() - 1; - if (minDepth > depth) - minDepth = depth; - } - - // Find the common ancestor. - unsigned commonAncestorDepth = minDepth; - Node* commonAncestor; - while (true) { - commonAncestor = parentWithDepth(commonAncestorDepth, parentMatrix[from]); - if (commonAncestorDepth == 0) - break; - - bool allEqual = true; - for (unsigned i = from + 1; i < to; ++i) { - if (commonAncestor != parentWithDepth(commonAncestorDepth, parentMatrix[i])) { - allEqual = false; - break; - } - } - if (allEqual) - break; - - --commonAncestorDepth; - } - - if (commonAncestorDepth == minDepth) { - // One of the nodes is the common ancestor => it is the first in document order. - // Find it and move it to the beginning. - for (unsigned i = from; i < to; ++i) - if (commonAncestor == parentMatrix[i][0]) { - parentMatrix[i].swap(parentMatrix[from]); - if (from + 2 < to) - sortBlock(from + 1, to, parentMatrix, mayContainAttributeNodes); - return; - } - } - - if (mayContainAttributeNodes && commonAncestor->isElementNode()) { - // The attribute nodes and namespace nodes of an element occur before the children of the element. - // The namespace nodes are defined to occur before the attribute nodes. - // The relative order of namespace nodes is implementation-dependent. - // The relative order of attribute nodes is implementation-dependent. - unsigned sortedEnd = from; - // FIXME: namespace nodes are not implemented. - for (unsigned i = sortedEnd; i < to; ++i) { - Node* n = parentMatrix[i][0]; - if (n->isAttributeNode() && static_cast<Attr*>(n)->ownerElement() == commonAncestor) - parentMatrix[i].swap(parentMatrix[sortedEnd++]); - } - if (sortedEnd != from) { - if (to - sortedEnd > 1) - sortBlock(sortedEnd, to, parentMatrix, mayContainAttributeNodes); - return; - } - } - - // Children nodes of the common ancestor induce a subdivision of our node-set. - // Sort it according to this subdivision, and recursively sort each group. - HashSet<Node*> parentNodes; - for (unsigned i = from; i < to; ++i) - parentNodes.add(parentWithDepth(commonAncestorDepth + 1, parentMatrix[i])); - - unsigned previousGroupEnd = from; - unsigned groupEnd = from; - for (Node* n = commonAncestor->firstChild(); n; n = n->nextSibling()) { - // If parentNodes contains the node, perform a linear search to move its children in the node-set to the beginning. - if (parentNodes.contains(n)) { - for (unsigned i = groupEnd; i < to; ++i) - if (parentWithDepth(commonAncestorDepth + 1, parentMatrix[i]) == n) - parentMatrix[i].swap(parentMatrix[groupEnd++]); - - if (groupEnd - previousGroupEnd > 1) - sortBlock(previousGroupEnd, groupEnd, parentMatrix, mayContainAttributeNodes); - - ASSERT(previousGroupEnd != groupEnd); - previousGroupEnd = groupEnd; -#ifndef NDEBUG - parentNodes.remove(n); -#endif - } - } - - ASSERT(parentNodes.isEmpty()); -} - -void NodeSet::sort() const -{ - if (m_isSorted) - return; - - unsigned nodeCount = m_nodes.size(); - if (nodeCount < 2) { - const_cast<bool&>(m_isSorted) = true; - return; - } - - bool containsAttributeNodes = false; - - Vector<Vector<Node*> > parentMatrix(nodeCount); - for (unsigned i = 0; i < nodeCount; ++i) { - Vector<Node*>& parentsVector = parentMatrix[i]; - Node* n = m_nodes[i].get(); - parentsVector.append(n); - if (n->isAttributeNode()) { - n = static_cast<Attr*>(n)->ownerElement(); - parentsVector.append(n); - containsAttributeNodes = true; - } - while ((n = n->parent())) - parentsVector.append(n); - } - sortBlock(0, nodeCount, parentMatrix, containsAttributeNodes); - - // It is not possible to just assign the result to m_nodes, because some nodes may get dereferenced and destroyed. - Vector<RefPtr<Node> > sortedNodes; - sortedNodes.reserveInitialCapacity(nodeCount); - for (unsigned i = 0; i < nodeCount; ++i) - sortedNodes.append(parentMatrix[i][0]); - - const_cast<Vector<RefPtr<Node> >& >(m_nodes).swap(sortedNodes); -} - -void NodeSet::reverse() -{ - if (m_nodes.isEmpty()) - return; - - unsigned from = 0; - unsigned to = m_nodes.size() - 1; - while (from < to) { - m_nodes[from].swap(m_nodes[to]); - ++from; - --to; - } -} - -Node* NodeSet::firstNode() const -{ - if (isEmpty()) - return 0; - - sort(); // FIXME: fully sorting the node-set just to find its first node is wasteful. - return m_nodes.at(0).get(); -} - -Node* NodeSet::anyNode() const -{ - if (isEmpty()) - return 0; - - return m_nodes.at(0).get(); -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathNodeSet.h b/src/3rdparty/webkit/WebCore/xml/XPathNodeSet.h deleted file mode 100644 index d5c47be..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathNodeSet.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathNodeSet_h -#define XPathNodeSet_h - -#if ENABLE(XPATH) - -#include <wtf/Vector.h> -#include <wtf/Forward.h> - -#include "Node.h" - -namespace WebCore { - - namespace XPath { - - class NodeSet : public FastAllocBase { - public: - NodeSet() : m_isSorted(true), m_subtreesAreDisjoint(false) { } - - size_t size() const { return m_nodes.size(); } - bool isEmpty() const { return !m_nodes.size(); } - Node* operator[](unsigned i) const { return m_nodes.at(i).get(); } - void reserveCapacity(size_t newCapacity) { m_nodes.reserveCapacity(newCapacity); } - void clear() { m_nodes.clear(); } - void swap(NodeSet& other) { std::swap(m_isSorted, other.m_isSorted); std::swap(m_subtreesAreDisjoint, other.m_subtreesAreDisjoint); m_nodes.swap(other.m_nodes); } - - // NodeSet itself does not verify that nodes in it are unique. - void append(Node* node) { m_nodes.append(node); } - void append(PassRefPtr<Node> node) { m_nodes.append(node); } - void append(const NodeSet& nodeSet) { m_nodes.append(nodeSet.m_nodes); } - - // Returns the set's first node in document order, or 0 if the set is empty. - Node* firstNode() const; - - // Returns 0 if the set is empty. - Node* anyNode() const; - - // NodeSet itself doesn't check if it contains nodes in document order - the caller should tell it if it does not. - void markSorted(bool isSorted) { m_isSorted = isSorted; } - bool isSorted() const { return m_isSorted || m_nodes.size() < 2; } - - void sort() const; - - // No node in the set is ancestor of another. Unlike m_isSorted, this is assumed to be false, unless the caller sets it to true. - void markSubtreesDisjoint(bool disjoint) { m_subtreesAreDisjoint = disjoint; } - bool subtreesAreDisjoint() const { return m_subtreesAreDisjoint || m_nodes.size() < 2; } - - void reverse(); - - private: - bool m_isSorted; - bool m_subtreesAreDisjoint; - Vector<RefPtr<Node> > m_nodes; - }; - - } -} - -#endif // ENABLE(XPATH) -#endif // XPathNodeSet_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathParser.cpp b/src/3rdparty/webkit/WebCore/xml/XPathParser.cpp deleted file mode 100644 index 5501df1..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathParser.cpp +++ /dev/null @@ -1,636 +0,0 @@ -/* - * Copyright 2005 Maksim Orlovich <maksim@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathParser.h" - -#if ENABLE(XPATH) - -#include "ExceptionCode.h" -#include "StringHash.h" -#include "XPathEvaluator.h" -#include "XPathException.h" -#include "XPathNSResolver.h" -#include "XPathStep.h" -#include <wtf/StdLibExtras.h> - -int xpathyyparse(void*); - -using namespace WTF; -using namespace Unicode; - -namespace WebCore { -namespace XPath { - -class LocationPath; - -#include "XPathGrammar.h" - -Parser* Parser::currentParser = 0; - -enum XMLCat { NameStart, NameCont, NotPartOfName }; - -typedef HashMap<String, Step::Axis> AxisNamesMap; - -static XMLCat charCat(UChar aChar) -{ - //### might need to add some special cases from the XML spec. - - if (aChar == '_') - return NameStart; - - if (aChar == '.' || aChar == '-') - return NameCont; - CharCategory category = Unicode::category(aChar); - if (category & (Letter_Uppercase | Letter_Lowercase | Letter_Other | Letter_Titlecase | Number_Letter)) - return NameStart; - if (category & (Mark_NonSpacing | Mark_SpacingCombining | Mark_Enclosing | Letter_Modifier | Number_DecimalDigit)) - return NameCont; - return NotPartOfName; -} - -static void setUpAxisNamesMap(AxisNamesMap& axisNames) -{ - struct AxisName { - const char* name; - Step::Axis axis; - }; - const AxisName axisNameList[] = { - { "ancestor", Step::AncestorAxis }, - { "ancestor-or-self", Step::AncestorOrSelfAxis }, - { "attribute", Step::AttributeAxis }, - { "child", Step::ChildAxis }, - { "descendant", Step::DescendantAxis }, - { "descendant-or-self", Step::DescendantOrSelfAxis }, - { "following", Step::FollowingAxis }, - { "following-sibling", Step::FollowingSiblingAxis }, - { "namespace", Step::NamespaceAxis }, - { "parent", Step::ParentAxis }, - { "preceding", Step::PrecedingAxis }, - { "preceding-sibling", Step::PrecedingSiblingAxis }, - { "self", Step::SelfAxis } - }; - for (unsigned i = 0; i < sizeof(axisNameList) / sizeof(axisNameList[0]); ++i) - axisNames.set(axisNameList[i].name, axisNameList[i].axis); -} - -static bool isAxisName(const String& name, Step::Axis& type) -{ - DEFINE_STATIC_LOCAL(AxisNamesMap, axisNames, ()); - - if (axisNames.isEmpty()) - setUpAxisNamesMap(axisNames); - - AxisNamesMap::iterator it = axisNames.find(name); - if (it == axisNames.end()) - return false; - type = it->second; - return true; -} - -static bool isNodeTypeName(const String& name) -{ - DEFINE_STATIC_LOCAL(HashSet<String>, nodeTypeNames, ()); - if (nodeTypeNames.isEmpty()) { - nodeTypeNames.add("comment"); - nodeTypeNames.add("text"); - nodeTypeNames.add("processing-instruction"); - nodeTypeNames.add("node"); - } - return nodeTypeNames.contains(name); -} - -/* Returns whether the last parsed token matches the [32] Operator rule - * (check http://www.w3.org/TR/xpath#exprlex). Necessary to disambiguate - * the tokens. - */ -bool Parser::isOperatorContext() const -{ - if (m_nextPos == 0) - return false; - - switch (m_lastTokenType) { - case AND: case OR: case MULOP: - case '/': case SLASHSLASH: case '|': case PLUS: case MINUS: - case EQOP: case RELOP: - case '@': case AXISNAME: case '(': case '[': - return false; - default: - return true; - } -} - -void Parser::skipWS() -{ - while (m_nextPos < m_data.length() && isSpaceOrNewline(m_data[m_nextPos])) - ++m_nextPos; -} - -Token Parser::makeTokenAndAdvance(int code, int advance) -{ - m_nextPos += advance; - return Token(code); -} - -Token Parser::makeTokenAndAdvance(int code, NumericOp::Opcode val, int advance) -{ - m_nextPos += advance; - return Token(code, val); -} - -Token Parser::makeTokenAndAdvance(int code, EqTestOp::Opcode val, int advance) -{ - m_nextPos += advance; - return Token(code, val); -} - -// Returns next char if it's there and interesting, 0 otherwise -char Parser::peekAheadHelper() -{ - if (m_nextPos + 1 >= m_data.length()) - return 0; - UChar next = m_data[m_nextPos + 1]; - if (next >= 0xff) - return 0; - return next; -} - -char Parser::peekCurHelper() -{ - if (m_nextPos >= m_data.length()) - return 0; - UChar next = m_data[m_nextPos]; - if (next >= 0xff) - return 0; - return next; -} - -Token Parser::lexString() -{ - UChar delimiter = m_data[m_nextPos]; - int startPos = m_nextPos + 1; - - for (m_nextPos = startPos; m_nextPos < m_data.length(); ++m_nextPos) { - if (m_data[m_nextPos] == delimiter) { - String value = m_data.substring(startPos, m_nextPos - startPos); - if (value.isNull()) - value = ""; - ++m_nextPos; // Consume the char. - return Token(LITERAL, value); - } - } - - // Ouch, went off the end -- report error. - return Token(XPATH_ERROR); -} - -Token Parser::lexNumber() -{ - int startPos = m_nextPos; - bool seenDot = false; - - // Go until end or a non-digits character. - for (; m_nextPos < m_data.length(); ++m_nextPos) { - UChar aChar = m_data[m_nextPos]; - if (aChar >= 0xff) break; - - if (aChar < '0' || aChar > '9') { - if (aChar == '.' && !seenDot) - seenDot = true; - else - break; - } - } - - return Token(NUMBER, m_data.substring(startPos, m_nextPos - startPos)); -} - -bool Parser::lexNCName(String& name) -{ - int startPos = m_nextPos; - if (m_nextPos >= m_data.length()) - return false; - - if (charCat(m_data[m_nextPos]) != NameStart) - return false; - - // Keep going until we get a character that's not good for names. - for (; m_nextPos < m_data.length(); ++m_nextPos) - if (charCat(m_data[m_nextPos]) == NotPartOfName) - break; - - name = m_data.substring(startPos, m_nextPos - startPos); - return true; -} - -bool Parser::lexQName(String& name) -{ - String n1; - if (!lexNCName(n1)) - return false; - - skipWS(); - - // If the next character is :, what we just got it the prefix, if not, - // it's the whole thing. - if (peekAheadHelper() != ':') { - name = n1; - return true; - } - - String n2; - if (!lexNCName(n2)) - return false; - - name = n1 + ":" + n2; - return true; -} - -Token Parser::nextTokenInternal() -{ - skipWS(); - - if (m_nextPos >= m_data.length()) - return Token(0); - - char code = peekCurHelper(); - switch (code) { - case '(': case ')': case '[': case ']': - case '@': case ',': case '|': - return makeTokenAndAdvance(code); - case '\'': - case '\"': - return lexString(); - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - return lexNumber(); - case '.': { - char next = peekAheadHelper(); - if (next == '.') - return makeTokenAndAdvance(DOTDOT, 2); - if (next >= '0' && next <= '9') - return lexNumber(); - return makeTokenAndAdvance('.'); - } - case '/': - if (peekAheadHelper() == '/') - return makeTokenAndAdvance(SLASHSLASH, 2); - return makeTokenAndAdvance('/'); - case '+': - return makeTokenAndAdvance(PLUS); - case '-': - return makeTokenAndAdvance(MINUS); - case '=': - return makeTokenAndAdvance(EQOP, EqTestOp::OP_EQ); - case '!': - if (peekAheadHelper() == '=') - return makeTokenAndAdvance(EQOP, EqTestOp::OP_NE, 2); - return Token(XPATH_ERROR); - case '<': - if (peekAheadHelper() == '=') - return makeTokenAndAdvance(RELOP, EqTestOp::OP_LE, 2); - return makeTokenAndAdvance(RELOP, EqTestOp::OP_LT); - case '>': - if (peekAheadHelper() == '=') - return makeTokenAndAdvance(RELOP, EqTestOp::OP_GE, 2); - return makeTokenAndAdvance(RELOP, EqTestOp::OP_GT); - case '*': - if (isOperatorContext()) - return makeTokenAndAdvance(MULOP, NumericOp::OP_Mul); - ++m_nextPos; - return Token(NAMETEST, "*"); - case '$': { // $ QName - m_nextPos++; - String name; - if (!lexQName(name)) - return Token(XPATH_ERROR); - return Token(VARIABLEREFERENCE, name); - } - } - - String name; - if (!lexNCName(name)) - return Token(XPATH_ERROR); - - skipWS(); - // If we're in an operator context, check for any operator names - if (isOperatorContext()) { - if (name == "and") //### hash? - return Token(AND); - if (name == "or") - return Token(OR); - if (name == "mod") - return Token(MULOP, NumericOp::OP_Mod); - if (name == "div") - return Token(MULOP, NumericOp::OP_Div); - } - - // See whether we are at a : - if (peekCurHelper() == ':') { - m_nextPos++; - // Any chance it's an axis name? - if (peekCurHelper() == ':') { - m_nextPos++; - - //It might be an axis name. - Step::Axis axis; - if (isAxisName(name, axis)) - return Token(AXISNAME, axis); - // Ugh, :: is only valid in axis names -> error - return Token(XPATH_ERROR); - } - - // Seems like this is a fully qualified qname, or perhaps the * modified one from NameTest - skipWS(); - if (peekCurHelper() == '*') { - m_nextPos++; - return Token(NAMETEST, name + ":*"); - } - - // Make a full qname. - String n2; - if (!lexNCName(n2)) - return Token(XPATH_ERROR); - - name = name + ":" + n2; - } - - skipWS(); - if (peekCurHelper() == '(') { - //note: we don't swallow the (here! - - //either node type of function name - if (isNodeTypeName(name)) { - if (name == "processing-instruction") - return Token(PI, name); - - return Token(NODETYPE, name); - } - //must be a function name. - return Token(FUNCTIONNAME, name); - } - - // At this point, it must be NAMETEST. - return Token(NAMETEST, name); -} - -Token Parser::nextToken() -{ - Token toRet = nextTokenInternal(); - m_lastTokenType = toRet.type; - return toRet; -} - -Parser::Parser() -{ - reset(String()); -} - -void Parser::reset(const String& data) -{ - m_nextPos = 0; - m_data = data; - m_lastTokenType = 0; - - m_topExpr = 0; - m_gotNamespaceError = false; -} - -int Parser::lex(void* data) -{ - YYSTYPE* yylval = static_cast<YYSTYPE*>(data); - Token tok = nextToken(); - - switch (tok.type) { - case AXISNAME: - yylval->axis = tok.axis; - break; - case MULOP: - yylval->numop = tok.numop; - break; - case RELOP: - case EQOP: - yylval->eqop = tok.eqop; - break; - case NODETYPE: - case PI: - case FUNCTIONNAME: - case LITERAL: - case VARIABLEREFERENCE: - case NUMBER: - case NAMETEST: - yylval->str = new String(tok.str); - registerString(yylval->str); - break; - } - - return tok.type; -} - -bool Parser::expandQName(const String& qName, String& localName, String& namespaceURI) -{ - int colon = qName.find(':'); - if (colon >= 0) { - if (!m_resolver) - return false; - namespaceURI = m_resolver->lookupNamespaceURI(qName.left(colon)); - if (namespaceURI.isNull()) - return false; - localName = qName.substring(colon + 1); - } else - localName = qName; - - return true; -} - -Expression* Parser::parseStatement(const String& statement, PassRefPtr<XPathNSResolver> resolver, ExceptionCode& ec) -{ - reset(statement); - - m_resolver = resolver; - - Parser* oldParser = currentParser; - currentParser = this; - int parseError = xpathyyparse(this); - currentParser = oldParser; - - if (parseError) { - deleteAllValues(m_parseNodes); - m_parseNodes.clear(); - - HashSet<Vector<Predicate*>*>::iterator pend = m_predicateVectors.end(); - for (HashSet<Vector<Predicate*>*>::iterator it = m_predicateVectors.begin(); it != pend; ++it) { - deleteAllValues(**it); - delete *it; - } - m_predicateVectors.clear(); - - HashSet<Vector<Expression*>*>::iterator eend = m_expressionVectors.end(); - for (HashSet<Vector<Expression*>*>::iterator it = m_expressionVectors.begin(); it != eend; ++it) { - deleteAllValues(**it); - delete *it; - } - m_expressionVectors.clear(); - - deleteAllValues(m_strings); - m_strings.clear(); - - deleteAllValues(m_nodeTests); - m_nodeTests.clear(); - - m_topExpr = 0; - - if (m_gotNamespaceError) - ec = NAMESPACE_ERR; - else - ec = XPathException::INVALID_EXPRESSION_ERR; - return 0; - } - - ASSERT(m_parseNodes.size() == 1); - ASSERT(*m_parseNodes.begin() == m_topExpr); - ASSERT(m_expressionVectors.size() == 0); - ASSERT(m_predicateVectors.size() == 0); - ASSERT(m_strings.size() == 0); - ASSERT(m_nodeTests.size() == 0); - - m_parseNodes.clear(); - Expression* result = m_topExpr; - m_topExpr = 0; - - return result; -} - -void Parser::registerParseNode(ParseNode* node) -{ - if (node == 0) - return; - - ASSERT(!m_parseNodes.contains(node)); - - m_parseNodes.add(node); -} - -void Parser::unregisterParseNode(ParseNode* node) -{ - if (node == 0) - return; - - ASSERT(m_parseNodes.contains(node)); - - m_parseNodes.remove(node); -} - -void Parser::registerPredicateVector(Vector<Predicate*>* vector) -{ - if (vector == 0) - return; - - ASSERT(!m_predicateVectors.contains(vector)); - - m_predicateVectors.add(vector); -} - -void Parser::deletePredicateVector(Vector<Predicate*>* vector) -{ - if (vector == 0) - return; - - ASSERT(m_predicateVectors.contains(vector)); - - m_predicateVectors.remove(vector); - delete vector; -} - - -void Parser::registerExpressionVector(Vector<Expression*>* vector) -{ - if (vector == 0) - return; - - ASSERT(!m_expressionVectors.contains(vector)); - - m_expressionVectors.add(vector); -} - -void Parser::deleteExpressionVector(Vector<Expression*>* vector) -{ - if (vector == 0) - return; - - ASSERT(m_expressionVectors.contains(vector)); - - m_expressionVectors.remove(vector); - delete vector; -} - -void Parser::registerString(String* s) -{ - if (s == 0) - return; - - ASSERT(!m_strings.contains(s)); - - m_strings.add(s); -} - -void Parser::deleteString(String* s) -{ - if (s == 0) - return; - - ASSERT(m_strings.contains(s)); - - m_strings.remove(s); - delete s; -} - -void Parser::registerNodeTest(Step::NodeTest* t) -{ - if (t == 0) - return; - - ASSERT(!m_nodeTests.contains(t)); - - m_nodeTests.add(t); -} - -void Parser::deleteNodeTest(Step::NodeTest* t) -{ - if (t == 0) - return; - - ASSERT(m_nodeTests.contains(t)); - - m_nodeTests.remove(t); - delete t; -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathParser.h b/src/3rdparty/webkit/WebCore/xml/XPathParser.h deleted file mode 100644 index e7796030..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathParser.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2005 Maksim Orlovich <maksim@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathParser_h -#define XPathParser_h - -#if ENABLE(XPATH) - -#include "XPathStep.h" -#include "XPathPredicate.h" - -namespace WebCore { - - typedef int ExceptionCode; - - class XPathNSResolver; - - namespace XPath { - - class Expression; - class ParseNode; - class Predicate; - - struct Token { - int type; - String str; - Step::Axis axis; - NumericOp::Opcode numop; - EqTestOp::Opcode eqop; - - Token(int t) : type(t) {} - Token(int t, const String& v): type(t), str(v) {} - Token(int t, Step::Axis v): type(t), axis(v) {} - Token(int t, NumericOp::Opcode v): type(t), numop(v) {} - Token(int t, EqTestOp::Opcode v): type(t), eqop(v) {} - }; - - class Parser : public Noncopyable { - public: - Parser(); - - XPathNSResolver* resolver() const { return m_resolver.get(); } - bool expandQName(const String& qName, String& localName, String& namespaceURI); - - Expression* parseStatement(const String& statement, PassRefPtr<XPathNSResolver>, ExceptionCode&); - - static Parser* current() { return currentParser; } - - int lex(void* yylval); - - Expression* m_topExpr; - bool m_gotNamespaceError; - - void registerParseNode(ParseNode*); - void unregisterParseNode(ParseNode*); - - void registerPredicateVector(Vector<Predicate*>*); - void deletePredicateVector(Vector<Predicate*>*); - - void registerExpressionVector(Vector<Expression*>*); - void deleteExpressionVector(Vector<Expression*>*); - - void registerString(String*); - void deleteString(String*); - - void registerNodeTest(Step::NodeTest*); - void deleteNodeTest(Step::NodeTest*); - - private: - bool isOperatorContext() const; - - void skipWS(); - Token makeTokenAndAdvance(int type, int advance = 1); - Token makeTokenAndAdvance(int type, NumericOp::Opcode, int advance = 1); - Token makeTokenAndAdvance(int type, EqTestOp::Opcode, int advance = 1); - char peekAheadHelper(); - char peekCurHelper(); - - Token lexString(); - Token lexNumber(); - bool lexNCName(String&); - bool lexQName(String&); - - Token nextToken(); - Token nextTokenInternal(); - - void reset(const String& data); - - static Parser* currentParser; - - unsigned m_nextPos; - String m_data; - int m_lastTokenType; - RefPtr<XPathNSResolver> m_resolver; - - HashSet<ParseNode*> m_parseNodes; - HashSet<Vector<Predicate*>*> m_predicateVectors; - HashSet<Vector<Expression*>*> m_expressionVectors; - HashSet<String*> m_strings; - HashSet<Step::NodeTest*> m_nodeTests; - }; - - } -} - -#endif // ENABLE(XPATH) - -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/XPathPath.cpp b/src/3rdparty/webkit/WebCore/xml/XPathPath.cpp deleted file mode 100644 index 1a7ed3f..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathPath.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathPath.h" - -#if ENABLE(XPATH) - -#include "Document.h" -#include "XPathPredicate.h" -#include "XPathStep.h" -#include "XPathValue.h" - -namespace WebCore { -namespace XPath { - -Filter::Filter(Expression* expr, const Vector<Predicate*>& predicates) - : m_expr(expr), m_predicates(predicates) -{ - setIsContextNodeSensitive(m_expr->isContextNodeSensitive()); - setIsContextPositionSensitive(m_expr->isContextPositionSensitive()); - setIsContextSizeSensitive(m_expr->isContextSizeSensitive()); -} - -Filter::~Filter() -{ - delete m_expr; - deleteAllValues(m_predicates); -} - -Value Filter::evaluate() const -{ - Value v = m_expr->evaluate(); - - NodeSet& nodes = v.modifiableNodeSet(); - nodes.sort(); - - EvaluationContext& evaluationContext = Expression::evaluationContext(); - for (unsigned i = 0; i < m_predicates.size(); i++) { - NodeSet newNodes; - evaluationContext.size = nodes.size(); - evaluationContext.position = 0; - - for (unsigned j = 0; j < nodes.size(); j++) { - Node* node = nodes[j]; - - evaluationContext.node = node; - ++evaluationContext.position; - - if (m_predicates[i]->evaluate()) - newNodes.append(node); - } - nodes.swap(newNodes); - } - - return v; -} - -LocationPath::LocationPath() - : m_absolute(false) -{ - setIsContextNodeSensitive(true); -} - -LocationPath::~LocationPath() -{ - deleteAllValues(m_steps); -} - -Value LocationPath::evaluate() const -{ - EvaluationContext& evaluationContext = Expression::evaluationContext(); - EvaluationContext backupContext = evaluationContext; - // For absolute location paths, the context node is ignored - the - // document's root node is used instead. - Node* context = evaluationContext.node.get(); - if (m_absolute && context->nodeType() != Node::DOCUMENT_NODE) - context = context->ownerDocument(); - - NodeSet nodes; - nodes.append(context); - evaluate(nodes); - - evaluationContext = backupContext; - return Value(nodes, Value::adopt); -} - -void LocationPath::evaluate(NodeSet& nodes) const -{ - bool resultIsSorted = nodes.isSorted(); - - for (unsigned i = 0; i < m_steps.size(); i++) { - Step* step = m_steps[i]; - NodeSet newNodes; - HashSet<Node*> newNodesSet; - - bool needToCheckForDuplicateNodes = !nodes.subtreesAreDisjoint() || (step->axis() != Step::ChildAxis && step->axis() != Step::SelfAxis - && step->axis() != Step::DescendantAxis && step->axis() != Step::DescendantOrSelfAxis && step->axis() != Step::AttributeAxis); - - if (needToCheckForDuplicateNodes) - resultIsSorted = false; - - // This is a simplified check that can be improved to handle more cases. - if (nodes.subtreesAreDisjoint() && (step->axis() == Step::ChildAxis || step->axis() == Step::SelfAxis)) - newNodes.markSubtreesDisjoint(true); - - for (unsigned j = 0; j < nodes.size(); j++) { - NodeSet matches; - step->evaluate(nodes[j], matches); - - if (!matches.isSorted()) - resultIsSorted = false; - - for (size_t nodeIndex = 0; nodeIndex < matches.size(); ++nodeIndex) { - Node* node = matches[nodeIndex]; - if (!needToCheckForDuplicateNodes || newNodesSet.add(node).second) - newNodes.append(node); - } - } - - nodes.swap(newNodes); - } - - nodes.markSorted(resultIsSorted); -} - -void LocationPath::appendStep(Step* step) -{ - unsigned stepCount = m_steps.size(); - if (stepCount) { - bool dropSecondStep; - optimizeStepPair(m_steps[stepCount - 1], step, dropSecondStep); - if (dropSecondStep) { - delete step; - return; - } - } - step->optimize(); - m_steps.append(step); -} - -void LocationPath::insertFirstStep(Step* step) -{ - if (m_steps.size()) { - bool dropSecondStep; - optimizeStepPair(step, m_steps[0], dropSecondStep); - if (dropSecondStep) { - delete m_steps[0]; - m_steps[0] = step; - return; - } - } - step->optimize(); - m_steps.insert(0, step); -} - -Path::Path(Filter* filter, LocationPath* path) - : m_filter(filter) - , m_path(path) -{ - setIsContextNodeSensitive(filter->isContextNodeSensitive()); - setIsContextPositionSensitive(filter->isContextPositionSensitive()); - setIsContextSizeSensitive(filter->isContextSizeSensitive()); -} - -Path::~Path() -{ - delete m_filter; - delete m_path; -} - -Value Path::evaluate() const -{ - Value v = m_filter->evaluate(); - - NodeSet& nodes = v.modifiableNodeSet(); - m_path->evaluate(nodes); - - return v; -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathPath.h b/src/3rdparty/webkit/WebCore/xml/XPathPath.h deleted file mode 100644 index 7dd17d9..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathPath.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathPath_h -#define XPathPath_h - -#if ENABLE(XPATH) - -#include "XPathExpressionNode.h" -#include "XPathNodeSet.h" - -namespace WebCore { - - namespace XPath { - - class Predicate; - class Step; - - class Filter : public Expression { - public: - Filter(Expression*, const Vector<Predicate*>& = Vector<Predicate*>()); - virtual ~Filter(); - - virtual Value evaluate() const; - - private: - virtual Value::Type resultType() const { return Value::NodeSetValue; } - - Expression* m_expr; - Vector<Predicate*> m_predicates; - }; - - class LocationPath : public Expression { - public: - LocationPath(); - virtual ~LocationPath(); - void setAbsolute(bool value) { m_absolute = value; setIsContextNodeSensitive(!m_absolute); } - - virtual Value evaluate() const; - void evaluate(NodeSet& nodes) const; // nodes is an input/output parameter - - void appendStep(Step* step); - void insertFirstStep(Step* step); - - private: - virtual Value::Type resultType() const { return Value::NodeSetValue; } - - Vector<Step*> m_steps; - bool m_absolute; - }; - - class Path : public Expression { - public: - Path(Filter*, LocationPath*); - virtual ~Path(); - - virtual Value evaluate() const; - - private: - virtual Value::Type resultType() const { return Value::NodeSetValue; } - - Filter* m_filter; - LocationPath* m_path; - }; - - } -} - -#endif // ENABLE(XPATH) - -#endif // XPath_Path_H diff --git a/src/3rdparty/webkit/WebCore/xml/XPathPredicate.cpp b/src/3rdparty/webkit/WebCore/xml/XPathPredicate.cpp deleted file mode 100644 index 2a6482f..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathPredicate.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#if ENABLE(XPATH) - -#include "XPathPredicate.h" - -#include "Node.h" -#include "XPathFunctions.h" -#include "XPathUtil.h" -#include "XPathValue.h" -#include <math.h> -#include <wtf/MathExtras.h> - -namespace WebCore { -namespace XPath { - -Number::Number(double value) - : m_value(value) -{ -} - -Value Number::evaluate() const -{ - return m_value; -} - -StringExpression::StringExpression(const String& value) - : m_value(value) -{ -} - -Value StringExpression::evaluate() const -{ - return m_value; -} - -Value Negative::evaluate() const -{ - Value p(subExpr(0)->evaluate()); - return -p.toNumber(); -} - -NumericOp::NumericOp(Opcode opcode, Expression* lhs, Expression* rhs) - : m_opcode(opcode) -{ - addSubExpression(lhs); - addSubExpression(rhs); -} - -Value NumericOp::evaluate() const -{ - Value lhs(subExpr(0)->evaluate()); - Value rhs(subExpr(1)->evaluate()); - - double leftVal = lhs.toNumber(); - double rightVal = rhs.toNumber(); - - switch (m_opcode) { - case OP_Add: - return leftVal + rightVal; - case OP_Sub: - return leftVal - rightVal; - case OP_Mul: - return leftVal * rightVal; - case OP_Div: - return leftVal / rightVal; - case OP_Mod: - return fmod(leftVal, rightVal); - } - ASSERT_NOT_REACHED(); - return 0.0; -} - -EqTestOp::EqTestOp(Opcode opcode, Expression* lhs, Expression* rhs) - : m_opcode(opcode) -{ - addSubExpression(lhs); - addSubExpression(rhs); -} - -bool EqTestOp::compare(const Value& lhs, const Value& rhs) const -{ - if (lhs.isNodeSet()) { - const NodeSet& lhsSet = lhs.toNodeSet(); - if (rhs.isNodeSet()) { - // If both objects to be compared are node-sets, then the comparison will be true if and only if - // there is a node in the first node-set and a node in the second node-set such that the result of - // performing the comparison on the string-values of the two nodes is true. - const NodeSet& rhsSet = rhs.toNodeSet(); - for (unsigned lindex = 0; lindex < lhsSet.size(); ++lindex) - for (unsigned rindex = 0; rindex < rhsSet.size(); ++rindex) - if (compare(stringValue(lhsSet[lindex]), stringValue(rhsSet[rindex]))) - return true; - return false; - } - if (rhs.isNumber()) { - // If one object to be compared is a node-set and the other is a number, then the comparison will be true - // if and only if there is a node in the node-set such that the result of performing the comparison on the number - // to be compared and on the result of converting the string-value of that node to a number using the number function is true. - for (unsigned lindex = 0; lindex < lhsSet.size(); ++lindex) - if (compare(Value(stringValue(lhsSet[lindex])).toNumber(), rhs)) - return true; - return false; - } - if (rhs.isString()) { - // If one object to be compared is a node-set and the other is a string, then the comparison will be true - // if and only if there is a node in the node-set such that the result of performing the comparison on - // the string-value of the node and the other string is true. - for (unsigned lindex = 0; lindex < lhsSet.size(); ++lindex) - if (compare(stringValue(lhsSet[lindex]), rhs)) - return true; - return false; - } - if (rhs.isBoolean()) { - // If one object to be compared is a node-set and the other is a boolean, then the comparison will be true - // if and only if the result of performing the comparison on the boolean and on the result of converting - // the node-set to a boolean using the boolean function is true. - return compare(lhs.toBoolean(), rhs); - } - ASSERT(0); - } - if (rhs.isNodeSet()) { - const NodeSet& rhsSet = rhs.toNodeSet(); - if (lhs.isNumber()) { - for (unsigned rindex = 0; rindex < rhsSet.size(); ++rindex) - if (compare(lhs, Value(stringValue(rhsSet[rindex])).toNumber())) - return true; - return false; - } - if (lhs.isString()) { - for (unsigned rindex = 0; rindex < rhsSet.size(); ++rindex) - if (compare(lhs, stringValue(rhsSet[rindex]))) - return true; - return false; - } - if (lhs.isBoolean()) - return compare(lhs, rhs.toBoolean()); - ASSERT(0); - } - - // Neither side is a NodeSet. - switch (m_opcode) { - case OP_EQ: - case OP_NE: - bool equal; - if (lhs.isBoolean() || rhs.isBoolean()) - equal = lhs.toBoolean() == rhs.toBoolean(); - else if (lhs.isNumber() || rhs.isNumber()) - equal = lhs.toNumber() == rhs.toNumber(); - else - equal = lhs.toString() == rhs.toString(); - - if (m_opcode == OP_EQ) - return equal; - return !equal; - case OP_GT: - return lhs.toNumber() > rhs.toNumber(); - case OP_GE: - return lhs.toNumber() >= rhs.toNumber(); - case OP_LT: - return lhs.toNumber() < rhs.toNumber(); - case OP_LE: - return lhs.toNumber() <= rhs.toNumber(); - } - ASSERT(0); - return false; -} - -Value EqTestOp::evaluate() const -{ - Value lhs(subExpr(0)->evaluate()); - Value rhs(subExpr(1)->evaluate()); - - return compare(lhs, rhs); -} - -LogicalOp::LogicalOp(Opcode opcode, Expression* lhs, Expression* rhs) - : m_opcode(opcode) -{ - addSubExpression(lhs); - addSubExpression(rhs); -} - -bool LogicalOp::shortCircuitOn() const -{ - if (m_opcode == OP_And) - return false; //false and foo - - return true; //true or bar -} - -Value LogicalOp::evaluate() const -{ - Value lhs(subExpr(0)->evaluate()); - - // This is not only an optimization, http://www.w3.org/TR/xpath - // dictates that we must do short-circuit evaluation - bool lhsBool = lhs.toBoolean(); - if (lhsBool == shortCircuitOn()) - return lhsBool; - - return subExpr(1)->evaluate().toBoolean(); -} - -Value Union::evaluate() const -{ - Value lhsResult = subExpr(0)->evaluate(); - Value rhs = subExpr(1)->evaluate(); - - NodeSet& resultSet = lhsResult.modifiableNodeSet(); - const NodeSet& rhsNodes = rhs.toNodeSet(); - - HashSet<Node*> nodes; - for (size_t i = 0; i < resultSet.size(); ++i) - nodes.add(resultSet[i]); - - for (size_t i = 0; i < rhsNodes.size(); ++i) { - Node* node = rhsNodes[i]; - if (nodes.add(node).second) - resultSet.append(node); - } - - // It is also possible to use merge sort to avoid making the result unsorted; - // but this would waste the time in cases when order is not important. - resultSet.markSorted(false); - return lhsResult; -} - -Predicate::Predicate(Expression* expr) - : m_expr(expr) -{ -} - -Predicate::~Predicate() -{ - delete m_expr; -} - -bool Predicate::evaluate() const -{ - ASSERT(m_expr != 0); - - Value result(m_expr->evaluate()); - - // foo[3] means foo[position()=3] - if (result.isNumber()) - return EqTestOp(EqTestOp::OP_EQ, createFunction("position"), new Number(result.toNumber())).evaluate().toBoolean(); - - return result.toBoolean(); -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathPredicate.h b/src/3rdparty/webkit/WebCore/xml/XPathPredicate.h deleted file mode 100644 index 5f2482a..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathPredicate.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathPredicate_h -#define XPathPredicate_h - -#if ENABLE(XPATH) - -#include "XPathExpressionNode.h" -#include "XPathValue.h" - -namespace WebCore { - - namespace XPath { - - class Number : public Expression { - public: - Number(double); - private: - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } - - Value m_value; - }; - - class StringExpression : public Expression { - public: - StringExpression(const String&); - private: - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::StringValue; } - - Value m_value; - }; - - class Negative : public Expression { - private: - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } - }; - - class NumericOp : public Expression { - public: - enum Opcode { - OP_Add, OP_Sub, OP_Mul, OP_Div, OP_Mod - }; - NumericOp(Opcode, Expression* lhs, Expression* rhs); - private: - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NumberValue; } - - Opcode m_opcode; - }; - - class EqTestOp : public Expression { - public: - enum Opcode { OP_EQ, OP_NE, OP_GT, OP_LT, OP_GE, OP_LE }; - EqTestOp(Opcode, Expression* lhs, Expression* rhs); - virtual Value evaluate() const; - private: - virtual Value::Type resultType() const { return Value::BooleanValue; } - bool compare(const Value&, const Value&) const; - - Opcode m_opcode; - }; - - class LogicalOp : public Expression { - public: - enum Opcode { OP_And, OP_Or }; - LogicalOp(Opcode, Expression* lhs, Expression* rhs); - private: - virtual Value::Type resultType() const { return Value::BooleanValue; } - bool shortCircuitOn() const; - virtual Value evaluate() const; - - Opcode m_opcode; - }; - - class Union : public Expression { - private: - virtual Value evaluate() const; - virtual Value::Type resultType() const { return Value::NodeSetValue; } - }; - - class Predicate : public Noncopyable { - public: - Predicate(Expression*); - ~Predicate(); - bool evaluate() const; - - bool isContextPositionSensitive() const { return m_expr->isContextPositionSensitive() || m_expr->resultType() == Value::NumberValue; } - bool isContextSizeSensitive() const { return m_expr->isContextSizeSensitive(); } - - private: - Expression* m_expr; - }; - - } - -} - -#endif // ENABLE(XPATH) - -#endif // XPathPredicate_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathResult.cpp b/src/3rdparty/webkit/WebCore/xml/XPathResult.cpp deleted file mode 100644 index b608280..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathResult.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathResult.h" - -#if ENABLE(XPATH) - -#include "Document.h" -#include "Node.h" -#include "ExceptionCode.h" -#include "XPathEvaluator.h" -#include "XPathException.h" - -namespace WebCore { - -using namespace XPath; - -XPathResult::XPathResult(Document* document, const Value& value) - : m_value(value) -{ - switch (m_value.type()) { - case Value::BooleanValue: - m_resultType = BOOLEAN_TYPE; - return; - case Value::NumberValue: - m_resultType = NUMBER_TYPE; - return; - case Value::StringValue: - m_resultType = STRING_TYPE; - return; - case Value::NodeSetValue: - m_resultType = UNORDERED_NODE_ITERATOR_TYPE; - m_nodeSetPosition = 0; - m_nodeSet = m_value.toNodeSet(); - m_document = document; - m_domTreeVersion = document->domTreeVersion(); - return; - } - ASSERT_NOT_REACHED(); -} - -XPathResult::~XPathResult() -{ -} - -void XPathResult::convertTo(unsigned short type, ExceptionCode& ec) -{ - switch (type) { - case ANY_TYPE: - break; - case NUMBER_TYPE: - m_resultType = type; - m_value = m_value.toNumber(); - break; - case STRING_TYPE: - m_resultType = type; - m_value = m_value.toString(); - break; - case BOOLEAN_TYPE: - m_resultType = type; - m_value = m_value.toBoolean(); - break; - case UNORDERED_NODE_ITERATOR_TYPE: - case UNORDERED_NODE_SNAPSHOT_TYPE: - case ANY_UNORDERED_NODE_TYPE: - case FIRST_ORDERED_NODE_TYPE: // This is correct - singleNodeValue() will take care of ordering. - if (!m_value.isNodeSet()) { - ec = XPathException::TYPE_ERR; - return; - } - m_resultType = type; - break; - case ORDERED_NODE_ITERATOR_TYPE: - if (!m_value.isNodeSet()) { - ec = XPathException::TYPE_ERR; - return; - } - m_nodeSet.sort(); - m_resultType = type; - break; - case ORDERED_NODE_SNAPSHOT_TYPE: - if (!m_value.isNodeSet()) { - ec = XPathException::TYPE_ERR; - return; - } - m_value.toNodeSet().sort(); - m_resultType = type; - break; - } -} - -unsigned short XPathResult::resultType() const -{ - return m_resultType; -} - -double XPathResult::numberValue(ExceptionCode& ec) const -{ - if (resultType() != NUMBER_TYPE) { - ec = XPathException::TYPE_ERR; - return 0.0; - } - return m_value.toNumber(); -} - -String XPathResult::stringValue(ExceptionCode& ec) const -{ - if (resultType() != STRING_TYPE) { - ec = XPathException::TYPE_ERR; - return String(); - } - return m_value.toString(); -} - -bool XPathResult::booleanValue(ExceptionCode& ec) const -{ - if (resultType() != BOOLEAN_TYPE) { - ec = XPathException::TYPE_ERR; - return false; - } - return m_value.toBoolean(); -} - -Node* XPathResult::singleNodeValue(ExceptionCode& ec) const -{ - if (resultType() != ANY_UNORDERED_NODE_TYPE && resultType() != FIRST_ORDERED_NODE_TYPE) { - ec = XPathException::TYPE_ERR; - return 0; - } - - const NodeSet& nodes = m_value.toNodeSet(); - if (resultType() == FIRST_ORDERED_NODE_TYPE) - return nodes.firstNode(); - else - return nodes.anyNode(); -} - -bool XPathResult::invalidIteratorState() const -{ - if (resultType() != UNORDERED_NODE_ITERATOR_TYPE && resultType() != ORDERED_NODE_ITERATOR_TYPE) - return false; - - ASSERT(m_document); - return m_document->domTreeVersion() != m_domTreeVersion; -} - -unsigned long XPathResult::snapshotLength(ExceptionCode& ec) const -{ - if (resultType() != UNORDERED_NODE_SNAPSHOT_TYPE && resultType() != ORDERED_NODE_SNAPSHOT_TYPE) { - ec = XPathException::TYPE_ERR; - return 0; - } - - return m_value.toNodeSet().size(); -} - -Node* XPathResult::iterateNext(ExceptionCode& ec) -{ - if (resultType() != UNORDERED_NODE_ITERATOR_TYPE && resultType() != ORDERED_NODE_ITERATOR_TYPE) { - ec = XPathException::TYPE_ERR; - return 0; - } - - if (invalidIteratorState()) { - ec = INVALID_STATE_ERR; - return 0; - } - - if (m_nodeSetPosition + 1 > m_nodeSet.size()) - return 0; - - Node* node = m_nodeSet[m_nodeSetPosition]; - - m_nodeSetPosition++; - - return node; -} - -Node* XPathResult::snapshotItem(unsigned long index, ExceptionCode& ec) -{ - if (resultType() != UNORDERED_NODE_SNAPSHOT_TYPE && resultType() != ORDERED_NODE_SNAPSHOT_TYPE) { - ec = XPathException::TYPE_ERR; - return 0; - } - - const NodeSet& nodes = m_value.toNodeSet(); - if (index >= nodes.size()) - return 0; - - return nodes[index]; -} - -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathResult.h b/src/3rdparty/webkit/WebCore/xml/XPathResult.h deleted file mode 100644 index 3b91d66..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathResult.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathResult_h -#define XPathResult_h - -#if ENABLE(XPATH) - -#include "XPathValue.h" -#include <wtf/RefCounted.h> - -namespace WebCore { - - typedef int ExceptionCode; - - class Document; - class Node; - class String; - - class XPathResult : public RefCounted<XPathResult> { - public: - enum XPathResultType { - ANY_TYPE = 0, - NUMBER_TYPE = 1, - STRING_TYPE = 2, - BOOLEAN_TYPE = 3, - UNORDERED_NODE_ITERATOR_TYPE = 4, - ORDERED_NODE_ITERATOR_TYPE = 5, - UNORDERED_NODE_SNAPSHOT_TYPE = 6, - ORDERED_NODE_SNAPSHOT_TYPE = 7, - ANY_UNORDERED_NODE_TYPE = 8, - FIRST_ORDERED_NODE_TYPE = 9 - }; - - static PassRefPtr<XPathResult> create(Document* document, const XPath::Value& value) { return adoptRef(new XPathResult(document, value)); } - ~XPathResult(); - - void convertTo(unsigned short type, ExceptionCode&); - - unsigned short resultType() const; - - double numberValue(ExceptionCode&) const; - String stringValue(ExceptionCode&) const; - bool booleanValue(ExceptionCode&) const; - Node* singleNodeValue(ExceptionCode&) const; - - bool invalidIteratorState() const; - unsigned long snapshotLength(ExceptionCode&) const; - Node* iterateNext(ExceptionCode&); - Node* snapshotItem(unsigned long index, ExceptionCode&); - - private: - XPathResult(Document*, const XPath::Value&); - - XPath::Value m_value; - unsigned m_nodeSetPosition; - XPath::NodeSet m_nodeSet; // FIXME: why duplicate the node set stored in m_value? - unsigned short m_resultType; - RefPtr<Document> m_document; - unsigned m_domTreeVersion; - }; - -} // namespace WebCore - -#endif // ENABLE(XPATH) - -#endif // XPathResult_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathResult.idl b/src/3rdparty/webkit/WebCore/xml/XPathResult.idl deleted file mode 100644 index ebbff42..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathResult.idl +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2006 Apple Computer, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -module xpath { - - interface [Conditional=XPATH] XPathResult { - const unsigned short ANY_TYPE = 0; - const unsigned short NUMBER_TYPE = 1; - const unsigned short STRING_TYPE = 2; - const unsigned short BOOLEAN_TYPE = 3; - const unsigned short UNORDERED_NODE_ITERATOR_TYPE = 4; - const unsigned short ORDERED_NODE_ITERATOR_TYPE = 5; - const unsigned short UNORDERED_NODE_SNAPSHOT_TYPE = 6; - const unsigned short ORDERED_NODE_SNAPSHOT_TYPE = 7; - const unsigned short ANY_UNORDERED_NODE_TYPE = 8; - const unsigned short FIRST_ORDERED_NODE_TYPE = 9; - - readonly attribute unsigned short resultType; - readonly attribute double numberValue - getter raises (DOMException); - - readonly attribute DOMString stringValue - getter raises (DOMException); - - readonly attribute boolean booleanValue - getter raises (DOMException); - - readonly attribute Node singleNodeValue - getter raises (DOMException); - - readonly attribute boolean invalidIteratorState; - readonly attribute unsigned long snapshotLength - getter raises (DOMException); - - Node iterateNext() - raises (DOMException); - Node snapshotItem(in unsigned long index) - raises (DOMException); - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XPathStep.cpp b/src/3rdparty/webkit/WebCore/xml/XPathStep.cpp deleted file mode 100644 index 6e60952..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathStep.cpp +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathStep.h" - -#if ENABLE(XPATH) - -#include "Attr.h" -#include "Document.h" -#include "Element.h" -#include "NamedNodeMap.h" -#include "XMLNSNames.h" -#include "XPathParser.h" -#include "XPathUtil.h" - -namespace WebCore { -namespace XPath { - -Step::Step(Axis axis, const NodeTest& nodeTest, const Vector<Predicate*>& predicates) - : m_axis(axis) - , m_nodeTest(nodeTest) - , m_predicates(predicates) -{ -} - -Step::~Step() -{ - deleteAllValues(m_predicates); - deleteAllValues(m_nodeTest.mergedPredicates()); -} - -void Step::optimize() -{ - // Evaluate predicates as part of node test if possible to avoid building unnecessary NodeSets. - // E.g., there is no need to build a set of all "foo" nodes to evaluate "foo[@bar]", we can check the predicate while enumerating. - // This optimization can be applied to predicates that are not context node list sensitive, or to first predicate that is only context position sensitive, e.g. foo[position() mod 2 = 0]. - Vector<Predicate*> remainingPredicates; - for (size_t i = 0; i < m_predicates.size(); ++i) { - Predicate* predicate = m_predicates[i]; - if ((!predicate->isContextPositionSensitive() || m_nodeTest.mergedPredicates().isEmpty()) && !predicate->isContextSizeSensitive() && remainingPredicates.isEmpty()) { - m_nodeTest.mergedPredicates().append(predicate); - } else - remainingPredicates.append(predicate); - } - swap(remainingPredicates, m_predicates); -} - -void optimizeStepPair(Step* first, Step* second, bool& dropSecondStep) -{ - dropSecondStep = false; - - if (first->m_axis == Step::DescendantOrSelfAxis - && first->m_nodeTest.kind() == Step::NodeTest::AnyNodeTest - && !first->m_predicates.size() - && !first->m_nodeTest.mergedPredicates().size()) { - - ASSERT(first->m_nodeTest.data().isEmpty()); - ASSERT(first->m_nodeTest.namespaceURI().isEmpty()); - - // Optimize the common case of "//" AKA /descendant-or-self::node()/child::NodeTest to /descendant::NodeTest. - if (second->m_axis == Step::ChildAxis && second->predicatesAreContextListInsensitive()) { - first->m_axis = Step::DescendantAxis; - first->m_nodeTest = Step::NodeTest(second->m_nodeTest.kind(), second->m_nodeTest.data(), second->m_nodeTest.namespaceURI()); - swap(second->m_nodeTest.mergedPredicates(), first->m_nodeTest.mergedPredicates()); - swap(second->m_predicates, first->m_predicates); - first->optimize(); - dropSecondStep = true; - } - } -} - -bool Step::predicatesAreContextListInsensitive() const -{ - for (size_t i = 0; i < m_predicates.size(); ++i) { - Predicate* predicate = m_predicates[i]; - if (predicate->isContextPositionSensitive() || predicate->isContextSizeSensitive()) - return false; - } - - for (size_t i = 0; i < m_nodeTest.mergedPredicates().size(); ++i) { - Predicate* predicate = m_nodeTest.mergedPredicates()[i]; - if (predicate->isContextPositionSensitive() || predicate->isContextSizeSensitive()) - return false; - } - - return true; -} - -void Step::evaluate(Node* context, NodeSet& nodes) const -{ - EvaluationContext& evaluationContext = Expression::evaluationContext(); - evaluationContext.position = 0; - - nodesInAxis(context, nodes); - - // Check predicates that couldn't be merged into node test. - for (unsigned i = 0; i < m_predicates.size(); i++) { - Predicate* predicate = m_predicates[i]; - - NodeSet newNodes; - if (!nodes.isSorted()) - newNodes.markSorted(false); - - for (unsigned j = 0; j < nodes.size(); j++) { - Node* node = nodes[j]; - - evaluationContext.node = node; - evaluationContext.size = nodes.size(); - evaluationContext.position = j + 1; - if (predicate->evaluate()) - newNodes.append(node); - } - - nodes.swap(newNodes); - } -} - -static inline Node::NodeType primaryNodeType(Step::Axis axis) -{ - switch (axis) { - case Step::AttributeAxis: - return Node::ATTRIBUTE_NODE; - case Step::NamespaceAxis: - return Node::XPATH_NAMESPACE_NODE; - default: - return Node::ELEMENT_NODE; - } -} - -// Evaluate NodeTest without considering merged predicates. -static inline bool nodeMatchesBasicTest(Node* node, Step::Axis axis, const Step::NodeTest& nodeTest) -{ - switch (nodeTest.kind()) { - case Step::NodeTest::TextNodeTest: - return node->nodeType() == Node::TEXT_NODE || node->nodeType() == Node::CDATA_SECTION_NODE; - case Step::NodeTest::CommentNodeTest: - return node->nodeType() == Node::COMMENT_NODE; - case Step::NodeTest::ProcessingInstructionNodeTest: { - const AtomicString& name = nodeTest.data(); - return node->nodeType() == Node::PROCESSING_INSTRUCTION_NODE && (name.isEmpty() || node->nodeName() == name); - } - case Step::NodeTest::AnyNodeTest: - return true; - case Step::NodeTest::NameTest: { - const AtomicString& name = nodeTest.data(); - const AtomicString& namespaceURI = nodeTest.namespaceURI(); - - if (axis == Step::AttributeAxis) { - ASSERT(node->isAttributeNode()); - - // In XPath land, namespace nodes are not accessible on the attribute axis. - if (node->namespaceURI() == XMLNSNames::xmlnsNamespaceURI) - return false; - - if (name == starAtom) - return namespaceURI.isEmpty() || node->namespaceURI() == namespaceURI; - - return node->localName() == name && node->namespaceURI() == namespaceURI; - } - - // Node test on the namespace axis is not implemented yet, the caller has a check for it. - ASSERT(axis != Step::NamespaceAxis); - - // For other axes, the principal node type is element. - ASSERT(primaryNodeType(axis) == Node::ELEMENT_NODE); - if (node->nodeType() != Node::ELEMENT_NODE) - return false; - - if (name == starAtom) - return namespaceURI.isEmpty() || namespaceURI == node->namespaceURI(); - - if (node->document()->isHTMLDocument()) { - if (node->isHTMLElement()) { - // Paths without namespaces should match HTML elements in HTML documents despite those having an XHTML namespace. Names are compared case-insensitively. - return equalIgnoringCase(static_cast<Element*>(node)->localName(), name) && (namespaceURI.isNull() || namespaceURI == node->namespaceURI()); - } - // An expression without any prefix shouldn't match no-namespace nodes (because HTML5 says so). - return static_cast<Element*>(node)->hasLocalName(name) && namespaceURI == node->namespaceURI() && !namespaceURI.isNull(); - } - return static_cast<Element*>(node)->hasLocalName(name) && namespaceURI == node->namespaceURI(); - } - } - ASSERT_NOT_REACHED(); - return false; -} - -static inline bool nodeMatches(Node* node, Step::Axis axis, const Step::NodeTest& nodeTest) -{ - if (!nodeMatchesBasicTest(node, axis, nodeTest)) - return false; - - EvaluationContext& evaluationContext = Expression::evaluationContext(); - - // Only the first merged predicate may depend on position. - ++evaluationContext.position; - - const Vector<Predicate*>& mergedPredicates = nodeTest.mergedPredicates(); - for (unsigned i = 0; i < mergedPredicates.size(); i++) { - Predicate* predicate = mergedPredicates[i]; - - evaluationContext.node = node; - // No need to set context size - we only get here when evaluating predicates that do not depend on it. - if (!predicate->evaluate()) - return false; - } - - return true; -} - -// Result nodes are ordered in axis order. Node test (including merged predicates) is applied. -void Step::nodesInAxis(Node* context, NodeSet& nodes) const -{ - ASSERT(nodes.isEmpty()); - switch (m_axis) { - case ChildAxis: - if (context->isAttributeNode()) // In XPath model, attribute nodes do not have children. - return; - - for (Node* n = context->firstChild(); n; n = n->nextSibling()) - if (nodeMatches(n, ChildAxis, m_nodeTest)) - nodes.append(n); - return; - case DescendantAxis: - if (context->isAttributeNode()) // In XPath model, attribute nodes do not have children. - return; - - for (Node* n = context->firstChild(); n; n = n->traverseNextNode(context)) - if (nodeMatches(n, DescendantAxis, m_nodeTest)) - nodes.append(n); - return; - case ParentAxis: - if (context->isAttributeNode()) { - Node* n = static_cast<Attr*>(context)->ownerElement(); - if (nodeMatches(n, ParentAxis, m_nodeTest)) - nodes.append(n); - } else { - Node* n = context->parentNode(); - if (n && nodeMatches(n, ParentAxis, m_nodeTest)) - nodes.append(n); - } - return; - case AncestorAxis: { - Node* n = context; - if (context->isAttributeNode()) { - n = static_cast<Attr*>(context)->ownerElement(); - if (nodeMatches(n, AncestorAxis, m_nodeTest)) - nodes.append(n); - } - for (n = n->parentNode(); n; n = n->parentNode()) - if (nodeMatches(n, AncestorAxis, m_nodeTest)) - nodes.append(n); - nodes.markSorted(false); - return; - } - case FollowingSiblingAxis: - if (context->nodeType() == Node::ATTRIBUTE_NODE || - context->nodeType() == Node::XPATH_NAMESPACE_NODE) - return; - - for (Node* n = context->nextSibling(); n; n = n->nextSibling()) - if (nodeMatches(n, FollowingSiblingAxis, m_nodeTest)) - nodes.append(n); - return; - case PrecedingSiblingAxis: - if (context->nodeType() == Node::ATTRIBUTE_NODE || - context->nodeType() == Node::XPATH_NAMESPACE_NODE) - return; - - for (Node* n = context->previousSibling(); n; n = n->previousSibling()) - if (nodeMatches(n, PrecedingSiblingAxis, m_nodeTest)) - nodes.append(n); - - nodes.markSorted(false); - return; - case FollowingAxis: - if (context->isAttributeNode()) { - Node* p = static_cast<Attr*>(context)->ownerElement(); - while ((p = p->traverseNextNode())) - if (nodeMatches(p, FollowingAxis, m_nodeTest)) - nodes.append(p); - } else { - for (Node* p = context; !isRootDomNode(p); p = p->parentNode()) { - for (Node* n = p->nextSibling(); n; n = n->nextSibling()) { - if (nodeMatches(n, FollowingAxis, m_nodeTest)) - nodes.append(n); - for (Node* c = n->firstChild(); c; c = c->traverseNextNode(n)) - if (nodeMatches(c, FollowingAxis, m_nodeTest)) - nodes.append(c); - } - } - } - return; - case PrecedingAxis: { - if (context->isAttributeNode()) - context = static_cast<Attr*>(context)->ownerElement(); - - Node* n = context; - while (Node* parent = n->parent()) { - for (n = n->traversePreviousNode(); n != parent; n = n->traversePreviousNode()) - if (nodeMatches(n, PrecedingAxis, m_nodeTest)) - nodes.append(n); - n = parent; - } - nodes.markSorted(false); - return; - } - case AttributeAxis: { - if (context->nodeType() != Node::ELEMENT_NODE) - return; - - // Avoid lazily creating attribute nodes for attributes that we do not need anyway. - if (m_nodeTest.kind() == NodeTest::NameTest && m_nodeTest.data() != starAtom) { - RefPtr<Node> n = static_cast<Element*>(context)->getAttributeNodeNS(m_nodeTest.namespaceURI(), m_nodeTest.data()); - if (n && n->namespaceURI() != XMLNSNames::xmlnsNamespaceURI) { // In XPath land, namespace nodes are not accessible on the attribute axis. - if (nodeMatches(n.get(), AttributeAxis, m_nodeTest)) // Still need to check merged predicates. - nodes.append(n.release()); - } - return; - } - - NamedNodeMap* attrs = context->attributes(); - if (!attrs) - return; - - for (unsigned i = 0; i < attrs->length(); ++i) { - RefPtr<Attr> attr = attrs->attributeItem(i)->createAttrIfNeeded(static_cast<Element*>(context)); - if (nodeMatches(attr.get(), AttributeAxis, m_nodeTest)) - nodes.append(attr.release()); - } - return; - } - case NamespaceAxis: - // XPath namespace nodes are not implemented yet. - return; - case SelfAxis: - if (nodeMatches(context, SelfAxis, m_nodeTest)) - nodes.append(context); - return; - case DescendantOrSelfAxis: - if (nodeMatches(context, DescendantOrSelfAxis, m_nodeTest)) - nodes.append(context); - if (context->isAttributeNode()) // In XPath model, attribute nodes do not have children. - return; - - for (Node* n = context->firstChild(); n; n = n->traverseNextNode(context)) - if (nodeMatches(n, DescendantOrSelfAxis, m_nodeTest)) - nodes.append(n); - return; - case AncestorOrSelfAxis: { - if (nodeMatches(context, AncestorOrSelfAxis, m_nodeTest)) - nodes.append(context); - Node* n = context; - if (context->isAttributeNode()) { - n = static_cast<Attr*>(context)->ownerElement(); - if (nodeMatches(n, AncestorOrSelfAxis, m_nodeTest)) - nodes.append(n); - } - for (n = n->parentNode(); n; n = n->parentNode()) - if (nodeMatches(n, AncestorOrSelfAxis, m_nodeTest)) - nodes.append(n); - - nodes.markSorted(false); - return; - } - } - ASSERT_NOT_REACHED(); -} - - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathStep.h b/src/3rdparty/webkit/WebCore/xml/XPathStep.h deleted file mode 100644 index ec022b3..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathStep.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathStep_h -#define XPathStep_h - -#if ENABLE(XPATH) - -#include "Node.h" -#include "XPathExpressionNode.h" -#include "XPathNodeSet.h" - -namespace WebCore { - - namespace XPath { - - class Predicate; - - class Step : public ParseNode, public Noncopyable { - public: - enum Axis { - AncestorAxis, AncestorOrSelfAxis, AttributeAxis, - ChildAxis, DescendantAxis, DescendantOrSelfAxis, - FollowingAxis, FollowingSiblingAxis, NamespaceAxis, - ParentAxis, PrecedingAxis, PrecedingSiblingAxis, - SelfAxis - }; - - class NodeTest : public FastAllocBase { - public: - enum Kind { - TextNodeTest, CommentNodeTest, ProcessingInstructionNodeTest, AnyNodeTest, NameTest - }; - - NodeTest(Kind kind) : m_kind(kind) {} - NodeTest(Kind kind, const String& data) : m_kind(kind), m_data(data) {} - NodeTest(Kind kind, const String& data, const String& namespaceURI) : m_kind(kind), m_data(data), m_namespaceURI(namespaceURI) {} - - Kind kind() const { return m_kind; } - const AtomicString& data() const { return m_data; } - const AtomicString& namespaceURI() const { return m_namespaceURI; } - Vector<Predicate*>& mergedPredicates() { return m_mergedPredicates; } - const Vector<Predicate*>& mergedPredicates() const { return m_mergedPredicates; } - - private: - Kind m_kind; - AtomicString m_data; - AtomicString m_namespaceURI; - - // When possible, we merge some or all predicates with node test for better performance. - Vector<Predicate*> m_mergedPredicates; - }; - - Step(Axis, const NodeTest& nodeTest, const Vector<Predicate*>& predicates = Vector<Predicate*>()); - ~Step(); - - void optimize(); - - void evaluate(Node* context, NodeSet&) const; - - Axis axis() const { return m_axis; } - const NodeTest& nodeTest() const { return m_nodeTest; } - - private: - friend void optimizeStepPair(Step*, Step*, bool&); - bool predicatesAreContextListInsensitive() const; - - void parseNodeTest(const String&); - void nodesInAxis(Node* context, NodeSet&) const; - String namespaceFromNodetest(const String& nodeTest) const; - - Axis m_axis; - NodeTest m_nodeTest; - Vector<Predicate*> m_predicates; - }; - - void optimizeStepPair(Step*, Step*, bool& dropSecondStep); - } - -} - -#endif // ENABLE(XPATH) - -#endif // XPathStep_h diff --git a/src/3rdparty/webkit/WebCore/xml/XPathUtil.cpp b/src/3rdparty/webkit/WebCore/xml/XPathUtil.cpp deleted file mode 100644 index 0100bea..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathUtil.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006, 2009 Apple Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathUtil.h" - -#if ENABLE(XPATH) - -#include "ContainerNode.h" - -namespace WebCore { -namespace XPath { - -bool isRootDomNode(Node* node) -{ - return node && !node->parentNode(); -} - -String stringValue(Node* node) -{ - switch (node->nodeType()) { - case Node::ATTRIBUTE_NODE: - case Node::PROCESSING_INSTRUCTION_NODE: - case Node::COMMENT_NODE: - case Node::TEXT_NODE: - case Node::CDATA_SECTION_NODE: - case Node::XPATH_NAMESPACE_NODE: - return node->nodeValue(); - default: - if (isRootDomNode(node) || node->nodeType() == Node::ELEMENT_NODE) { - Vector<UChar> result; - result.reserveCapacity(1024); - - for (Node* n = node->firstChild(); n; n = n->traverseNextNode(node)) { - if (n->isTextNode()) { - const String& nodeValue = n->nodeValue(); - result.append(nodeValue.characters(), nodeValue.length()); - } - } - - return String::adopt(result); - } - } - - return String(); -} - -bool isValidContextNode(Node* node) -{ - if (!node) - return false; - switch (node->nodeType()) { - case Node::ATTRIBUTE_NODE: - case Node::CDATA_SECTION_NODE: - case Node::COMMENT_NODE: - case Node::DOCUMENT_NODE: - case Node::ELEMENT_NODE: - case Node::PROCESSING_INSTRUCTION_NODE: - case Node::XPATH_NAMESPACE_NODE: - return true; - case Node::DOCUMENT_FRAGMENT_NODE: - case Node::DOCUMENT_TYPE_NODE: - case Node::ENTITY_NODE: - case Node::ENTITY_REFERENCE_NODE: - case Node::NOTATION_NODE: - return false; - case Node::TEXT_NODE: - return !(node->parentNode() && node->parentNode()->isAttributeNode()); - } - ASSERT_NOT_REACHED(); - return false; -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathUtil.h b/src/3rdparty/webkit/WebCore/xml/XPathUtil.h deleted file mode 100644 index 30f21ae..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathUtil.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathUtil_h -#define XPathUtil_h - -#if ENABLE(XPATH) - -#include <wtf/Vector.h> - -namespace WebCore { - - class Node; - class String; - - namespace XPath { - - /* @return whether the given node is the root node */ - bool isRootDomNode(Node*); - - /* @return the 'string-value' of the given node as specified by http://www.w3.org/TR/xpath */ - String stringValue(Node*); - - /* @return whether the given node is a valid context node */ - bool isValidContextNode(Node*); - - } - -} - -#endif // ENABLE(XPATH) - -#endif // XPath_Util_H diff --git a/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp b/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp deleted file mode 100644 index f5acb38..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathValue.h" - -#if ENABLE(XPATH) - -#include "Node.h" -#include "XPathExpressionNode.h" -#include "XPathUtil.h" -#include <limits> -#include <wtf/MathExtras.h> -#include <wtf/StdLibExtras.h> - -using std::numeric_limits; - -namespace WebCore { -namespace XPath { - -const Value::AdoptTag Value::adopt = {}; - -const NodeSet& Value::toNodeSet() const -{ - if (!isNodeSet()) - Expression::evaluationContext().hadTypeConversionError = true; - - if (!m_data) { - DEFINE_STATIC_LOCAL(NodeSet, emptyNodeSet, ()); - return emptyNodeSet; - } - - return m_data->m_nodeSet; -} - -NodeSet& Value::modifiableNodeSet() -{ - if (!isNodeSet()) - Expression::evaluationContext().hadTypeConversionError = true; - - if (!m_data) - m_data = ValueData::create(); - - m_type = NodeSetValue; - return m_data->m_nodeSet; -} - -#if COMPILER(WINSCW) -// FIXME --nl-- Symbian WINSCW compiler complains with 'ambiguous access to overloaded function' (double, unsigned long, unsigned int) -unsigned int Value::toBoolean() const -#else -bool Value::toBoolean() const -#endif -{ - switch (m_type) { - case NodeSetValue: - return !m_data->m_nodeSet.isEmpty(); - case BooleanValue: - return m_bool; - case NumberValue: - return m_number != 0 && !isnan(m_number); - case StringValue: - return !m_data->m_string.isEmpty(); - } - ASSERT_NOT_REACHED(); - return false; -} - -double Value::toNumber() const -{ - switch (m_type) { - case NodeSetValue: - return Value(toString()).toNumber(); - case NumberValue: - return m_number; - case StringValue: { - const String& str = m_data->m_string.simplifyWhiteSpace(); - - // String::toDouble() supports exponential notation, which is not allowed in XPath. - unsigned len = str.length(); - for (unsigned i = 0; i < len; ++i) { - UChar c = str[i]; - if (!isASCIIDigit(c) && c != '.' && c != '-') - return numeric_limits<double>::quiet_NaN(); - } - - bool canConvert; - double value = str.toDouble(&canConvert); - if (canConvert) - return value; - return numeric_limits<double>::quiet_NaN(); - } - case BooleanValue: - return m_bool; - } - ASSERT_NOT_REACHED(); - return 0.0; -} - -String Value::toString() const -{ - switch (m_type) { - case NodeSetValue: - if (m_data->m_nodeSet.isEmpty()) - return ""; - return stringValue(m_data->m_nodeSet.firstNode()); - case StringValue: - return m_data->m_string; - case NumberValue: - if (isnan(m_number)) - return "NaN"; - if (m_number == 0) - return "0"; - if (isinf(m_number)) - return signbit(m_number) ? "-Infinity" : "Infinity"; - return String::number(m_number); - case BooleanValue: - return m_bool ? "true" : "false"; - } - ASSERT_NOT_REACHED(); - return String(); -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathValue.h b/src/3rdparty/webkit/WebCore/xml/XPathValue.h deleted file mode 100644 index bd44c91..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathValue.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathValue_h -#define XPathValue_h - -#if ENABLE(XPATH) - -#include "PlatformString.h" -#include "XPathNodeSet.h" - -namespace WebCore { - - namespace XPath { - - class ValueData : public RefCounted<ValueData> { - public: - static PassRefPtr<ValueData> create() { return adoptRef(new ValueData); } - static PassRefPtr<ValueData> create(const NodeSet& nodeSet) { return adoptRef(new ValueData(nodeSet)); } - static PassRefPtr<ValueData> create(const String& string) { return adoptRef(new ValueData(string)); } - - NodeSet m_nodeSet; - String m_string; - - private: - ValueData() { } - ValueData(const NodeSet& nodeSet) : m_nodeSet(nodeSet) { } - ValueData(const String& string) : m_string(string) { } - }; - - // Copying Value objects makes their data partially shared, so care has to be taken when dealing with copies. - class Value { - public: - enum Type { NodeSetValue, BooleanValue, NumberValue, StringValue }; - - Value(unsigned value) : m_type(NumberValue), m_bool(false), m_number(value) {} - Value(unsigned long value) : m_type(NumberValue), m_bool(false), m_number(value) {} - Value(double value) : m_type(NumberValue), m_bool(false), m_number(value) {} - - Value(const char* value) : m_type(StringValue), m_bool(false), m_number(0), m_data(ValueData::create(value)) {} - Value(const String& value) : m_type(StringValue), m_bool(false), m_number(0), m_data(ValueData::create(value)) {} - Value(const NodeSet& value) : m_type(NodeSetValue), m_bool(false), m_number(0), m_data(ValueData::create(value)) {} - Value(Node* value) : m_type(NodeSetValue), m_bool(false), m_number(0), m_data(ValueData::create()) { m_data->m_nodeSet.append(value); } - - // This is needed to safely implement constructing from bool - with normal function overloading, any pointer type would match. -#if COMPILER(WINSCW) - Value(bool); -#else - template<typename T> Value(T); -#endif - static const struct AdoptTag {} adopt; - Value(NodeSet& value, const AdoptTag&) : m_type(NodeSetValue), m_bool(false), m_number(0), m_data(ValueData::create()) { value.swap(m_data->m_nodeSet); } - - Type type() const { return m_type; } - - bool isNodeSet() const { return m_type == NodeSetValue; } - bool isBoolean() const { return m_type == BooleanValue; } - bool isNumber() const { return m_type == NumberValue; } - bool isString() const { return m_type == StringValue; } - - const NodeSet& toNodeSet() const; - NodeSet& modifiableNodeSet(); -#if COMPILER(WINSCW) - // FIXME --nl-- Symbian WINSCW compiler complains with 'ambiguous access to overloaded function' (double, unsigned long, unsigned int) - unsigned int toBoolean() const; -#else - bool toBoolean() const; -#endif - double toNumber() const; - String toString() const; - - private: - Type m_type; - bool m_bool; - double m_number; - RefPtr<ValueData> m_data; - }; -#if !COMPILER(WINSCW) - template<> -#endif - inline Value::Value(bool value) - : m_type(BooleanValue) - , m_bool(value) - , m_number(0) - { - } - } -} - -#endif // ENABLE(XPATH) - -#endif // XPath_Value_H diff --git a/src/3rdparty/webkit/WebCore/xml/XPathVariableReference.cpp b/src/3rdparty/webkit/WebCore/xml/XPathVariableReference.cpp deleted file mode 100644 index efe9cf9..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathVariableReference.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * Copyright (C) 2006 Apple Computer, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XPathVariableReference.h" - -#if ENABLE(XPATH) - -#include "Node.h" -#include "XPathValue.h" - -namespace WebCore { -namespace XPath { - -VariableReference::VariableReference(const String& name) - : m_name(name) -{ -} - -Value VariableReference::evaluate() const -{ - HashMap<String, String>& bindings = evaluationContext().variableBindings; - if (!bindings.contains(m_name)) - // FIXME: Is this the right thing to do if an unknown variable is referenced? - return ""; - return bindings.get(m_name); -} - -} -} - -#endif // ENABLE(XPATH) diff --git a/src/3rdparty/webkit/WebCore/xml/XPathVariableReference.h b/src/3rdparty/webkit/WebCore/xml/XPathVariableReference.h deleted file mode 100644 index 5e5a59a..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XPathVariableReference.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2005 Frerich Raabe <raabe@kde.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XPathVariableReference_h -#define XPathVariableReference_h - -#if ENABLE(XPATH) - -#include "XPathExpressionNode.h" - -namespace WebCore { - - namespace XPath { - - // Variable references are not used with XPathEvaluator. - class VariableReference : public Expression { - public: - VariableReference(const String& name); - private: - virtual Value evaluate() const; - virtual Value::Type resultType() const { ASSERT_NOT_REACHED(); return Value::NumberValue; } - String m_name; - }; - - } -} - -#endif // ENABLE(XPATH) - -#endif // XPath_VariableReference_H diff --git a/src/3rdparty/webkit/WebCore/xml/XSLImportRule.cpp b/src/3rdparty/webkit/WebCore/xml/XSLImportRule.cpp deleted file mode 100644 index 0908d75..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLImportRule.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" -#include "XSLImportRule.h" - -#if ENABLE(XSLT) - -#include "CachedXSLStyleSheet.h" -#include "DocLoader.h" -#include "XSLStyleSheet.h" - -namespace WebCore { - -XSLImportRule::XSLImportRule(XSLStyleSheet* parent, const String& href) - : StyleBase(parent) - , m_strHref(href) - , m_cachedSheet(0) - , m_loading(false) -{ -} - -XSLImportRule::~XSLImportRule() -{ - if (m_styleSheet) - m_styleSheet->setParent(0); - - if (m_cachedSheet) - m_cachedSheet->removeClient(this); -} - -XSLStyleSheet* XSLImportRule::parentStyleSheet() const -{ - return (parent() && parent()->isXSLStyleSheet()) ? static_cast<XSLStyleSheet*>(parent()) : 0; -} - -void XSLImportRule::setXSLStyleSheet(const String& href, const KURL& baseURL, const String& sheet) -{ - if (m_styleSheet) - m_styleSheet->setParent(0); - - m_styleSheet = XSLStyleSheet::create(this, href, baseURL); - - XSLStyleSheet* parent = parentStyleSheet(); - if (parent) - m_styleSheet->setParentStyleSheet(parent); - - m_styleSheet->parseString(sheet); - m_loading = false; - - if (parent) - parent->checkLoaded(); -} - -bool XSLImportRule::isLoading() -{ - return (m_loading || (m_styleSheet && m_styleSheet->isLoading())); -} - -void XSLImportRule::loadSheet() -{ - DocLoader* docLoader = 0; - StyleBase* root = this; - StyleBase* parent; - while ((parent = root->parent())) - root = parent; - if (root->isXSLStyleSheet()) - docLoader = static_cast<XSLStyleSheet*>(root)->docLoader(); - - String absHref = m_strHref; - XSLStyleSheet* parentSheet = parentStyleSheet(); - if (!parentSheet->finalURL().isNull()) - // use parent styleheet's URL as the base URL - absHref = KURL(parentSheet->finalURL(), m_strHref).string(); - - // Check for a cycle in our import chain. If we encounter a stylesheet - // in our parent chain with the same URL, then just bail. - for (parent = this->parent(); parent; parent = parent->parent()) { - if (parent->isXSLStyleSheet() && absHref == static_cast<XSLStyleSheet*>(parent)->finalURL().string()) - return; - } - - m_cachedSheet = docLoader->requestXSLStyleSheet(absHref); - - if (m_cachedSheet) { - m_cachedSheet->addClient(this); - - // If the imported sheet is in the cache, then setXSLStyleSheet gets called, - // and the sheet even gets parsed (via parseString). In this case we have - // loaded (even if our subresources haven't), so if we have a stylesheet after - // checking the cache, then we've clearly loaded. - if (!m_styleSheet) - m_loading = true; - } -} - -} // namespace WebCore - -#endif // ENABLE(XSLT) diff --git a/src/3rdparty/webkit/WebCore/xml/XSLImportRule.h b/src/3rdparty/webkit/WebCore/xml/XSLImportRule.h deleted file mode 100644 index f3a9318..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLImportRule.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#ifndef XSLImportRule_h -#define XSLImportRule_h - -#if ENABLE(XSLT) - -#include "CachedResourceClient.h" -#include "CachedResourceHandle.h" -#include "StyleBase.h" -#include "XSLStyleSheet.h" - -namespace WebCore { - -class CachedXSLStyleSheet; - -class XSLImportRule : public StyleBase, private CachedResourceClient { -public: - static PassRefPtr<XSLImportRule> create(XSLStyleSheet* parentSheet, const String& href) - { - return adoptRef(new XSLImportRule(parentSheet, href)); - } - - virtual ~XSLImportRule(); - - const String& href() const { return m_strHref; } - XSLStyleSheet* styleSheet() const { return m_styleSheet.get(); } - - XSLStyleSheet* parentStyleSheet() const; - - bool isLoading(); - void loadSheet(); - -private: - XSLImportRule(XSLStyleSheet* parentSheet, const String& href); - - virtual bool isImportRule() { return true; } - - // from CachedResourceClient - virtual void setXSLStyleSheet(const String& href, const KURL& baseURL, const String& sheet); - - String m_strHref; - RefPtr<XSLStyleSheet> m_styleSheet; - CachedResourceHandle<CachedXSLStyleSheet> m_cachedSheet; - bool m_loading; -}; - -} // namespace WebCore - -#endif // ENABLE(XSLT) - -#endif // XSLImportRule_h diff --git a/src/3rdparty/webkit/WebCore/xml/XSLStyleSheet.h b/src/3rdparty/webkit/WebCore/xml/XSLStyleSheet.h deleted file mode 100644 index e6e4063..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLStyleSheet.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#ifndef XSLStyleSheet_h -#define XSLStyleSheet_h - -#if ENABLE(XSLT) - -#include "StyleSheet.h" - -#if !USE(QXMLQUERY) -#include <libxml/parser.h> -#include <libxslt/transform.h> -#endif - -#include <wtf/PassRefPtr.h> - -namespace WebCore { - -class DocLoader; -class Document; -class XSLImportRule; - -class XSLStyleSheet : public StyleSheet { -public: -#if !USE(QXMLQUERY) - static PassRefPtr<XSLStyleSheet> create(XSLImportRule* parentImport, const String& originalURL, const KURL& finalURL) - { - return adoptRef(new XSLStyleSheet(parentImport, originalURL, finalURL)); - } -#endif - static PassRefPtr<XSLStyleSheet> create(Node* parentNode, const String& originalURL, const KURL& finalURL) - { - return adoptRef(new XSLStyleSheet(parentNode, originalURL, finalURL, false)); - } - static PassRefPtr<XSLStyleSheet> createInline(Node* parentNode, const KURL& finalURL) - { - return adoptRef(new XSLStyleSheet(parentNode, finalURL.string(), finalURL, true)); - } - - virtual ~XSLStyleSheet(); - - virtual bool isXSLStyleSheet() const { return true; } - - virtual String type() const { return "text/xml"; } - - virtual bool parseString(const String &string, bool strict = true); - - virtual bool isLoading(); - virtual void checkLoaded(); - - void loadChildSheets(); - void loadChildSheet(const String& href); - - DocLoader* docLoader(); - - Document* ownerDocument() { return m_ownerDocument; } - void setParentStyleSheet(XSLStyleSheet* parent); - -#if USE(QXMLQUERY) - String sheetString() const { return m_sheetString; } -#else - xmlDocPtr document(); - xsltStylesheetPtr compileStyleSheet(); - xmlDocPtr locateStylesheetSubResource(xmlDocPtr parentDoc, const xmlChar* uri); -#endif - - void clearDocuments(); - - void markAsProcessed(); - bool processed() const { return m_processed; } - -private: - XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded); -#if !USE(QXMLQUERY) - XSLStyleSheet(XSLImportRule* parentImport, const String& originalURL, const KURL& finalURL); -#endif - - Document* m_ownerDocument; - bool m_embedded; - bool m_processed; - -#if USE(QXMLQUERY) - String m_sheetString; -#else - xmlDocPtr m_stylesheetDoc; - bool m_stylesheetDocTaken; -#endif - - XSLStyleSheet* m_parentStyleSheet; -}; - -} // namespace WebCore - -#endif // ENABLE(XSLT) - -#endif // XSLStyleSheet_h diff --git a/src/3rdparty/webkit/WebCore/xml/XSLStyleSheetLibxslt.cpp b/src/3rdparty/webkit/WebCore/xml/XSLStyleSheetLibxslt.cpp deleted file mode 100644 index dbd806a..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLStyleSheetLibxslt.cpp +++ /dev/null @@ -1,313 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" -#include "XSLStyleSheet.h" - -#if ENABLE(XSLT) - -#include "CString.h" -#include "Console.h" -#include "DOMWindow.h" -#include "DocLoader.h" -#include "Document.h" -#include "Frame.h" -#include "Node.h" -#include "TransformSource.h" -#include "XMLTokenizer.h" -#include "XMLTokenizerScope.h" -#include "XSLImportRule.h" -#include "XSLTProcessor.h" -#include "loader.h" - -#include <libxml/uri.h> -#include <libxslt/xsltutils.h> - -#if PLATFORM(MAC) -#include "SoftLinking.h" -#endif - -#if PLATFORM(MAC) -SOFT_LINK_LIBRARY(libxslt) -SOFT_LINK(libxslt, xsltIsBlank, int, (xmlChar *str), (str)) -SOFT_LINK(libxslt, xsltGetNsProp, xmlChar *, (xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace), (node, name, nameSpace)) -SOFT_LINK(libxslt, xsltParseStylesheetDoc, xsltStylesheetPtr, (xmlDocPtr doc), (doc)) -SOFT_LINK(libxslt, xsltLoadStylesheetPI, xsltStylesheetPtr, (xmlDocPtr doc), (doc)) -#endif - -namespace WebCore { - -XSLStyleSheet::XSLStyleSheet(XSLImportRule* parentRule, const String& originalURL, const KURL& finalURL) - : StyleSheet(parentRule, originalURL, finalURL) - , m_ownerDocument(0) - , m_embedded(false) - , m_processed(false) // Child sheets get marked as processed when the libxslt engine has finally seen them. - , m_stylesheetDoc(0) - , m_stylesheetDocTaken(false) - , m_parentStyleSheet(0) -{ -} - -XSLStyleSheet::XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded) - : StyleSheet(parentNode, originalURL, finalURL) - , m_ownerDocument(parentNode->document()) - , m_embedded(embedded) - , m_processed(true) // The root sheet starts off processed. - , m_stylesheetDoc(0) - , m_stylesheetDocTaken(false) - , m_parentStyleSheet(0) -{ -} - -XSLStyleSheet::~XSLStyleSheet() -{ - if (!m_stylesheetDocTaken) - xmlFreeDoc(m_stylesheetDoc); -} - -bool XSLStyleSheet::isLoading() -{ - unsigned len = length(); - for (unsigned i = 0; i < len; ++i) { - StyleBase* rule = item(i); - if (rule->isImportRule()) { - XSLImportRule* import = static_cast<XSLImportRule*>(rule); - if (import->isLoading()) - return true; - } - } - return false; -} - -void XSLStyleSheet::checkLoaded() -{ - if (isLoading()) - return; - if (parent()) - parent()->checkLoaded(); - if (ownerNode()) - ownerNode()->sheetLoaded(); -} - -xmlDocPtr XSLStyleSheet::document() -{ - if (m_embedded && ownerDocument() && ownerDocument()->transformSource()) - return (xmlDocPtr)ownerDocument()->transformSource()->platformSource(); - return m_stylesheetDoc; -} - -void XSLStyleSheet::clearDocuments() -{ - m_stylesheetDoc = 0; - unsigned len = length(); - for (unsigned i = 0; i < len; ++i) { - StyleBase* rule = item(i); - if (rule->isImportRule()) { - XSLImportRule* import = static_cast<XSLImportRule*>(rule); - if (import->styleSheet()) - import->styleSheet()->clearDocuments(); - } - } -} - -DocLoader* XSLStyleSheet::docLoader() -{ - if (!m_ownerDocument) - return 0; - return m_ownerDocument->docLoader(); -} - -bool XSLStyleSheet::parseString(const String& string, bool) -{ - // Parse in a single chunk into an xmlDocPtr - const UChar BOM = 0xFEFF; - const unsigned char BOMHighByte = *reinterpret_cast<const unsigned char*>(&BOM); - if (!m_stylesheetDocTaken) - xmlFreeDoc(m_stylesheetDoc); - m_stylesheetDocTaken = false; - - Console* console = 0; - if (Frame* frame = ownerDocument()->frame()) - console = frame->domWindow()->console(); - - XMLTokenizerScope scope(docLoader(), XSLTProcessor::genericErrorFunc, XSLTProcessor::parseErrorFunc, console); - - const char* buffer = reinterpret_cast<const char*>(string.characters()); - int size = string.length() * sizeof(UChar); - - xmlParserCtxtPtr ctxt = xmlCreateMemoryParserCtxt(buffer, size); - - if (m_parentStyleSheet) { - // The XSL transform may leave the newly-transformed document - // with references to the symbol dictionaries of the style sheet - // and any of its children. XML document disposal can corrupt memory - // if a document uses more than one symbol dictionary, so we - // ensure that all child stylesheets use the same dictionaries as their - // parents. - xmlDictFree(ctxt->dict); - ctxt->dict = m_parentStyleSheet->m_stylesheetDoc->dict; - xmlDictReference(ctxt->dict); - } - - m_stylesheetDoc = xmlCtxtReadMemory(ctxt, buffer, size, - finalURL().string().utf8().data(), - BOMHighByte == 0xFF ? "UTF-16LE" : "UTF-16BE", - XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_NOWARNING | XML_PARSE_NOCDATA); - xmlFreeParserCtxt(ctxt); - - loadChildSheets(); - - return m_stylesheetDoc; -} - -void XSLStyleSheet::loadChildSheets() -{ - if (!document()) - return; - - xmlNodePtr stylesheetRoot = document()->children; - - // Top level children may include other things such as DTD nodes, we ignore those. - while (stylesheetRoot && stylesheetRoot->type != XML_ELEMENT_NODE) - stylesheetRoot = stylesheetRoot->next; - - if (m_embedded) { - // We have to locate (by ID) the appropriate embedded stylesheet element, so that we can walk the - // import/include list. - xmlAttrPtr idNode = xmlGetID(document(), (const xmlChar*)(finalURL().string().utf8().data())); - if (!idNode) - return; - stylesheetRoot = idNode->parent; - } else { - // FIXME: Need to handle an external URI with a # in it. This is a pretty minor edge case, so we'll deal - // with it later. - } - - if (stylesheetRoot) { - // Walk the children of the root element and look for import/include elements. - // Imports must occur first. - xmlNodePtr curr = stylesheetRoot->children; - while (curr) { - if (curr->type != XML_ELEMENT_NODE) { - curr = curr->next; - continue; - } - if (IS_XSLT_ELEM(curr) && IS_XSLT_NAME(curr, "import")) { - xmlChar* uriRef = xsltGetNsProp(curr, (const xmlChar*)"href", XSLT_NAMESPACE); - loadChildSheet(String::fromUTF8((const char*)uriRef)); - xmlFree(uriRef); - } else - break; - curr = curr->next; - } - - // Now handle includes. - while (curr) { - if (curr->type == XML_ELEMENT_NODE && IS_XSLT_ELEM(curr) && IS_XSLT_NAME(curr, "include")) { - xmlChar* uriRef = xsltGetNsProp(curr, (const xmlChar*)"href", XSLT_NAMESPACE); - loadChildSheet(String::fromUTF8((const char*)uriRef)); - xmlFree(uriRef); - } - curr = curr->next; - } - } -} - -void XSLStyleSheet::loadChildSheet(const String& href) -{ - RefPtr<XSLImportRule> childRule = XSLImportRule::create(this, href); - append(childRule); - childRule->loadSheet(); -} - -xsltStylesheetPtr XSLStyleSheet::compileStyleSheet() -{ - // FIXME: Hook up error reporting for the stylesheet compilation process. - if (m_embedded) - return xsltLoadStylesheetPI(document()); - - // xsltParseStylesheetDoc makes the document part of the stylesheet - // so we have to release our pointer to it. - ASSERT(!m_stylesheetDocTaken); - xsltStylesheetPtr result = xsltParseStylesheetDoc(m_stylesheetDoc); - if (result) - m_stylesheetDocTaken = true; - return result; -} - -void XSLStyleSheet::setParentStyleSheet(XSLStyleSheet* parent) -{ - m_parentStyleSheet = parent; - if (parent) - m_ownerDocument = parent->ownerDocument(); -} - -xmlDocPtr XSLStyleSheet::locateStylesheetSubResource(xmlDocPtr parentDoc, const xmlChar* uri) -{ - bool matchedParent = (parentDoc == document()); - unsigned len = length(); - for (unsigned i = 0; i < len; ++i) { - StyleBase* rule = item(i); - if (rule->isImportRule()) { - XSLImportRule* import = static_cast<XSLImportRule*>(rule); - XSLStyleSheet* child = import->styleSheet(); - if (!child) - continue; - if (matchedParent) { - if (child->processed()) - continue; // libxslt has been given this sheet already. - - // Check the URI of the child stylesheet against the doc URI. - // In order to ensure that libxml canonicalized both URLs, we get the original href - // string from the import rule and canonicalize it using libxml before comparing it - // with the URI argument. - CString importHref = import->href().utf8(); - xmlChar* base = xmlNodeGetBase(parentDoc, (xmlNodePtr)parentDoc); - xmlChar* childURI = xmlBuildURI((const xmlChar*)importHref.data(), base); - bool equalURIs = xmlStrEqual(uri, childURI); - xmlFree(base); - xmlFree(childURI); - if (equalURIs) { - child->markAsProcessed(); - return child->document(); - } - } else { - xmlDocPtr result = import->styleSheet()->locateStylesheetSubResource(parentDoc, uri); - if (result) - return result; - } - } - } - - return 0; -} - -void XSLStyleSheet::markAsProcessed() -{ - ASSERT(!m_processed); - ASSERT(!m_stylesheetDocTaken); - m_processed = true; - m_stylesheetDocTaken = true; -} - -} // namespace WebCore - -#endif // ENABLE(XSLT) diff --git a/src/3rdparty/webkit/WebCore/xml/XSLStyleSheetQt.cpp b/src/3rdparty/webkit/WebCore/xml/XSLStyleSheetQt.cpp deleted file mode 100644 index cb55993..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLStyleSheetQt.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" -#include "XSLStyleSheet.h" - -#if ENABLE(XSLT) - -#include "DOMWindow.h" -#include "Document.h" -#include "Node.h" -#include "NotImplemented.h" -#include "XSLTProcessor.h" -#include "loader.h" - -namespace WebCore { - -XSLStyleSheet::XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded) - : StyleSheet(parentNode, originalURL, finalURL) - , m_ownerDocument(parentNode->document()) - , m_embedded(embedded) -{ -} - -XSLStyleSheet::~XSLStyleSheet() -{ -} - -bool XSLStyleSheet::isLoading() -{ - notImplemented(); - return false; -} - -void XSLStyleSheet::checkLoaded() -{ - if (ownerNode()) - ownerNode()->sheetLoaded(); -} - -void XSLStyleSheet::clearDocuments() -{ - notImplemented(); -} - -DocLoader* XSLStyleSheet::docLoader() -{ - if (!m_ownerDocument) - return 0; - return m_ownerDocument->docLoader(); -} - -bool XSLStyleSheet::parseString(const String& string, bool) -{ - // FIXME: Fix QXmlQuery so that it allows compiling the stylesheet before setting the document - // to be transformed. This way we could not only check if the stylesheet is correct before using it - // but also turn XSLStyleSheet::sheetString() into XSLStyleSheet::query() that returns a QXmlQuery. - - m_sheetString = string; - return !m_sheetString.isEmpty(); -} - -void XSLStyleSheet::loadChildSheets() -{ - notImplemented(); -} - -void XSLStyleSheet::loadChildSheet(const String&) -{ - notImplemented(); -} - -void XSLStyleSheet::setParentStyleSheet(XSLStyleSheet*) -{ - notImplemented(); -} - -void XSLStyleSheet::markAsProcessed() -{ - notImplemented(); -} - -} // namespace WebCore - -#endif // ENABLE(XSLT) diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTExtensions.cpp b/src/3rdparty/webkit/WebCore/xml/XSLTExtensions.cpp deleted file mode 100644 index 069ddd8..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTExtensions.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard. - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is fur- - * nished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- - * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- - * NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the name of the authors shall not - * be used in advertising or otherwise to promote the sale, use or other deal- - * ings in this Software without prior written authorization from him. - */ - -#include "config.h" - -#if ENABLE(XSLT) -#include "XSLTExtensions.h" - -#include <libxml/xpathInternals.h> - -#include <libxslt/xsltutils.h> -#include <libxslt/extensions.h> -#include <libxslt/extra.h> - -#if PLATFORM(MAC) -#include "SoftLinking.h" -#endif - -#if PLATFORM(MAC) -SOFT_LINK_LIBRARY(libxslt) -SOFT_LINK(libxslt, xsltRegisterExtFunction, int, (xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI, xmlXPathFunction function), (ctxt, name, URI, function)) -SOFT_LINK(libxslt, xsltFunctionNodeSet, void, (xmlXPathParserContextPtr ctxt, int nargs), (ctxt, nargs)) -#endif - -namespace WebCore { - -// FIXME: This code is taken from libexslt 1.1.11; should sync with newer versions. -static void exsltNodeSetFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - xmlChar *strval; - xmlNodePtr retNode; - xmlXPathObjectPtr ret; - - if (nargs != 1) { - xmlXPathSetArityError(ctxt); - return; - } - - if (xmlXPathStackIsNodeSet(ctxt)) { - xsltFunctionNodeSet(ctxt, nargs); - return; - } - - strval = xmlXPathPopString(ctxt); - retNode = xmlNewDocText(NULL, strval); - ret = xmlXPathNewValueTree(retNode); - - // FIXME: It might be helpful to push any errors from xmlXPathNewValueTree - // up to the Javascript Console. - if (ret != NULL) - ret->type = XPATH_NODESET; - - if (strval != NULL) - xmlFree(strval); - - valuePush(ctxt, ret); -} - -void registerXSLTExtensions(xsltTransformContextPtr ctxt) -{ - xsltRegisterExtFunction(ctxt, (const xmlChar*)"node-set", (const xmlChar*)"http://exslt.org/common", exsltNodeSetFunction); -} - -} - -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTExtensions.h b/src/3rdparty/webkit/WebCore/xml/XSLTExtensions.h deleted file mode 100644 index 4e4224f..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTExtensions.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef XSLTExtensions_h -#define XSLTExtensions_h - -#if ENABLE(XSLT) - -#include <libxslt/xsltInternals.h> - -namespace WebCore { - -void registerXSLTExtensions(xsltTransformContextPtr ctxt); - -} - -#endif -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.cpp b/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.cpp deleted file mode 100644 index b530d52..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple, Inc. All rights reserved. - * Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@webkit.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" - -#if ENABLE(XSLT) - -#include "XSLTProcessor.h" - -#include "DOMImplementation.h" -#include "DocLoader.h" -#include "DocumentFragment.h" -#include "Frame.h" -#include "FrameLoader.h" -#include "FrameView.h" -#include "HTMLDocument.h" -#include "HTMLTokenizer.h" // for parseHTMLDocumentFragment -#include "Page.h" -#include "Text.h" -#include "TextResourceDecoder.h" -#include "XMLTokenizer.h" -#include "loader.h" -#include "markup.h" -#include <wtf/Assertions.h> -#include <wtf/Vector.h> - -namespace WebCore { - -static inline void transformTextStringToXHTMLDocumentString(String& text) -{ - // Modify the output so that it is a well-formed XHTML document with a <pre> tag enclosing the text. - text.replace('&', "&"); - text.replace('<', "<"); - text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" - "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" - "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" - "<head><title/></head>\n" - "<body>\n" - "<pre>" + text + "</pre>\n" - "</body>\n" - "</html>\n"; -} - -PassRefPtr<Document> XSLTProcessor::createDocumentFromSource(const String& sourceString, - const String& sourceEncoding, const String& sourceMIMEType, Node* sourceNode, Frame* frame) -{ - RefPtr<Document> ownerDocument = sourceNode->document(); - bool sourceIsDocument = (sourceNode == ownerDocument.get()); - String documentSource = sourceString; - - RefPtr<Document> result; - if (sourceMIMEType == "text/plain") { - result = Document::create(frame); - transformTextStringToXHTMLDocumentString(documentSource); - } else - result = DOMImplementation::createDocument(sourceMIMEType, frame, false); - - // Before parsing, we need to save & detach the old document and get the new document - // in place. We have to do this only if we're rendering the result document. - if (frame) { - if (FrameView* view = frame->view()) - view->clear(); - result->setTransformSourceDocument(frame->document()); - frame->setDocument(result); - } - - if (sourceIsDocument) - result->setURL(ownerDocument->url()); - result->open(); - - RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create(sourceMIMEType); - decoder->setEncoding(sourceEncoding.isEmpty() ? UTF8Encoding() : TextEncoding(sourceEncoding), TextResourceDecoder::EncodingFromXMLHeader); - result->setDecoder(decoder.release()); - - result->write(documentSource); - result->finishParsing(); - result->close(); - - return result.release(); -} - -static inline RefPtr<DocumentFragment> createFragmentFromSource(const String& sourceString, const String& sourceMIMEType, Document* outputDoc) -{ - RefPtr<DocumentFragment> fragment = DocumentFragment::create(outputDoc); - - if (sourceMIMEType == "text/html") - parseHTMLDocumentFragment(sourceString, fragment.get()); - else if (sourceMIMEType == "text/plain") - fragment->addChild(Text::create(outputDoc, sourceString)); - else { - bool successfulParse = parseXMLDocumentFragment(sourceString, fragment.get(), outputDoc->documentElement()); - if (!successfulParse) - return 0; - } - - // FIXME: Do we need to mess with URLs here? - - return fragment; -} - -PassRefPtr<Document> XSLTProcessor::transformToDocument(Node* sourceNode) -{ - String resultMIMEType; - String resultString; - String resultEncoding; - if (!transformToString(sourceNode, resultMIMEType, resultString, resultEncoding)) - return 0; - return createDocumentFromSource(resultString, resultEncoding, resultMIMEType, sourceNode, 0); -} - -PassRefPtr<DocumentFragment> XSLTProcessor::transformToFragment(Node* sourceNode, Document* outputDoc) -{ - String resultMIMEType; - String resultString; - String resultEncoding; - - // If the output document is HTML, default to HTML method. - if (outputDoc->isHTMLDocument()) - resultMIMEType = "text/html"; - - if (!transformToString(sourceNode, resultMIMEType, resultString, resultEncoding)) - return 0; - return createFragmentFromSource(resultString, resultMIMEType, outputDoc); -} - -void XSLTProcessor::setParameter(const String& /*namespaceURI*/, const String& localName, const String& value) -{ - // FIXME: namespace support? - // should make a QualifiedName here but we'd have to expose the impl - m_parameters.set(localName, value); -} - -String XSLTProcessor::getParameter(const String& /*namespaceURI*/, const String& localName) const -{ - // FIXME: namespace support? - // should make a QualifiedName here but we'd have to expose the impl - return m_parameters.get(localName); -} - -void XSLTProcessor::removeParameter(const String& /*namespaceURI*/, const String& localName) -{ - // FIXME: namespace support? - m_parameters.remove(localName); -} - -void XSLTProcessor::reset() -{ - m_stylesheet.clear(); - m_stylesheetRootNode.clear(); - m_parameters.clear(); -} - -} // namespace WebCore - -#endif // ENABLE(XSLT) diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.h b/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.h deleted file mode 100644 index 9b91017..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2007, 2008 Apple, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#ifndef XSLTProcessor_h -#define XSLTProcessor_h - -#if ENABLE(XSLT) - -#include "Node.h" -#include "StringHash.h" -#include "XSLStyleSheet.h" -#include <wtf/HashMap.h> - -#if !USE(QXMLQUERY) -#include <libxml/parserInternals.h> -#include <libxslt/documents.h> -#endif - -namespace WebCore { - -class Frame; -class Document; -class DocumentFragment; - -class XSLTProcessor : public RefCounted<XSLTProcessor> { -public: - static PassRefPtr<XSLTProcessor> create() { return adoptRef(new XSLTProcessor); } - - void setXSLStyleSheet(PassRefPtr<XSLStyleSheet> styleSheet) { m_stylesheet = styleSheet; } - bool transformToString(Node* source, String& resultMIMEType, String& resultString, String& resultEncoding); - PassRefPtr<Document> createDocumentFromSource(const String& source, const String& sourceEncoding, const String& sourceMIMEType, Node* sourceNode, Frame* frame); - - // DOM methods - void importStylesheet(PassRefPtr<Node> style) { m_stylesheetRootNode = style; } - PassRefPtr<DocumentFragment> transformToFragment(Node* source, Document* ouputDoc); - PassRefPtr<Document> transformToDocument(Node* source); - - void setParameter(const String& namespaceURI, const String& localName, const String& value); - String getParameter(const String& namespaceURI, const String& localName) const; - void removeParameter(const String& namespaceURI, const String& localName); - void clearParameters() { m_parameters.clear(); } - - void reset(); - -#if !USE(QXMLQUERY) - static void parseErrorFunc(void* userData, xmlError*); - static void genericErrorFunc(void* userData, const char* msg, ...); - - // Only for libXSLT callbacks - XSLStyleSheet* xslStylesheet() const { return m_stylesheet.get(); } -#endif - - typedef HashMap<String, String> ParameterMap; - -private: - XSLTProcessor() { } - - RefPtr<XSLStyleSheet> m_stylesheet; - RefPtr<Node> m_stylesheetRootNode; - ParameterMap m_parameters; -}; - -} - -#endif -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.idl b/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.idl deleted file mode 100644 index 28bd878..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTProcessor.idl +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -module xml { - - // Eventually we should implement XSLTException: - // http://lxr.mozilla.org/seamonkey/source/content/xsl/public/nsIXSLTException.idl - // http://bugs.webkit.org/show_bug.cgi?id=5446 - - interface [ - Conditional=XSLT, - CustomConstructor - ] XSLTProcessor { - - [Custom] void importStylesheet(in Node stylesheet); - [Custom] DocumentFragment transformToFragment(in Node source, in Document docVal); - [Custom] Document transformToDocument(in Node source); - - [Custom] void setParameter(in DOMString namespaceURI, in DOMString localName, in DOMString value); - [Custom, ConvertNullStringTo=Undefined] DOMString getParameter(in DOMString namespaceURI, in DOMString localName); - [Custom] void removeParameter(in DOMString namespaceURI, in DOMString localName); - void clearParameters(); - - void reset(); - - }; - -} diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTProcessorLibxslt.cpp b/src/3rdparty/webkit/WebCore/xml/XSLTProcessorLibxslt.cpp deleted file mode 100644 index 5fa49ea..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTProcessorLibxslt.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple, Inc. All rights reserved. - * Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@webkit.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" - -#if ENABLE(XSLT) - -#include "XSLTProcessor.h" - -#include "Console.h" -#include "CString.h" -#include "DOMWindow.h" -#include "DocLoader.h" -#include "Frame.h" -#include "ResourceError.h" -#include "ResourceHandle.h" -#include "ResourceRequest.h" -#include "ResourceResponse.h" -#include "TransformSource.h" -#include "XMLTokenizer.h" -#include "XSLStyleSheet.h" -#include "XSLTExtensions.h" -#include "XSLTUnicodeSort.h" -#include "loader.h" -#include "markup.h" -#include <libxslt/imports.h> -#include <libxslt/variables.h> -#include <libxslt/xsltutils.h> -#include <wtf/Assertions.h> -#include <wtf/Vector.h> - -#if PLATFORM(MAC) -#include "SoftLinking.h" - -SOFT_LINK_LIBRARY(libxslt); -SOFT_LINK(libxslt, xsltFreeStylesheet, void, (xsltStylesheetPtr sheet), (sheet)) -SOFT_LINK(libxslt, xsltFreeTransformContext, void, (xsltTransformContextPtr ctxt), (ctxt)) -SOFT_LINK(libxslt, xsltNewTransformContext, xsltTransformContextPtr, (xsltStylesheetPtr style, xmlDocPtr doc), (style, doc)) -SOFT_LINK(libxslt, xsltApplyStylesheetUser, xmlDocPtr, (xsltStylesheetPtr style, xmlDocPtr doc, const char** params, const char* output, FILE* profile, xsltTransformContextPtr userCtxt), (style, doc, params, output, profile, userCtxt)) -SOFT_LINK(libxslt, xsltQuoteUserParams, int, (xsltTransformContextPtr ctxt, const char** params), (ctxt, params)) -SOFT_LINK(libxslt, xsltSetCtxtSortFunc, void, (xsltTransformContextPtr ctxt, xsltSortFunc handler), (ctxt, handler)) -SOFT_LINK(libxslt, xsltSetLoaderFunc, void, (xsltDocLoaderFunc f), (f)) -SOFT_LINK(libxslt, xsltSaveResultTo, int, (xmlOutputBufferPtr buf, xmlDocPtr result, xsltStylesheetPtr style), (buf, result, style)) -SOFT_LINK(libxslt, xsltNextImport, xsltStylesheetPtr, (xsltStylesheetPtr style), (style)) -#endif - -namespace WebCore { - -void XSLTProcessor::genericErrorFunc(void*, const char*, ...) -{ - // It would be nice to do something with this error message. -} - -void XSLTProcessor::parseErrorFunc(void* userData, xmlError* error) -{ - Console* console = static_cast<Console*>(userData); - if (!console) - return; - - MessageLevel level; - switch (error->level) { - case XML_ERR_NONE: - level = TipMessageLevel; - break; - case XML_ERR_WARNING: - level = WarningMessageLevel; - break; - case XML_ERR_ERROR: - case XML_ERR_FATAL: - default: - level = ErrorMessageLevel; - break; - } - - console->addMessage(XMLMessageSource, LogMessageType, level, error->message, error->line, error->file); -} - -// FIXME: There seems to be no way to control the ctxt pointer for loading here, thus we have globals. -static XSLTProcessor* globalProcessor = 0; -static DocLoader* globalDocLoader = 0; -static xmlDocPtr docLoaderFunc(const xmlChar* uri, - xmlDictPtr, - int options, - void* ctxt, - xsltLoadType type) -{ - if (!globalProcessor) - return 0; - - switch (type) { - case XSLT_LOAD_DOCUMENT: { - xsltTransformContextPtr context = (xsltTransformContextPtr)ctxt; - xmlChar* base = xmlNodeGetBase(context->document->doc, context->node); - KURL url(KURL(ParsedURLString, reinterpret_cast<const char*>(base)), reinterpret_cast<const char*>(uri)); - xmlFree(base); - ResourceError error; - ResourceResponse response; - - Vector<char> data; - - bool requestAllowed = globalDocLoader->frame() && globalDocLoader->doc()->securityOrigin()->canRequest(url); - if (requestAllowed) { - globalDocLoader->frame()->loader()->loadResourceSynchronously(url, AllowStoredCredentials, error, response, data); - requestAllowed = globalDocLoader->doc()->securityOrigin()->canRequest(response.url()); - } - if (!requestAllowed) { - data.clear(); - globalDocLoader->printAccessDeniedMessage(url); - } - - Console* console = 0; - if (Frame* frame = globalProcessor->xslStylesheet()->ownerDocument()->frame()) - console = frame->domWindow()->console(); - xmlSetStructuredErrorFunc(console, XSLTProcessor::parseErrorFunc); - xmlSetGenericErrorFunc(console, XSLTProcessor::genericErrorFunc); - - // We don't specify an encoding here. Neither Gecko nor WinIE respects - // the encoding specified in the HTTP headers. - xmlDocPtr doc = xmlReadMemory(data.data(), data.size(), (const char*)uri, 0, options); - - xmlSetStructuredErrorFunc(0, 0); - xmlSetGenericErrorFunc(0, 0); - - return doc; - } - case XSLT_LOAD_STYLESHEET: - return globalProcessor->xslStylesheet()->locateStylesheetSubResource(((xsltStylesheetPtr)ctxt)->doc, uri); - default: - break; - } - - return 0; -} - -static inline void setXSLTLoadCallBack(xsltDocLoaderFunc func, XSLTProcessor* processor, DocLoader* loader) -{ - xsltSetLoaderFunc(func); - globalProcessor = processor; - globalDocLoader = loader; -} - -static int writeToVector(void* context, const char* buffer, int len) -{ - Vector<UChar>& resultOutput = *static_cast<Vector<UChar>*>(context); - String decodedChunk = String::fromUTF8(buffer, len); - resultOutput.append(decodedChunk.characters(), decodedChunk.length()); - return len; -} - -static bool saveResultToString(xmlDocPtr resultDoc, xsltStylesheetPtr sheet, String& resultString) -{ - xmlOutputBufferPtr outputBuf = xmlAllocOutputBuffer(0); - if (!outputBuf) - return false; - - Vector<UChar> resultVector; - outputBuf->context = &resultVector; - outputBuf->writecallback = writeToVector; - - int retval = xsltSaveResultTo(outputBuf, resultDoc, sheet); - xmlOutputBufferClose(outputBuf); - if (retval < 0) - return false; - - // Workaround for <http://bugzilla.gnome.org/show_bug.cgi?id=495668>: libxslt appends an extra line feed to the result. - if (resultVector.size() > 0 && resultVector[resultVector.size() - 1] == '\n') - resultVector.removeLast(); - - resultString = String::adopt(resultVector); - - return true; -} - -static const char** xsltParamArrayFromParameterMap(XSLTProcessor::ParameterMap& parameters) -{ - if (parameters.isEmpty()) - return 0; - - const char** parameterArray = (const char**)fastMalloc(((parameters.size() * 2) + 1) * sizeof(char*)); - - XSLTProcessor::ParameterMap::iterator end = parameters.end(); - unsigned index = 0; - for (XSLTProcessor::ParameterMap::iterator it = parameters.begin(); it != end; ++it) { - parameterArray[index++] = fastStrDup(it->first.utf8().data()); - parameterArray[index++] = fastStrDup(it->second.utf8().data()); - } - parameterArray[index] = 0; - - return parameterArray; -} - -static void freeXsltParamArray(const char** params) -{ - const char** temp = params; - if (!params) - return; - - while (*temp) { - fastFree((void*)*(temp++)); - fastFree((void*)*(temp++)); - } - fastFree(params); -} - -static xsltStylesheetPtr xsltStylesheetPointer(RefPtr<XSLStyleSheet>& cachedStylesheet, Node* stylesheetRootNode) -{ - if (!cachedStylesheet && stylesheetRootNode) { - cachedStylesheet = XSLStyleSheet::create(stylesheetRootNode->parent() ? stylesheetRootNode->parent() : stylesheetRootNode, - stylesheetRootNode->document()->url().string(), - stylesheetRootNode->document()->url()); // FIXME: Should we use baseURL here? - cachedStylesheet->parseString(createMarkup(stylesheetRootNode)); - } - - if (!cachedStylesheet || !cachedStylesheet->document()) - return 0; - - return cachedStylesheet->compileStyleSheet(); -} - -static inline xmlDocPtr xmlDocPtrFromNode(Node* sourceNode, bool& shouldDelete) -{ - RefPtr<Document> ownerDocument = sourceNode->document(); - bool sourceIsDocument = (sourceNode == ownerDocument.get()); - - xmlDocPtr sourceDoc = 0; - if (sourceIsDocument && ownerDocument->transformSource()) - sourceDoc = (xmlDocPtr)ownerDocument->transformSource()->platformSource(); - if (!sourceDoc) { - sourceDoc = (xmlDocPtr)xmlDocPtrForString(ownerDocument->docLoader(), createMarkup(sourceNode), - sourceIsDocument ? ownerDocument->url().string() : String()); - shouldDelete = sourceDoc; - } - return sourceDoc; -} - -static inline String resultMIMEType(xmlDocPtr resultDoc, xsltStylesheetPtr sheet) -{ - // There are three types of output we need to be able to deal with: - // HTML (create an HTML document), XML (create an XML document), - // and text (wrap in a <pre> and create an XML document). - - const xmlChar* resultType = 0; - XSLT_GET_IMPORT_PTR(resultType, sheet, method); - if (!resultType && resultDoc->type == XML_HTML_DOCUMENT_NODE) - resultType = (const xmlChar*)"html"; - - if (xmlStrEqual(resultType, (const xmlChar*)"html")) - return "text/html"; - if (xmlStrEqual(resultType, (const xmlChar*)"text")) - return "text/plain"; - - return "application/xml"; -} - -bool XSLTProcessor::transformToString(Node* sourceNode, String& mimeType, String& resultString, String& resultEncoding) -{ - RefPtr<Document> ownerDocument = sourceNode->document(); - - setXSLTLoadCallBack(docLoaderFunc, this, ownerDocument->docLoader()); - xsltStylesheetPtr sheet = xsltStylesheetPointer(m_stylesheet, m_stylesheetRootNode.get()); - if (!sheet) { - setXSLTLoadCallBack(0, 0, 0); - return false; - } - m_stylesheet->clearDocuments(); - - xmlChar* origMethod = sheet->method; - if (!origMethod && mimeType == "text/html") - sheet->method = (xmlChar*)"html"; - - bool success = false; - bool shouldFreeSourceDoc = false; - if (xmlDocPtr sourceDoc = xmlDocPtrFromNode(sourceNode, shouldFreeSourceDoc)) { - // The XML declaration would prevent parsing the result as a fragment, and it's not needed even for documents, - // as the result of this function is always immediately parsed. - sheet->omitXmlDeclaration = true; - - xsltTransformContextPtr transformContext = xsltNewTransformContext(sheet, sourceDoc); - registerXSLTExtensions(transformContext); - - // <http://bugs.webkit.org/show_bug.cgi?id=16077>: XSLT processor <xsl:sort> algorithm only compares by code point - xsltSetCtxtSortFunc(transformContext, xsltUnicodeSortFunction); - - // This is a workaround for a bug in libxslt. - // The bug has been fixed in version 1.1.13, so once we ship that this can be removed. - if (!transformContext->globalVars) - transformContext->globalVars = xmlHashCreate(20); - - const char** params = xsltParamArrayFromParameterMap(m_parameters); - xsltQuoteUserParams(transformContext, params); - xmlDocPtr resultDoc = xsltApplyStylesheetUser(sheet, sourceDoc, 0, 0, 0, transformContext); - - xsltFreeTransformContext(transformContext); - freeXsltParamArray(params); - - if (shouldFreeSourceDoc) - xmlFreeDoc(sourceDoc); - - if (success = saveResultToString(resultDoc, sheet, resultString)) { - mimeType = resultMIMEType(resultDoc, sheet); - resultEncoding = (char*)resultDoc->encoding; - } - xmlFreeDoc(resultDoc); - } - - sheet->method = origMethod; - setXSLTLoadCallBack(0, 0, 0); - xsltFreeStylesheet(sheet); - m_stylesheet = 0; - - return success; -} - -} // namespace WebCore - -#endif // ENABLE(XSLT) diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTProcessorQt.cpp b/src/3rdparty/webkit/WebCore/xml/XSLTProcessorQt.cpp deleted file mode 100644 index 29dbacf..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTProcessorQt.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * This file is part of the XSL implementation. - * - * Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" - -#if ENABLE(XSLT) - -#include "XSLTProcessor.h" - -#include "Console.h" -#include "DOMWindow.h" -#include "Frame.h" -#include "TransformSource.h" -#include "loader.h" -#include "markup.h" -#include <wtf/Assertions.h> -#include <wtf/Vector.h> - -#include <qabstractmessagehandler.h> -#include <qabstracturiresolver.h> -#include <qbuffer.h> -#include <qsourcelocation.h> -#include <qxmlquery.h> - -namespace WebCore { - -class XSLTMessageHandler : public QAbstractMessageHandler { - -public: - XSLTMessageHandler(Document* document = 0); - virtual void handleMessage(QtMsgType type, const QString& description, - const QUrl& identifier, const QSourceLocation& sourceLocation); - -private: - Document* m_document; -}; - -XSLTMessageHandler::XSLTMessageHandler(Document* document) - : QAbstractMessageHandler() - , m_document(document) -{ -} - -void XSLTMessageHandler::handleMessage(QtMsgType type, const QString& description, - const QUrl&, const QSourceLocation& sourceLocation) -{ - if (!m_document->frame()) - return; - - MessageLevel level; - switch (type) { - case QtDebugMsg: - level = TipMessageLevel; - break; - case QtWarningMsg: - level = WarningMessageLevel; - break; - case QtCriticalMsg: - case QtFatalMsg: - level = ErrorMessageLevel; - break; - default: - level = LogMessageLevel; - break; - } - - Console* console = m_document->frame()->domWindow()->console(); - console->addMessage(XMLMessageSource, LogMessageType, level, description, - sourceLocation.line(), sourceLocation.uri().toString()); -} - -class XSLTUriResolver : public QAbstractUriResolver { - -public: - XSLTUriResolver(Document* document); - virtual QUrl resolve(const QUrl& relative, const QUrl& baseURI) const; - -private: - Document* m_document; -}; - -XSLTUriResolver::XSLTUriResolver(Document* document) - : QAbstractUriResolver() - , m_document(document) -{ -} - -QUrl XSLTUriResolver::resolve(const QUrl& relative, const QUrl& baseURI) const -{ - QUrl url = baseURI.resolved(relative); - - if (!m_document->frame() || !m_document->securityOrigin()->canRequest(url)) - return QUrl(); - return url; -} - -bool XSLTProcessor::transformToString(Node* sourceNode, String&, String& resultString, String&) -{ - bool success = false; - - RefPtr<XSLStyleSheet> stylesheet = m_stylesheet; - if (!stylesheet && m_stylesheetRootNode) { - Node* node = m_stylesheetRootNode.get(); - stylesheet = XSLStyleSheet::create(node->parent() ? node->parent() : node, - node->document()->url().string(), - node->document()->url()); // FIXME: Should we use baseURL here? - stylesheet->parseString(createMarkup(node)); - } - - if (!stylesheet || stylesheet->sheetString().isEmpty()) - return success; - - RefPtr<Document> ownerDocument = sourceNode->document(); - bool sourceIsDocument = (sourceNode == ownerDocument.get()); - - QXmlQuery query(QXmlQuery::XSLT20); - - XSLTMessageHandler messageHandler(ownerDocument.get()); - XSLTUriResolver uriResolver(ownerDocument.get()); - query.setMessageHandler(&messageHandler); - - XSLTProcessor::ParameterMap::iterator end = m_parameters.end(); - for (XSLTProcessor::ParameterMap::iterator it = m_parameters.begin(); it != end; ++it) - query.bindVariable(QString(it->first), QXmlItem(QVariant(it->second))); - - QString source; - if (sourceIsDocument && ownerDocument->transformSource()) - source = ownerDocument->transformSource()->platformSource(); - if (!sourceIsDocument || source.isEmpty()) - source = createMarkup(sourceNode); - - QBuffer inputBuffer; - QBuffer styleSheetBuffer; - QBuffer outputBuffer; - - inputBuffer.setData(source.toUtf8()); - styleSheetBuffer.setData(QString(stylesheet->sheetString()).toUtf8()); - - inputBuffer.open(QIODevice::ReadOnly); - styleSheetBuffer.open(QIODevice::ReadOnly); - outputBuffer.open(QIODevice::ReadWrite); - - query.setFocus(&inputBuffer); - query.setQuery(&styleSheetBuffer, QUrl(stylesheet->href())); - - query.setUriResolver(&uriResolver); - - success = query.evaluateTo(&outputBuffer); - outputBuffer.reset(); - resultString = QString::fromUtf8(outputBuffer.readAll()).trimmed(); - - if (m_stylesheet) { - m_stylesheet->clearDocuments(); - m_stylesheet = 0; - } - - return success; -} - -} // namespace WebCore - -#endif // ENABLE(XSLT) diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.cpp b/src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.cpp deleted file mode 100644 index b0b9c72..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "XSLTUnicodeSort.h" - -#if ENABLE(XSLT) - -#include "PlatformString.h" -#include <libxslt/templates.h> -#include <libxslt/xsltutils.h> -#include <wtf/unicode/Collator.h> - -#if PLATFORM(MAC) -#include "SoftLinking.h" -#endif - -#if PLATFORM(MAC) - -SOFT_LINK_LIBRARY(libxslt) -SOFT_LINK(libxslt, xsltComputeSortResult, xmlXPathObjectPtr*, (xsltTransformContextPtr ctxt, xmlNodePtr sort), (ctxt, sort)) -SOFT_LINK(libxslt, xsltEvalAttrValueTemplate, xmlChar*, (xsltTransformContextPtr ctxt, xmlNodePtr node, const xmlChar *name, const xmlChar *ns), (ctxt, node, name, ns)) - -static void xsltTransformErrorTrampoline(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char* message, ...) WTF_ATTRIBUTE_PRINTF(4, 5); - -void xsltTransformErrorTrampoline(xsltTransformContextPtr context, xsltStylesheetPtr style, xmlNodePtr node, const char* message, ...) -{ - va_list args; - va_start(args, message); - char* messageWithArgs; - vasprintf(&messageWithArgs, message, args); - va_end(args); - - static void (*xsltTransformErrorPointer)(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char*, ...) WTF_ATTRIBUTE_PRINTF(4, 5) - = reinterpret_cast<void (*)(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char*, ...)>(dlsym(libxsltLibrary(), "xsltTransformError")); - xsltTransformErrorPointer(context, style, node, "%s", messageWithArgs); - - free(messageWithArgs); -} - -#define xsltTransformError xsltTransformErrorTrampoline - -#endif - -namespace WebCore { - -// Based on default implementation from libxslt 1.1.22 and xsltICUSort.c example. -void xsltUnicodeSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, int nbsorts) -{ -#ifdef XSLT_REFACTORED - xsltStyleItemSortPtr comp; -#else - xsltStylePreCompPtr comp; -#endif - xmlXPathObjectPtr *resultsTab[XSLT_MAX_SORT]; - xmlXPathObjectPtr *results = NULL, *res; - xmlNodeSetPtr list = NULL; - int descending, number, desc, numb; - int len = 0; - int i, j, incr; - int tst; - int depth; - xmlNodePtr node; - xmlXPathObjectPtr tmp; - int tempstype[XSLT_MAX_SORT], temporder[XSLT_MAX_SORT]; - - if ((ctxt == NULL) || (sorts == NULL) || (nbsorts <= 0) || - (nbsorts >= XSLT_MAX_SORT)) - return; - if (sorts[0] == NULL) - return; - comp = static_cast<xsltStylePreComp*>(sorts[0]->psvi); - if (comp == NULL) - return; - - list = ctxt->nodeList; - if ((list == NULL) || (list->nodeNr <= 1)) - return; /* nothing to do */ - - for (j = 0; j < nbsorts; j++) { - comp = static_cast<xsltStylePreComp*>(sorts[j]->psvi); - tempstype[j] = 0; - if ((comp->stype == NULL) && (comp->has_stype != 0)) { - comp->stype = - xsltEvalAttrValueTemplate(ctxt, sorts[j], - (const xmlChar *) "data-type", - XSLT_NAMESPACE); - if (comp->stype != NULL) { - tempstype[j] = 1; - if (xmlStrEqual(comp->stype, (const xmlChar *) "text")) - comp->number = 0; - else if (xmlStrEqual(comp->stype, (const xmlChar *) "number")) - comp->number = 1; - else { - xsltTransformError(ctxt, NULL, sorts[j], - "xsltDoSortFunction: no support for data-type = %s\n", - comp->stype); - comp->number = 0; /* use default */ - } - } - } - temporder[j] = 0; - if ((comp->order == NULL) && (comp->has_order != 0)) { - comp->order = xsltEvalAttrValueTemplate(ctxt, sorts[j], - (const xmlChar *) "order", - XSLT_NAMESPACE); - if (comp->order != NULL) { - temporder[j] = 1; - if (xmlStrEqual(comp->order, (const xmlChar *) "ascending")) - comp->descending = 0; - else if (xmlStrEqual(comp->order, - (const xmlChar *) "descending")) - comp->descending = 1; - else { - xsltTransformError(ctxt, NULL, sorts[j], - "xsltDoSortFunction: invalid value %s for order\n", - comp->order); - comp->descending = 0; /* use default */ - } - } - } - } - - len = list->nodeNr; - - resultsTab[0] = xsltComputeSortResult(ctxt, sorts[0]); - for (i = 1;i < XSLT_MAX_SORT;i++) - resultsTab[i] = NULL; - - results = resultsTab[0]; - - comp = static_cast<xsltStylePreComp*>(sorts[0]->psvi); - descending = comp->descending; - number = comp->number; - if (results == NULL) - return; - - // We are passing a language identifier to a function that expects a locale identifier. - // The implementation of Collator should be lenient, and accept both "en-US" and "en_US", for example. - // This lets an author to really specify sorting rules, e.g. "de_DE@collation=phonebook", which isn't - // possible with language alone. - Collator collator(comp->has_lang ? (const char*)comp->lang : "en"); - collator.setOrderLowerFirst(comp->lower_first); - - /* Shell's sort of node-set */ - for (incr = len / 2; incr > 0; incr /= 2) { - for (i = incr; i < len; i++) { - j = i - incr; - if (results[i] == NULL) - continue; - - while (j >= 0) { - if (results[j] == NULL) - tst = 1; - else { - if (number) { - /* We make NaN smaller than number in accordance - with XSLT spec */ - if (xmlXPathIsNaN(results[j]->floatval)) { - if (xmlXPathIsNaN(results[j + incr]->floatval)) - tst = 0; - else - tst = -1; - } else if (xmlXPathIsNaN(results[j + incr]->floatval)) - tst = 1; - else if (results[j]->floatval == - results[j + incr]->floatval) - tst = 0; - else if (results[j]->floatval > - results[j + incr]->floatval) - tst = 1; - else tst = -1; - } else { - String str1 = String::fromUTF8((const char*)results[j]->stringval); - String str2 = String::fromUTF8((const char*)results[j + incr]->stringval); - tst = collator.collate(str1.characters(), str1.length(), str2.characters(), str2.length()); - } - if (descending) - tst = -tst; - } - if (tst == 0) { - /* - * Okay we need to use multi level sorts - */ - depth = 1; - while (depth < nbsorts) { - if (sorts[depth] == NULL) - break; - comp = static_cast<xsltStylePreComp*>(sorts[depth]->psvi); - if (comp == NULL) - break; - desc = comp->descending; - numb = comp->number; - - /* - * Compute the result of the next level for the - * full set, this might be optimized ... or not - */ - if (resultsTab[depth] == NULL) - resultsTab[depth] = xsltComputeSortResult(ctxt, - sorts[depth]); - res = resultsTab[depth]; - if (res == NULL) - break; - if (res[j] == NULL) { - if (res[j+incr] != NULL) - tst = 1; - } else { - if (numb) { - /* We make NaN smaller than number in - accordance with XSLT spec */ - if (xmlXPathIsNaN(res[j]->floatval)) { - if (xmlXPathIsNaN(res[j + - incr]->floatval)) - tst = 0; - else - tst = -1; - } else if (xmlXPathIsNaN(res[j + incr]-> - floatval)) - tst = 1; - else if (res[j]->floatval == res[j + incr]-> - floatval) - tst = 0; - else if (res[j]->floatval > - res[j + incr]->floatval) - tst = 1; - else tst = -1; - } else { - String str1 = String::fromUTF8((const char*)res[j]->stringval); - String str2 = String::fromUTF8((const char*)res[j + incr]->stringval); - tst = collator.collate(str1.characters(), str1.length(), str2.characters(), str2.length()); - } - if (desc) - tst = -tst; - } - - /* - * if we still can't differenciate at this level - * try one level deeper. - */ - if (tst != 0) - break; - depth++; - } - } - if (tst == 0) { - tst = results[j]->index > results[j + incr]->index; - } - if (tst > 0) { - tmp = results[j]; - results[j] = results[j + incr]; - results[j + incr] = tmp; - node = list->nodeTab[j]; - list->nodeTab[j] = list->nodeTab[j + incr]; - list->nodeTab[j + incr] = node; - depth = 1; - while (depth < nbsorts) { - if (sorts[depth] == NULL) - break; - if (resultsTab[depth] == NULL) - break; - res = resultsTab[depth]; - tmp = res[j]; - res[j] = res[j + incr]; - res[j + incr] = tmp; - depth++; - } - j -= incr; - } else - break; - } - } - } - - for (j = 0; j < nbsorts; j++) { - comp = static_cast<xsltStylePreComp*>(sorts[j]->psvi); - if (tempstype[j] == 1) { - /* The data-type needs to be recomputed each time */ - xmlFree((void *)(comp->stype)); - comp->stype = NULL; - } - if (temporder[j] == 1) { - /* The order needs to be recomputed each time */ - xmlFree((void *)(comp->order)); - comp->order = NULL; - } - if (resultsTab[j] != NULL) { - for (i = 0;i < len;i++) - xmlXPathFreeObject(resultsTab[j][i]); - xmlFree(resultsTab[j]); - } - } -} - -} - -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.h b/src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.h deleted file mode 100644 index c8d395b..0000000 --- a/src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef XSLTUnicodeSort_h -#define XSLTUnicodeSort_h - -#if ENABLE(XSLT) - -#include <libxslt/xsltInternals.h> - -namespace WebCore { - - void xsltUnicodeSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr* sorts, int nbsorts); - -} - -#endif -#endif diff --git a/src/3rdparty/webkit/WebCore/xml/xmlattrs.in b/src/3rdparty/webkit/WebCore/xml/xmlattrs.in deleted file mode 100644 index 6cc47be..0000000 --- a/src/3rdparty/webkit/WebCore/xml/xmlattrs.in +++ /dev/null @@ -1,6 +0,0 @@ -namespace="XML" -namespaceURI="http://www.w3.org/XML/1998/namespace" - -base -lang -space diff --git a/src/3rdparty/webkit/WebCore/xml/xmlnsattrs.in b/src/3rdparty/webkit/WebCore/xml/xmlnsattrs.in deleted file mode 100644 index 7ac415a..0000000 --- a/src/3rdparty/webkit/WebCore/xml/xmlnsattrs.in +++ /dev/null @@ -1,4 +0,0 @@ -namespace="XMLNS" -namespaceURI="http://www.w3.org/2000/xmlns/" - -xmlns |