Reviewed by Ken.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 16 Nov 2004 00:47:54 +0000 (00:47 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 16 Nov 2004 00:47:54 +0000 (00:47 +0000)
        Use separate mutable style and computed style types as appropriate.
        For now this should have no effect, but it prepares us for refactoring later.
        Also remove some unnecessary "DOM::" prefixes and in one case factor out
        some shared code.

        * khtml/khtml_part.cpp:
        (KHTMLPart::typingStyle):
        (KHTMLPart::setTypingStyle):
        (updateState):
        (KHTMLPart::selectionHasStyle):
        (KHTMLPart::selectionStartHasStyle):
        (KHTMLPart::selectionComputedStyle):
        * khtml/khtml_part.h:
        * khtml/khtmlpart_p.h:

        * khtml/css/css_base.h:
        * khtml/css/css_ruleimpl.cpp:
        (CSSStyleRuleImpl::setDeclaration):
        * khtml/css/css_ruleimpl.h:
        (DOM::CSSFontFaceRuleImpl::style):
        (DOM::CSSPageRuleImpl::style):
        (DOM::CSSStyleRuleImpl::style):
        (DOM::CSSStyleRuleImpl::declaration):
        * khtml/css/css_valueimpl.h:
        (DOM::CSSPrimitiveValueImpl::):
        * khtml/css/cssparser.cpp:
        (CSSParser::parseValue):
        (CSSParser::parseColor):
        (CSSParser::parseDeclaration):
        (CSSParser::createStyleDeclaration):
        * khtml/css/cssparser.h:
        * khtml/css/cssstyleselector.cpp:
        (khtml::CSSStyleSelector::addMatchedDeclaration):
        (khtml::CSSStyleSelector::matchRulesForList):
        (khtml::CSSStyleSelector::styleForElement):
        (khtml::CSSStyleSelector::applyDeclarations):
        * khtml/css/cssstyleselector.h:
        * khtml/css/parser.cpp:
        * khtml/css/parser.y:
        * khtml/dom/css_rule.h:
        * khtml/dom/css_stylesheet.h:
        * khtml/dom/css_value.h:
        * khtml/dom/dom2_views.cpp:
        * khtml/xml/dom2_viewsimpl.cpp:
        (DOM::AbstractViewImpl::getComputedStyle):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::importNode):
        (DocumentImpl::setStyleSheet):
        * khtml/xml/dom_docimpl.h:
        * khtml/xml/dom_xmlimpl.cpp:
        (DOM::ProcessingInstructionImpl::setStyleSheet):
        * khtml/xml/dom_xmlimpl.h:

        * khtml/dom/css_value.cpp:
        (DOM::throwException): Added.
        (DOM::CSSStyleDeclaration::setCssText): Call throwException, but always on 0 for now.
        The real thing is coming with the next change to refactor.
        (DOM::CSSPrimitiveValue::setFloatValue): Call throwException.
        (DOM::CSSPrimitiveValue::setStringValue): Ditto.

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

24 files changed:
WebCore/ChangeLog-2005-08-23
WebCore/khtml/css/css_base.h
WebCore/khtml/css/css_ruleimpl.cpp
WebCore/khtml/css/css_ruleimpl.h
WebCore/khtml/css/css_valueimpl.h
WebCore/khtml/css/cssparser.cpp
WebCore/khtml/css/cssparser.h
WebCore/khtml/css/cssstyleselector.cpp
WebCore/khtml/css/cssstyleselector.h
WebCore/khtml/css/parser.cpp
WebCore/khtml/css/parser.y
WebCore/khtml/dom/css_rule.h
WebCore/khtml/dom/css_stylesheet.h
WebCore/khtml/dom/css_value.cpp
WebCore/khtml/dom/css_value.h
WebCore/khtml/dom/dom2_views.cpp
WebCore/khtml/khtml_part.cpp
WebCore/khtml/khtml_part.h
WebCore/khtml/khtmlpart_p.h
WebCore/khtml/xml/dom2_viewsimpl.cpp
WebCore/khtml/xml/dom_docimpl.cpp
WebCore/khtml/xml/dom_docimpl.h
WebCore/khtml/xml/dom_xmlimpl.cpp
WebCore/khtml/xml/dom_xmlimpl.h

index 4e28ce6..d9cb092 100644 (file)
@@ -2,6 +2,70 @@
 
         Reviewed by Ken.
 
+        Use separate mutable style and computed style types as appropriate.
+        For now this should have no effect, but it prepares us for refactoring later.
+        Also remove some unnecessary "DOM::" prefixes and in one case factor out
+        some shared code.
+
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::typingStyle):
+        (KHTMLPart::setTypingStyle):
+        (updateState):
+        (KHTMLPart::selectionHasStyle):
+        (KHTMLPart::selectionStartHasStyle):
+        (KHTMLPart::selectionComputedStyle):
+        * khtml/khtml_part.h:
+        * khtml/khtmlpart_p.h:
+
+        * khtml/css/css_base.h:
+        * khtml/css/css_ruleimpl.cpp:
+        (CSSStyleRuleImpl::setDeclaration):
+        * khtml/css/css_ruleimpl.h:
+        (DOM::CSSFontFaceRuleImpl::style):
+        (DOM::CSSPageRuleImpl::style):
+        (DOM::CSSStyleRuleImpl::style):
+        (DOM::CSSStyleRuleImpl::declaration):
+        * khtml/css/css_valueimpl.h:
+        (DOM::CSSPrimitiveValueImpl::):
+        * khtml/css/cssparser.cpp:
+        (CSSParser::parseValue):
+        (CSSParser::parseColor):
+        (CSSParser::parseDeclaration):
+        (CSSParser::createStyleDeclaration):
+        * khtml/css/cssparser.h:
+        * khtml/css/cssstyleselector.cpp:
+        (khtml::CSSStyleSelector::addMatchedDeclaration):
+        (khtml::CSSStyleSelector::matchRulesForList):
+        (khtml::CSSStyleSelector::styleForElement):
+        (khtml::CSSStyleSelector::applyDeclarations):
+        * khtml/css/cssstyleselector.h:
+        * khtml/css/parser.cpp:
+        * khtml/css/parser.y:
+        * khtml/dom/css_rule.h:
+        * khtml/dom/css_stylesheet.h:
+        * khtml/dom/css_value.h:
+        * khtml/dom/dom2_views.cpp:
+        * khtml/xml/dom2_viewsimpl.cpp:
+        (DOM::AbstractViewImpl::getComputedStyle):
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::importNode):
+        (DocumentImpl::setStyleSheet):
+        * khtml/xml/dom_docimpl.h:
+        * khtml/xml/dom_xmlimpl.cpp:
+        (DOM::ProcessingInstructionImpl::setStyleSheet):
+        * khtml/xml/dom_xmlimpl.h:
+
+        * khtml/dom/css_value.cpp:
+        (DOM::throwException): Added.
+        (DOM::CSSStyleDeclaration::setCssText): Call throwException, but always on 0 for now.
+        The real thing is coming with the next change to refactor.
+        (DOM::CSSPrimitiveValue::setFloatValue): Call throwException.
+        (DOM::CSSPrimitiveValue::setStringValue): Ditto.
+
+2004-11-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Ken.
+
         - fixed <rdar://problem/3878489> REGRESSION: modifying attribute of <textarea> blows away edited text (breaks simplemachines.org forum)
 
         * khtml/xml/dom_nodeimpl.h: Added boolean "children changed" parameter to
index 39a38d4..97fe7bd 100644 (file)
@@ -41,7 +41,6 @@ namespace DOM {
     class CSSProperty;
     class CSSValueImpl;
     class CSSPrimitiveValueImpl;
-    class CSSStyleDeclarationImpl;
     class CSSRuleImpl;
     class CSSStyleRuleImpl;
 
index 8912a30..8f96585 100644 (file)
@@ -337,7 +337,7 @@ bool CSSStyleRuleImpl::parseString( const DOMString &/*string*/, bool )
     return false;
 }
 
-void CSSStyleRuleImpl::setDeclaration( CSSStyleDeclarationImpl *style)
+void CSSStyleRuleImpl::setDeclaration( CSSMutableStyleDeclarationImpl *style)
 {
     if ( m_style != style ) {
         if(m_style) m_style->deref();
index 330aa2d..bd0fee9 100644 (file)
@@ -42,6 +42,7 @@ class CSSRule;
 class CSSStyleSheet;
 class CSSStyleSheetImpl;
 class CSSStyleDeclarationImpl;
+typedef CSSStyleDeclarationImpl CSSMutableStyleDeclarationImpl;
 class MediaListImpl;
 
 class CSSRuleImpl : public StyleBaseImpl
@@ -88,12 +89,12 @@ public:
 
     virtual ~CSSFontFaceRuleImpl();
 
-    CSSStyleDeclarationImpl *style() const { return m_style; }
+    CSSMutableStyleDeclarationImpl *style() const { return m_style; }
 
     virtual bool isFontFaceRule() { return true; }
 
 protected:
-    CSSStyleDeclarationImpl *m_style;
+    CSSMutableStyleDeclarationImpl *m_style;
 };
 
 
@@ -181,7 +182,7 @@ public:
 
     virtual ~CSSPageRuleImpl();
 
-    CSSStyleDeclarationImpl *style() const { return m_style; }
+    CSSMutableStyleDeclarationImpl *style() const { return m_style; }
 
     virtual bool isPageRule() { return true; }
 
@@ -189,7 +190,7 @@ public:
     void setSelectorText(DOM::DOMString str);
 
 protected:
-    CSSStyleDeclarationImpl *m_style;
+    CSSMutableStyleDeclarationImpl *m_style;
 };
 
 class CSSImportantRuleImpl;
@@ -201,7 +202,7 @@ public:
 
     virtual ~CSSStyleRuleImpl();
 
-    CSSStyleDeclarationImpl *style() const { return m_style; }
+    CSSMutableStyleDeclarationImpl *style() const { return m_style; }
 
     virtual bool isStyleRule() { return true; }
 
@@ -211,13 +212,13 @@ public:
     virtual bool parseString( const DOMString &string, bool = false );
 
     void setSelector(CSSSelector* selector) { m_selector = selector; }
-    void setDeclaration( CSSStyleDeclarationImpl *style);
+    void setDeclaration( CSSMutableStyleDeclarationImpl *style);
 
     CSSSelector* selector() { return m_selector; }
-    CSSStyleDeclarationImpl *declaration() { return m_style; }
+    CSSMutableStyleDeclarationImpl *declaration() { return m_style; }
  
 protected:
-    CSSStyleDeclarationImpl *m_style;
+    CSSMutableStyleDeclarationImpl *m_style;
     CSSSelector* m_selector;
 };
 
index 335ed39..4f0259f 100644 (file)
@@ -2,7 +2,7 @@
  * This file is part of the DOM implementation for KDE.
  *
  * (C) 1999-2003 Lars Knoll (knoll@kde.org)
- * Copyright (C) 2002 Apple Computer, Inc.
+ * 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
@@ -48,7 +48,7 @@ class CounterImpl;
 class CSSStyleDeclarationImpl : public StyleBaseImpl
 {
 public:
-    CSSStyleDeclarationImpl(CSSRuleImpl *parentRule);
+    CSSStyleDeclarationImpl(CSSRuleImpl *parentRule = 0);
     CSSStyleDeclarationImpl(CSSRuleImpl *parentRule, QPtrList<CSSProperty> *lstValues);
     virtual ~CSSStyleDeclarationImpl();
 
@@ -115,7 +115,7 @@ public:
 
     virtual unsigned short cssValueType() const = 0;
 
-    virtual DOM::DOMString cssText() const = 0;
+    virtual DOMString cssText() const = 0;
 
     virtual bool isValue() { return true; }
     virtual bool isFontValue() { return false; }
@@ -128,14 +128,14 @@ public:
     virtual ~CSSInheritedValueImpl() {}
 
     virtual unsigned short cssValueType() const;
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
 };
 
 class CSSInitialValueImpl : public CSSValueImpl
 {
 public:
     virtual unsigned short cssValueType() const;
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
 };
 
 class CSSValueListImpl : public CSSValueImpl
@@ -153,7 +153,7 @@ public:
     virtual unsigned short cssValueType() const;
 
     void append(CSSValueImpl *val);
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
 
 protected:
     QPtrList<CSSValueImpl> m_values;
@@ -234,7 +234,7 @@ public:
     int getIdent();
 
     virtual bool parseString( const DOMString &string, bool = false);
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
 
     virtual bool isQuirkValue() { return false; }
 
@@ -243,7 +243,7 @@ protected:
     union {
        int ident;
        double num;
-       DOM::DOMStringImpl *string;
+       DOMStringImpl *string;
        CounterImpl *counter;
        RectImpl *rect;
         QRgb rgbcolor;
@@ -344,7 +344,7 @@ public:
     const QString &fontName() const { return parsedFontName; }
     int genericFamilyType() const { return _genericFamilyType; }
 
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
 
     QString parsedFontName;
 private:
@@ -359,7 +359,7 @@ public:
 
     virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; }
     
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
     
     virtual bool isFontValue() { return true; }
 
@@ -381,7 +381,7 @@ public:
 
     virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; }
 
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
 
     CSSPrimitiveValueImpl* x;
     CSSPrimitiveValueImpl* y;
@@ -401,7 +401,7 @@ public:
     
     virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; }
     
-    virtual DOM::DOMString cssText() const;
+    virtual DOMString cssText() const;
     
     bool isAuto() const { return autoValue; }
 
@@ -447,7 +447,7 @@ public:
     
     CSSValueImpl *value() const { return m_value; }
     
-    DOM::DOMString cssText() const;
+    DOMString cssText() const;
 
     // make sure the following fits in 4 bytes.
     int  m_id;
@@ -459,6 +459,7 @@ private:
     CSSProperty &operator=(const CSSProperty&);
 };
 
+typedef CSSStyleDeclarationImpl CSSMutableStyleDeclarationImpl;
 
 } // namespace
 
index f215a1e..9d2c362 100644 (file)
@@ -2,8 +2,7 @@
  * This file is part of the DOM implementation for KDE.
  *
  * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
- *
- * $Id$
+ * 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
@@ -198,7 +197,7 @@ CSSRuleImpl *CSSParser::parseRule( DOM::CSSStyleSheetImpl *sheet, const DOM::DOM
     return result;
 }
 
-bool CSSParser::parseValue( DOM::CSSStyleDeclarationImpl *declaration, int _id, const DOM::DOMString &string,
+bool CSSParser::parseValue( CSSMutableStyleDeclarationImpl *declaration, int _id, const DOMString &string,
                            bool _important)
 {
 #ifdef CSS_DEBUG
@@ -237,7 +236,7 @@ bool CSSParser::parseValue( DOM::CSSStyleDeclarationImpl *declaration, int _id,
 QRgb CSSParser::parseColor( const DOM::DOMString &string )
 {
     QRgb color = 0;
-    DOM::CSSStyleDeclarationImpl *dummyStyleDeclaration = new DOM::CSSStyleDeclarationImpl(0);
+    CSSMutableStyleDeclarationImpl *dummyStyleDeclaration = new CSSMutableStyleDeclarationImpl;
     
     dummyStyleDeclaration->ref();
 
@@ -263,7 +262,7 @@ QRgb CSSParser::parseColor( const DOM::DOMString &string )
     return color;
 }
 
-bool CSSParser::parseColor( DOM::CSSStyleDeclarationImpl *declaration, const DOM::DOMString &string )
+bool CSSParser::parseColor( CSSMutableStyleDeclarationImpl *declaration, const DOMString &string )
 {
     styleElement = declaration->stylesheet();
 
@@ -285,7 +284,7 @@ bool CSSParser::parseColor( DOM::CSSStyleDeclarationImpl *declaration, const DOM
     return ok;
 }
 
-bool CSSParser::parseDeclaration( DOM::CSSStyleDeclarationImpl *declaration, const DOM::DOMString &string )
+bool CSSParser::parseDeclaration( CSSMutableStyleDeclarationImpl *declaration, const DOMString &string )
 {
 #ifdef CSS_DEBUG
     kdDebug( 6080 ) << "CSSParser::parseDeclaration:value='" << string.string() << "'" << endl;
@@ -332,7 +331,7 @@ void CSSParser::addProperty( int propId, CSSValueImpl *value, bool important )
     parsedProperties[numParsedProperties++] = prop;
 }
 
-CSSStyleDeclarationImpl *CSSParser::createStyleDeclaration( CSSStyleRuleImpl *rule )
+CSSMutableStyleDeclarationImpl *CSSParser::createStyleDeclaration( CSSStyleRuleImpl *rule )
 {
     QPtrList<CSSProperty> *propList = new QPtrList<CSSProperty>;
     propList->setAutoDelete( true );
@@ -340,7 +339,7 @@ CSSStyleDeclarationImpl *CSSParser::createStyleDeclaration( CSSStyleRuleImpl *ru
        propList->append( parsedProperties[i] );
 
     numParsedProperties = 0;
-    return new CSSStyleDeclarationImpl(rule, propList);
+    return new CSSMutableStyleDeclarationImpl(rule, propList);
 }
 
 void CSSParser::clearProperties()
index 7e9b45b..c3e3fcb 100644 (file)
@@ -2,8 +2,7 @@
  * This file is part of the DOM implementation for KDE.
  *
  * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
- *
- * $Id$
+ * 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
@@ -38,7 +37,7 @@ namespace DOM {
     class CSSValueImpl;
     class CSSValueListImpl;
     class CSSPrimitiveValueImpl;
-    class CSSStyleDeclarationImpl;
+    typedef class CSSStyleDeclarationImpl CSSMutableStyleDeclarationImpl;
     class CSSProperty;
     class CSSRuleListImpl;
 
@@ -109,11 +108,11 @@ namespace DOM {
 
        void parseSheet( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string );
        DOM::CSSRuleImpl *parseRule( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string );
-       bool parseValue( DOM::CSSStyleDeclarationImpl *decls, int id, const DOM::DOMString &string,
+       bool parseValue( DOM::CSSMutableStyleDeclarationImpl *decls, int id, const DOM::DOMString &string,
                         bool _important );
         static QRgb CSSParser::parseColor( const DOM::DOMString &string );
-       bool parseColor( DOM::CSSStyleDeclarationImpl *declaration, const DOM::DOMString &string );
-       bool parseDeclaration( DOM::CSSStyleDeclarationImpl *decls, const DOM::DOMString &string );
+       bool parseColor( DOM::CSSMutableStyleDeclarationImpl *declaration, const DOM::DOMString &string );
+       bool parseDeclaration( DOM::CSSMutableStyleDeclarationImpl *decls, const DOM::DOMString &string );
 
        static CSSParser *current() { return currentParser; }
 
@@ -122,7 +121,7 @@ namespace DOM {
 
        void addProperty( int propId, CSSValueImpl *value, bool important );
        bool hasProperties() const { return numParsedProperties > 0; }
-       CSSStyleDeclarationImpl *createStyleDeclaration( CSSStyleRuleImpl *rule );
+       CSSMutableStyleDeclarationImpl *createStyleDeclaration( CSSStyleRuleImpl *rule );
        void clearProperties();
 
        bool parseValue( int propId, bool important );
index 9f29649..173f7ad 100644 (file)
@@ -329,7 +329,7 @@ void CSSStyleSelector::addMatchedRule(CSSRuleData* rule)
     m_matchedRules[m_matchedRuleCount++] = rule;
 }
 
-void CSSStyleSelector::addMatchedDeclaration(CSSStyleDeclarationImpl* decl)
+void CSSStyleSelector::addMatchedDeclaration(CSSMutableStyleDeclarationImpl* decl)
 {
     if (m_matchedDecls.size() <= m_matchedDeclCount)
         m_matchedDecls.resize(2*m_matchedDecls.size()+1);
@@ -378,7 +378,7 @@ void CSSStyleSelector::matchRulesForList(CSSRuleDataList* rules,
         Q_UINT16 tag = localNamePart(d->selector()->tag);
         if ((cssTagId == tag || tag == anyLocalName) && checkSelector(d->selector(), element)) {
             // If the rule has no properties to apply, then ignore it.
-            CSSStyleDeclarationImpl* decl = rule->declaration();
+            CSSMutableStyleDeclarationImpl* decl = rule->declaration();
             if (!decl) continue;
             
             // If we're matching normal rules, set a pseudo bit if 
@@ -759,7 +759,7 @@ RenderStyle* CSSStyleSelector::styleForElement(ElementImpl* e, RenderStyle* defa
         // Now we check additional mapped declarations.
         // Tables and table cells share an additional mapped rule that must be applied
         // after all attributes, since their mapped style depends on the values of multiple attributes.
-        CSSStyleDeclarationImpl* attributeDecl = htmlElement->additionalAttributeStyleDecl();
+        CSSMutableStyleDeclarationImpl* attributeDecl = htmlElement->additionalAttributeStyleDecl();
         if (attributeDecl) {
             if (firstAuthorRule == -1) firstAuthorRule = m_matchedDeclCount;
             lastAuthorRule = m_matchedDeclCount;
@@ -772,7 +772,7 @@ RenderStyle* CSSStyleSelector::styleForElement(ElementImpl* e, RenderStyle* defa
     
     // 7. Now check our inline style attribute.
     if (htmlElement) {
-        CSSStyleDeclarationImpl* inlineDecl = htmlElement->inlineStyleDecl();
+        CSSMutableStyleDeclarationImpl* inlineDecl = htmlElement->inlineStyleDecl();
         if (inlineDecl) {
             if (firstAuthorRule == -1) firstAuthorRule = m_matchedDeclCount;
             lastAuthorRule = m_matchedDeclCount;
@@ -1717,7 +1717,7 @@ void CSSStyleSelector::applyDeclarations(bool applyFirst, bool isImportant,
 {
     if (startIndex == -1) return;
     for (int i = startIndex; i <= endIndex; i++) {
-        CSSStyleDeclarationImpl* decl = m_matchedDecls[i];
+        CSSMutableStyleDeclarationImpl* decl = m_matchedDecls[i];
         QPtrList<CSSProperty>* props = decl->values();
         if (props) {
             QPtrListIterator<CSSProperty> propertyIt(*props);
index e235510..81f1b96 100644 (file)
@@ -162,7 +162,7 @@ namespace khtml
                                int& firstRuleIndex, int& lastRuleIndex);
         void sortMatchedRules(uint firstRuleIndex, uint lastRuleIndex);
         void addMatchedRule(CSSRuleData* rule);
-        void addMatchedDeclaration(DOM::CSSStyleDeclarationImpl* decl);
+        void addMatchedDeclaration(DOM::CSSMutableStyleDeclarationImpl* decl);
         void applyDeclarations(bool firstPass, bool important, int startIndex, int endIndex);
         
        static DOM::CSSStyleSheetImpl *defaultSheet;
@@ -191,7 +191,7 @@ public:
         // set of matched decls four times, once for those properties that others depend on (like font-size),
         // and then a second time for all the remaining properties.  We then do the same two passes
         // for any !important rules.
-        QMemArray<DOM::CSSStyleDeclarationImpl*> m_matchedDecls;
+        QMemArray<DOM::CSSMutableStyleDeclarationImpl*> m_matchedDecls;
         unsigned m_matchedDeclCount;
         
         // A buffer used to hold the set of matched rules for an element, and a temporary buffer used for
index 4f5d650..e562288 100644 (file)
@@ -1396,7 +1396,7 @@ case 59:
        CSSParser *p = static_cast<CSSParser *>(parser);
        if ( yyvsp[-4].selector ) {
             CSSStyleRuleImpl *rule = new CSSStyleRuleImpl( p->styleElement );
-            CSSStyleDeclarationImpl *decl = p->createStyleDeclaration( rule );
+            CSSMutableStyleDeclarationImpl *decl = p->createStyleDeclaration( rule );
             rule->setSelector( yyvsp[-4].selector );
             rule->setDeclaration(decl);
             yyval.rule = rule;
index f142875..b914522 100644 (file)
@@ -495,7 +495,7 @@ ruleset:
        CSSParser *p = static_cast<CSSParser *>(parser);
        if ( $1 ) {
             CSSStyleRuleImpl *rule = new CSSStyleRuleImpl( p->styleElement );
-            CSSStyleDeclarationImpl *decl = p->createStyleDeclaration( rule );
+            CSSMutableStyleDeclarationImpl *decl = p->createStyleDeclaration( rule );
             rule->setSelector( $1 );
             rule->setDeclaration(decl);
             $$ = rule;
index 6d05802..2e477d6 100644 (file)
@@ -89,7 +89,7 @@ public:
      * the current state of the rule and not its initial value.
      *
      */
-    DOM::DOMString cssText() const;
+    DOMString cssText() const;
 
     /**
      * see @ref cssText
@@ -108,7 +108,7 @@ public:
      * INVALID_MODIFICATION_ERR: Raised if the specified CSS string value
      * represents a different type of rule than the current one.
      */
-    void setCssText( const DOM::DOMString & );
+    void setCssText( const DOMString & );
 
     /**
      * The style sheet that contains this rule.
@@ -165,7 +165,7 @@ public:
      * rule.
      *
      */
-    DOM::DOMString encoding() const;
+    DOMString encoding() const;
 
     /**
      * see @ref encoding
@@ -178,7 +178,7 @@ public:
      * readonly.
      *
      */
-    void setEncoding( const DOM::DOMString & );
+    void setEncoding( const DOMString & );
 };
 
 
@@ -240,7 +240,7 @@ public:
      * the URI.
      *
      */
-    DOM::DOMString href() const;
+    DOMString href() const;
 
     /**
      * A list of media types for which this style sheet may be used.
@@ -328,7 +328,7 @@ public:
      * and is unparsable.
      *
      */
-    unsigned long insertRule ( const DOM::DOMString &rule, unsigned long index );
+    unsigned long insertRule ( const DOMString &rule, unsigned long index );
 
     /**
      * Used to delete a rule from the media block.
@@ -378,7 +378,7 @@ public:
      * the rule.
      *
      */
-    DOM::DOMString selectorText() const;
+    DOMString selectorText() const;
 
     /**
      * see @ref selectorText
@@ -391,7 +391,7 @@ public:
      * readonly.
      *
      */
-    void setSelectorText( const DOM::DOMString & );
+    void setSelectorText( const DOMString & );
 
     /**
      * The <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8">
@@ -429,7 +429,7 @@ public:
      * insignificant whitespace while parsing the selector.
      *
      */
-    DOM::DOMString selectorText() const;
+    DOMString selectorText() const;
 
     /**
      * see @ref selectorText
@@ -442,7 +442,7 @@ public:
      * readonly.
      *
      */
-    void setSelectorText( const DOM::DOMString & );
+    void setSelectorText( const DOMString & );
 
     /**
      * The <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8">
index ca40450..0e96184 100644 (file)
@@ -83,7 +83,7 @@ public:
      * processing instruction </a> .
      *
      */
-    DOM::DOMString type() const;
+    DOMString type() const;
 
     /**
      * <code> false </code> if the style sheet is applied to the
@@ -106,7 +106,7 @@ public:
      * other style sheets, this attribute has a value of null.
      *
      */
-    DOM::Node ownerNode() const;
+    Node ownerNode() const;
 
     /**
      * For style sheet languages that support the concept of style
@@ -129,7 +129,7 @@ public:
      * processing instruction </a> .
      *
      */
-    DOM::DOMString href() const;
+    DOMString href() const;
 
     /**
      * The advisory title. The title is often specified in the <code>
@@ -141,7 +141,7 @@ public:
      * processing instruction </a> .
      *
      */
-    DOM::DOMString title() const;
+    DOMString title() const;
 
     /**
      * The intended destination media for style information. The media
@@ -277,7 +277,7 @@ public:
      * and is unparsable.
      *
      */
-    unsigned long insertRule ( const DOM::DOMString &rule, unsigned long index );
+    unsigned long insertRule ( const DOMString &rule, unsigned long index );
 
     /**
      * Used to delete a rule from the style sheet.
@@ -386,12 +386,12 @@ public:
      *
      * NO_MODIFICATION_ALLOWED_ERR: Raised if this media list is readonly.
      */
-    DOM::DOMString mediaText() const;
+    DOMString mediaText() const;
 
     /**
      * see @ref mediaText
      */
-    void setMediaText(const DOM::DOMString &value);
+    void setMediaText(const DOMString &value);
 
     /**
      * The number of media in the list. The range of valid media is 0 to length-1 inclusive.
@@ -408,7 +408,7 @@ public:
      * @return The medium at the indexth position in the MediaList, or null if
      * that is not a valid index.
      */
-    DOM::DOMString item(unsigned long index) const;
+    DOMString item(unsigned long index) const;
 
     /**
      * Deletes the medium indicated by oldMedium from the list.
@@ -420,7 +420,7 @@ public:
      *
      * NOT_FOUND_ERR: Raised if oldMedium is not in the list.
      */
-    void deleteMedium(const DOM::DOMString &oldMedium);
+    void deleteMedium(const DOMString &oldMedium);
 
     /**
      * Adds the medium newMedium to the end of the list. If the newMedium is
@@ -434,7 +434,7 @@ public:
      *
      * NO_MODIFICATION_ALLOWED_ERR: Raised if this list is readonly.
      */
-    void appendMedium(const DOM::DOMString &newMedium);
+    void appendMedium(const DOMString &newMedium);
 
     /**
      * @internal
@@ -464,7 +464,7 @@ public:
     bool isNull() const;
 
 protected:
-    DOM::NodeImpl *node;
+    NodeImpl *node;
     LinkStyleImpl *impl;
 };
 
@@ -490,7 +490,7 @@ public:
     bool isNull() const;
 
 protected:
-    DOM::DocumentImpl *doc;
+    DocumentImpl *doc;
     DocumentStyleImpl *impl;
 };
 
index 185f15c..14cff7e 100644 (file)
@@ -65,10 +65,20 @@ DOMString CSSStyleDeclaration::cssText() const
     return static_cast<CSSStyleDeclarationImpl *>(impl)->cssText();
 }
 
+static void throwException(int exceptioncode)
+{
+    if (exceptioncode >= CSSException::_EXCEPTION_OFFSET)
+       throw CSSException(exceptioncode - CSSException::_EXCEPTION_OFFSET);
+    if (exceptioncode)
+       throw DOMException(exceptioncode);
+}
+
 void CSSStyleDeclaration::setCssText( const DOMString &value )
 {
     if(!impl) return;
+    int exceptionCode = 0;
     impl->setCssText(value);
+    throwException(exceptionCode);
 }
 
 DOMString CSSStyleDeclaration::getPropertyValue( const DOMString &propertyName )
@@ -338,10 +348,7 @@ void CSSPrimitiveValue::setFloatValue( unsigned short unitType, float floatValue
     if(!impl) return;
     int exceptioncode = 0;
     ((CSSPrimitiveValueImpl *)impl)->setFloatValue( unitType, floatValue, exceptioncode );
-    if ( exceptioncode >= CSSException::_EXCEPTION_OFFSET )
-       throw CSSException( exceptioncode - CSSException::_EXCEPTION_OFFSET );
-    if ( exceptioncode )
-       throw DOMException( exceptioncode );
+    throwException(exceptioncode);
 }
 
 float CSSPrimitiveValue::getFloatValue( unsigned short unitType )
@@ -358,10 +365,7 @@ void CSSPrimitiveValue::setStringValue( unsigned short stringType, const DOMStri
     int exceptioncode = 0;
     if(impl)
         ((CSSPrimitiveValueImpl *)impl)->setStringValue( stringType, stringValue, exceptioncode );
-    if ( exceptioncode >= CSSException::_EXCEPTION_OFFSET )
-       throw CSSException( exceptioncode - CSSException::_EXCEPTION_OFFSET );
-    if ( exceptioncode )
-       throw DOMException( exceptioncode );
+    throwException(exceptioncode);
 
 }
 
index 7860231..7bac4d0 100644 (file)
@@ -74,7 +74,7 @@ public:
      * resetting of the properties in the declaration block.
      *
      */
-    DOM::DOMString cssText() const;
+    DOMString cssText() const;
 
     /**
      * see @ref cssText
@@ -87,7 +87,7 @@ public:
      * readonly.
      *
      */
-    void setCssText( const DOM::DOMString & );
+    void setCssText( const DOMString & );
 
     /**
      * The number of properties that have been explicitly set in this
@@ -115,7 +115,7 @@ public:
      * string if the property has not been set.
      *
      */
-    DOM::DOMString getPropertyValue ( const DOM::DOMString &propertyName );
+    DOMString getPropertyValue ( const DOMString &propertyName );
 
     /**
      * Used to retrieve the object representation of the value of a
@@ -136,7 +136,7 @@ public:
      * null </code> if the property has not been set.
      *
      */
-    CSSValue getPropertyCSSValue ( const DOM::DOMString &propertyName );
+    CSSValue getPropertyCSSValue ( const DOMString &propertyName );
 
     /**
      * Used to remove a CSS property if it has been explicitly set
@@ -156,7 +156,7 @@ public:
      * readonly.
      *
      */
-    DOM::DOMString removeProperty ( const DOM::DOMString &propertyName );
+    DOMString removeProperty ( const DOMString &propertyName );
 
     /**
      * Used to retrieve the priority of a CSS property (e.g. the
@@ -172,7 +172,7 @@ public:
      * exists.
      *
      */
-    DOM::DOMString getPropertyPriority ( const DOM::DOMString &propertyName );
+    DOMString getPropertyPriority ( const DOMString &propertyName );
 
     /**
      * Used to set a property value and priority within this
@@ -198,7 +198,7 @@ public:
      * readonly.
      *
      */
-    void setProperty ( const DOM::DOMString &propertyName, const DOM::DOMString &value, const DOM::DOMString &priority );
+    void setProperty ( const DOMString &propertyName, const DOMString &value, const DOMString &priority );
 
     /**
      * Used to retrieve the properties that have been explicitly set
@@ -213,7 +213,7 @@ public:
      * empty string if no property exists at this position.
      *
      */
-    DOM::DOMString item ( unsigned long index );
+    DOMString item ( unsigned long index );
 
     /**
      * @internal
@@ -264,7 +264,7 @@ public:
      * A string representation of the current value.
      *
      */
-    DOM::DOMString cssText() const;
+    DOMString cssText() const;
 
     /**
      * see @ref cssText
@@ -277,7 +277,7 @@ public:
      * readonly.
      *
      */
-    void setCssText( const DOM::DOMString & );
+    void setCssText( const DOMString & );
 
     /**
      * A code defining the type of the value as defined above.
@@ -501,7 +501,7 @@ public:
      * readonly.
      *
      */
-    void setStringValue ( unsigned short stringType, const DOM::DOMString &stringValue );
+    void setStringValue ( unsigned short stringType, const DOMString &stringValue );
 
     /**
      * This method is used to get the string value in a specified
@@ -518,7 +518,7 @@ public:
      * string value.
      *
      */
-    DOM::DOMString getStringValue (  );
+    DOMString getStringValue (  );
 
     /**
      * This method is used to get the Counter value. If this CSS value
@@ -695,19 +695,19 @@ public:
      * This attribute is used for the identifier of the counter.
      *
      */
-    DOM::DOMString identifier() const;
+    DOMString identifier() const;
 
     /**
      * This attribute is used for the style of the list.
      *
      */
-    DOM::DOMString listStyle() const;
+    DOMString listStyle() const;
 
     /**
      * This attribute is used for the separator of nested counters.
      *
      */
-    DOM::DOMString separator() const;
+    DOMString separator() const;
 
     /**
      * @internal
index 19f4cce..d32aa8b 100644 (file)
@@ -2,6 +2,7 @@
  * This file is part of the DOM implementation for KDE.
  *
  * (C) 2001 Peter Kelly (pmk@post.com)
+ * 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
@@ -25,6 +26,7 @@
 #include "dom/dom_doc.h"
 #include "xml/dom_elementimpl.h"
 #include "xml/dom2_viewsimpl.h"
+#include "css/css_computedstyle.h"
 
 using namespace DOM;
 
index d86bbfb..cb27635 100644 (file)
@@ -5035,7 +5035,7 @@ void KHTMLPart::reappliedEditing(EditCommandPtr &cmd)
     d->m_lastEditCommand = EditCommandPtr::emptyCommand();
 }
 
-CSSStyleDeclarationImpl *KHTMLPart::typingStyle() const
+CSSMutableStyleDeclarationImpl *KHTMLPart::typingStyle() const
 {
     return d->m_typingStyle;
 }
@@ -5045,7 +5045,7 @@ void KHTMLPart::setTypingStyle(CSSStyleDeclarationImpl *style)
     if (d->m_typingStyle == style)
         return;
         
-    CSSStyleDeclarationImpl *old = d->m_typingStyle;
+    CSSMutableStyleDeclarationImpl *old = d->m_typingStyle;
     d->m_typingStyle = style;
     if (d->m_typingStyle)
         d->m_typingStyle->ref();
@@ -5362,7 +5362,7 @@ void KHTMLPart::applyStyle(CSSStyleDeclarationImpl *style)
     }
 }
 
-static void updateState(CSSStyleDeclarationImpl *desiredStyle, CSSStyleDeclarationImpl *computedStyle, bool &atStart, KHTMLPart::TriState &state)
+static void updateState(CSSMutableStyleDeclarationImpl *desiredStyle, CSSComputedStyleDeclarationImpl *computedStyle, bool &atStart, KHTMLPart::TriState &state)
 {
     for (QPtrListIterator<CSSProperty> it(*desiredStyle->values()); it.current(); ++it) {
         int propertyID = it.current()->id();
@@ -5385,13 +5385,16 @@ KHTMLPart::TriState KHTMLPart::selectionHasStyle(CSSStyleDeclarationImpl *style)
     bool atStart = true;
     TriState state = falseTriState;
 
+    CSSMutableStyleDeclarationImpl *mutableStyle = style;
+    CSSStyleDeclaration protectQueryStyle(mutableStyle);
+
     if (!d->m_selection.isRange()) {
         NodeImpl *nodeToRemove;
-        CSSStyleDeclarationImpl *selectionStyle = selectionComputedStyle(nodeToRemove);
+        CSSComputedStyleDeclarationImpl *selectionStyle = selectionComputedStyle(nodeToRemove);
         if (!selectionStyle)
             return falseTriState;
         selectionStyle->ref();
-        updateState(style, selectionStyle, atStart, state);
+        updateState(mutableStyle, selectionStyle, atStart, state);
         selectionStyle->deref();
         if (nodeToRemove) {
             int exceptionCode = 0;
@@ -5400,10 +5403,10 @@ KHTMLPart::TriState KHTMLPart::selectionHasStyle(CSSStyleDeclarationImpl *style)
         }
     } else {
         for (NodeImpl *node = d->m_selection.start().node(); node; node = node->traverseNextNode()) {
-            CSSStyleDeclarationImpl *computedStyle = new CSSComputedStyleDeclarationImpl(node);
+            CSSComputedStyleDeclarationImpl *computedStyle = new CSSComputedStyleDeclarationImpl(node);
             if (computedStyle) {
                 computedStyle->ref();
-                updateState(style, computedStyle, atStart, state);
+                updateState(mutableStyle, computedStyle, atStart, state);
                 computedStyle->deref();
             }
             if (state == mixedTriState)
@@ -5423,10 +5426,13 @@ bool KHTMLPart::selectionStartHasStyle(CSSStyleDeclarationImpl *style) const
     if (!selectionStyle)
         return false;
 
-    selectionStyle->ref();
+    CSSMutableStyleDeclarationImpl *mutableStyle = style;
+
+    CSSStyleDeclaration protectSelectionStyle(selectionStyle);
+    CSSStyleDeclaration protectQueryStyle(mutableStyle);
 
     bool match = true;
-    for (QPtrListIterator<CSSProperty> it(*style->values()); it.current(); ++it) {
+    for (QPtrListIterator<CSSProperty> it(*mutableStyle->values()); it.current(); ++it) {
         int propertyID = it.current()->id();
         DOMString desiredProperty = style->getPropertyValue(propertyID);
         DOMString selectionProperty = selectionStyle->getPropertyValue(propertyID);
@@ -5436,8 +5442,6 @@ bool KHTMLPart::selectionStartHasStyle(CSSStyleDeclarationImpl *style) const
         }
     }
 
-    selectionStyle->deref();
-
     if (nodeToRemove) {
         int exceptionCode = 0;
         nodeToRemove->remove(exceptionCode);
@@ -5467,7 +5471,7 @@ DOMString KHTMLPart::selectionStartStylePropertyValue(int stylePropertyID) const
     return value;
 }
 
-CSSStyleDeclarationImpl *KHTMLPart::selectionComputedStyle(NodeImpl *&nodeToRemove) const
+CSSComputedStyleDeclarationImpl *KHTMLPart::selectionComputedStyle(NodeImpl *&nodeToRemove) const
 {
     nodeToRemove = 0;
 
index ac2a99b..11d38e5 100644 (file)
@@ -43,6 +43,7 @@ namespace DOM
 {
   class CSSComputedStyleDeclarationImpl;
   class CSSStyleDeclarationImpl;
+  typedef CSSStyleDeclarationImpl CSSMutableStyleDeclarationImpl;
   class DOMString;
   class Document;
   class DocumentImpl;
@@ -709,7 +710,7 @@ public:
   /**
    * Returns the typing style for the document.
    */
-  DOM::CSSStyleDeclarationImpl *typingStyle() const;
+  DOM::CSSMutableStyleDeclarationImpl *typingStyle() const;
 
   /**
    * Sets the typing style for the document.
@@ -1319,7 +1320,7 @@ private:
   void handleMousePressEventTripleClick(khtml::MousePressEvent *event);
 #endif
 
-  DOM::CSSStyleDeclarationImpl *selectionComputedStyle(DOM::NodeImpl *&nodeToRemove) const;
+  DOM::CSSComputedStyleDeclarationImpl *selectionComputedStyle(DOM::NodeImpl *&nodeToRemove) const;
 
   KHTMLPartPrivate *d;
   friend class KHTMLPartPrivate;
index a91c9ce..5b22055 100644 (file)
@@ -383,7 +383,7 @@ public:
 
   khtml::EditCommandPtr m_lastEditCommand;
   int m_xPosForVerticalArrowNavigation;
-  DOM::CSSStyleDeclarationImpl *m_typingStyle;
+  DOM::CSSMutableStyleDeclarationImpl *m_typingStyle;
 
   int m_focusNodeNumber;
 
index c2a7c2f..7a42f50 100644 (file)
 
 #include "dom2_viewsimpl.h"
 
-#include "css/css_base.h"
 #include "css/css_computedstyle.h"
-#include "css/css_stylesheetimpl.h"
-#include "rendering/render_object.h"
+#include "dom_elementimpl.h"
 
-using DOM::AbstractViewImpl;
-using DOM::CSSComputedStyleDeclarationImpl;
-using DOM::CSSStyleDeclarationImpl;
-using DOM::DocumentImpl;
-using DOM::DOMStringImpl;
-using DOM::ElementImpl;
+namespace DOM {
 
 AbstractViewImpl::AbstractViewImpl(DocumentImpl *_document)
 {
@@ -53,3 +46,5 @@ CSSStyleDeclarationImpl *AbstractViewImpl::getComputedStyle(ElementImpl *elt, DO
 
     return new CSSComputedStyleDeclarationImpl(elt);
 }
+
+}
index e26f5c2..2f6e3e4 100644 (file)
@@ -537,8 +537,8 @@ NodeImpl *DocumentImpl::importNode(NodeImpl *importedNode, bool deep, int &excep
 
                        for(unsigned int i = 0; i < attr->length(); i++)
                        {
-                               DOM::DOMString qualifiedName = attr->item(i)->nodeName();
-                               DOM::DOMString value = attr->item(i)->nodeValue();
+                               DOMString qualifiedName = attr->item(i)->nodeName();
+                               DOMString value = attr->item(i)->nodeValue();
 
                                int colonpos = qualifiedName.find(':');
                                DOMString localName = qualifiedName;
@@ -1529,7 +1529,7 @@ void DocumentImpl::setURL(const QString& url)
         m_styleSelector->setEncodedURL(m_url);
 }
 
-void DocumentImpl::setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet)
+void DocumentImpl::setStyleSheet(const DOMString &url, const DOMString &sheet)
 {
 //    kdDebug( 6030 ) << "HTMLDocument::setStyleSheet()" << endl;
     m_sheet = new CSSStyleSheetImpl(this, url);
index 3e25c50..429248f 100644 (file)
@@ -332,7 +332,7 @@ public:
 #endif
 
     // from cachedObjectClient
-    virtual void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheetStr);
+    virtual void setStyleSheet(const DOMString &url, const DOMString &sheetStr);
     void setUserStyleSheet(const QString& sheet);
     QString userStyleSheet() const { return m_usersheet; }
     void setPrintStyleSheet(const QString& sheet) { m_printSheet = sheet; }
index 8ec9db5..6e8f87a 100644 (file)
@@ -511,7 +511,7 @@ void ProcessingInstructionImpl::sheetLoaded()
         getDocument()->stylesheetLoaded();
 }
 
-void ProcessingInstructionImpl::setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet)
+void ProcessingInstructionImpl::setStyleSheet(const DOMString &url, const DOMString &sheet)
 {
     if (m_sheet)
        m_sheet->deref();
index 3124485..fc8101b 100644 (file)
@@ -152,7 +152,7 @@ public:
     virtual bool childTypeAllowed( unsigned short type );
     StyleSheetImpl *sheet() const;
     bool checkStyleSheet();
-    virtual void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet);
+    virtual void setStyleSheet(const DOMString &url, const DOMString &sheet);
     virtual void setStyleSheet(CSSStyleSheetImpl* sheet);
     bool isLoading() const;
     void sheetLoaded();