[webkit-changes] cvs commit: WebCore/kwq DOM-CSS.mm DOMPrivate.h
Eric Seidel
eseidel at apple.com
Tue Dec 6 17:15:37 PST 2005
You landed a conflict in your changelog.
-eric
On Dec 6, 2005, at 5:12 PM, David wrote:
> hyatt 05/12/06 17:12:39
>
> Modified: . ChangeLog
> khtml/css css_computedstyle.h css_valueimpl.cpp
> css_valueimpl.h cssparser.cpp cssparser.h
> cssstyleselector.cpp cssstyleselector.h
> khtml/ecma kjs_css.cpp kjs_css.h kjs_views.cpp
> kjs_views.h
> khtml/xml dom2_viewsimpl.cpp dom2_viewsimpl.h
> kwq DOM-CSS.mm DOMPrivate.h
> Log:
> Add support for more methods for exposing more useful style
> information.
>
> getMatchedCSSRules can be used to obtain the matched sheet rules
> for an element. In Obj-C
> it will also include user/user agent sheet rules.
>
> Also add support for tracking the original shorthand in which a
> property was declared, as well
> as whether the property was just implicitly set rather than
> explicitly mentioned (e.g., if it was
> an omitted piece of a shorthand). The new methods on
> CSSStyleDeclaration are getPropertyShorthand
> and isPropertyImplicit.
>
> Reviewed by mjs
>
> Test: fast/inspector/style.html
>
> * khtml/css/css_computedstyle.h:
>
> (DOM::CSSComputedStyleDeclarationImpl::getPropertyShorthand):
> (DOM::CSSComputedStyleDeclarationImpl::isPropertyImplicit):
> * khtml/css/css_valueimpl.cpp:
> (DOM::CSSStyleDeclarationImpl::getPropertyShorthand):
> (DOM::CSSStyleDeclarationImpl::isPropertyImplicit):
> (DOM::CSSMutableStyleDeclarationImpl::getPropertyPriority):
> (DOM::CSSMutableStyleDeclarationImpl::getPropertyShorthand):
> (DOM::CSSMutableStyleDeclarationImpl::isPropertyImplicit):
> (DOM::CSSProperty::cssText):
> (DOM::operator==):
> * khtml/css/css_valueimpl.h:
> (DOM::CSSProperty::CSSProperty):
> (DOM::CSSProperty::operator=):
> (DOM::CSSProperty::~CSSProperty):
> (DOM::CSSProperty::setValue):
> (DOM::CSSProperty::shorthandID):
> (DOM::CSSProperty::isImportant):
> (DOM::CSSProperty::isImplicit):
> * khtml/css/cssparser.cpp:
> (CSSParser::CSSParser):
> (CSSParser::addProperty):
> (CSSParser::parseValue):
> (CSSParser::parseBackgroundShorthand):
> (CSSParser::parseShorthand):
> (CSSParser::parse4Values):
> (CSSParser::parseBackgroundPosition):
> (CSSParser::parseBackgroundProperty):
> * khtml/css/cssparser.h:
> (DOM::CSSParser::enterShorthand):
> (DOM::CSSParser::exitShorthand):
> (DOM::CSSParser::inShorthand):
> * khtml/css/cssstyleselector.cpp:
> (khtml::CSSStyleSelector::CSSStyleSelector):
> (khtml::CSSStyleSelector::matchRules):
> (khtml::CSSStyleSelector::matchRulesForList):
> (khtml::CSSStyleSelector::initForStyleResolve):
> (khtml::CSSStyleSelector::styleRulesForElement):
> (khtml::CSSStyleSelector::pseudoStyleRulesForElement):
> * khtml/css/cssstyleselector.h:
> * khtml/ecma/kjs_css.cpp:
> (KJS::DOMCSSStyleDeclarationProtoFunc::callAsFunction):
> * khtml/ecma/kjs_css.h:
> (KJS::DOMCSSStyleDeclaration::):
> * khtml/ecma/kjs_views.cpp:
> (KJS::DOMAbstractViewProtoFunc::callAsFunction):
> * khtml/ecma/kjs_views.h:
> (KJS::DOMAbstractView::):
> * khtml/xml/dom2_viewsimpl.cpp:
> (DOM::AbstractViewImpl::getComputedStyle):
> (DOM::AbstractViewImpl::getMatchedCSSRules):
> * khtml/xml/dom2_viewsimpl.h:
> * kwq/DOM-CSS.mm:
> (-[DOMCSSStyleDeclaration getPropertyShorthand:]):
> (-[DOMCSSStyleDeclaration isPropertyImplicit:]):
> (-[DOMDocument getMatchedCSSRules::]):
> * kwq/DOMPrivate.h:
>
> Revision Changes Path
> 1.483 +77 -0 WebCore/ChangeLog
>
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/root/WebCore/ChangeLog,v
> retrieving revision 1.482
> retrieving revision 1.483
> diff -u -r1.482 -r1.483
> --- ChangeLog 6 Dec 2005 09:21:09 -0000 1.482
> +++ ChangeLog 7 Dec 2005 01:12:34 -0000 1.483
> @@ -1,3 +1,79 @@
> +<<<<<<< ChangeLog
> +2005-12-05 David Hyatt <hyatt at apple.com>
> +
> + Add support for more methods for exposing more useful style
> information.
> +
> + getMatchedCSSRules can be used to obtain the matched sheet
> rules for an element. In Obj-C
> + it will also include user/user agent sheet rules.
> +
> + Also add support for tracking the original shorthand in which a
> property was declared, as well
> + as whether the property was just implicitly set rather than
> explicitly mentioned (e.g., if it was
> + an omitted piece of a shorthand). The new methods on
> CSSStyleDeclaration are getPropertyShorthand
> + and isPropertyImplicit.
> +
> + Reviewed by mjs
> +
> + Test: fast/inspector/style.html
> +
> + * khtml/css/css_computedstyle.h:
> +
> (DOM::CSSComputedStyleDeclarationImpl::getPropertyShorthand):
> + (DOM::CSSComputedStyleDeclarationImpl::isPropertyImplicit):
> + * khtml/css/css_valueimpl.cpp:
> + (DOM::CSSStyleDeclarationImpl::getPropertyShorthand):
> + (DOM::CSSStyleDeclarationImpl::isPropertyImplicit):
> + (DOM::CSSMutableStyleDeclarationImpl::getPropertyPriority):
> +
> (DOM::CSSMutableStyleDeclarationImpl::getPropertyShorthand):
> + (DOM::CSSMutableStyleDeclarationImpl::isPropertyImplicit):
> + (DOM::CSSProperty::cssText):
> + (DOM::operator==):
> + * khtml/css/css_valueimpl.h:
> + (DOM::CSSProperty::CSSProperty):
> + (DOM::CSSProperty::operator=):
> + (DOM::CSSProperty::~CSSProperty):
> + (DOM::CSSProperty::setValue):
> + (DOM::CSSProperty::shorthandID):
> + (DOM::CSSProperty::isImportant):
> + (DOM::CSSProperty::isImplicit):
> + * khtml/css/cssparser.cpp:
> + (CSSParser::CSSParser):
> + (CSSParser::addProperty):
> + (CSSParser::parseValue):
> + (CSSParser::parseBackgroundShorthand):
> + (CSSParser::parseShorthand):
> + (CSSParser::parse4Values):
> + (CSSParser::parseBackgroundPosition):
> + (CSSParser::parseBackgroundProperty):
> + * khtml/css/cssparser.h:
> + (DOM::CSSParser::enterShorthand):
> + (DOM::CSSParser::exitShorthand):
> + (DOM::CSSParser::inShorthand):
> + * khtml/css/cssstyleselector.cpp:
> + (khtml::CSSStyleSelector::CSSStyleSelector):
> + (khtml::CSSStyleSelector::matchRules):
> + (khtml::CSSStyleSelector::matchRulesForList):
> + (khtml::CSSStyleSelector::initForStyleResolve):
> + (khtml::CSSStyleSelector::styleRulesForElement):
> + (khtml::CSSStyleSelector::pseudoStyleRulesForElement):
> + * khtml/css/cssstyleselector.h:
> + * khtml/ecma/kjs_css.cpp:
> + (KJS::DOMCSSStyleDeclarationProtoFunc::callAsFunction):
> + * khtml/ecma/kjs_css.h:
> + (KJS::DOMCSSStyleDeclaration::):
> + * khtml/ecma/kjs_views.cpp:
> + (KJS::DOMAbstractViewProtoFunc::callAsFunction):
> + * khtml/ecma/kjs_views.h:
> + (KJS::DOMAbstractView::):
> + * khtml/xml/dom2_viewsimpl.cpp:
> + (DOM::AbstractViewImpl::getComputedStyle):
> + (DOM::AbstractViewImpl::getMatchedCSSRules):
> + * khtml/xml/dom2_viewsimpl.h:
> + * kwq/DOM-CSS.mm:
> + (-[DOMCSSStyleDeclaration getPropertyShorthand:]):
> + (-[DOMCSSStyleDeclaration isPropertyImplicit:]):
> + (-[DOMDocument getMatchedCSSRules::]):
> + * kwq/DOMPrivate.h:
> +
> +=======
> 2005-12-04 Maciej Stachowiak <mjs at apple.com>
>
> Reviewed by Eric.
> @@ -252,6 +328,7 @@
> * khtml/khtmlview.cpp: (KHTMLView::dispatchMouseEvent):
> Do the same "skip text node"
> logic for the "oldUnder" variable as for the
> "targetNode" variable.
>
> +>>>>>>> 1.482
> 2005-12-05 John Sullivan <sullivan at apple.com>
>
> Reviewed by Darin Adler.
>
>
>
> 1.11 +2 -0 WebCore/khtml/css/css_computedstyle.h
>
> Index: css_computedstyle.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/css_computedstyle.h,v
> retrieving revision 1.10
> retrieving revision 1.11
> diff -u -r1.10 -r1.11
> --- css_computedstyle.h 1 Dec 2005 10:32:08 -0000 1.10
> +++ css_computedstyle.h 7 Dec 2005 01:12:35 -0000 1.11
> @@ -50,6 +50,8 @@
> virtual CSSValueImpl *getPropertyCSSValue(int propertyID)
> const;
> virtual DOMString getPropertyValue(int propertyID) const;
> virtual bool getPropertyPriority(int propertyID) const;
> + virtual int getPropertyShorthand(int propertyID) const
> { return -1; }
> + virtual bool isPropertyImplicit(int propertyID) const
> { return true; }
>
> virtual CSSMutableStyleDeclarationImpl *copy() const;
> virtual CSSMutableStyleDeclarationImpl *makeMutable();
>
>
>
> 1.83 +41 -4 WebCore/khtml/css/css_valueimpl.cpp
>
> Index: css_valueimpl.cpp
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/css_valueimpl.cpp,v
> retrieving revision 1.82
> retrieving revision 1.83
> diff -u -r1.82 -r1.83
> --- css_valueimpl.cpp 29 Nov 2005 11:20:43 -0000 1.82
> +++ css_valueimpl.cpp 7 Dec 2005 01:12:35 -0000 1.83
> @@ -131,6 +131,25 @@
> return getPropertyPriority(propID) ? "important" : "";
> }
>
> +DOMString CSSStyleDeclarationImpl::getPropertyShorthand(const
> DOMString &propertyName)
> +{
> + int propID = propertyID(propertyName);
> + if (!propID)
> + return DOMString();
> + int shorthandID = getPropertyShorthand(propID);
> + if (!shorthandID)
> + return DOMString();
> + return getPropertyName(shorthandID);
> +}
> +
> +bool CSSStyleDeclarationImpl::isPropertyImplicit(const DOMString
> &propertyName)
> +{
> + int propID = propertyID(propertyName);
> + if (!propID)
> + return false;
> + return isPropertyImplicit(propID);
> +}
> +
> void CSSStyleDeclarationImpl::setProperty(const DOMString
> &propertyName, const DOMString &value, const DOMString &priority,
> int &exception)
> {
> int propID = propertyID(propertyName);
> @@ -385,8 +404,26 @@
> {
> QValueListConstIterator<CSSProperty> end;
> for (QValueListConstIterator<CSSProperty> it = m_values.begin
> (); it != end; ++it)
> - if (propertyID == (*it).m_id)
> - return (*it).m_bImportant;
> + if (propertyID == (*it).id())
> + return (*it).isImportant();
> + return false;
> +}
> +
> +int CSSMutableStyleDeclarationImpl::getPropertyShorthand(int
> propertyID) const
> +{
> + QValueListConstIterator<CSSProperty> end;
> + for (QValueListConstIterator<CSSProperty> it = m_values.begin
> (); it != end; ++it)
> + if (propertyID == (*it).id())
> + return (*it).shorthandID();
> + return false;
> +}
> +
> +bool CSSMutableStyleDeclarationImpl::isPropertyImplicit(int
> propertyID) const
> +{
> + QValueListConstIterator<CSSProperty> end;
> + for (QValueListConstIterator<CSSProperty> it = m_values.begin
> (); it != end; ++it)
> + if (propertyID == (*it).id())
> + return (*it).isImplicit();
> return false;
> }
>
> @@ -1337,12 +1374,12 @@
>
> DOMString CSSProperty::cssText() const
> {
> - return getPropertyName(m_id) + DOMString(": ") + m_value-
> >cssText() + (m_bImportant ? DOMString(" !important") : DOMString
> ()) + DOMString("; ");
> + return getPropertyName(id()) + DOMString(": ") + m_value-
> >cssText() + (isImportant() ? DOMString(" !important") : DOMString
> ()) + DOMString("; ");
> }
>
> bool operator==(const CSSProperty &a, const CSSProperty &b)
> {
> - return a.m_id == b.m_id && a.m_bImportant == b.m_bImportant
> && a.m_value == b.m_value;
> + return a.m_id == b.m_id && a.m_important == b.m_important &&
> a.m_value == b.m_value;
> }
>
> }
>
>
>
> 1.54 +40 -17 WebCore/khtml/css/css_valueimpl.h
>
> Index: css_valueimpl.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/css_valueimpl.h,v
> retrieving revision 1.53
> retrieving revision 1.54
> diff -u -r1.53 -r1.54
> --- css_valueimpl.h 21 Nov 2005 04:01:51 -0000 1.53
> +++ css_valueimpl.h 7 Dec 2005 01:12:36 -0000 1.54
> @@ -63,9 +63,14 @@
> CSSValueImpl *getPropertyCSSValue(const DOMString
> &propertyName);
> DOMString getPropertyValue(const DOMString &propertyName);
> DOMString getPropertyPriority(const DOMString &propertyName);
> + DOMString getPropertyShorthand(const DOMString& propertyName);
> + bool isPropertyImplicit(const DOMString& propertyName);
> +
> virtual CSSValueImpl *getPropertyCSSValue(int propertyID)
> const = 0;
> virtual DOMString getPropertyValue(int propertyID) const = 0;
> virtual bool getPropertyPriority(int propertyID) const = 0;
> + virtual int getPropertyShorthand(int propertyID) const = 0;
> + virtual bool isPropertyImplicit(int propertyID) const = 0;
>
> void setProperty(const DOMString &propertyName, const
> DOMString &value, const DOMString &priority, int &exception);
> DOMString removeProperty(const DOMString &propertyName, int
> &exception);
> @@ -406,49 +411,65 @@
> class CSSProperty
> {
> public:
> - CSSProperty() : m_id(-1), m_bImportant(false), m_value(0)
> - {
> - }
> - CSSProperty(int propID, CSSValueImpl *value, bool important
> = false)
> - : m_id(propID), m_bImportant(important), m_value(value)
> + CSSProperty(int propID, CSSValueImpl *value, bool important
> = false, int shorthandID = 0, bool implicit = false)
> + : m_id(propID), m_shorthandID(shorthandID), m_important
> (important), m_implicit(implicit), m_value(value)
> {
> - if (value) value->ref();
> + if (value)
> + value->ref();
> }
> +
> CSSProperty(const CSSProperty& o)
> {
> m_id = o.m_id;
> - m_bImportant = o.m_bImportant;
> + m_shorthandID = o.m_shorthandID;
> + m_important = o.m_important;
> + m_implicit = o.m_implicit;
> m_value = o.m_value;
> - if (m_value) m_value->ref();
> + if (m_value)
> + m_value->ref();
> }
> +
> CSSProperty &operator=(const CSSProperty& o)
> {
> - if (o.m_value) o.m_value->ref();
> - if (m_value) m_value->deref();
> + if (o.m_value)
> + o.m_value->ref();
> + if (m_value)
> + m_value->deref();
> m_id = o.m_id;
> - m_bImportant = o.m_bImportant;
> + m_shorthandID = o.m_shorthandID;
> + m_important = o.m_important;
> m_value = o.m_value;
> return *this;
> }
> +
> ~CSSProperty() {
> - if(m_value) m_value->deref();
> + if (m_value)
> + m_value->deref();
> }
>
> void setValue(CSSValueImpl *val) {
> - if (val) val->ref();
> - if (m_value) m_value->deref();
> + if (val)
> + val->ref();
> + if (m_value)
> + m_value->deref();
> m_value = val;
> }
>
> int id() const { return m_id; }
> - bool isImportant() const { return m_bImportant; }
> + int shorthandID() const { return m_shorthandID; }
> +
> + bool isImportant() const { return m_important; }
> + bool isImplicit() const { return m_implicit; }
> +
> CSSValueImpl *value() const { return m_value; }
>
> DOMString cssText() const;
>
> // make sure the following fits in 4 bytes.
> - int m_id;
> - bool m_bImportant;
> + int m_id;
> + int m_shorthandID; // If this property was set as part of a
> shorthand, gives the shorthand.
> + bool m_important : 1;
> + bool m_implicit : 1; // Whether or not the property was set
> implicitly as the result of a shorthand.
>
> friend bool operator==(const CSSProperty &, const
> CSSProperty &);
>
> @@ -478,6 +499,8 @@
> virtual CSSValueImpl *getPropertyCSSValue(int propertyID)
> const;
> virtual DOMString getPropertyValue(int propertyID) const;
> virtual bool getPropertyPriority(int propertyID) const;
> + virtual int getPropertyShorthand(int propertyID) const;
> + virtual bool isPropertyImplicit(int propertyID) const;
>
> virtual void setProperty(int propertyId, const DOMString
> &value, bool important, int &exceptionCode);
> virtual DOMString removeProperty(int propertyID, int
> &exceptionCode);
>
>
>
> 1.114 +106 -105 WebCore/khtml/css/cssparser.cpp
>
> Index: cssparser.cpp
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/cssparser.cpp,v
> retrieving revision 1.113
> retrieving revision 1.114
> diff -u -r1.113 -r1.114
> --- cssparser.cpp 21 Nov 2005 04:01:51 -0000 1.113
> +++ cssparser.cpp 7 Dec 2005 01:12:36 -0000 1.114
> @@ -2,7 +2,8 @@
> * This file is part of the DOM implementation for KDE.
> *
> * Copyright (C) 2003 Lars Knoll (knoll at kde.org)
> - * Copyright (C) 2004 Apple Computer, Inc.
> + * Copyright (C) 2005 Allan Sandfeld Jensen (kde at carewolf.com)
> + * Copyright (C) 2004, 2005 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
> @@ -102,8 +103,10 @@
> rule = 0;
> id = 0;
> important = false;
> - inParseShortHand = false;
> -
> + m_inParseShorthand = 0;
> + m_currentShorthand = 0;
> + m_implicitShorthand = false;
> +
> defaultNamespace = starAtom;
>
> yy_start = 1;
> @@ -312,14 +315,10 @@
> }
>
>
> -void CSSParser::addProperty( int propId, CSSValueImpl *value,
> bool important )
> +void CSSParser::addProperty(int propId, CSSValueImpl *value,
> bool important)
> {
> - CSSProperty *prop = new CSSProperty;
> - prop->m_id = propId;
> - prop->setValue( value );
> - prop->m_bImportant = important;
> -
> - if ( numParsedProperties >= maxParsedProperties ) {
> + CSSProperty *prop = new CSSProperty(propId, value,
> important, m_currentShorthand, m_implicitShorthand);
> + if (numParsedProperties >= maxParsedProperties) {
> maxParsedProperties += 32;
> parsedProperties = (CSSProperty **)fastRealloc(parsedProperties,
>
> maxParsedProperties*sizeof(CSSProperty *));
> @@ -424,8 +423,7 @@
> if ( !value )
> return false;
>
> - int id = 0;
> - id = value->id;
> + int id = value->id;
>
> if (id == CSS_VAL_INHERIT) {
> addProperty(propId, new CSSInheritedValueImpl(), important);
> @@ -519,7 +517,7 @@
> return parseDashboardRegions( propId, important );
> break;
>
> - /* Start of supported CSS properties with validation. This
> is needed for parseShortHand to work
> + /* Start of supported CSS properties with validation. This
> is needed for parseShorthand to work
> * correctly and allows optimization in khtml::applyRule(..)
> */
> case CSS_PROP_CAPTION_SIDE: // top | bottom | left |
> right | inherit
> @@ -1043,7 +1041,7 @@
> const int properties[5] =
> { CSS_PROP__KHTML_MARQUEE_DIRECTION,
> CSS_PROP__KHTML_MARQUEE_INCREMENT,
>
> CSS_PROP__KHTML_MARQUEE_REPETITION,
>
> CSS_PROP__KHTML_MARQUEE_STYLE, CSS_PROP__KHTML_MARQUEE_SPEED };
> - return parseShortHand(properties, 5, important);
> + return parseShorthand(propId, properties, 5, important);
> }
> case CSS_PROP__KHTML_MARQUEE_DIRECTION:
> if (id == CSS_VAL_FORWARDS || id == CSS_VAL_BACKWARDS ||
> id == CSS_VAL_AHEAD ||
> @@ -1158,82 +1156,82 @@
> {
> const int properties[3] = { CSS_PROP_BORDER_WIDTH,
> CSS_PROP_BORDER_STYLE,
> CSS_PROP_BORDER_COLOR };
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> case CSS_PROP_BORDER_TOP:
> // [ 'border-top-width' || 'border-style' || <color> ] |
> inherit
> {
> const int properties[3] = { CSS_PROP_BORDER_TOP_WIDTH,
> CSS_PROP_BORDER_TOP_STYLE,
> CSS_PROP_BORDER_TOP_COLOR};
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> case CSS_PROP_BORDER_RIGHT:
> // [ 'border-right-width' || 'border-style' || <color> ] |
> inherit
> {
> const int properties[3] = { CSS_PROP_BORDER_RIGHT_WIDTH,
> CSS_PROP_BORDER_RIGHT_STYLE,
> CSS_PROP_BORDER_RIGHT_COLOR };
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> case CSS_PROP_BORDER_BOTTOM:
> // [ 'border-bottom-width' || 'border-style' || <color> ] |
> inherit
> {
> const int properties[3] = { CSS_PROP_BORDER_BOTTOM_WIDTH,
> CSS_PROP_BORDER_BOTTOM_STYLE,
> CSS_PROP_BORDER_BOTTOM_COLOR };
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> case CSS_PROP_BORDER_LEFT:
> // [ 'border-left-width' || 'border-style' || <color> ] |
> inherit
> {
> const int properties[3] = { CSS_PROP_BORDER_LEFT_WIDTH,
> CSS_PROP_BORDER_LEFT_STYLE,
> CSS_PROP_BORDER_LEFT_COLOR };
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> case CSS_PROP_OUTLINE:
> // [ 'outline-color' || 'outline-style' || 'outline-
> width' ] | inherit
> {
> const int properties[3] = { CSS_PROP_OUTLINE_WIDTH,
> CSS_PROP_OUTLINE_STYLE,
> CSS_PROP_OUTLINE_COLOR };
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> case CSS_PROP_BORDER_COLOR:
> // <color>{1,4} | inherit
> {
> const int properties[4] = { CSS_PROP_BORDER_TOP_COLOR,
> CSS_PROP_BORDER_RIGHT_COLOR,
> CSS_PROP_BORDER_BOTTOM_COLOR, CSS_PROP_BORDER_LEFT_COLOR };
> - return parse4Values(properties, important);
> + return parse4Values(propId, properties, important);
> }
> case CSS_PROP_BORDER_WIDTH:
> // <border-width>{1,4} | inherit
> {
> const int properties[4] = { CSS_PROP_BORDER_TOP_WIDTH,
> CSS_PROP_BORDER_RIGHT_WIDTH,
> CSS_PROP_BORDER_BOTTOM_WIDTH, CSS_PROP_BORDER_LEFT_WIDTH };
> - return parse4Values(properties, important);
> + return parse4Values(propId, properties, important);
> }
> case CSS_PROP_BORDER_STYLE:
> // <border-style>{1,4} | inherit
> {
> const int properties[4] = { CSS_PROP_BORDER_TOP_STYLE,
> CSS_PROP_BORDER_RIGHT_STYLE,
> CSS_PROP_BORDER_BOTTOM_STYLE, CSS_PROP_BORDER_LEFT_STYLE };
> - return parse4Values(properties, important);
> + return parse4Values(propId, properties, important);
> }
> case CSS_PROP_MARGIN:
> // <margin-width>{1,4} | inherit
> {
> const int properties[4] = { CSS_PROP_MARGIN_TOP,
> CSS_PROP_MARGIN_RIGHT,
> CSS_PROP_MARGIN_BOTTOM, CSS_PROP_MARGIN_LEFT };
> - return parse4Values(properties, important);
> + return parse4Values(propId, properties, important);
> }
> case CSS_PROP_PADDING:
> // <padding-width>{1,4} | inherit
> {
> const int properties[4] = { CSS_PROP_PADDING_TOP,
> CSS_PROP_PADDING_RIGHT,
> CSS_PROP_PADDING_BOTTOM, CSS_PROP_PADDING_LEFT };
> - return parse4Values(properties, important);
> + return parse4Values(propId, properties, important);
> }
> case CSS_PROP_FONT:
> // [ [ 'font-style' || 'font-variant' || 'font-weight' ]?
> 'font-size' [ / 'line-height' ]?
> // 'font-family' ] | caption | icon | menu | message-box |
> small-caption | status-bar | inherit
> - if ( id >= CSS_VAL_CAPTION && id <= CSS_VAL_STATUS_BAR )
> + if (id >= CSS_VAL_CAPTION && id <= CSS_VAL_STATUS_BAR)
> valid_primitive = true;
> else
> return parseFont(important);
> @@ -1242,7 +1240,7 @@
> {
> const int properties[3] = { CSS_PROP_LIST_STYLE_TYPE,
> CSS_PROP_LIST_STYLE_POSITION,
> CSS_PROP_LIST_STYLE_IMAGE };
> - return parseShortHand(properties, 3, important);
> + return parseShorthand(propId, properties, 3, important);
> }
> default:
> // #ifdef CSS_DEBUG
> @@ -1306,8 +1304,8 @@
> CSS_PROP_BACKGROUND_ATTACHMENT,
> CSS_PROP_BACKGROUND_POSITION, CSS_PROP_BACKGROUND_CLIP,
> CSS_PROP_BACKGROUND_ORIGIN, CSS_PROP_BACKGROUND_COLOR };
>
> - inParseShortHand = true;
> -
> + enterShorthand(CSS_PROP_BACKGROUND);
> +
> bool parsedProperty[numProperties] = { false }; // compiler
> will repeat false as necessary
> CSSValueImpl* values[numProperties] = { 0 }; // compiler
> will repeat 0 as necessary
> CSSValueImpl* positionYValue = 0;
> @@ -1374,75 +1372,59 @@
> addProperty(properties[i], values[i], important);
> }
>
> - inParseShortHand = false;
> + exitShorthand();
> return true;
>
> fail:
> - inParseShortHand = false;
> + exitShorthand();
> for (int k = 0; k < numProperties; k++)
> delete values[k];
> delete positionYValue;
> return false;
> }
>
> -bool CSSParser::parseShortHand( const int *properties, int
> numProperties, bool important )
> +bool CSSParser::parseShorthand(int propId, const int
> *properties, int numProperties, bool important)
> {
> - /* We try to match as many properties as possible
> - * We setup an array of booleans to mark which property has
> been found,
> - * and we try to search for properties until it makes no
> longer any sense
> - */
> - inParseShortHand = true;
> + // We try to match as many properties as possible
> + // We set up an array of booleans to mark which property has
> been found,
> + // and we try to search for properties until it makes no
> longer any sense.
> + enterShorthand(propId);
>
> bool found = false;
> - bool fnd[6]; //Trust me ;)
> - for( int i = 0; i < numProperties; i++ )
> + bool fnd[6]; // Trust me ;)
> + for (int i = 0; i < numProperties; i++)
> fnd[i] = false;
>
> -#ifdef CSS_DEBUG
> - kdDebug(6080) << "PSH: numProperties=" << numProperties <<
> endl;
> -#endif
> -
> - while ( valueList->current() ) {
> + while (valueList->current()) {
> found = false;
> - // qDebug("outer loop" );
> - for (int propIndex = 0; !found && propIndex <
> numProperties; ++propIndex) {
> + for (int propIndex = 0; !found && propIndex < numProperties; +
> +propIndex) {
> if (!fnd[propIndex]) {
> -#ifdef CSS_DEBUG
> - kdDebug(6080) << "LOOKING FOR: " << getPropertyName(properties
> [propIndex]).qstring() << endl;
> -#endif
> - if ( parseValue( properties[propIndex], important ) ) {
> + if (parseValue( properties[propIndex], important))
> fnd[propIndex] = found = true;
> -#ifdef CSS_DEBUG
> - kdDebug(6080) << "FOUND: " << getPropertyName(properties
> [propIndex]).qstring() << endl;
> -#endif
> - }
> }
> }
> +
> // if we didn't find at least one match, this is an
> // invalid shorthand and we have to ignore it
> if (!found) {
> -#ifdef CSS_DEBUG
> - qDebug("didn't find anything" );
> -#endif
> - inParseShortHand = false;
> + exitShorthand();
> return false;
> }
> }
>
> // Fill in any remaining properties with the initial value.
> + m_implicitShorthand = true;
> for (int i = 0; i < numProperties; ++i) {
> if (!fnd[i])
> addProperty(properties[i], new CSSInitialValueImpl
> (), important);
> }
> -
> - inParseShortHand = false;
> -#ifdef CSS_DEBUG
> - kdDebug( 6080 ) << "parsed shorthand" << endl;
> -#endif
> + m_implicitShorthand = false;
> +
> + exitShorthand();
> return true;
> }
>
> -bool CSSParser::parse4Values( const int *properties, bool
> important )
> +bool CSSParser::parse4Values(int propId, const int *properties,
> bool important)
> {
> /* From the CSS 2 specs, 8.3
> * If there is only one value, it applies to all sides. If
> there are two values, the top and
> @@ -1451,48 +1433,67 @@
> * second, and the bottom is set to the third. If there are
> four values, they apply to the top,
> * right, bottom, and left, respectively.
> */
> -
> - int num = inParseShortHand ? 1 : valueList->numValues;
> - // qDebug("parse4Values: num=%d", num );
> +
> + int num = inShorthand() ? 1 : valueList->numValues;
> +
> + enterShorthand(propId);
>
> // the order is top, right, bottom, left
> - switch( num ) {
> - case 1: {
> - if( !parseValue( properties[0], important ) ) return false;
> - CSSValueImpl *value = parsedProperties[numParsedProperties-1]-
> >value();
> - addProperty( properties[1], value, important );
> - addProperty( properties[2], value, important );
> - addProperty( properties[3], value, important );
> - return true;
> - }
> - case 2: {
> -
> - if( !parseValue( properties[0], important ) ) return false;
> - if( !parseValue( properties[1], important ) ) return false;
> - CSSValueImpl *value = parsedProperties[numParsedProperties-2]-
> >value();
> - addProperty( properties[2], value, important );
> - value = parsedProperties[numParsedProperties-2]->value();
> - addProperty( properties[3], value, important );
> - return true;
> - }
> - case 3: {
> - if( !parseValue( properties[0], important ) ) return false;
> - if( !parseValue( properties[1], important ) ) return false;
> - if( !parseValue( properties[2], important ) ) return false;
> - CSSValueImpl *value = parsedProperties[numParsedProperties-2]-
> >value();
> - addProperty( properties[3], value, important );
> - return true;
> - }
> - case 4: {
> - if( !parseValue( properties[0], important ) ) return false;
> - if( !parseValue( properties[1], important ) ) return false;
> - if( !parseValue( properties[2], important ) ) return false;
> - if( !parseValue( properties[3], important ) ) return false;
> - return true;
> - }
> - default:
> - return false;
> + switch (num) {
> + case 1: {
> + if (!parseValue(properties[0], important)) {
> + exitShorthand();
> + return false;
> + }
> + CSSValueImpl *value = parsedProperties
> [numParsedProperties-1]->value();
> + m_implicitShorthand = true;
> + addProperty(properties[1], value, important);
> + addProperty(properties[2], value, important);
> + addProperty(properties[3], value, important);
> + m_implicitShorthand = false;
> + break;
> + }
> + case 2: {
> + if (!parseValue(properties[0], important) || !
> parseValue(properties[1], important)) {
> + exitShorthand();
> + return false;
> + }
> + CSSValueImpl *value = parsedProperties
> [numParsedProperties-2]->value();
> + m_implicitShorthand = true;
> + addProperty(properties[2], value, important);
> + value = parsedProperties[numParsedProperties-2]-
> >value();
> + addProperty(properties[3], value, important);
> + m_implicitShorthand = false;
> + break;
> + }
> + case 3: {
> + if (!parseValue(properties[0], important) || !
> parseValue(properties[1], important) ||
> + !parseValue(properties[2], important)) {
> + exitShorthand();
> + return false;
> + }
> + CSSValueImpl *value = parsedProperties
> [numParsedProperties-2]->value();
> + m_implicitShorthand = true;
> + addProperty(properties[3], value, important);
> + m_implicitShorthand = false;
> + break;
> + }
> + case 4: {
> + if (!parseValue(properties[0], important) || !
> parseValue(properties[1], important) ||
> + !parseValue(properties[2], important) || !
> parseValue(properties[3], important)) {
> + exitShorthand();
> + return false;
> + }
> + break;
> + }
> + default: {
> + exitShorthand();
> + return false;
> + }
> }
> +
> + exitShorthand();
> + return true;
> }
>
> // [ <string> | <uri> | <counter> | attr(X) | open-quote | close-
> quote | no-open-quote | no-close-quote ]+ | inherit
> @@ -1628,7 +1629,7 @@
> if (value2)
> valueList->next();
> else {
> - if (!inParseShortHand) {
> + if (!inShorthand()) {
> delete value1;
> value1 = 0;
> return;
> @@ -1756,7 +1757,7 @@
>
> // When parsing the 'background' shorthand property, we
> let it handle building up the lists for all
> // properties.
> - if (inParseShortHand)
> + if (inShorthand())
> break;
> }
>
>
>
>
> 1.34 +21 -7 WebCore/khtml/css/cssparser.h
>
> Index: cssparser.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/cssparser.h,v
> retrieving revision 1.33
> retrieving revision 1.34
> diff -u -r1.33 -r1.34
> --- cssparser.h 21 Nov 2005 04:01:52 -0000 1.33
> +++ cssparser.h 7 Dec 2005 01:12:36 -0000 1.34
> @@ -119,15 +119,15 @@
>
> DOM::DocumentImpl *document() const;
>
> - void addProperty( int propId, CSSValueImpl *value, bool
> important );
> + void addProperty(int propId, CSSValueImpl *value, bool important);
> bool hasProperties() const { return numParsedProperties > 0; }
> CSSMutableStyleDeclarationImpl *createStyleDeclaration
> ( CSSStyleRuleImpl *rule );
> void clearProperties();
>
> - bool parseValue( int propId, bool important );
> - bool parseShortHand( const int *properties, int numProperties,
> bool important );
> - bool parse4Values( const int *properties, bool important );
> - bool parseContent( int propId, bool important );
> + bool parseValue(int propId, bool important);
> + bool parseShorthand(int propId, const int *properties, int
> numProperties, bool important);
> + bool parse4Values(int propId, const int *properties, bool
> important);
> + bool parseContent(int propId, bool important);
>
> CSSValueImpl* parseBackgroundColor();
> CSSValueImpl* parseBackgroundImage();
> @@ -170,7 +170,10 @@
> CSSProperty **parsedProperties;
> int numParsedProperties;
> int maxParsedProperties;
> - bool inParseShortHand;
> +
> + int m_inParseShorthand;
> + int m_currentShorthand;
> + bool m_implicitShorthand;
>
> AtomicString defaultNamespace;
>
> @@ -185,7 +188,18 @@
>
> private:
> void setupParser(const char *prefix, const DOMString
> &string, const char *suffix);
> -
> + void enterShorthand(int propId)
> + {
> + if (!(m_inParseShorthand++))
> + m_currentShorthand = propId;
> + }
> + void exitShorthand()
> + {
> + if (!(--m_inParseShorthand))
> + m_currentShorthand = 0;
> + }
> + bool inShorthand() const { return m_inParseShorthand; }
> +
> unsigned short *data;
> unsigned short *yytext;
> unsigned short *yy_c_buf_p;
>
>
>
> 1.226 +61 -5 WebCore/khtml/css/cssstyleselector.cpp
>
> Index: cssstyleselector.cpp
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/cssstyleselector.cpp,v
> retrieving revision 1.225
> retrieving revision 1.226
> diff -u -r1.225 -r1.226
> --- cssstyleselector.cpp 29 Nov 2005 11:20:43 -0000 1.225
> +++ cssstyleselector.cpp 7 Dec 2005 01:12:36 -0000 1.226
> @@ -2,7 +2,8 @@
> * This file is part of the CSS implementation for KDE.
> *
> * Copyright (C) 1999 Lars Knoll (knoll at kde.org)
> - * Copyright (C) 2004 Apple Computer, Inc.
> + * (C) 2004-2005 Allan Sandfeld Jensen (kde at carewolf.com)
> + * Copyright (C) 2005 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
> @@ -254,6 +255,9 @@
> if (it.current()->isCSSStyleSheet())
> m_authorStyle->addRulesFromSheet
> (static_cast<CSSStyleSheetImpl*>(it.current()), m_medium);
>
> + m_ruleList = 0;
> + m_collectRulesOnly = false;
> +
> //kdDebug( 6080 ) << "number of style sheets in document "
> << authorStyleSheets.count() << endl;
> //kdDebug( 6080 ) << "CSSStyleSelector: author style has "
> << authorStyle->count() << " elements"<< endl;
> }
> @@ -386,8 +390,16 @@
> sortMatchedRules(0, m_matchedRuleCount);
>
> // Now transfer the set of matched rules over to our list of
> decls.
> - for (unsigned i = 0; i < m_matchedRuleCount; i++)
> - addMatchedDeclaration(m_matchedRules[i]->rule()-
> >declaration());
> + if (!m_collectRulesOnly) {
> + for (unsigned i = 0; i < m_matchedRuleCount; i++)
> + addMatchedDeclaration(m_matchedRules[i]->rule()-
> >declaration());
> + } else {
> + for (unsigned i = 0; i < m_matchedRuleCount; i++) {
> + if (!m_ruleList)
> + m_ruleList = new CSSRuleListImpl();
> + m_ruleList->append(m_matchedRules[i]->rule());
> + }
> + }
> }
>
> void CSSStyleSelector::matchRulesForList(CSSRuleDataList* rules,
> @@ -405,7 +417,7 @@
>
> // If we're matching normal rules, set a pseudo bit if
> // we really just matched a pseudo-element.
> - if (dynamicPseudo != RenderStyle::NOPSEUDO &&
> pseudoStyle == RenderStyle::NOPSEUDO)
> + if (!m_collectRulesOnly && dynamicPseudo !=
> RenderStyle::NOPSEUDO && pseudoStyle == RenderStyle::NOPSEUDO)
> style->setHasPseudoStyle(dynamicPseudo);
> else {
> // Update our first/last rule indices in the
> matched rules array.
> @@ -529,7 +541,8 @@
> m_matchedRuleCount = 0;
> m_matchedDeclCount = 0;
> m_tmpRuleCount = 0;
> -
> + m_ruleList = 0;
> +
> fontDirty = false;
> }
>
> @@ -1044,6 +1057,49 @@
> view->useSlowRepaints();
> }
>
> +RefPtr<CSSRuleListImpl> CSSStyleSelector::styleRulesForElement
> (ElementImpl* e, bool authorOnly)
> +{
> + if (!e->getDocument()->haveStylesheetsLoaded())
> + return 0;
> +
> + m_collectRulesOnly = true;
> +
> + initElementAndPseudoState(e);
> + initForStyleResolve(e, 0);
> +
> + if (!authorOnly) {
> + // First we match rules from the user agent sheet.
> + int firstUARule = -1, lastUARule = -1;
> + matchRules(defaultStyle, firstUARule, lastUARule);
> +
> + // In quirks mode, we match rules from the quirks user
> agent sheet.
> + if (!strictParsing)
> + matchRules(defaultQuirksStyle, firstUARule,
> lastUARule);
> +
> + // If our medium is print, then we match rules from the
> print sheet.
> + if (m_medium == "print")
> + matchRules(defaultPrintStyle, firstUARule, lastUARule);
> +
> + // Now we check user sheet rules.
> + int firstUserRule = -1, lastUserRule = -1;
> + matchRules(m_userStyle, firstUserRule, lastUserRule);
> + }
> +
> + // Check the rules in author sheets.
> + int firstAuthorRule = -1, lastAuthorRule = -1;
> + matchRules(m_authorStyle, firstAuthorRule, lastAuthorRule);
> +
> + m_collectRulesOnly = false;
> +
> + return m_ruleList;
> +}
> +
> +RefPtr<CSSRuleListImpl>
> CSSStyleSelector::pseudoStyleRulesForElement(ElementImpl* e,
> DOMStringImpl* pseudoStyle, bool authorOnly)
> +{
> + // FIXME: Implement this.
> + return 0;
> +}
> +
> static bool subject;
>
> bool CSSStyleSelector::checkSelector(CSSSelector* sel,
> ElementImpl *e)
>
>
>
> 1.47 +7 -1 WebCore/khtml/css/cssstyleselector.h
>
> Index: cssstyleselector.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/css/cssstyleselector.h,v
> retrieving revision 1.46
> retrieving revision 1.47
> diff -u -r1.46 -r1.47
> --- cssstyleselector.h 21 Nov 2005 04:01:52 -0000 1.46
> +++ cssstyleselector.h 7 Dec 2005 01:12:36 -0000 1.47
> @@ -114,6 +114,10 @@
> DOM::NodeImpl* locateCousinList(DOM::ElementImpl* parent);
> bool canShareStyleWithElement(DOM::NodeImpl* n);
>
> + // These methods will give back the set of rules that
> matched for a given element (or a pseudo-element).
> + RefPtr<DOM::CSSRuleListImpl> styleRulesForElement
> (DOM::ElementImpl* e, bool authorOnly);
> + RefPtr<DOM::CSSRuleListImpl> pseudoStyleRulesForElement
> (DOM::ElementImpl* e, DOM::DOMStringImpl* pseudoStyle, bool
> authorOnly);
> +
> bool strictParsing;
>
> struct Encodedurl {
> @@ -210,7 +214,9 @@
> unsigned m_matchedRuleCount;
> QMemArray<CSSRuleData*> m_tmpRules;
> unsigned m_tmpRuleCount;
> -
> + DOM::CSSRuleListImpl* m_ruleList;
> + bool m_collectRulesOnly;
> +
> QString m_medium;
>
> RenderStyle::PseudoId dynamicPseudo;
>
>
>
> 1.41 +6 -0 WebCore/khtml/ecma/kjs_css.cpp
>
> Index: kjs_css.cpp
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/ecma/kjs_css.cpp,v
> retrieving revision 1.40
> retrieving revision 1.41
> diff -u -r1.40 -r1.41
> --- kjs_css.cpp 21 Nov 2005 01:19:54 -0000 1.40
> +++ kjs_css.cpp 7 Dec 2005 01:12:37 -0000 1.41
> @@ -110,6 +110,8 @@
> getPropertyCSSValue
> DOMCSSStyleDeclaration::GetPropertyCSSValue DontDelete|Function 1
> removeProperty DOMCSSStyleDeclaration::RemoveProperty
> DontDelete|Function 1
> getPropertyPriority
> DOMCSSStyleDeclaration::GetPropertyPriority DontDelete|Function 1
> + getPropertyShorthand
> DOMCSSStyleDeclaration::GetPropertyShorthand DontDelete|Function 1
> + isPropertyImplicit
> DOMCSSStyleDeclaration::IsPropertyImplicit DontDelete|Function 1
> setProperty DOMCSSStyleDeclaration::SetProperty DontDelete|
> Function 3
> item DOMCSSStyleDeclaration::Item DontDelete|Function 1
> @end
> @@ -257,6 +259,10 @@
> return getStringOrNull(styleDecl.removeProperty(s,
> exception));
> case DOMCSSStyleDeclaration::GetPropertyPriority:
> return getStringOrNull(styleDecl.getPropertyPriority(s));
> + case DOMCSSStyleDeclaration::GetPropertyShorthand:
> + return getStringOrNull(styleDecl.getPropertyShorthand(s));
> + case DOMCSSStyleDeclaration::IsPropertyImplicit:
> + return Boolean(styleDecl.isPropertyImplicit(s));
> case DOMCSSStyleDeclaration::SetProperty:
> styleDecl.setProperty(s, args[1]->toString(exec).domString
> (), args[2]->toString(exec).domString(), exception);
> return Undefined();
>
>
>
> 1.22 +1 -1 WebCore/khtml/ecma/kjs_css.h
>
> Index: kjs_css.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/ecma/kjs_css.h,v
> retrieving revision 1.21
> retrieving revision 1.22
> diff -u -r1.21 -r1.22
> --- kjs_css.h 1 Dec 2005 10:32:09 -0000 1.21
> +++ kjs_css.h 7 Dec 2005 01:12:37 -0000 1.22
> @@ -57,7 +57,7 @@
> static const ClassInfo info;
> enum { CssText, Length, ParentRule };
> enum { GetPropertyValue, GetPropertyCSSValue, RemoveProperty,
> - GetPropertyPriority, SetProperty, Item };
> + GetPropertyPriority, GetPropertyShorthand,
> IsPropertyImplicit, SetProperty, Item };
> DOM::CSSStyleDeclarationImpl *impl() const { return
> m_impl.get(); }
> private:
> static ValueImp *indexGetter(ExecState *, const Identifier&,
> const PropertySlot&);
>
>
>
> 1.18 +12 -1 WebCore/khtml/ecma/kjs_views.cpp
>
> Index: kjs_views.cpp
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/ecma/kjs_views.cpp,v
> retrieving revision 1.17
> retrieving revision 1.18
> diff -u -r1.17 -r1.18
> --- kjs_views.cpp 20 Nov 2005 21:34:14 -0000 1.17
> +++ kjs_views.cpp 7 Dec 2005 01:12:37 -0000 1.18
> @@ -32,7 +32,7 @@
> using DOM::DocumentImpl;
> using DOM::ElementImpl;
> using DOM::NodeImpl;
> -
> +using DOM::CSSRuleListImpl;
>
> #include "kjs_views.lut.h"
>
> @@ -47,6 +47,7 @@
> @end
> @begin DOMAbstractViewProtoTable 1
> getComputedStyle DOMAbstractView::GetComputedStyle DontDelete|
> Function 2
> + getMatchedCSSRules DOMAbstractView::GetMatchedCSSRules
> DontDelete|Function 2
> @end
> */
>
> @@ -92,6 +93,16 @@
> return getDOMCSSStyleDeclaration(exec,
> abstractView.getComputedStyle(arg0, args[1]->toString
> (exec).domString().impl()));
> }
> }
> + case DOMAbstractView::GetMatchedCSSRules: {
> + ElementImpl *arg0 = toElement(args[0]);
> + if (!arg0)
> + return Undefined(); // throw exception?
> + else {
> + // No need to update layout, since we just want the
> back-end rules.
> + return getDOMCSSRuleList(exec,
> abstractView.getMatchedCSSRules(arg0,
> + args[1]->toString
> (exec).domString().impl()).get());
> + }
> + }
> }
> return Undefined();
> }
>
>
>
> 1.14 +1 -1 WebCore/khtml/ecma/kjs_views.h
>
> Index: kjs_views.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/ecma/kjs_views.h,v
> retrieving revision 1.13
> retrieving revision 1.14
> diff -u -r1.13 -r1.14
> --- kjs_views.h 1 Dec 2005 10:32:10 -0000 1.13
> +++ kjs_views.h 7 Dec 2005 01:12:37 -0000 1.14
> @@ -39,7 +39,7 @@
> virtual const ClassInfo* classInfo() const { return &info; }
> static const ClassInfo info;
> DOM::AbstractViewImpl *impl() const { return m_impl.get(); }
> - enum { Document, GetComputedStyle };
> + enum { Document, GetComputedStyle, GetMatchedCSSRules };
> private:
> RefPtr<DOM::AbstractViewImpl> m_impl;
> };
>
>
>
> 1.9 +10 -1 WebCore/khtml/xml/dom2_viewsimpl.cpp
>
> Index: dom2_viewsimpl.cpp
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/xml/dom2_viewsimpl.cpp,v
> retrieving revision 1.8
> retrieving revision 1.9
> diff -u -r1.8 -r1.9
> --- dom2_viewsimpl.cpp 20 Nov 2005 21:34:15 -0000 1.8
> +++ dom2_viewsimpl.cpp 7 Dec 2005 01:12:38 -0000 1.9
> @@ -26,6 +26,8 @@
>
> #include "css/css_computedstyle.h"
> #include "dom_elementimpl.h"
> +#include "dom_docimpl.h"
> +#include "cssstyleselector.h"
>
> namespace DOM {
>
> @@ -41,11 +43,18 @@
> CSSStyleDeclarationImpl *AbstractViewImpl::getComputedStyle
> (ElementImpl *elt, DOMStringImpl *pseudoElt)
> {
> // FIXME: This should work even if we do not have a renderer.
> -
> + // FIXME: This needs to work with pseudo elements.
> if (!elt || !elt->renderer())
> return 0;
>
> return new CSSComputedStyleDeclarationImpl(elt);
> }
>
> +RefPtr<CSSRuleListImpl> AbstractViewImpl::getMatchedCSSRules
> (ElementImpl* elt, DOMStringImpl* pseudoElt, bool authorOnly)
> +{
> + if (pseudoElt && pseudoElt->l)
> + return m_document->styleSelector()-
> >pseudoStyleRulesForElement(elt, pseudoElt, authorOnly);
> + return m_document->styleSelector()->styleRulesForElement
> (elt, authorOnly);
> +}
> +
> }
>
>
>
> 1.11 +3 -0 WebCore/khtml/xml/dom2_viewsimpl.h
>
> Index: dom2_viewsimpl.h
> ===================================================================
> RCS file: /cvs/root/WebCore/khtml/xml/dom2_viewsimpl.h,v
> retrieving revision 1.10
> retrieving revision 1.11
> diff -u -r1.10 -r1.11
> --- dom2_viewsimpl.h 20 Nov 2005 21:34:15 -0000 1.10
> +++ dom2_viewsimpl.h 7 Dec 2005 01:12:38 -0000 1.11
> @@ -30,6 +30,7 @@
>
> class DocumentImpl;
> class CSSStyleDeclarationImpl;
> +class CSSRuleListImpl;
> class ElementImpl;
> class DOMStringImpl;
>
> @@ -42,6 +43,8 @@
>
> DocumentImpl *document() const { return m_document; }
> CSSStyleDeclarationImpl *getComputedStyle(ElementImpl *elt,
> DOMStringImpl *pseudoElt);
> + RefPtr<CSSRuleListImpl> getMatchedCSSRules(ElementImpl *elt,
> DOMStringImpl *pseudoElt, bool authorOnly = true);
> +
> protected:
> DocumentImpl *m_document;
> };
>
>
>
> 1.34 +16 -0 WebCore/kwq/DOM-CSS.mm
>
> Index: DOM-CSS.mm
> ===================================================================
> RCS file: /cvs/root/WebCore/kwq/DOM-CSS.mm,v
> retrieving revision 1.33
> retrieving revision 1.34
> diff -u -r1.33 -r1.34
> --- DOM-CSS.mm 29 Nov 2005 17:44:02 -0000 1.33
> +++ DOM-CSS.mm 7 Dec 2005 01:12:38 -0000 1.34
> @@ -757,6 +757,16 @@
> return [self _styleDeclarationImpl]->getPropertyPriority
> (propertyName);
> }
>
> +- (NSString *)getPropertyShorthand:(NSString *)propertyName
> +{
> + return [self _styleDeclarationImpl]->getPropertyShorthand
> (propertyName);
> +}
> +
> +- (BOOL)isPropertyImplicit:(NSString *)propertyName
> +{
> + return [self _styleDeclarationImpl]->isPropertyImplicit
> (propertyName);
> +}
> +
> - (void)setProperty:(NSString *)propertyName :(NSString *)value :
> (NSString *)priority
> {
> int exceptionCode;
> @@ -2516,4 +2526,10 @@
> return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:
> [self _documentImpl]->defaultView()->getComputedStyle(elementImpl,
> pseudoEltString.impl())];
> }
>
> +- (DOMCSSRuleList *)getMatchedCSSRules:(DOMElement *)elt :
> (NSString *)pseudoElt
> +{
> + // The parameter of "false" is handy for the DOM inspector
> and lets us see user agent and user rules.
> + return [DOMCSSRuleList _ruleListWithImpl: AbstractViewImpl
> ([self _documentImpl]).getMatchedCSSRules([elt _elementImpl],
> DOMString(pseudoElt).impl(), false).get()];
> +}
> +
> @end
>
>
>
> 1.11 +4 -0 WebCore/kwq/DOMPrivate.h
>
> Index: DOMPrivate.h
> ===================================================================
> RCS file: /cvs/root/WebCore/kwq/DOMPrivate.h,v
> retrieving revision 1.10
> retrieving revision 1.11
> diff -u -r1.10 -r1.11
> --- DOMPrivate.h 23 Nov 2005 09:46:57 -0000 1.10
> +++ DOMPrivate.h 7 Dec 2005 01:12:38 -0000 1.11
> @@ -85,6 +85,10 @@
> - (DOMCSSRuleList *)getMatchedCSSRules:(DOMElement *)elt :
> (NSString *)pseudoElt;
> @end
>
> + at interface DOMCSSStyleDeclaration
> (DOMCSSStyleDeclarationExtensions)
> +- (NSString *)getPropertyShorthand:(NSString *)propertyName;
> +- (BOOL)isPropertyImplicit:(NSString *)propertyName;
> + at end
> // END
>
> // Pending DOM3 APIs
>
>
>
> _______________________________________________
> webkit-changes mailing list
> webkit-changes at opendarwin.org
> http://www.opendarwin.org/mailman/listinfo/webkit-changes
More information about the webkit-changes
mailing list