15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This file is part of the XSL implementation. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2007, 2008 Apple, Inc. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef XSLTProcessor_h 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define XSLTProcessor_h 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptWrappable.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XSLStyleSheet.h" 295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 3093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/HashMap.h" 3193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/text/StringHash.h" 3293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <libxml/parserInternals.h> 3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <libxslt/documents.h> 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class LocalFrame; 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentFragment; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class XSLTProcessor : public RefCountedWillBeGarbageCollectedFinalized<XSLTProcessor>, public ScriptWrappable { 437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static PassRefPtrWillBeRawPtr<XSLTProcessor> create(Document& document) 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) { 471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRefWillBeNoop(new XSLTProcessor(document)); 491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) } 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~XSLTProcessor(); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void setXSLStyleSheet(PassRefPtrWillBeRawPtr<XSLStyleSheet> styleSheet) { m_stylesheet = styleSheet; } 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool transformToString(Node* source, String& resultMIMEType, String& resultString, String& resultEncoding); 54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) PassRefPtrWillBeRawPtr<Document> createDocumentFromSource(const String& source, const String& sourceEncoding, const String& sourceMIMEType, Node* sourceNode, LocalFrame*); 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // DOM methods 57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void importStylesheet(PassRefPtrWillBeRawPtr<Node> style) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (style) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_stylesheetRootNode = style; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) PassRefPtrWillBeRawPtr<DocumentFragment> transformToFragment(Node* source, Document* ouputDoc); 63d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) PassRefPtrWillBeRawPtr<Document> transformToDocument(Node* source); 6493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setParameter(const String& namespaceURI, const String& localName, const String& value); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String getParameter(const String& namespaceURI, const String& localName) const; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeParameter(const String& namespaceURI, const String& localName); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearParameters() { m_parameters.clear(); } 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void reset(); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static void parseErrorFunc(void* userData, xmlError*); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static void genericErrorFunc(void* userData, const char* msg, ...); 7493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Only for libXSLT callbacks 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) XSLStyleSheet* xslStylesheet() const { return m_stylesheet.get(); } 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef HashMap<String, String> ParameterMap; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void trace(Visitor*); 81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci XSLTProcessor(Document& document) 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_document(&document) 857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { } 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) RefPtrWillBeMember<XSLStyleSheet> m_stylesheet; 88d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeMember<Node> m_stylesheetRootNode; 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<Document> m_document; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ParameterMap m_parameters; 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // XSLTProcessor_h 96