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