OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) |
3 * 1999 Waldo Bastian (bastian@kde.org) | 3 * 1999 Waldo Bastian (bastian@kde.org) |
4 * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch) | 4 * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch) |
5 * 2001-2003 Dirk Mueller (mueller@kde.org) | 5 * 2001-2003 Dirk Mueller (mueller@kde.org) |
6 * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * Copyright (C) 2008 David Smith (catfish.man@gmail.com) | 7 * Copyright (C) 2008 David Smith (catfish.man@gmail.com) |
8 * Copyright (C) 2010 Google Inc. All rights reserved. | 8 * Copyright (C) 2010 Google Inc. All rights reserved. |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "core/css/CSSSelector.h" | 27 #include "core/css/CSSSelector.h" |
28 | 28 |
29 #include "HTMLNames.h" | 29 #include "HTMLNames.h" |
30 #include "RuntimeEnabledFeatures.h" | 30 #include "RuntimeEnabledFeatures.h" |
31 #include "core/css/CSSOMUtils.h" | 31 #include "core/css/CSSOMUtils.h" |
32 #include "core/css/CSSSelectorList.h" | 32 #include "core/css/CSSSelectorList.h" |
33 #include "wtf/Assertions.h" | 33 #include "wtf/Assertions.h" |
34 #include "wtf/HashMap.h" | 34 #include "wtf/HashMap.h" |
35 #include "wtf/StdLibExtras.h" | 35 #include "wtf/StdLibExtras.h" |
36 #include "wtf/text/StringBuilder.h" | 36 #include "wtf/text/StringBuilder.h" |
| 37 #include "wtf/text/StringHash.h" |
37 | 38 |
38 namespace WebCore { | 39 namespace WebCore { |
39 | 40 |
40 using namespace HTMLNames; | 41 using namespace HTMLNames; |
41 | 42 |
42 struct SameSizeAsCSSSelector { | 43 struct SameSizeAsCSSSelector { |
43 unsigned bitfields; | 44 unsigned bitfields; |
44 void *pointers[1]; | 45 void *pointers[1]; |
45 }; | 46 }; |
46 | 47 |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 return NOPSEUDO; | 251 return NOPSEUDO; |
251 case PseudoNotParsed: | 252 case PseudoNotParsed: |
252 ASSERT_NOT_REACHED(); | 253 ASSERT_NOT_REACHED(); |
253 return NOPSEUDO; | 254 return NOPSEUDO; |
254 } | 255 } |
255 | 256 |
256 ASSERT_NOT_REACHED(); | 257 ASSERT_NOT_REACHED(); |
257 return NOPSEUDO; | 258 return NOPSEUDO; |
258 } | 259 } |
259 | 260 |
260 static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap(
) | 261 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap() |
261 { | 262 { |
262 DEFINE_STATIC_LOCAL(AtomicString, active, ("active", AtomicString::Construct
FromLiteral)); | 263 DEFINE_STATIC_LOCAL(AtomicString, active, ("active", AtomicString::Construct
FromLiteral)); |
263 DEFINE_STATIC_LOCAL(AtomicString, after, ("after", AtomicString::ConstructFr
omLiteral)); | 264 DEFINE_STATIC_LOCAL(AtomicString, after, ("after", AtomicString::ConstructFr
omLiteral)); |
264 DEFINE_STATIC_LOCAL(AtomicString, any, ("-webkit-any(", AtomicString::Constr
uctFromLiteral)); | 265 DEFINE_STATIC_LOCAL(AtomicString, any, ("-webkit-any(", AtomicString::Constr
uctFromLiteral)); |
265 DEFINE_STATIC_LOCAL(AtomicString, anyLink, ("-webkit-any-link", AtomicString
::ConstructFromLiteral)); | 266 DEFINE_STATIC_LOCAL(AtomicString, anyLink, ("-webkit-any-link", AtomicString
::ConstructFromLiteral)); |
266 DEFINE_STATIC_LOCAL(AtomicString, autofill, ("-webkit-autofill", AtomicStrin
g::ConstructFromLiteral)); | 267 DEFINE_STATIC_LOCAL(AtomicString, autofill, ("-webkit-autofill", AtomicStrin
g::ConstructFromLiteral)); |
267 DEFINE_STATIC_LOCAL(AtomicString, backdrop, ("backdrop", AtomicString::Const
ructFromLiteral)); | 268 DEFINE_STATIC_LOCAL(AtomicString, backdrop, ("backdrop", AtomicString::Const
ructFromLiteral)); |
268 DEFINE_STATIC_LOCAL(AtomicString, before, ("before", AtomicString::Construct
FromLiteral)); | 269 DEFINE_STATIC_LOCAL(AtomicString, before, ("before", AtomicString::Construct
FromLiteral)); |
269 DEFINE_STATIC_LOCAL(AtomicString, checked, ("checked", AtomicString::Constru
ctFromLiteral)); | 270 DEFINE_STATIC_LOCAL(AtomicString, checked, ("checked", AtomicString::Constru
ctFromLiteral)); |
270 DEFINE_STATIC_LOCAL(AtomicString, defaultString, ("default", AtomicString::C
onstructFromLiteral)); | 271 DEFINE_STATIC_LOCAL(AtomicString, defaultString, ("default", AtomicString::C
onstructFromLiteral)); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromL
iteral)); | 331 DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromL
iteral)); |
331 DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::Constr
uctFromLiteral)); | 332 DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::Constr
uctFromLiteral)); |
332 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF
romLiteral)); | 333 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF
romLiteral)); |
333 DEFINE_STATIC_LOCAL(AtomicString, seamlessDocument, ("-webkit-seamless-docum
ent", AtomicString::ConstructFromLiteral)); | 334 DEFINE_STATIC_LOCAL(AtomicString, seamlessDocument, ("-webkit-seamless-docum
ent", AtomicString::ConstructFromLiteral)); |
334 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom
icString::ConstructFromLiteral)); | 335 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom
icString::ConstructFromLiteral)); |
335 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr
uctFromLiteral)); | 336 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr
uctFromLiteral)); |
336 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString:
:ConstructFromLiteral)); | 337 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString:
:ConstructFromLiteral)); |
337 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr
omLiteral)); | 338 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr
omLiteral)); |
338 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C
onstructFromLiteral)); | 339 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C
onstructFromLiteral)); |
339 | 340 |
340 static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoType
= 0; | 341 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; |
341 if (!nameToPseudoType) { | 342 if (!nameToPseudoType) { |
342 nameToPseudoType = new HashMap<AtomicStringImpl*, CSSSelector::PseudoTyp
e>; | 343 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; |
343 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); | 344 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); |
344 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); | 345 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); |
345 nameToPseudoType->set(anyLink.impl(), CSSSelector::PseudoAnyLink); | 346 nameToPseudoType->set(anyLink.impl(), CSSSelector::PseudoAnyLink); |
346 nameToPseudoType->set(any.impl(), CSSSelector::PseudoAny); | 347 nameToPseudoType->set(any.impl(), CSSSelector::PseudoAny); |
347 nameToPseudoType->set(autofill.impl(), CSSSelector::PseudoAutofill); | 348 nameToPseudoType->set(autofill.impl(), CSSSelector::PseudoAutofill); |
348 nameToPseudoType->set(backdrop.impl(), CSSSelector::PseudoBackdrop); | 349 nameToPseudoType->set(backdrop.impl(), CSSSelector::PseudoBackdrop); |
349 nameToPseudoType->set(before.impl(), CSSSelector::PseudoBefore); | 350 nameToPseudoType->set(before.impl(), CSSSelector::PseudoBefore); |
350 nameToPseudoType->set(checked.impl(), CSSSelector::PseudoChecked); | 351 nameToPseudoType->set(checked.impl(), CSSSelector::PseudoChecked); |
351 nameToPseudoType->set(defaultString.impl(), CSSSelector::PseudoDefault); | 352 nameToPseudoType->set(defaultString.impl(), CSSSelector::PseudoDefault); |
352 nameToPseudoType->set(disabled.impl(), CSSSelector::PseudoDisabled); | 353 nameToPseudoType->set(disabled.impl(), CSSSelector::PseudoDisabled); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 if (RuntimeEnabledFeatures::customDOMElementsEnabled()) | 419 if (RuntimeEnabledFeatures::customDOMElementsEnabled()) |
419 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolv
ed); | 420 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolv
ed); |
420 } | 421 } |
421 return nameToPseudoType; | 422 return nameToPseudoType; |
422 } | 423 } |
423 | 424 |
424 CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString& name) | 425 CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString& name) |
425 { | 426 { |
426 if (name.isNull()) | 427 if (name.isNull()) |
427 return PseudoUnknown; | 428 return PseudoUnknown; |
428 HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoType = name
ToPseudoTypeMap(); | 429 HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = nameToPseu
doTypeMap(); |
429 HashMap<AtomicStringImpl*, CSSSelector::PseudoType>::iterator slot = nameToP
seudoType->find(name.impl()); | 430 HashMap<StringImpl*, CSSSelector::PseudoType>::iterator slot = nameToPseudoT
ype->find(name.impl()); |
430 | 431 |
431 if (slot != nameToPseudoType->end()) | 432 if (slot != nameToPseudoType->end()) |
432 return slot->value; | 433 return slot->value; |
433 | 434 |
434 if (name.startsWith("-webkit-")) | 435 if (name.startsWith("-webkit-")) |
435 return PseudoWebKitCustomElement; | 436 return PseudoWebKitCustomElement; |
436 if (name.startsWith("x-") || name.startsWith("cue")) | 437 if (name.startsWith("x-") || name.startsWith("cue")) |
437 return PseudoUserAgentCustomElement; | 438 return PseudoUserAgentCustomElement; |
438 | 439 |
439 return PseudoUnknown; | 440 return PseudoUnknown; |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 m_parsedNth = m_data.m_rareData->parseNth(); | 731 m_parsedNth = m_data.m_rareData->parseNth(); |
731 return m_parsedNth; | 732 return m_parsedNth; |
732 } | 733 } |
733 | 734 |
734 bool CSSSelector::matchNth(int count) const | 735 bool CSSSelector::matchNth(int count) const |
735 { | 736 { |
736 ASSERT(m_hasRareData); | 737 ASSERT(m_hasRareData); |
737 return m_data.m_rareData->matchNth(count); | 738 return m_data.m_rareData->matchNth(count); |
738 } | 739 } |
739 | 740 |
740 CSSSelector::RareData::RareData(PassRefPtr<AtomicStringImpl> value) | 741 CSSSelector::RareData::RareData(PassRefPtr<StringImpl> value) |
741 : m_value(value.leakRef()) | 742 : m_value(value.leakRef()) |
742 , m_a(0) | 743 , m_a(0) |
743 , m_b(0) | 744 , m_b(0) |
744 , m_attribute(anyQName()) | 745 , m_attribute(anyQName()) |
745 , m_argument(nullAtom) | 746 , m_argument(nullAtom) |
746 { | 747 { |
747 } | 748 } |
748 | 749 |
749 CSSSelector::RareData::~RareData() | 750 CSSSelector::RareData::~RareData() |
750 { | 751 { |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
805 return false; | 806 return false; |
806 return (count - m_b) % m_a == 0; | 807 return (count - m_b) % m_a == 0; |
807 } else { | 808 } else { |
808 if (count > m_b) | 809 if (count > m_b) |
809 return false; | 810 return false; |
810 return (m_b - count) % (-m_a) == 0; | 811 return (m_b - count) % (-m_a) == 0; |
811 } | 812 } |
812 } | 813 } |
813 | 814 |
814 } // namespace WebCore | 815 } // namespace WebCore |
OLD | NEW |