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