15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This file is part of the XSL implementation. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2006, 2008, 2012 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 XSLStyleSheet_h 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define XSLStyleSheet_h 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include <libxml/tree.h> 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <libxslt/transform.h> 2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/StyleSheet.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ProcessingInstruction.h" 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <wtf/PassRefPtr.h> 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 343464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdochclass ResourceFetcher; 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class XSLImportRule; 3602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class XSLStyleSheet : public StyleSheet { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<XSLStyleSheet> create(XSLImportRule* parentImport, const String& originalURL, const KURL& finalURL) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new XSLStyleSheet(parentImport, originalURL, finalURL)); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<XSLStyleSheet> create(ProcessingInstruction* parentNode, const String& originalURL, const KURL& finalURL) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new XSLStyleSheet(parentNode, originalURL, finalURL, false)); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<XSLStyleSheet> createEmbedded(ProcessingInstruction* parentNode, const KURL& finalURL) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new XSLStyleSheet(parentNode, finalURL.string(), finalURL, true)); 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Taking an arbitrary node is unsafe, because owner node pointer can become stale. 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // XSLTProcessor ensures that the stylesheet doesn't outlive its parent, in part by not exposing it to JavaScript. 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<XSLStyleSheet> createForXSLTProcessor(Node* parentNode, const String& originalURL, const KURL& finalURL) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new XSLStyleSheet(parentNode, originalURL, finalURL, false)); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~XSLStyleSheet(); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool parseString(const String&); 6202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkLoaded(); 6402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const KURL& finalURL() const { return m_finalURL; } 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadChildSheets(); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadChildSheet(const String& href); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 703464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch ResourceFetcher* fetcher(); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* ownerDocument(); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual XSLStyleSheet* parentStyleSheet() const OVERRIDE { return m_parentStyleSheet; } 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setParentStyleSheet(XSLStyleSheet* parent); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) xmlDocPtr document(); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) xsltStylesheetPtr compileStyleSheet(); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) xmlDocPtr locateStylesheetSubResource(xmlDocPtr parentDoc, const xmlChar* uri); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearDocuments(); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void markAsProcessed(); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool processed() const { return m_processed; } 8402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String type() const OVERRIDE { return "text/xml"; } 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool disabled() const OVERRIDE { return m_isDisabled; } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setDisabled(bool b) OVERRIDE { m_isDisabled = b; } 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual Node* ownerNode() const OVERRIDE { return m_ownerNode; } 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String href() const OVERRIDE { return m_originalURL; } 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String title() const OVERRIDE { return emptyString(); } 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void clearOwnerNode() OVERRIDE { m_ownerNode = 0; } 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual KURL baseURL() const OVERRIDE { return m_finalURL; } 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isLoading() const OVERRIDE; 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isXSLStyleSheet() const OVERRIDE { return true; } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) XSLStyleSheet(XSLImportRule* parentImport, const String& originalURL, const KURL& finalURL); 10153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Node* m_ownerNode; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_originalURL; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL m_finalURL; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_isDisabled; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<OwnPtr<XSLImportRule> > m_children; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_embedded; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_processed; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) xmlDocPtr m_stylesheetDoc; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_stylesheetDocTaken; 114faba41ffa661cd78b7a334ae61a88fa41952497cTorne (Richard Coles) bool m_compilationFailed; 11553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) XSLStyleSheet* m_parentStyleSheet; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // XSLStyleSheet_h 122