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