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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 case PseudoRightPage: | 242 case PseudoRightPage: |
243 case PseudoInRange: | 243 case PseudoInRange: |
244 case PseudoOutOfRange: | 244 case PseudoOutOfRange: |
245 case PseudoUserAgentCustomElement: | 245 case PseudoUserAgentCustomElement: |
246 case PseudoWebKitCustomElement: | 246 case PseudoWebKitCustomElement: |
247 case PseudoCue: | 247 case PseudoCue: |
248 case PseudoFutureCue: | 248 case PseudoFutureCue: |
249 case PseudoPastCue: | 249 case PseudoPastCue: |
250 case PseudoSeamlessDocument: | 250 case PseudoSeamlessDocument: |
251 case PseudoDistributed: | 251 case PseudoDistributed: |
252 case PseudoPart: | |
253 case PseudoUnresolved: | 252 case PseudoUnresolved: |
254 case PseudoContent: | 253 case PseudoContent: |
255 case PseudoHost: | 254 case PseudoHost: |
256 return NOPSEUDO; | 255 return NOPSEUDO; |
257 case PseudoNotParsed: | 256 case PseudoNotParsed: |
258 ASSERT_NOT_REACHED(); | 257 ASSERT_NOT_REACHED(); |
259 return NOPSEUDO; | 258 return NOPSEUDO; |
260 } | 259 } |
261 | 260 |
262 ASSERT_NOT_REACHED(); | 261 ASSERT_NOT_REACHED(); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 DEFINE_STATIC_LOCAL(AtomicString, fullScreenAncestor, ("-webkit-full-screen-
ancestor", AtomicString::ConstructFromLiteral)); | 333 DEFINE_STATIC_LOCAL(AtomicString, fullScreenAncestor, ("-webkit-full-screen-
ancestor", AtomicString::ConstructFromLiteral)); |
335 DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromL
iteral)); | 334 DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromL
iteral)); |
336 DEFINE_STATIC_LOCAL(AtomicString, cueWithoutParen, ("cue", AtomicString::Con
structFromLiteral)); | 335 DEFINE_STATIC_LOCAL(AtomicString, cueWithoutParen, ("cue", AtomicString::Con
structFromLiteral)); |
337 DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::Constr
uctFromLiteral)); | 336 DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::Constr
uctFromLiteral)); |
338 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF
romLiteral)); | 337 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF
romLiteral)); |
339 DEFINE_STATIC_LOCAL(AtomicString, seamlessDocument, ("-webkit-seamless-docum
ent", AtomicString::ConstructFromLiteral)); | 338 DEFINE_STATIC_LOCAL(AtomicString, seamlessDocument, ("-webkit-seamless-docum
ent", AtomicString::ConstructFromLiteral)); |
340 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom
icString::ConstructFromLiteral)); | 339 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom
icString::ConstructFromLiteral)); |
341 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr
uctFromLiteral)); | 340 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr
uctFromLiteral)); |
342 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString:
:ConstructFromLiteral)); | 341 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString:
:ConstructFromLiteral)); |
343 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr
omLiteral)); | 342 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr
omLiteral)); |
344 DEFINE_STATIC_LOCAL(AtomicString, part, ("part(", AtomicString::ConstructFro
mLiteral)); | |
345 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C
onstructFromLiteral)); | 343 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C
onstructFromLiteral)); |
346 DEFINE_STATIC_LOCAL(AtomicString, content, ("content", AtomicString::Constru
ctFromLiteral)); | 344 DEFINE_STATIC_LOCAL(AtomicString, content, ("content", AtomicString::Constru
ctFromLiteral)); |
347 DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFrom
Literal)); | 345 DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFrom
Literal)); |
348 DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::Co
nstructFromLiteral)); | 346 DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::Co
nstructFromLiteral)); |
349 | 347 |
350 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; | 348 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; |
351 if (!nameToPseudoType) { | 349 if (!nameToPseudoType) { |
352 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; | 350 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; |
353 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); | 351 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); |
354 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); | 352 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 nameToPseudoType->set(fullScreenAncestor.impl(), CSSSelector::PseudoFull
ScreenAncestor); | 417 nameToPseudoType->set(fullScreenAncestor.impl(), CSSSelector::PseudoFull
ScreenAncestor); |
420 nameToPseudoType->set(cue.impl(), CSSSelector::PseudoCue); | 418 nameToPseudoType->set(cue.impl(), CSSSelector::PseudoCue); |
421 nameToPseudoType->set(cueWithoutParen.impl(), CSSSelector::PseudoWebKitC
ustomElement); | 419 nameToPseudoType->set(cueWithoutParen.impl(), CSSSelector::PseudoWebKitC
ustomElement); |
422 nameToPseudoType->set(futureCue.impl(), CSSSelector::PseudoFutureCue); | 420 nameToPseudoType->set(futureCue.impl(), CSSSelector::PseudoFutureCue); |
423 nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue); | 421 nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue); |
424 nameToPseudoType->set(seamlessDocument.impl(), CSSSelector::PseudoSeamle
ssDocument); | 422 nameToPseudoType->set(seamlessDocument.impl(), CSSSelector::PseudoSeamle
ssDocument); |
425 nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed
); | 423 nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed
); |
426 nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange); | 424 nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange); |
427 nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange); | 425 nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange); |
428 if (RuntimeEnabledFeatures::shadowDOMEnabled()) { | 426 if (RuntimeEnabledFeatures::shadowDOMEnabled()) { |
429 nameToPseudoType->set(part.impl(), CSSSelector::PseudoPart); | |
430 nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost); | 427 nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost); |
431 nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost
); | 428 nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost
); |
432 nameToPseudoType->set(content.impl(), CSSSelector::PseudoContent); | 429 nameToPseudoType->set(content.impl(), CSSSelector::PseudoContent); |
433 } | 430 } |
434 if (RuntimeEnabledFeatures::customElementsEnabled() || RuntimeEnabledFea
tures::embedderCustomElementsEnabled()) | 431 if (RuntimeEnabledFeatures::customElementsEnabled() || RuntimeEnabledFea
tures::embedderCustomElementsEnabled()) |
435 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolv
ed); | 432 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolv
ed); |
436 } | 433 } |
437 return nameToPseudoType; | 434 return nameToPseudoType; |
438 } | 435 } |
439 | 436 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 case PseudoResizer: | 475 case PseudoResizer: |
479 case PseudoScrollbar: | 476 case PseudoScrollbar: |
480 case PseudoScrollbarCorner: | 477 case PseudoScrollbarCorner: |
481 case PseudoScrollbarButton: | 478 case PseudoScrollbarButton: |
482 case PseudoScrollbarThumb: | 479 case PseudoScrollbarThumb: |
483 case PseudoScrollbarTrack: | 480 case PseudoScrollbarTrack: |
484 case PseudoScrollbarTrackPiece: | 481 case PseudoScrollbarTrackPiece: |
485 case PseudoSelection: | 482 case PseudoSelection: |
486 case PseudoUserAgentCustomElement: | 483 case PseudoUserAgentCustomElement: |
487 case PseudoWebKitCustomElement: | 484 case PseudoWebKitCustomElement: |
488 case PseudoPart: | |
489 case PseudoContent: | 485 case PseudoContent: |
490 element = true; | 486 element = true; |
491 break; | 487 break; |
492 case PseudoUnknown: | 488 case PseudoUnknown: |
493 case PseudoEmpty: | 489 case PseudoEmpty: |
494 case PseudoFirstChild: | 490 case PseudoFirstChild: |
495 case PseudoFirstOfType: | 491 case PseudoFirstOfType: |
496 case PseudoLastChild: | 492 case PseudoLastChild: |
497 case PseudoLastOfType: | 493 case PseudoLastOfType: |
498 case PseudoOnlyChild: | 494 case PseudoOnlyChild: |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 } | 657 } |
662 break; | 658 break; |
663 } | 659 } |
664 default: | 660 default: |
665 break; | 661 break; |
666 } | 662 } |
667 } else if (cs->m_match == CSSSelector::PseudoElement) { | 663 } else if (cs->m_match == CSSSelector::PseudoElement) { |
668 str.appendLiteral("::"); | 664 str.appendLiteral("::"); |
669 str.append(cs->value()); | 665 str.append(cs->value()); |
670 | 666 |
671 switch (cs->pseudoType()) { | 667 if (cs->pseudoType() == PseudoContent) { |
672 case PseudoPart: | |
673 str.append(cs->argument()); | |
674 str.append(')'); | |
675 break; | |
676 case PseudoContent: | |
677 if (cs->relation() == CSSSelector::SubSelector && cs->tagHistory
()) | 668 if (cs->relation() == CSSSelector::SubSelector && cs->tagHistory
()) |
678 return cs->tagHistory()->selectorText() + str.toString() + r
ightSide; | 669 return cs->tagHistory()->selectorText() + str.toString() + r
ightSide; |
679 break; | |
680 default: | |
681 break; | |
682 } | 670 } |
683 } else if (cs->isAttributeSelector()) { | 671 } else if (cs->isAttributeSelector()) { |
684 str.append('['); | 672 str.append('['); |
685 const AtomicString& prefix = cs->attribute().prefix(); | 673 const AtomicString& prefix = cs->attribute().prefix(); |
686 if (!prefix.isNull()) { | 674 if (!prefix.isNull()) { |
687 str.append(prefix); | 675 str.append(prefix); |
688 str.append("|"); | 676 str.append("|"); |
689 } | 677 } |
690 str.append(cs->attribute().localName()); | 678 str.append(cs->attribute().localName()); |
691 switch (cs->m_match) { | 679 switch (cs->m_match) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 createRareData(); | 750 createRareData(); |
763 m_data.m_rareData->m_argument = value; | 751 m_data.m_rareData->m_argument = value; |
764 } | 752 } |
765 | 753 |
766 void CSSSelector::setSelectorList(PassOwnPtr<CSSSelectorList> selectorList) | 754 void CSSSelector::setSelectorList(PassOwnPtr<CSSSelectorList> selectorList) |
767 { | 755 { |
768 createRareData(); | 756 createRareData(); |
769 m_data.m_rareData->m_selectorList = selectorList; | 757 m_data.m_rareData->m_selectorList = selectorList; |
770 } | 758 } |
771 | 759 |
772 void CSSSelector::setMatchUserAgentOnly() | |
773 { | |
774 createRareData(); | |
775 m_data.m_rareData->m_matchUserAgentOnly = true; | |
776 } | |
777 | |
778 static bool validateSubSelector(const CSSSelector* selector) | 760 static bool validateSubSelector(const CSSSelector* selector) |
779 { | 761 { |
780 switch (selector->m_match) { | 762 switch (selector->m_match) { |
781 case CSSSelector::Tag: | 763 case CSSSelector::Tag: |
782 case CSSSelector::Id: | 764 case CSSSelector::Id: |
783 case CSSSelector::Class: | 765 case CSSSelector::Class: |
784 case CSSSelector::Exact: | 766 case CSSSelector::Exact: |
785 case CSSSelector::Set: | 767 case CSSSelector::Set: |
786 case CSSSelector::List: | 768 case CSSSelector::List: |
787 case CSSSelector::Hyphen: | 769 case CSSSelector::Hyphen: |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 ASSERT(m_hasRareData); | 839 ASSERT(m_hasRareData); |
858 return m_data.m_rareData->matchNth(count); | 840 return m_data.m_rareData->matchNth(count); |
859 } | 841 } |
860 | 842 |
861 CSSSelector::RareData::RareData(PassRefPtr<StringImpl> value) | 843 CSSSelector::RareData::RareData(PassRefPtr<StringImpl> value) |
862 : m_value(value.leakRef()) | 844 : m_value(value.leakRef()) |
863 , m_a(0) | 845 , m_a(0) |
864 , m_b(0) | 846 , m_b(0) |
865 , m_attribute(anyQName()) | 847 , m_attribute(anyQName()) |
866 , m_argument(nullAtom) | 848 , m_argument(nullAtom) |
867 , m_matchUserAgentOnly(0) | |
868 { | 849 { |
869 } | 850 } |
870 | 851 |
871 CSSSelector::RareData::~RareData() | 852 CSSSelector::RareData::~RareData() |
872 { | 853 { |
873 if (m_value) | 854 if (m_value) |
874 m_value->deref(); | 855 m_value->deref(); |
875 } | 856 } |
876 | 857 |
877 // a helper function for parsing nth-arguments | 858 // a helper function for parsing nth-arguments |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
927 return false; | 908 return false; |
928 return (count - m_b) % m_a == 0; | 909 return (count - m_b) % m_a == 0; |
929 } else { | 910 } else { |
930 if (count > m_b) | 911 if (count > m_b) |
931 return false; | 912 return false; |
932 return (m_b - count) % (-m_a) == 0; | 913 return (m_b - count) % (-m_a) == 0; |
933 } | 914 } |
934 } | 915 } |
935 | 916 |
936 } // namespace WebCore | 917 } // namespace WebCore |
OLD | NEW |