| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
| 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All |
| 6 * rights reserved. | 6 * rights reserved. |
| 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
| 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 10 * (http://www.torchmobile.com/) | 10 * (http://www.torchmobile.com/) |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 } | 169 } |
| 170 | 170 |
| 171 bool RuleSet::findBestRuleSetAndAdd(const CSSSelector& component, | 171 bool RuleSet::findBestRuleSetAndAdd(const CSSSelector& component, |
| 172 RuleData& ruleData) { | 172 RuleData& ruleData) { |
| 173 AtomicString id; | 173 AtomicString id; |
| 174 AtomicString className; | 174 AtomicString className; |
| 175 AtomicString customPseudoElementName; | 175 AtomicString customPseudoElementName; |
| 176 AtomicString tagName; | 176 AtomicString tagName; |
| 177 | 177 |
| 178 #ifndef NDEBUG | 178 #ifndef NDEBUG |
| 179 m_allRules.append(ruleData); | 179 m_allRules.push_back(ruleData); |
| 180 #endif | 180 #endif |
| 181 | 181 |
| 182 const CSSSelector* it = &component; | 182 const CSSSelector* it = &component; |
| 183 for (; it && it->relation() == CSSSelector::SubSelector; | 183 for (; it && it->relation() == CSSSelector::SubSelector; |
| 184 it = it->tagHistory()) | 184 it = it->tagHistory()) |
| 185 extractValuesforSelector(it, id, className, customPseudoElementName, | 185 extractValuesforSelector(it, id, className, customPseudoElementName, |
| 186 tagName); | 186 tagName); |
| 187 if (it) | 187 if (it) |
| 188 extractValuesforSelector(it, id, className, customPseudoElementName, | 188 extractValuesforSelector(it, id, className, customPseudoElementName, |
| 189 tagName); | 189 tagName); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 203 // never be a situation where extractValuesforSelector finsd id and | 203 // never be a situation where extractValuesforSelector finsd id and |
| 204 // className in addition to custom pseudo. | 204 // className in addition to custom pseudo. |
| 205 ASSERT(id.isEmpty() && className.isEmpty()); | 205 ASSERT(id.isEmpty() && className.isEmpty()); |
| 206 addToRuleSet(customPseudoElementName, | 206 addToRuleSet(customPseudoElementName, |
| 207 ensurePendingRules()->shadowPseudoElementRules, ruleData); | 207 ensurePendingRules()->shadowPseudoElementRules, ruleData); |
| 208 return true; | 208 return true; |
| 209 } | 209 } |
| 210 | 210 |
| 211 switch (component.getPseudoType()) { | 211 switch (component.getPseudoType()) { |
| 212 case CSSSelector::PseudoCue: | 212 case CSSSelector::PseudoCue: |
| 213 m_cuePseudoRules.append(ruleData); | 213 m_cuePseudoRules.push_back(ruleData); |
| 214 return true; | 214 return true; |
| 215 case CSSSelector::PseudoLink: | 215 case CSSSelector::PseudoLink: |
| 216 case CSSSelector::PseudoVisited: | 216 case CSSSelector::PseudoVisited: |
| 217 case CSSSelector::PseudoAnyLink: | 217 case CSSSelector::PseudoAnyLink: |
| 218 m_linkPseudoClassRules.append(ruleData); | 218 m_linkPseudoClassRules.push_back(ruleData); |
| 219 return true; | 219 return true; |
| 220 case CSSSelector::PseudoFocus: | 220 case CSSSelector::PseudoFocus: |
| 221 m_focusPseudoClassRules.append(ruleData); | 221 m_focusPseudoClassRules.push_back(ruleData); |
| 222 return true; | 222 return true; |
| 223 case CSSSelector::PseudoPlaceholder: | 223 case CSSSelector::PseudoPlaceholder: |
| 224 m_placeholderPseudoRules.append(ruleData); | 224 m_placeholderPseudoRules.push_back(ruleData); |
| 225 return true; | 225 return true; |
| 226 default: | 226 default: |
| 227 break; | 227 break; |
| 228 } | 228 } |
| 229 | 229 |
| 230 if (!tagName.isEmpty()) { | 230 if (!tagName.isEmpty()) { |
| 231 addToRuleSet(tagName, ensurePendingRules()->tagRules, ruleData); | 231 addToRuleSet(tagName, ensurePendingRules()->tagRules, ruleData); |
| 232 return true; | 232 return true; |
| 233 } | 233 } |
| 234 | 234 |
| 235 if (component.isHostPseudoClass()) { | 235 if (component.isHostPseudoClass()) { |
| 236 m_shadowHostRules.append(ruleData); | 236 m_shadowHostRules.push_back(ruleData); |
| 237 return true; | 237 return true; |
| 238 } | 238 } |
| 239 | 239 |
| 240 return false; | 240 return false; |
| 241 } | 241 } |
| 242 | 242 |
| 243 void RuleSet::addRule(StyleRule* rule, | 243 void RuleSet::addRule(StyleRule* rule, |
| 244 unsigned selectorIndex, | 244 unsigned selectorIndex, |
| 245 AddRuleFlags addRuleFlags) { | 245 AddRuleFlags addRuleFlags) { |
| 246 RuleData ruleData(rule, selectorIndex, m_ruleCount++, addRuleFlags); | 246 RuleData ruleData(rule, selectorIndex, m_ruleCount++, addRuleFlags); |
| 247 if (m_features.collectFeaturesFromRuleData(ruleData) == | 247 if (m_features.collectFeaturesFromRuleData(ruleData) == |
| 248 RuleFeatureSet::SelectorNeverMatches) | 248 RuleFeatureSet::SelectorNeverMatches) |
| 249 return; | 249 return; |
| 250 | 250 |
| 251 if (!findBestRuleSetAndAdd(ruleData.selector(), ruleData)) { | 251 if (!findBestRuleSetAndAdd(ruleData.selector(), ruleData)) { |
| 252 // If we didn't find a specialized map to stick it in, file under universal | 252 // If we didn't find a specialized map to stick it in, file under universal |
| 253 // rules. | 253 // rules. |
| 254 m_universalRules.append(ruleData); | 254 m_universalRules.push_back(ruleData); |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 | 257 |
| 258 void RuleSet::addPageRule(StyleRulePage* rule) { | 258 void RuleSet::addPageRule(StyleRulePage* rule) { |
| 259 ensurePendingRules(); // So that m_pageRules.shrinkToFit() gets called. | 259 ensurePendingRules(); // So that m_pageRules.shrinkToFit() gets called. |
| 260 m_pageRules.append(rule); | 260 m_pageRules.push_back(rule); |
| 261 } | 261 } |
| 262 | 262 |
| 263 void RuleSet::addFontFaceRule(StyleRuleFontFace* rule) { | 263 void RuleSet::addFontFaceRule(StyleRuleFontFace* rule) { |
| 264 ensurePendingRules(); // So that m_fontFaceRules.shrinkToFit() gets called. | 264 ensurePendingRules(); // So that m_fontFaceRules.shrinkToFit() gets called. |
| 265 m_fontFaceRules.append(rule); | 265 m_fontFaceRules.push_back(rule); |
| 266 } | 266 } |
| 267 | 267 |
| 268 void RuleSet::addKeyframesRule(StyleRuleKeyframes* rule) { | 268 void RuleSet::addKeyframesRule(StyleRuleKeyframes* rule) { |
| 269 ensurePendingRules(); // So that m_keyframesRules.shrinkToFit() gets called. | 269 ensurePendingRules(); // So that m_keyframesRules.shrinkToFit() gets called. |
| 270 m_keyframesRules.append(rule); | 270 m_keyframesRules.push_back(rule); |
| 271 } | 271 } |
| 272 | 272 |
| 273 void RuleSet::addChildRules(const HeapVector<Member<StyleRuleBase>>& rules, | 273 void RuleSet::addChildRules(const HeapVector<Member<StyleRuleBase>>& rules, |
| 274 const MediaQueryEvaluator& medium, | 274 const MediaQueryEvaluator& medium, |
| 275 AddRuleFlags addRuleFlags) { | 275 AddRuleFlags addRuleFlags) { |
| 276 for (unsigned i = 0; i < rules.size(); ++i) { | 276 for (unsigned i = 0; i < rules.size(); ++i) { |
| 277 StyleRuleBase* rule = rules[i].get(); | 277 StyleRuleBase* rule = rules[i].get(); |
| 278 | 278 |
| 279 if (rule->isStyleRule()) { | 279 if (rule->isStyleRule()) { |
| 280 StyleRule* styleRule = toStyleRule(rule); | 280 StyleRule* styleRule = toStyleRule(rule); |
| 281 | 281 |
| 282 const CSSSelectorList& selectorList = styleRule->selectorList(); | 282 const CSSSelectorList& selectorList = styleRule->selectorList(); |
| 283 for (const CSSSelector* selector = selectorList.first(); selector; | 283 for (const CSSSelector* selector = selectorList.first(); selector; |
| 284 selector = selectorList.next(*selector)) { | 284 selector = selectorList.next(*selector)) { |
| 285 size_t selectorIndex = selectorList.selectorIndex(*selector); | 285 size_t selectorIndex = selectorList.selectorIndex(*selector); |
| 286 if (selector->hasDeepCombinatorOrShadowPseudo()) { | 286 if (selector->hasDeepCombinatorOrShadowPseudo()) { |
| 287 m_deepCombinatorOrShadowPseudoRules.append( | 287 m_deepCombinatorOrShadowPseudoRules.push_back( |
| 288 MinimalRuleData(styleRule, selectorIndex, addRuleFlags)); | 288 MinimalRuleData(styleRule, selectorIndex, addRuleFlags)); |
| 289 } else if (selector->hasContentPseudo()) { | 289 } else if (selector->hasContentPseudo()) { |
| 290 m_contentPseudoElementRules.append( | 290 m_contentPseudoElementRules.push_back( |
| 291 MinimalRuleData(styleRule, selectorIndex, addRuleFlags)); | 291 MinimalRuleData(styleRule, selectorIndex, addRuleFlags)); |
| 292 } else if (selector->hasSlottedPseudo()) { | 292 } else if (selector->hasSlottedPseudo()) { |
| 293 m_slottedPseudoElementRules.append( | 293 m_slottedPseudoElementRules.push_back( |
| 294 MinimalRuleData(styleRule, selectorIndex, addRuleFlags)); | 294 MinimalRuleData(styleRule, selectorIndex, addRuleFlags)); |
| 295 } else { | 295 } else { |
| 296 addRule(styleRule, selectorIndex, addRuleFlags); | 296 addRule(styleRule, selectorIndex, addRuleFlags); |
| 297 } | 297 } |
| 298 } | 298 } |
| 299 } else if (rule->isPageRule()) { | 299 } else if (rule->isPageRule()) { |
| 300 addPageRule(toStyleRulePage(rule)); | 300 addPageRule(toStyleRulePage(rule)); |
| 301 } else if (rule->isMediaRule()) { | 301 } else if (rule->isMediaRule()) { |
| 302 StyleRuleMedia* mediaRule = toStyleRuleMedia(rule); | 302 StyleRuleMedia* mediaRule = toStyleRuleMedia(rule); |
| 303 if (!mediaRule->mediaQueries() || | 303 if (!mediaRule->mediaQueries() || |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 } | 425 } |
| 426 | 426 |
| 427 #ifndef NDEBUG | 427 #ifndef NDEBUG |
| 428 void RuleSet::show() const { | 428 void RuleSet::show() const { |
| 429 for (const auto& rule : m_allRules) | 429 for (const auto& rule : m_allRules) |
| 430 rule.selector().show(); | 430 rule.selector().show(); |
| 431 } | 431 } |
| 432 #endif | 432 #endif |
| 433 | 433 |
| 434 } // namespace blink | 434 } // namespace blink |
| OLD | NEW |