| 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 72             End, // css3: E[foo$="bar"] | 72             End, // css3: E[foo$="bar"] | 
| 73             PagePseudoClass | 73             PagePseudoClass | 
| 74         }; | 74         }; | 
| 75 | 75 | 
| 76         enum Relation { | 76         enum Relation { | 
| 77             Descendant = 0, | 77             Descendant = 0, | 
| 78             Child, | 78             Child, | 
| 79             DirectAdjacent, | 79             DirectAdjacent, | 
| 80             IndirectAdjacent, | 80             IndirectAdjacent, | 
| 81             SubSelector, | 81             SubSelector, | 
| 82             ShadowPseudo, | 82             ShadowPseudo | 
| 83             ShadowDistributed |  | 
| 84         }; | 83         }; | 
| 85 | 84 | 
| 86         enum PseudoType { | 85         enum PseudoType { | 
| 87             PseudoNotParsed = 0, | 86             PseudoNotParsed = 0, | 
| 88             PseudoUnknown, | 87             PseudoUnknown, | 
| 89             PseudoEmpty, | 88             PseudoEmpty, | 
| 90             PseudoFirstChild, | 89             PseudoFirstChild, | 
| 91             PseudoFirstOfType, | 90             PseudoFirstOfType, | 
| 92             PseudoLastChild, | 91             PseudoLastChild, | 
| 93             PseudoLastOfType, | 92             PseudoLastOfType, | 
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 213 | 212 | 
| 214         bool parseNth() const; | 213         bool parseNth() const; | 
| 215         bool matchNth(int count) const; | 214         bool matchNth(int count) const; | 
| 216 | 215 | 
| 217         bool matchesPseudoElement() const; | 216         bool matchesPseudoElement() const; | 
| 218         bool isUnknownPseudoElement() const; | 217         bool isUnknownPseudoElement() const; | 
| 219         bool isCustomPseudoElement() const; | 218         bool isCustomPseudoElement() const; | 
| 220         bool isSiblingSelector() const; | 219         bool isSiblingSelector() const; | 
| 221         bool isAttributeSelector() const; | 220         bool isAttributeSelector() const; | 
| 222         bool isDistributedPseudoElement() const; | 221         bool isDistributedPseudoElement() const; | 
| 223         bool isShadowDistributed() const; |  | 
| 224 | 222 | 
| 225         Relation relation() const { return static_cast<Relation>(m_relation); } | 223         Relation relation() const { return static_cast<Relation>(m_relation); } | 
| 226 | 224 | 
| 227         bool isLastInSelectorList() const { return m_isLastInSelectorList; } | 225         bool isLastInSelectorList() const { return m_isLastInSelectorList; } | 
| 228         void setLastInSelectorList() { m_isLastInSelectorList = true; } | 226         void setLastInSelectorList() { m_isLastInSelectorList = true; } | 
| 229         bool isLastInTagHistory() const { return m_isLastInTagHistory; } | 227         bool isLastInTagHistory() const { return m_isLastInTagHistory; } | 
| 230         void setNotLastInTagHistory() { m_isLastInTagHistory = false; } | 228         void setNotLastInTagHistory() { m_isLastInTagHistory = false; } | 
| 231 | 229 | 
| 232         bool isSimple() const; | 230         bool isSimple() const; | 
| 233 | 231 | 
| 234         bool isForPage() const { return m_isForPage; } | 232         bool isForPage() const { return m_isForPage; } | 
| 235         void setForPage() { m_isForPage = true; } | 233         void setForPage() { m_isForPage = true; } | 
| 236 | 234 | 
|  | 235         bool relationIsForShadowDistributed() const { return m_relationIsForShad
     owDistributed; } | 
|  | 236         void setRelationIsForShadowDistributed() { m_relationIsForShadowDistribu
     ted = true; } | 
|  | 237 | 
| 237         unsigned m_relation           : 3; // enum Relation | 238         unsigned m_relation           : 3; // enum Relation | 
| 238         mutable unsigned m_match      : 4; // enum Match | 239         mutable unsigned m_match      : 4; // enum Match | 
| 239         mutable unsigned m_pseudoType : 8; // PseudoType | 240         mutable unsigned m_pseudoType : 8; // PseudoType | 
| 240 | 241 | 
| 241     private: | 242     private: | 
| 242         mutable unsigned m_parsedNth      : 1; // Used for :nth-* | 243         mutable unsigned m_parsedNth      : 1; // Used for :nth-* | 
| 243         unsigned m_isLastInSelectorList   : 1; | 244         unsigned m_isLastInSelectorList   : 1; | 
| 244         unsigned m_isLastInTagHistory     : 1; | 245         unsigned m_isLastInTagHistory     : 1; | 
| 245         unsigned m_hasRareData            : 1; | 246         unsigned m_hasRareData            : 1; | 
| 246         unsigned m_isForPage              : 1; | 247         unsigned m_isForPage              : 1; | 
| 247         unsigned m_tagIsForNamespaceRule  : 1; | 248         unsigned m_tagIsForNamespaceRule  : 1; | 
|  | 249         unsigned m_relationIsForShadowDistributed  : 1; | 
| 248 | 250 | 
| 249         unsigned specificityForOneSelector() const; | 251         unsigned specificityForOneSelector() const; | 
| 250         unsigned specificityForPage() const; | 252         unsigned specificityForPage() const; | 
| 251         void extractPseudoType() const; | 253         void extractPseudoType() const; | 
| 252 | 254 | 
| 253         // Hide. | 255         // Hide. | 
| 254         CSSSelector& operator=(const CSSSelector&); | 256         CSSSelector& operator=(const CSSSelector&); | 
| 255 | 257 | 
| 256         struct RareData : public RefCounted<RareData> { | 258         struct RareData : public RefCounted<RareData> { | 
| 257             static PassRefPtr<RareData> create(PassRefPtr<AtomicStringImpl> valu
     e) { return adoptRef(new RareData(value)); } | 259             static PassRefPtr<RareData> create(PassRefPtr<AtomicStringImpl> valu
     e) { return adoptRef(new RareData(value)); } | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 331         || m_match == CSSSelector::Contain | 333         || m_match == CSSSelector::Contain | 
| 332         || m_match == CSSSelector::Begin | 334         || m_match == CSSSelector::Begin | 
| 333         || m_match == CSSSelector::End; | 335         || m_match == CSSSelector::End; | 
| 334 } | 336 } | 
| 335 | 337 | 
| 336 inline bool CSSSelector::isDistributedPseudoElement() const | 338 inline bool CSSSelector::isDistributedPseudoElement() const | 
| 337 { | 339 { | 
| 338     return m_match == PseudoElement && pseudoType() == PseudoDistributed; | 340     return m_match == PseudoElement && pseudoType() == PseudoDistributed; | 
| 339 } | 341 } | 
| 340 | 342 | 
| 341 inline bool CSSSelector::isShadowDistributed() const |  | 
| 342 { |  | 
| 343     return m_relation == CSSSelector::ShadowDistributed; |  | 
| 344 } |  | 
| 345 |  | 
| 346 inline void CSSSelector::setValue(const AtomicString& value) | 343 inline void CSSSelector::setValue(const AtomicString& value) | 
| 347 { | 344 { | 
| 348     ASSERT(m_match != Tag); | 345     ASSERT(m_match != Tag); | 
| 349     ASSERT(m_pseudoType == PseudoNotParsed); | 346     ASSERT(m_pseudoType == PseudoNotParsed); | 
| 350     // Need to do ref counting manually for the union. | 347     // Need to do ref counting manually for the union. | 
| 351     if (m_hasRareData) { | 348     if (m_hasRareData) { | 
| 352         if (m_data.m_rareData->m_value) | 349         if (m_data.m_rareData->m_value) | 
| 353             m_data.m_rareData->m_value->deref(); | 350             m_data.m_rareData->m_value->deref(); | 
| 354         m_data.m_rareData->m_value = value.impl(); | 351         m_data.m_rareData->m_value = value.impl(); | 
| 355         m_data.m_rareData->m_value->ref(); | 352         m_data.m_rareData->m_value->ref(); | 
| 356         return; | 353         return; | 
| 357     } | 354     } | 
| 358     if (m_data.m_value) | 355     if (m_data.m_value) | 
| 359         m_data.m_value->deref(); | 356         m_data.m_value->deref(); | 
| 360     m_data.m_value = value.impl(); | 357     m_data.m_value = value.impl(); | 
| 361     m_data.m_value->ref(); | 358     m_data.m_value->ref(); | 
| 362 } | 359 } | 
| 363 | 360 | 
| 364 inline CSSSelector::CSSSelector() | 361 inline CSSSelector::CSSSelector() | 
| 365     : m_relation(Descendant) | 362     : m_relation(Descendant) | 
| 366     , m_match(Unknown) | 363     , m_match(Unknown) | 
| 367     , m_pseudoType(PseudoNotParsed) | 364     , m_pseudoType(PseudoNotParsed) | 
| 368     , m_parsedNth(false) | 365     , m_parsedNth(false) | 
| 369     , m_isLastInSelectorList(false) | 366     , m_isLastInSelectorList(false) | 
| 370     , m_isLastInTagHistory(true) | 367     , m_isLastInTagHistory(true) | 
| 371     , m_hasRareData(false) | 368     , m_hasRareData(false) | 
| 372     , m_isForPage(false) | 369     , m_isForPage(false) | 
| 373     , m_tagIsForNamespaceRule(false) | 370     , m_tagIsForNamespaceRule(false) | 
|  | 371     , m_relationIsForShadowDistributed(false) | 
| 374 { | 372 { | 
| 375 } | 373 } | 
| 376 | 374 | 
| 377 inline CSSSelector::CSSSelector(const QualifiedName& tagQName, bool tagIsForName
     spaceRule) | 375 inline CSSSelector::CSSSelector(const QualifiedName& tagQName, bool tagIsForName
     spaceRule) | 
| 378     : m_relation(Descendant) | 376     : m_relation(Descendant) | 
| 379     , m_match(Tag) | 377     , m_match(Tag) | 
| 380     , m_pseudoType(PseudoNotParsed) | 378     , m_pseudoType(PseudoNotParsed) | 
| 381     , m_parsedNth(false) | 379     , m_parsedNth(false) | 
| 382     , m_isLastInSelectorList(false) | 380     , m_isLastInSelectorList(false) | 
| 383     , m_isLastInTagHistory(true) | 381     , m_isLastInTagHistory(true) | 
| 384     , m_hasRareData(false) | 382     , m_hasRareData(false) | 
| 385     , m_isForPage(false) | 383     , m_isForPage(false) | 
| 386     , m_tagIsForNamespaceRule(tagIsForNamespaceRule) | 384     , m_tagIsForNamespaceRule(tagIsForNamespaceRule) | 
|  | 385     , m_relationIsForShadowDistributed(false) | 
| 387 { | 386 { | 
| 388     m_data.m_tagQName = tagQName.impl(); | 387     m_data.m_tagQName = tagQName.impl(); | 
| 389     m_data.m_tagQName->ref(); | 388     m_data.m_tagQName->ref(); | 
| 390 } | 389 } | 
| 391 | 390 | 
| 392 inline CSSSelector::CSSSelector(const CSSSelector& o) | 391 inline CSSSelector::CSSSelector(const CSSSelector& o) | 
| 393     : m_relation(o.m_relation) | 392     : m_relation(o.m_relation) | 
| 394     , m_match(o.m_match) | 393     , m_match(o.m_match) | 
| 395     , m_pseudoType(o.m_pseudoType) | 394     , m_pseudoType(o.m_pseudoType) | 
| 396     , m_parsedNth(o.m_parsedNth) | 395     , m_parsedNth(o.m_parsedNth) | 
| 397     , m_isLastInSelectorList(o.m_isLastInSelectorList) | 396     , m_isLastInSelectorList(o.m_isLastInSelectorList) | 
| 398     , m_isLastInTagHistory(o.m_isLastInTagHistory) | 397     , m_isLastInTagHistory(o.m_isLastInTagHistory) | 
| 399     , m_hasRareData(o.m_hasRareData) | 398     , m_hasRareData(o.m_hasRareData) | 
| 400     , m_isForPage(o.m_isForPage) | 399     , m_isForPage(o.m_isForPage) | 
| 401     , m_tagIsForNamespaceRule(o.m_tagIsForNamespaceRule) | 400     , m_tagIsForNamespaceRule(o.m_tagIsForNamespaceRule) | 
|  | 401     , m_relationIsForShadowDistributed(o.m_relationIsForShadowDistributed) | 
| 402 { | 402 { | 
| 403     if (o.m_match == Tag) { | 403     if (o.m_match == Tag) { | 
| 404         m_data.m_tagQName = o.m_data.m_tagQName; | 404         m_data.m_tagQName = o.m_data.m_tagQName; | 
| 405         m_data.m_tagQName->ref(); | 405         m_data.m_tagQName->ref(); | 
| 406     } else if (o.m_hasRareData) { | 406     } else if (o.m_hasRareData) { | 
| 407         m_data.m_rareData = o.m_data.m_rareData; | 407         m_data.m_rareData = o.m_data.m_rareData; | 
| 408         m_data.m_rareData->ref(); | 408         m_data.m_rareData->ref(); | 
| 409     } else if (o.m_data.m_value) { | 409     } else if (o.m_data.m_value) { | 
| 410         m_data.m_value = o.m_data.m_value; | 410         m_data.m_value = o.m_data.m_value; | 
| 411         m_data.m_value->ref(); | 411         m_data.m_value->ref(); | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 433     ASSERT(m_match != Tag); | 433     ASSERT(m_match != Tag); | 
| 434     // AtomicString is really just an AtomicStringImpl* so the cast below is saf
     e. | 434     // AtomicString is really just an AtomicStringImpl* so the cast below is saf
     e. | 
| 435     // FIXME: Perhaps call sites could be changed to accept AtomicStringImpl? | 435     // FIXME: Perhaps call sites could be changed to accept AtomicStringImpl? | 
| 436     return *reinterpret_cast<const AtomicString*>(m_hasRareData ? &m_data.m_rare
     Data->m_value : &m_data.m_value); | 436     return *reinterpret_cast<const AtomicString*>(m_hasRareData ? &m_data.m_rare
     Data->m_value : &m_data.m_value); | 
| 437 } | 437 } | 
| 438 | 438 | 
| 439 | 439 | 
| 440 } // namespace WebCore | 440 } // namespace WebCore | 
| 441 | 441 | 
| 442 #endif // CSSSelector_h | 442 #endif // CSSSelector_h | 
| OLD | NEW | 
|---|