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 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights
reserved. | 4 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights
reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 // http://www.w3.org/TR/css3-selectors/#specificity | 103 // http://www.w3.org/TR/css3-selectors/#specificity |
104 // We use 256 as the base of the specificity number system. | 104 // We use 256 as the base of the specificity number system. |
105 unsigned specificity() const; | 105 unsigned specificity() const; |
106 | 106 |
107 /* how the attribute value has to match.... Default is Exact */ | 107 /* how the attribute value has to match.... Default is Exact */ |
108 enum Match { | 108 enum Match { |
109 Unknown = 0, | 109 Unknown = 0, |
110 Tag, // Example: div | 110 Tag, // Example: div |
111 Id, // Example: #id | 111 Id, // Example: #id |
112 Class, // example: .class | 112 Class, // example: .class |
| 113 PseudoClass, // Example: :nth-child(2) |
| 114 PseudoElement, // Example: ::first-line |
| 115 PagePseudoClass, // ?? |
113 Exact, // Example: E[foo="bar"] | 116 Exact, // Example: E[foo="bar"] |
114 Set, // Example: E[foo] | 117 Set, // Example: E[foo] |
| 118 Hyphen, // Example: E[foo|="bar"] |
115 List, // Example: E[foo~="bar"] | 119 List, // Example: E[foo~="bar"] |
116 Hyphen, // Example: E[foo|="bar"] | |
117 PseudoClass, // Example: :nth-child(2) | |
118 PseudoElement, // Example: ::first-line | |
119 Contain, // css3: E[foo*="bar"] | 120 Contain, // css3: E[foo*="bar"] |
120 Begin, // css3: E[foo^="bar"] | 121 Begin, // css3: E[foo^="bar"] |
121 End, // css3: E[foo$="bar"] | 122 End, // css3: E[foo$="bar"] |
122 PagePseudoClass // ?? | 123 FirstAttributeSelectorMatch = Exact, |
123 }; | 124 }; |
124 | 125 |
125 enum Relation { | 126 enum Relation { |
126 Descendant = 0, // "Space" combinator | 127 Descendant = 0, // "Space" combinator |
127 Child, // > combinator | 128 Child, // > combinator |
128 DirectAdjacent, // + combinator | 129 DirectAdjacent, // + combinator |
129 IndirectAdjacent, // ~ combinator | 130 IndirectAdjacent, // ~ combinator |
130 SubSelector, // "No space" combinator | 131 SubSelector, // "No space" combinator |
131 ShadowPseudo, // Special case of shadow DOM pseudo elements / shadow
pseudo element | 132 ShadowPseudo, // Special case of shadow DOM pseudo elements / shadow
pseudo element |
132 ShadowDeep // /shadow-deep/ combinator | 133 ShadowDeep // /shadow-deep/ combinator |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 || type == PseudoOnlyChild | 396 || type == PseudoOnlyChild |
396 || type == PseudoOnlyOfType | 397 || type == PseudoOnlyOfType |
397 || type == PseudoNthChild | 398 || type == PseudoNthChild |
398 || type == PseudoNthOfType | 399 || type == PseudoNthOfType |
399 || type == PseudoNthLastChild | 400 || type == PseudoNthLastChild |
400 || type == PseudoNthLastOfType; | 401 || type == PseudoNthLastOfType; |
401 } | 402 } |
402 | 403 |
403 inline bool CSSSelector::isAttributeSelector() const | 404 inline bool CSSSelector::isAttributeSelector() const |
404 { | 405 { |
405 return m_match == CSSSelector::Exact | 406 return m_match >= FirstAttributeSelectorMatch; |
406 || m_match == CSSSelector::Set | |
407 || m_match == CSSSelector::List | |
408 || m_match == CSSSelector::Hyphen | |
409 || m_match == CSSSelector::Contain | |
410 || m_match == CSSSelector::Begin | |
411 || m_match == CSSSelector::End; | |
412 } | 407 } |
413 | 408 |
414 inline bool CSSSelector::isContentPseudoElement() const | 409 inline bool CSSSelector::isContentPseudoElement() const |
415 { | 410 { |
416 return m_match == PseudoElement && pseudoType() == PseudoContent; | 411 return m_match == PseudoElement && pseudoType() == PseudoContent; |
417 } | 412 } |
418 | 413 |
419 inline bool CSSSelector::isShadowPseudoElement() const | 414 inline bool CSSSelector::isShadowPseudoElement() const |
420 { | 415 { |
421 return m_match == PseudoElement && pseudoType() == PseudoShadow; | 416 return m_match == PseudoElement && pseudoType() == PseudoShadow; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 if (m_hasRareData) | 507 if (m_hasRareData) |
513 return m_data.m_rareData->m_value; | 508 return m_data.m_rareData->m_value; |
514 // AtomicString is really just a StringImpl* so the cast below is safe. | 509 // AtomicString is really just a StringImpl* so the cast below is safe. |
515 // FIXME: Perhaps call sites could be changed to accept StringImpl? | 510 // FIXME: Perhaps call sites could be changed to accept StringImpl? |
516 return *reinterpret_cast<const AtomicString*>(&m_data.m_value); | 511 return *reinterpret_cast<const AtomicString*>(&m_data.m_value); |
517 } | 512 } |
518 | 513 |
519 } // namespace WebCore | 514 } // namespace WebCore |
520 | 515 |
521 #endif // CSSSelector_h | 516 #endif // CSSSelector_h |
OLD | NEW |