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, 2006, 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 XSLStyleSheet_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define XSLStyleSheet_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT)
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "ProcessingInstruction.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StyleSheet.h"
30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if !USE(QXMLQUERY)
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <libxml/parser.h>
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <libxslt/transform.h>
34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/PassRefPtr.h>
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass XSLImportRule;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass XSLStyleSheet : public StyleSheet {
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if !USE(QXMLQUERY)
458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    static PassRefPtr<XSLStyleSheet> create(XSLImportRule* parentImport, const String& originalURL, const KURL& finalURL)
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        return adoptRef(new XSLStyleSheet(parentImport, originalURL, finalURL));
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    static PassRefPtr<XSLStyleSheet> create(ProcessingInstruction* parentNode, const String& originalURL, const KURL& finalURL)
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        return adoptRef(new XSLStyleSheet(parentNode, originalURL, finalURL, false));
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    static PassRefPtr<XSLStyleSheet> createEmbedded(ProcessingInstruction* parentNode, const KURL& finalURL)
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        return adoptRef(new XSLStyleSheet(parentNode, finalURL.string(), finalURL, true));
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // Taking an arbitrary node is unsafe, because owner node pointer can become stale.
604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // XSLTProcessor ensures that the stylesheet doesn't outlive its parent, in part by not exposing it to JavaScript.
614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    static PassRefPtr<XSLStyleSheet> createForXSLTProcessor(Node* parentNode, const String& originalURL, const KURL& finalURL)
624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    {
634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return adoptRef(new XSLStyleSheet(parentNode, originalURL, finalURL, false));
644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~XSLStyleSheet();
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isXSLStyleSheet() const { return true; }
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual String type() const { return "text/xml"; }
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool parseString(const String &string, bool strict = true);
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isLoading();
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void checkLoaded();
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void loadChildSheets();
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void loadChildSheet(const String& href);
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
805abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    CachedResourceLoader* cachedResourceLoader();
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    Document* ownerDocument();
832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    XSLStyleSheet* parentStyleSheet() const { return m_parentStyleSheet; }
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void setParentStyleSheet(XSLStyleSheet* parent);
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if USE(QXMLQUERY)
87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    String sheetString() const { return m_sheetString; }
88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    xmlDocPtr document();
90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    xsltStylesheetPtr compileStyleSheet();
91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    xmlDocPtr locateStylesheetSubResource(xmlDocPtr parentDoc, const xmlChar* uri);
92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearDocuments();
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void markAsProcessed();
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool processed() const { return m_processed; }
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
1008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded);
101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if !USE(QXMLQUERY)
1028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    XSLStyleSheet(XSLImportRule* parentImport, const String& originalURL, const KURL& finalURL);
103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Document* m_ownerDocument;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_embedded;
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_processed;
108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if USE(QXMLQUERY)
110231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    String m_sheetString;
111231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else
112231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    xmlDocPtr m_stylesheetDoc;
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_stylesheetDocTaken;
114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
115231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    XSLStyleSheet* m_parentStyleSheet;
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(XSLT)
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // XSLStyleSheet_h
124