📄 cssmutablestyledeclaration.h
字号:
/* * (C) 1999-2003 Lars Knoll (knoll@kde.org) * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. * * 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., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */#ifndef CSSMutableStyleDeclaration_h#define CSSMutableStyleDeclaration_h#include "CSSStyleDeclaration.h"#include "CSSPrimitiveValue.h"#include "CSSProperty.h"#include "KURLHash.h"#include "PlatformString.h"#include <wtf/ListHashSet.h>#include <wtf/Vector.h>namespace WebCore {class Node;class CSSMutableStyleDeclarationConstIterator {public: CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclaration* decl, CSSProperty* current); CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclarationConstIterator& o); ~CSSMutableStyleDeclarationConstIterator(); const CSSProperty& operator*() const { return *m_current; } const CSSProperty* operator->() const { return m_current; } bool operator!=(const CSSMutableStyleDeclarationConstIterator& o) { ASSERT(m_decl == o.m_decl); return m_current != o.m_current; } bool operator==(const CSSMutableStyleDeclarationConstIterator& o) { ASSERT(m_decl == o.m_decl); return m_current == o.m_current; } CSSMutableStyleDeclarationConstIterator& operator=(const CSSMutableStyleDeclarationConstIterator& o); CSSMutableStyleDeclarationConstIterator& operator++(); CSSMutableStyleDeclarationConstIterator& operator--();private: const CSSMutableStyleDeclaration* m_decl; CSSProperty* m_current;};class CSSMutableStyleDeclaration : public CSSStyleDeclaration {public: static PassRefPtr<CSSMutableStyleDeclaration> create() { return adoptRef(new CSSMutableStyleDeclaration); } static PassRefPtr<CSSMutableStyleDeclaration> create(CSSRule* parentRule) { return adoptRef(new CSSMutableStyleDeclaration(parentRule)); } static PassRefPtr<CSSMutableStyleDeclaration> create(CSSRule* parentRule, const CSSProperty* const* properties, int numProperties) { return adoptRef(new CSSMutableStyleDeclaration(parentRule, properties, numProperties)); } static PassRefPtr<CSSMutableStyleDeclaration> create(const Vector<CSSProperty>& properties, unsigned variableDependentValueCount) { return adoptRef(new CSSMutableStyleDeclaration(0, properties, variableDependentValueCount)); } CSSMutableStyleDeclaration& operator=(const CSSMutableStyleDeclaration&); typedef CSSMutableStyleDeclarationConstIterator const_iterator; const_iterator begin() { return const_iterator(this, m_properties.begin()); } const_iterator end() { return const_iterator(this, m_properties.end()); } void setNode(Node* node) { m_node = node; } virtual bool isMutableStyleDeclaration() const { return true; } virtual String cssText() const; virtual void setCssText(const String&, ExceptionCode&); virtual unsigned length() const; virtual String item(unsigned index) const; virtual PassRefPtr<CSSValue> getPropertyCSSValue(int propertyID) const; virtual String 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 String& value, bool important, ExceptionCode&); virtual String removeProperty(int propertyID, ExceptionCode&); virtual PassRefPtr<CSSMutableStyleDeclaration> copy() const; bool setProperty(int propertyID, int value, bool important = false, bool notifyChanged = true); bool setProperty(int propertyID, const String& value, bool important = false, bool notifyChanged = true); String removeProperty(int propertyID, bool notifyChanged = true, bool returnText = false); // setLengthProperty treats integers as pixels! (Needed for conversion of HTML attributes.) void setLengthProperty(int propertyId, const String& value, bool important, bool multiLength = false); void setStringProperty(int propertyId, const String& value, CSSPrimitiveValue::UnitTypes, bool important = false); // parsed string value void setImageProperty(int propertyId, const String& url, bool important = false); // The following parses an entire new style declaration. void parseDeclaration(const String& styleDeclaration); // Besides adding the properties, this also removes any existing properties with these IDs. // It does no notification since it's called by the parser. void addParsedProperties(const CSSProperty* const *, int numProperties); // This does no change notifications since it's only called by createMarkup. void addParsedProperty(const CSSProperty&); PassRefPtr<CSSMutableStyleDeclaration> copyBlockProperties() const; void removeBlockProperties(); void removePropertiesInSet(const int* set, unsigned length, bool notifyChanged = true); void merge(CSSMutableStyleDeclaration*, bool argOverridesOnConflict = true); bool hasVariableDependentValue() const { return m_variableDependentValueCount > 0; } void setStrictParsing(bool b) { m_strictParsing = b; } bool useStrictParsing() const { return m_strictParsing; } void addSubresourceStyleURLs(ListHashSet<KURL>&);protected: CSSMutableStyleDeclaration(CSSRule* parentRule);private: CSSMutableStyleDeclaration(); CSSMutableStyleDeclaration(CSSRule* parentRule, const Vector<CSSProperty>&, unsigned variableDependentValueCount); CSSMutableStyleDeclaration(CSSRule* parentRule, const CSSProperty* const *, int numProperties); virtual PassRefPtr<CSSMutableStyleDeclaration> makeMutable(); void setChanged(); String getShorthandValue(const int* properties, int number) const; String getCommonValue(const int* properties, int number) const; String getLayeredShorthandValue(const int* properties, unsigned number) const; String get4Values(const int* properties) const; void setPropertyInternal(const CSSProperty&, CSSProperty* slot = 0); bool removeShorthandProperty(int propertyID, bool notifyChanged); Vector<CSSProperty>::const_iterator findPropertyWithId(int propertyId) const; Vector<CSSProperty>::iterator findPropertyWithId(int propertyId); Vector<CSSProperty, 4> m_properties; Node* m_node; unsigned m_variableDependentValueCount : 24; bool m_strictParsing : 1;#ifndef NDEBUG unsigned m_iteratorCount : 4;#endif friend class CSSMutableStyleDeclarationConstIterator;}; inline CSSMutableStyleDeclarationConstIterator::CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclaration* decl, CSSProperty* current) : m_decl(decl), m_current(current){ #ifndef NDEBUG const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount++; #endif}inline CSSMutableStyleDeclarationConstIterator::CSSMutableStyleDeclarationConstIterator(const CSSMutableStyleDeclarationConstIterator& o): m_decl(o.m_decl), m_current(o.m_current){#ifndef NDEBUG const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount++; #endif}inline CSSMutableStyleDeclarationConstIterator::~CSSMutableStyleDeclarationConstIterator() {#ifndef NDEBUG const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount--;#endif}inline CSSMutableStyleDeclarationConstIterator& CSSMutableStyleDeclarationConstIterator::operator=(const CSSMutableStyleDeclarationConstIterator& o){ m_decl = o.m_decl; m_current = o.m_current;#ifndef NDEBUG const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_iteratorCount++; #endif return *this;} inline CSSMutableStyleDeclarationConstIterator& CSSMutableStyleDeclarationConstIterator::operator++() { ASSERT(m_current != const_cast<CSSMutableStyleDeclaration*>(m_decl)->m_properties.end()); ++m_current; return *this; }inline CSSMutableStyleDeclarationConstIterator& CSSMutableStyleDeclarationConstIterator::operator--() { --m_current; return *this; }} // namespace WebCore#endif // CSSMutableStyleDeclaration_h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -