XSLStyleSheet.h revision 231d4e3152a9c27a73b6ac7badbe6be673aa3ddf
1dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner/*
2dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * This file is part of the XSL implementation.
3dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner *
4dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner *
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner * This library is free software; you can redistribute it and/or
7dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * modify it under the terms of the GNU Library General Public
8dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * License as published by the Free Software Foundation; either
9dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * version 2 of the License, or (at your option) any later version.
10dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner *
11a8a118b68fa3ca1632e7280cd6994aa0f8f1eec1Gordon Henriksen * This library is distributed in the hope that it will be useful,
12a8a118b68fa3ca1632e7280cd6994aa0f8f1eec1Gordon Henriksen * but WITHOUT ANY WARRANTY; without even the implied warranty of
13dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * Library General Public License for more details.
15dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner *
16dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * You should have received a copy of the GNU Library General Public License
17dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * along with this library; see the file COPYING.LIB.  If not, write to
18dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner * Boston, MA 02110-1301, USA.
20dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner *
219bf12b5583104c810cfadcdce91edf9efad79973Evan Cheng */
22dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner
236aae1d6582fe8519c42d9774d670bb93c78e9637Dale Johannesen#ifndef XSLStyleSheet_h
24dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner#define XSLStyleSheet_h
2580f6a507d4e11ba066ad0e53e12ad25ad8cf07baCameron Zwarich
26d5f8684b16057df73771b23e293b400cb327e079Owen Anderson#if ENABLE(XSLT)
27ad80981a106c9d0ec83351e63ee3ac75ed646bf4Andreas Neustifter
28dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner#include "StyleSheet.h"
29dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner
30a1fd5b386dd8eb4c86bfd2b9659c219a1c4f56dbEvan Cheng#if !USE(QXMLQUERY)
31dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner#include <libxml/parser.h>
32dd77df3cbc2301c14f56c9d2cfd412a032c27241Chris Lattner#include <libxslt/transform.h>
33040056fd11693ffc41ce9b777281c71705d0dc1fEric Christopher#endif
34dd77df3cbc2301c14f56c9d2cfd412a032c27241Chris Lattner
35dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner#include <wtf/PassRefPtr.h>
367eb589d3f9294dbfe4d5205045bd8119a9666532Jakob Stoklund Olesen
3703ce042d70c423a41edca0714112a0e06b16493bDan Gohmannamespace WebCore {
389bf12b5583104c810cfadcdce91edf9efad79973Evan Cheng
39e1bcb440dc0ca3c41fda1c0c581abfc4f38ca170Evan Chengclass DocLoader;
40bdcb726fcad1e3fddc70847a2b91d4d4f9396938Evan Chengclass Document;
41dd77df3cbc2301c14f56c9d2cfd412a032c27241Chris Lattnerclass XSLImportRule;
42088a1e84ea985a22efcf907d7789064fee3a97b9Chris Lattner
436c1980b3357207c4d756255bc5e32323eac278dcDan Gohmanclass XSLStyleSheet : public StyleSheet {
44040056fd11693ffc41ce9b777281c71705d0dc1fEric Christopherpublic:
45dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner#if !USE(QXMLQUERY)
46088a1e84ea985a22efcf907d7789064fee3a97b9Chris Lattner    static PassRefPtr<XSLStyleSheet> create(XSLImportRule* parentImport, const String& href)
47dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner    {
4831ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich        return adoptRef(new XSLStyleSheet(parentImport, href));
49073057f0d0a1e21ab020fa71ff4bd11543faa6d0Cameron Zwarich    }
50073057f0d0a1e21ab020fa71ff4bd11543faa6d0Cameron Zwarich#endif
5131ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich    static PassRefPtr<XSLStyleSheet> create(Node* parentNode, const String& href)
5231ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich    {
5331ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich        return adoptRef(new XSLStyleSheet(parentNode, href, false));
5431ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich    }
5531ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich    static PassRefPtr<XSLStyleSheet> createEmbedded(Node* parentNode, const String& href)
5631ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich    {
5731ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich        return adoptRef(new XSLStyleSheet(parentNode, href, true));
5831ff1333e0651192212cee6e090df2ff57d19b53Cameron Zwarich    }
597eb589d3f9294dbfe4d5205045bd8119a9666532Jakob Stoklund Olesen
60e1bcb440dc0ca3c41fda1c0c581abfc4f38ca170Evan Cheng    virtual ~XSLStyleSheet();
61e1bcb440dc0ca3c41fda1c0c581abfc4f38ca170Evan Cheng
62e1bcb440dc0ca3c41fda1c0c581abfc4f38ca170Evan Cheng    virtual bool isXSLStyleSheet() const { return true; }
637eb589d3f9294dbfe4d5205045bd8119a9666532Jakob Stoklund Olesen
64e1bcb440dc0ca3c41fda1c0c581abfc4f38ca170Evan Cheng    virtual String type() const { return "text/xml"; }
65692bf6b85e0eaed549cd47d67289ab7b28e32651Eric Christopher
663e8b6631e67e01e4960a7ba4668a50c596607473Chris Lattner    virtual bool parseString(const String &string, bool strict = true);
67dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner
68dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner    virtual bool isLoading();
69dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner    virtual void checkLoaded();
7080f6a507d4e11ba066ad0e53e12ad25ad8cf07baCameron Zwarich
7104149f7ffd033773adfe85e4acf3f560e29bd47dEvan Cheng    void loadChildSheets();
72ab63152871f4144050d0a58d592a95e089fe40d4Evan Cheng    void loadChildSheet(const String& href);
73ab63152871f4144050d0a58d592a95e089fe40d4Evan Cheng
74ab63152871f4144050d0a58d592a95e089fe40d4Evan Cheng    DocLoader* docLoader();
75fe095f39e7009c51d1c86769792ccbcad8cdd2ecMike Stump
768c3527e7a475dd3369a485a4f610d56f7005b7b5Cameron Zwarich    Document* ownerDocument() { return m_ownerDocument; }
778c3527e7a475dd3369a485a4f610d56f7005b7b5Cameron Zwarich    void setParentStyleSheet(XSLStyleSheet* parent);
788c3527e7a475dd3369a485a4f610d56f7005b7b5Cameron Zwarich
798c3527e7a475dd3369a485a4f610d56f7005b7b5Cameron Zwarich#if USE(QXMLQUERY)
808c3527e7a475dd3369a485a4f610d56f7005b7b5Cameron Zwarich    String sheetString() const { return m_sheetString; }
818c3527e7a475dd3369a485a4f610d56f7005b7b5Cameron Zwarich#else
82dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner    xmlDocPtr document();
83ecd94c804a563f2a86572dcf1d2e81f397e19daaNick Lewycky    xsltStylesheetPtr compileStyleSheet();
84c2bbfc18e9adbbdcf5b3375d8d25e2452f7df7f1Dan Gohman    xmlDocPtr locateStylesheetSubResource(xmlDocPtr parentDoc, const xmlChar* uri);
85081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson#endif
86081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson
87081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson    void clearDocuments();
88dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner
89692bf6b85e0eaed549cd47d67289ab7b28e32651Eric Christopher    void markAsProcessed();
90ad80981a106c9d0ec83351e63ee3ac75ed646bf4Andreas Neustifter    bool processed() const { return m_processed; }
9180f6a507d4e11ba066ad0e53e12ad25ad8cf07baCameron Zwarich
92ad80981a106c9d0ec83351e63ee3ac75ed646bf4Andreas Neustifterprivate:
93ad80981a106c9d0ec83351e63ee3ac75ed646bf4Andreas Neustifter    XSLStyleSheet(Node* parentNode, const String& href, bool embedded);
94ad80981a106c9d0ec83351e63ee3ac75ed646bf4Andreas Neustifter#if !USE(QXMLQUERY)
95aa0e52328747d982d6c6e501a205832ad724ff62Dan Gohman    XSLStyleSheet(XSLImportRule* parentImport, const String& href);
96aa0e52328747d982d6c6e501a205832ad724ff62Dan Gohman#endif
97aa0e52328747d982d6c6e501a205832ad724ff62Dan Gohman
98aa0e52328747d982d6c6e501a205832ad724ff62Dan Gohman    Document* m_ownerDocument;
99dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner    bool m_embedded;
100d9c3a0d7cce72ac802516483c4a325b3b31bbc0eChris Lattner    bool m_processed;
101d9c3a0d7cce72ac802516483c4a325b3b31bbc0eChris Lattner
102d9c3a0d7cce72ac802516483c4a325b3b31bbc0eChris Lattner#if USE(QXMLQUERY)
103dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner    String m_sheetString;
104c061101e03ef6d2ca550f8fe71594a5e1c02e348Cameron Zwarich#else
10588a5c832ac71eb31d2b1bc143817af9248f4c549Chris Lattner    xmlDocPtr m_stylesheetDoc;
10688a5c832ac71eb31d2b1bc143817af9248f4c549Chris Lattner    bool m_stylesheetDocTaken;
1079bf12b5583104c810cfadcdce91edf9efad79973Evan Cheng#endif
1089bf12b5583104c810cfadcdce91edf9efad79973Evan Cheng
109040056fd11693ffc41ce9b777281c71705d0dc1fEric Christopher    XSLStyleSheet* m_parentStyleSheet;
110b00f236b03ea57520f94823780896ebdbc5d8bdcDan Gohman};
111bdcb726fcad1e3fddc70847a2b91d4d4f9396938Evan Cheng
112fe095f39e7009c51d1c86769792ccbcad8cdd2ecMike Stump} // namespace WebCore
113dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner
114dbe0deca339585dfbaed5951ef0ca2c6a0df173cChris Lattner#endif // ENABLE(XSLT)
115794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel
1161997473cf72957d0e70322e2fe6fe2ab141c58a6Devang Patel#endif // XSLStyleSheet_h
117d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson