18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This file is part of the XSL implementation.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2007, 2008 Apple, Inc. All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef XSLTProcessor_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define XSLTProcessor_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT)
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Node.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XSLStyleSheet.h"
30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/HashMap.h>
31f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h>
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if !USE(QXMLQUERY)
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <libxml/parserInternals.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <libxslt/documents.h>
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Frame;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Document;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass DocumentFragment;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass XSLTProcessor : public RefCounted<XSLTProcessor> {
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static PassRefPtr<XSLTProcessor> create() { return adoptRef(new XSLTProcessor); }
476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    ~XSLTProcessor();
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setXSLStyleSheet(PassRefPtr<XSLStyleSheet> styleSheet) { m_stylesheet = styleSheet; }
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool transformToString(Node* source, String& resultMIMEType, String& resultString, String& resultEncoding);
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<Document> createDocumentFromSource(const String& source, const String& sourceEncoding, const String& sourceMIMEType, Node* sourceNode, Frame* frame);
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // DOM methods
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void importStylesheet(PassRefPtr<Node> style) { m_stylesheetRootNode = style; }
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<DocumentFragment> transformToFragment(Node* source, Document* ouputDoc);
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<Document> transformToDocument(Node* source);
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setParameter(const String& namespaceURI, const String& localName, const String& value);
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String getParameter(const String& namespaceURI, const String& localName) const;
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void removeParameter(const String& namespaceURI, const String& localName);
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearParameters() { m_parameters.clear(); }
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void reset();
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if !USE(QXMLQUERY)
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void parseErrorFunc(void* userData, xmlError*);
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void genericErrorFunc(void* userData, const char* msg, ...);
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Only for libXSLT callbacks
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    XSLStyleSheet* xslStylesheet() const { return m_stylesheet.get(); }
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    typedef HashMap<String, String> ParameterMap;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    XSLTProcessor() { }
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<XSLStyleSheet> m_stylesheet;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_stylesheetRootNode;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ParameterMap m_parameters;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
87