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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 } | 93 } |
94 | 94 |
95 inline unsigned CSSSelector::specificityForOneSelector() const | 95 inline unsigned CSSSelector::specificityForOneSelector() const |
96 { | 96 { |
97 // FIXME: Pseudo-elements and pseudo-classes do not have the same specificit
y. This function | 97 // FIXME: Pseudo-elements and pseudo-classes do not have the same specificit
y. This function |
98 // isn't quite correct. | 98 // isn't quite correct. |
99 switch (m_match) { | 99 switch (m_match) { |
100 case Id: | 100 case Id: |
101 return 0x10000; | 101 return 0x10000; |
102 case PseudoClass: | 102 case PseudoClass: |
103 if (pseudoType() == PseudoHost || pseudoType() == PseudoAncestor) | 103 if (pseudoType() == PseudoHost || pseudoType() == PseudoHostContext) |
104 return 0; | 104 return 0; |
105 // fall through. | 105 // fall through. |
106 case Exact: | 106 case Exact: |
107 case Class: | 107 case Class: |
108 case Set: | 108 case Set: |
109 case List: | 109 case List: |
110 case Hyphen: | 110 case Hyphen: |
111 case PseudoElement: | 111 case PseudoElement: |
112 case Contain: | 112 case Contain: |
113 case Begin: | 113 case Begin: |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 case PseudoOutOfRange: | 247 case PseudoOutOfRange: |
248 case PseudoUserAgentCustomElement: | 248 case PseudoUserAgentCustomElement: |
249 case PseudoWebKitCustomElement: | 249 case PseudoWebKitCustomElement: |
250 case PseudoCue: | 250 case PseudoCue: |
251 case PseudoFutureCue: | 251 case PseudoFutureCue: |
252 case PseudoPastCue: | 252 case PseudoPastCue: |
253 case PseudoDistributed: | 253 case PseudoDistributed: |
254 case PseudoUnresolved: | 254 case PseudoUnresolved: |
255 case PseudoContent: | 255 case PseudoContent: |
256 case PseudoHost: | 256 case PseudoHost: |
257 case PseudoAncestor: | 257 case PseudoHostContext: |
258 case PseudoFullScreen: | 258 case PseudoFullScreen: |
259 case PseudoFullScreenDocument: | 259 case PseudoFullScreenDocument: |
260 case PseudoFullScreenAncestor: | 260 case PseudoFullScreenAncestor: |
261 return NOPSEUDO; | 261 return NOPSEUDO; |
262 case PseudoNotParsed: | 262 case PseudoNotParsed: |
263 ASSERT_NOT_REACHED(); | 263 ASSERT_NOT_REACHED(); |
264 return NOPSEUDO; | 264 return NOPSEUDO; |
265 } | 265 } |
266 | 266 |
267 ASSERT_NOT_REACHED(); | 267 ASSERT_NOT_REACHED(); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 {"cue", CSSSelector::PseudoWebKitCustomElement}, | 347 {"cue", CSSSelector::PseudoWebKitCustomElement}, |
348 {"future", CSSSelector::PseudoFutureCue}, | 348 {"future", CSSSelector::PseudoFutureCue}, |
349 {"past", CSSSelector::PseudoPastCue}, | 349 {"past", CSSSelector::PseudoPastCue}, |
350 {"-webkit-distributed(", CSSSelector::PseudoDistributed}, | 350 {"-webkit-distributed(", CSSSelector::PseudoDistributed}, |
351 {"in-range", CSSSelector::PseudoInRange}, | 351 {"in-range", CSSSelector::PseudoInRange}, |
352 {"out-of-range", CSSSelector::PseudoOutOfRange}, | 352 {"out-of-range", CSSSelector::PseudoOutOfRange}, |
353 {"scope", CSSSelector::PseudoScope}, | 353 {"scope", CSSSelector::PseudoScope}, |
354 {"unresolved", CSSSelector::PseudoUnresolved}, | 354 {"unresolved", CSSSelector::PseudoUnresolved}, |
355 {"host", CSSSelector::PseudoHost}, | 355 {"host", CSSSelector::PseudoHost}, |
356 {"host(", CSSSelector::PseudoHost}, | 356 {"host(", CSSSelector::PseudoHost}, |
357 {"ancestor", CSSSelector::PseudoAncestor}, | 357 {"host-context", CSSSelector::PseudoHostContext}, |
358 {"ancestor(", CSSSelector::PseudoAncestor}, | 358 {"host-context(", CSSSelector::PseudoHostContext}, |
359 {"content", CSSSelector::PseudoContent}, | 359 {"content", CSSSelector::PseudoContent}, |
360 }; | 360 }; |
361 | 361 |
362 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap() | 362 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap() |
363 { | 363 { |
364 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; | 364 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; |
365 if (!nameToPseudoType) { | 365 if (!nameToPseudoType) { |
366 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; | 366 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; |
367 | 367 |
368 size_t pseudoCount = WTF_ARRAY_LENGTH(pseudoTypeMap); | 368 size_t pseudoCount = WTF_ARRAY_LENGTH(pseudoTypeMap); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 case PseudoNoButton: | 513 case PseudoNoButton: |
514 case PseudoNotParsed: | 514 case PseudoNotParsed: |
515 case PseudoFullScreen: | 515 case PseudoFullScreen: |
516 case PseudoFullScreenDocument: | 516 case PseudoFullScreenDocument: |
517 case PseudoFullScreenAncestor: | 517 case PseudoFullScreenAncestor: |
518 case PseudoInRange: | 518 case PseudoInRange: |
519 case PseudoOutOfRange: | 519 case PseudoOutOfRange: |
520 case PseudoFutureCue: | 520 case PseudoFutureCue: |
521 case PseudoPastCue: | 521 case PseudoPastCue: |
522 case PseudoHost: | 522 case PseudoHost: |
523 case PseudoAncestor: | 523 case PseudoHostContext: |
524 case PseudoUnresolved: | 524 case PseudoUnresolved: |
525 break; | 525 break; |
526 case PseudoFirstPage: | 526 case PseudoFirstPage: |
527 case PseudoLeftPage: | 527 case PseudoLeftPage: |
528 case PseudoRightPage: | 528 case PseudoRightPage: |
529 isPagePseudoClass = true; | 529 isPagePseudoClass = true; |
530 break; | 530 break; |
531 } | 531 } |
532 | 532 |
533 bool matchPagePseudoClass = (m_match == PagePseudoClass); | 533 bool matchPagePseudoClass = (m_match == PagePseudoClass); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 const CSSSelector* firstSubSelector = cs->selectorList()->first(
); | 614 const CSSSelector* firstSubSelector = cs->selectorList()->first(
); |
615 for (const CSSSelector* subSelector = firstSubSelector; subSelec
tor; subSelector = CSSSelectorList::next(*subSelector)) { | 615 for (const CSSSelector* subSelector = firstSubSelector; subSelec
tor; subSelector = CSSSelectorList::next(*subSelector)) { |
616 if (subSelector != firstSubSelector) | 616 if (subSelector != firstSubSelector) |
617 str.append(','); | 617 str.append(','); |
618 str.append(subSelector->selectorText()); | 618 str.append(subSelector->selectorText()); |
619 } | 619 } |
620 str.append(')'); | 620 str.append(')'); |
621 break; | 621 break; |
622 } | 622 } |
623 case PseudoHost: | 623 case PseudoHost: |
624 case PseudoAncestor: { | 624 case PseudoHostContext: { |
625 if (cs->selectorList()) { | 625 if (cs->selectorList()) { |
626 const CSSSelector* firstSubSelector = cs->selectorList()->fi
rst(); | 626 const CSSSelector* firstSubSelector = cs->selectorList()->fi
rst(); |
627 for (const CSSSelector* subSelector = firstSubSelector; subS
elector; subSelector = CSSSelectorList::next(*subSelector)) { | 627 for (const CSSSelector* subSelector = firstSubSelector; subS
elector; subSelector = CSSSelectorList::next(*subSelector)) { |
628 if (subSelector != firstSubSelector) | 628 if (subSelector != firstSubSelector) |
629 str.append(','); | 629 str.append(','); |
630 str.append(subSelector->selectorText()); | 630 str.append(subSelector->selectorText()); |
631 } | 631 } |
632 str.append(')'); | 632 str.append(')'); |
633 } | 633 } |
634 break; | 634 break; |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 case CSSSelector::PseudoNthChild: | 766 case CSSSelector::PseudoNthChild: |
767 case CSSSelector::PseudoNthLastChild: | 767 case CSSSelector::PseudoNthLastChild: |
768 case CSSSelector::PseudoNthOfType: | 768 case CSSSelector::PseudoNthOfType: |
769 case CSSSelector::PseudoNthLastOfType: | 769 case CSSSelector::PseudoNthLastOfType: |
770 case CSSSelector::PseudoFirstChild: | 770 case CSSSelector::PseudoFirstChild: |
771 case CSSSelector::PseudoLastChild: | 771 case CSSSelector::PseudoLastChild: |
772 case CSSSelector::PseudoFirstOfType: | 772 case CSSSelector::PseudoFirstOfType: |
773 case CSSSelector::PseudoLastOfType: | 773 case CSSSelector::PseudoLastOfType: |
774 case CSSSelector::PseudoOnlyOfType: | 774 case CSSSelector::PseudoOnlyOfType: |
775 case CSSSelector::PseudoHost: | 775 case CSSSelector::PseudoHost: |
776 case CSSSelector::PseudoAncestor: | 776 case CSSSelector::PseudoHostContext: |
777 return true; | 777 return true; |
778 default: | 778 default: |
779 return false; | 779 return false; |
780 } | 780 } |
781 } | 781 } |
782 | 782 |
783 bool CSSSelector::isCompound() const | 783 bool CSSSelector::isCompound() const |
784 { | 784 { |
785 if (!validateSubSelector(this)) | 785 if (!validateSubSelector(this)) |
786 return false; | 786 return false; |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 return false; | 883 return false; |
884 return (count - m_b) % m_a == 0; | 884 return (count - m_b) % m_a == 0; |
885 } else { | 885 } else { |
886 if (count > m_b) | 886 if (count > m_b) |
887 return false; | 887 return false; |
888 return (m_b - count) % (-m_a) == 0; | 888 return (m_b - count) % (-m_a) == 0; |
889 } | 889 } |
890 } | 890 } |
891 | 891 |
892 } // namespace WebCore | 892 } // namespace WebCore |
OLD | NEW |