| 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 |