The top-level XSL sheet is now loaded and shows up in the activity window. It is...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 4 Aug 2004 22:05:48 +0000 (22:05 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 4 Aug 2004 22:05:48 +0000 (22:05 +0000)
        Reviewed by kocienda

        * WebCore.pbproj/project.pbxproj:
        * khtml/css/css_base.h:
        (DOM::StyleBaseImpl::isXSLStyleSheet):
        * khtml/css/css_stylesheetimpl.cpp:
        (CSSStyleSheetImpl::CSSStyleSheetImpl):
        * khtml/css/css_stylesheetimpl.h:
        (DOM::StyleSheetImpl::isLoading):
        * khtml/misc/loader.cpp:
        * khtml/xml/dom_xmlimpl.cpp:
        (DOM::ProcessingInstructionImpl::ProcessingInstructionImpl):
        (DOM::ProcessingInstructionImpl::checkStyleSheet):
        (DOM::ProcessingInstructionImpl::sheet):
        (DOM::ProcessingInstructionImpl::isLoading):
        (DOM::ProcessingInstructionImpl::setStyleSheet):
        * khtml/xml/dom_xmlimpl.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7192 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/WebCore.pbproj/project.pbxproj
WebCore/khtml/css/css_base.h
WebCore/khtml/css/css_stylesheetimpl.cpp
WebCore/khtml/css/css_stylesheetimpl.h
WebCore/khtml/misc/loader.cpp
WebCore/khtml/xml/dom_xmlimpl.cpp
WebCore/khtml/xml/dom_xmlimpl.h
WebCore/khtml/xml/xsl_stylesheetimpl.cpp [new file with mode: 0644]
WebCore/khtml/xml/xsl_stylesheetimpl.h [new file with mode: 0644]

index cd6b618..4b0b072 100644 (file)
@@ -1,5 +1,27 @@
 2004-08-04  David Hyatt  <hyatt@apple.com>
 
+       The top-level XSL sheet is now loaded and shows up in the activity window.  It is not yet parsed.
+       
+        Reviewed by kocienda
+
+        * WebCore.pbproj/project.pbxproj:
+        * khtml/css/css_base.h:
+        (DOM::StyleBaseImpl::isXSLStyleSheet):
+        * khtml/css/css_stylesheetimpl.cpp:
+        (CSSStyleSheetImpl::CSSStyleSheetImpl):
+        * khtml/css/css_stylesheetimpl.h:
+        (DOM::StyleSheetImpl::isLoading):
+        * khtml/misc/loader.cpp:
+        * khtml/xml/dom_xmlimpl.cpp:
+        (DOM::ProcessingInstructionImpl::ProcessingInstructionImpl):
+        (DOM::ProcessingInstructionImpl::checkStyleSheet):
+        (DOM::ProcessingInstructionImpl::sheet):
+        (DOM::ProcessingInstructionImpl::isLoading):
+        (DOM::ProcessingInstructionImpl::setStyleSheet):
+        * khtml/xml/dom_xmlimpl.h:
+
+2004-08-04  David Hyatt  <hyatt@apple.com>
+
        Add XSL Stylesheets to the WebCore cache.
        
         Reviewed by kocienda
index 7b9931c..4f5c333 100644 (file)
                                BE02D4E8066F908A0076809F,
                                93D1FEF7067EBF89009CE68A,
                                9348900606C00363007E7ACE,
+                               BC9D580706C185A4001E893C,
                        );
                        isa = PBXHeadersBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                                2D90660E0665D937006B6F1A,
                                BE02F485066E1C550013A9F6,
                                BE02D4E9066F908A0076809F,
+                               BC9D580606C185A4001E893C,
                        );
                        isa = PBXSourcesBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                        settings = {
                        };
                };
+               BC9D580406C185A4001E893C = {
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.cpp.cpp;
+                       path = xsl_stylesheetimpl.cpp;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               BC9D580506C185A4001E893C = {
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.h;
+                       path = xsl_stylesheetimpl.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               BC9D580606C185A4001E893C = {
+                       fileRef = BC9D580406C185A4001E893C;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               BC9D580706C185A4001E893C = {
+                       fileRef = BC9D580506C185A4001E893C;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
                BCBDB0370597B36E00B83B92 = {
                        fileEncoding = 30;
                        isa = PBXFileReference;
                                BC7FDE3205C1D9AB0070A902,
                                F523D30902DE4476018635CA,
                                F523D30A02DE4476018635CA,
+                               BC9D580406C185A4001E893C,
+                               BC9D580506C185A4001E893C,
                        );
                        isa = PBXGroup;
                        path = xml;
index d7cabab..39a38d4 100644 (file)
@@ -197,6 +197,7 @@ namespace DOM {
 
        virtual bool isStyleSheet() const { return false; }
        virtual bool isCSSStyleSheet() const { return false; }
+        virtual bool isXSLStyleSheet() const { return false; }
        virtual bool isStyleSheetList() const { return false; }
        virtual bool isMediaList() { return false; }
        virtual bool isRuleList() { return false; }
index 1f68357..1f9fdb2 100644 (file)
@@ -105,12 +105,12 @@ CSSStyleSheetImpl::CSSStyleSheetImpl(CSSStyleSheetImpl *parentSheet, DOMString h
     : StyleSheetImpl(parentSheet, href)
 {
     m_lstChildren = new QPtrList<StyleBaseImpl>;
-    m_doc = 0;
+    m_doc = parentSheet ? parentSheet->doc() : 0;
     m_implicit = false;
     m_namespaces = 0;
 }
 
-CSSStyleSheetImpl::CSSStyleSheetImpl(DOM::NodeImpl *parentNode, DOMString href, bool _implicit)
+CSSStyleSheetImpl::CSSStyleSheetImpl(NodeImpl *parentNode, DOMString href, bool _implicit)
     : StyleSheetImpl(parentNode, href)
 {
     m_lstChildren = new QPtrList<StyleBaseImpl>;
index b98f1f3..dfbc332 100644 (file)
@@ -72,6 +72,8 @@ public:
     MediaListImpl *media() const { return m_media; }
     void setMedia( MediaListImpl *media );
 
+    virtual bool isLoading() { return false; }
+
 protected:
     DOM::NodeImpl *m_parentNode;
     DOM::DOMString m_strHref;
@@ -107,7 +109,7 @@ public:
     
     virtual bool parseString( const DOMString &string, bool strict = true );
 
-    bool isLoading();
+    virtual bool isLoading();
 
     virtual void checkLoaded();
     khtml::DocLoader *docLoader();
index 3c03dab..548dff9 100644 (file)
@@ -1266,7 +1266,7 @@ CachedScript *DocLoader::requestScript( const DOM::DOMString &url, const QString
 #endif
 }
 
-#ifndef KHTML_NO_XBL
+#ifdef KHTML_XSLT
 CachedXSLStyleSheet* DocLoader::requestXSLStyleSheet(const DOM::DOMString &url)
 {
     KURL fullURL = m_doc->completeURL(url.string());
index 3a47642..8220694 100644 (file)
@@ -25,6 +25,9 @@
 #include "xml/dom_docimpl.h"
 #include "xml/dom_stringimpl.h"
 #include "css/css_stylesheetimpl.h"
+#ifdef KHTML_XSLT
+#include "xsl_stylesheetimpl.h"
+#endif
 #include "misc/loader.h"
 #include "xml/xml_tokenizer.h"
 
@@ -302,6 +305,9 @@ ProcessingInstructionImpl::ProcessingInstructionImpl(DocumentPtr *doc) : NodeBas
     m_sheet = 0;
     m_cachedSheet = 0;
     m_loading = false;
+#ifdef KHTML_XSLT
+    m_isXSL = false;
+#endif
 }
 
 ProcessingInstructionImpl::ProcessingInstructionImpl(DocumentPtr *doc, DOMString _target, DOMString _data) : NodeBaseImpl(doc)
@@ -315,6 +321,9 @@ ProcessingInstructionImpl::ProcessingInstructionImpl(DocumentPtr *doc, DOMString
     m_sheet = 0;
     m_cachedSheet = 0;
     m_localHref = 0;
+#ifdef KHTML_XSLT
+    m_isXSL = false;
+#endif
 }
 
 ProcessingInstructionImpl::~ProcessingInstructionImpl()
@@ -407,7 +416,15 @@ void ProcessingInstructionImpl::checkStyleSheet()
         QString type;
         if (i != attrs.end())
             type = *i;
-        if (type != "text/css" && !type.isEmpty())
+        
+        bool isCSS = type.isEmpty() || type == "text/css";
+#ifdef KHTML_XSLT
+        m_isXSL = (type == "text/xml" || type == "text/xsl" || type == "application/xml" ||
+                   type == "application/xml+xhtml");
+        if (!isCSS && !m_isXSL)
+#else
+        if (!isCSS)
+#endif
             return;
 
         i = attrs.find("href");
@@ -434,7 +451,12 @@ void ProcessingInstructionImpl::checkStyleSheet()
                    m_loading = true;
                    getDocument()->addPendingSheet();
                    if (m_cachedSheet) m_cachedSheet->deref(this);
-                   m_cachedSheet = getDocument()->docLoader()->requestStyleSheet(getDocument()->completeURL(href), QString::null);
+#ifdef KHTML_XSLT
+                    if (m_isXSL)
+                        m_cachedSheet = getDocument()->docLoader()->requestXSLStyleSheet(getDocument()->completeURL(href));
+                    else
+#endif
+                    m_cachedSheet = getDocument()->docLoader()->requestStyleSheet(getDocument()->completeURL(href), QString::null);
                    if (m_cachedSheet)
                        m_cachedSheet->ref( this );
                }
@@ -444,16 +466,18 @@ void ProcessingInstructionImpl::checkStyleSheet()
     }
 }
 
-StyleSheetImpl *ProcessingInstructionImpl::sheet() const
+StyleSheetImplProcessingInstructionImpl::sheet() const
 {
     return m_sheet;
 }
 
 bool ProcessingInstructionImpl::isLoading() const
 {
-    if(m_loading) return true;
-    if(!m_sheet) return false;
-    return static_cast<CSSStyleSheetImpl *>(m_sheet)->isLoading();
+    if (m_loading)
+        return true;
+    if (!m_sheet)
+        return false;
+    return m_sheet->isLoading();
 }
 
 void ProcessingInstructionImpl::sheetLoaded()
@@ -466,7 +490,12 @@ void ProcessingInstructionImpl::setStyleSheet(const DOM::DOMString &url, const D
 {
     if (m_sheet)
        m_sheet->deref();
-    m_sheet = new CSSStyleSheetImpl(this, url);
+#ifdef KHTML_XSLT
+    if (m_isXSL)
+        m_sheet = new XSLStyleSheetImpl(this, url);
+    else
+#endif
+        m_sheet = new CSSStyleSheetImpl(this, url);
     m_sheet->ref();
     m_sheet->parseString(sheet);
     if (m_cachedSheet)
index 9f37d5e..6a0e8a3 100644 (file)
@@ -167,9 +167,12 @@ protected:
     DOMStringImpl *m_target;
     DOMStringImpl *m_data;
     DOMStringImpl *m_localHref;
-    khtml::CachedCSSStyleSheet *m_cachedSheet;
-    CSSStyleSheetImpl *m_sheet;
+    khtml::CachedObject *m_cachedSheet;
+    StyleSheetImpl *m_sheet;
     bool m_loading;
+#ifdef KHTML_XSLT
+    bool m_isXSL;
+#endif
 };
 
 }; //namespace
diff --git a/WebCore/khtml/xml/xsl_stylesheetimpl.cpp b/WebCore/khtml/xml/xsl_stylesheetimpl.cpp
new file mode 100644 (file)
index 0000000..d1fe0b2
--- /dev/null
@@ -0,0 +1,94 @@
+/**
+ * This file is part of the XSL implementation.
+ *
+ * Copyright (C) 2004 Apple Computer, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef KHTML_XSLT
+
+#include "dom/dom_string.h"
+#include "dom/dom_exception.h"
+
+#include "xml/dom_nodeimpl.h"
+#include "html/html_documentimpl.h"
+#include "misc/loader.h"
+#include "xsl_stylesheetimpl.h"
+
+#include <kdebug.h>
+
+using namespace khtml;
+using namespace DOM;
+
+namespace DOM {
+    
+XSLStyleSheetImpl::XSLStyleSheetImpl(XSLStyleSheetImpl *parentSheet, DOMString href)
+    : StyleSheetImpl(parentSheet, href)
+{
+    m_lstChildren = new QPtrList<StyleBaseImpl>;
+    m_doc = parentSheet ? parentSheet->doc() : 0;
+    parentSheet->append(this);
+}
+
+XSLStyleSheetImpl::XSLStyleSheetImpl(NodeImpl *parentNode, DOMString href)
+    : StyleSheetImpl(parentNode, href)
+{
+    m_lstChildren = new QPtrList<StyleBaseImpl>;
+    m_doc = parentNode->getDocument();
+}
+
+XSLStyleSheetImpl::~XSLStyleSheetImpl()
+{
+}
+
+bool XSLStyleSheetImpl::isLoading()
+{
+    StyleBaseImpl* sheet;
+    for (sheet = m_lstChildren->first(); sheet; sheet = m_lstChildren->next()) {
+        if (sheet->isXSLStyleSheet()) {
+            XSLStyleSheetImpl* import = static_cast<XSLStyleSheetImpl*>(import);
+            if (import->isLoading())
+                return true;
+        }
+    }
+    return false;
+}
+
+void XSLStyleSheetImpl::checkLoaded()
+{
+    if (isLoading()) 
+        return;
+    if (m_parent)
+        m_parent->checkLoaded();
+    if (m_parentNode)
+        m_parentNode->sheetLoaded();
+}
+
+khtml::DocLoader* XSLStyleSheetImpl::docLoader()
+{
+    if (!m_doc)
+        return 0;
+    return m_doc->docLoader();
+}
+
+bool XSLStyleSheetImpl::parseString(const DOMString &string, bool strict)
+{
+    return false;
+}
+
+}
+#endif
diff --git a/WebCore/khtml/xml/xsl_stylesheetimpl.h b/WebCore/khtml/xml/xsl_stylesheetimpl.h
new file mode 100644 (file)
index 0000000..1aaad38
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * This file is part of the XSL implementation.
+ *
+ * Copyright (C) 2004 Apple Computer, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+#ifndef _xsl_stylesheetimpl_h_
+#define _xsl_stylesheetimpl_h_
+
+#ifdef KHTML_XSLT
+
+#include "css/css_stylesheetimpl.h"
+
+namespace DOM {
+
+class XSLStyleSheetImpl : public StyleSheetImpl
+{
+public:
+    XSLStyleSheetImpl(DOM::NodeImpl *parentNode, DOM::DOMString href = DOMString());
+    XSLStyleSheetImpl(XSLStyleSheetImpl *parentSheet, DOM::DOMString href = DOMString());
+    ~XSLStyleSheetImpl();
+    
+    virtual bool isXSLStyleSheet() const { return true; }
+    virtual DOM::DOMString type() const { return "text/xml"; }
+
+    virtual bool parseString(const DOMString &string, bool strict = true);
+    
+    virtual bool isLoading();
+    virtual void checkLoaded();
+    
+    khtml::DocLoader *docLoader();
+    DocumentImpl *doc() { return m_doc; }
+
+protected:
+    DocumentImpl *m_doc;
+};
+
+}
+#endif
+#endif