diff options
Diffstat (limited to 'Source/WebCore/css/RuleFeature.h')
-rw-r--r-- | Source/WebCore/css/RuleFeature.h | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/Source/WebCore/css/RuleFeature.h b/Source/WebCore/css/RuleFeature.h index 58122e027..d240a850a 100644 --- a/Source/WebCore/css/RuleFeature.h +++ b/Source/WebCore/css/RuleFeature.h @@ -1,6 +1,6 @@ /* * Copyright (C) 1999 Lars Knoll (knoll@kde.org) - * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. + * Copyright (C) 2003-2011, 2014 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 @@ -19,18 +19,19 @@ * */ -#ifndef RuleFeature_h -#define RuleFeature_h +#pragma once +#include "CSSSelector.h" #include <wtf/Forward.h> #include <wtf/HashMap.h> #include <wtf/HashSet.h> #include <wtf/text/AtomicString.h> +#include <wtf/text/AtomicStringHash.h> namespace WebCore { +class RuleData; class StyleRule; -class CSSSelector; struct RuleFeature { RuleFeature(StyleRule* rule, unsigned selectorIndex, bool hasDocumentSecurityOrigin) @@ -45,25 +46,38 @@ struct RuleFeature { }; struct RuleFeatureSet { - RuleFeatureSet() - : usesFirstLineRules(false) - , usesBeforeAfterRules(false) - { } - void add(const RuleFeatureSet&); void clear(); + void shrinkToFit(); + void collectFeatures(const RuleData&); - void collectFeaturesFromSelector(const CSSSelector*); - - HashSet<AtomicStringImpl*> idsInRules; - HashSet<AtomicStringImpl*> classesInRules; - HashSet<AtomicStringImpl*> attrsInRules; + HashSet<AtomicString> idsInRules; + HashSet<AtomicString> idsMatchingAncestorsInRules; + HashSet<AtomicString> classesInRules; + HashSet<AtomicString> attributeCanonicalLocalNamesInRules; + HashSet<AtomicString> attributeLocalNamesInRules; Vector<RuleFeature> siblingRules; Vector<RuleFeature> uncommonAttributeRules; - bool usesFirstLineRules; - bool usesBeforeAfterRules; + HashMap<AtomicString, std::unique_ptr<Vector<RuleFeature>>> ancestorClassRules; + + struct AttributeRules { + WTF_MAKE_FAST_ALLOCATED; + public: + using SelectorKey = std::pair<AtomicStringImpl*, std::pair<AtomicStringImpl*, unsigned>>; + HashMap<SelectorKey, const CSSSelector*> selectors; + Vector<RuleFeature> features; + }; + HashMap<AtomicString, std::unique_ptr<AttributeRules>> ancestorAttributeRulesForHTML; + bool usesFirstLineRules { false }; + bool usesFirstLetterRules { false }; + +private: + struct SelectorFeatures { + bool hasSiblingSelector { false }; + Vector<AtomicString, 32> classesMatchingAncestors; + Vector<const CSSSelector*> attributeSelectorsMatchingAncestors; + }; + void recursivelyCollectFeaturesFromSelector(SelectorFeatures&, const CSSSelector&, bool matchesAncestor = false); }; } // namespace WebCore - -#endif // RuleFeature_h |