| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CSSSelectorParser_h | 5 #ifndef CSSSelectorParser_h |
| 6 #define CSSSelectorParser_h | 6 #define CSSSelectorParser_h |
| 7 | 7 |
| 8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
| 9 #include "core/css/parser/CSSParserTokenRange.h" | 9 #include "core/css/parser/CSSParserTokenRange.h" |
| 10 #include "core/css/parser/CSSParserValues.h" | 10 #include "core/css/parser/CSSParserValues.h" |
| 11 | 11 |
| 12 namespace blink { | 12 namespace blink { |
| 13 | 13 |
| 14 class CSSSelectorList; | 14 class CSSSelectorList; |
| 15 class StyleSheetContents; | 15 class StyleSheetContents; |
| 16 | 16 |
| 17 // FIXME: We should consider building CSSSelectors directly instead of using | 17 // FIXME: We should consider building CSSSelectors directly instead of using |
| 18 // the intermediate CSSParserSelector. | 18 // the intermediate CSSParserSelector. |
| 19 class CORE_EXPORT CSSSelectorParser { | 19 class CORE_EXPORT CSSSelectorParser { |
| 20 STACK_ALLOCATED(); | 20 STACK_ALLOCATED(); |
| 21 public: | 21 public: |
| 22 static void parseSelector(CSSParserTokenRange, const CSSParserContext&, cons
t AtomicString& defaultNamespace, StyleSheetContents*, CSSSelectorList&); | 22 static void parseSelector(CSSParserTokenRange, const CSSParserContext&, Styl
eSheetContents*, CSSSelectorList&); |
| 23 | 23 |
| 24 static bool consumeANPlusB(CSSParserTokenRange&, std::pair<int, int>&); | 24 static bool consumeANPlusB(CSSParserTokenRange&, std::pair<int, int>&); |
| 25 | 25 |
| 26 private: | 26 private: |
| 27 CSSSelectorParser(const CSSParserContext&, const AtomicString& defaultNamesp
ace, StyleSheetContents*); | 27 CSSSelectorParser(const CSSParserContext&, StyleSheetContents*); |
| 28 | 28 |
| 29 // These will all consume trailing comments if successful | 29 // These will all consume trailing comments if successful |
| 30 | 30 |
| 31 void consumeComplexSelectorList(CSSParserTokenRange&, CSSSelectorList&); | 31 void consumeComplexSelectorList(CSSParserTokenRange&, CSSSelectorList&); |
| 32 void consumeCompoundSelectorList(CSSParserTokenRange&, CSSSelectorList&); | 32 void consumeCompoundSelectorList(CSSParserTokenRange&, CSSSelectorList&); |
| 33 | 33 |
| 34 PassOwnPtr<CSSParserSelector> consumeComplexSelector(CSSParserTokenRange&); | 34 PassOwnPtr<CSSParserSelector> consumeComplexSelector(CSSParserTokenRange&); |
| 35 PassOwnPtr<CSSParserSelector> consumeCompoundSelector(CSSParserTokenRange&); | 35 PassOwnPtr<CSSParserSelector> consumeCompoundSelector(CSSParserTokenRange&); |
| 36 // This doesn't include element names, since they're handled specially | 36 // This doesn't include element names, since they're handled specially |
| 37 PassOwnPtr<CSSParserSelector> consumeSimpleSelector(CSSParserTokenRange&); | 37 PassOwnPtr<CSSParserSelector> consumeSimpleSelector(CSSParserTokenRange&); |
| 38 | 38 |
| 39 bool consumeName(CSSParserTokenRange&, AtomicString& name, AtomicString& nam
espacePrefix, bool& hasNamespace); | 39 bool consumeName(CSSParserTokenRange&, AtomicString& name, AtomicString& nam
espacePrefix, bool& hasNamespace); |
| 40 | 40 |
| 41 // These will return nullptr when the selector is invalid | 41 // These will return nullptr when the selector is invalid |
| 42 PassOwnPtr<CSSParserSelector> consumeId(CSSParserTokenRange&); | 42 PassOwnPtr<CSSParserSelector> consumeId(CSSParserTokenRange&); |
| 43 PassOwnPtr<CSSParserSelector> consumeClass(CSSParserTokenRange&); | 43 PassOwnPtr<CSSParserSelector> consumeClass(CSSParserTokenRange&); |
| 44 PassOwnPtr<CSSParserSelector> consumePseudo(CSSParserTokenRange&); | 44 PassOwnPtr<CSSParserSelector> consumePseudo(CSSParserTokenRange&); |
| 45 PassOwnPtr<CSSParserSelector> consumeAttribute(CSSParserTokenRange&); | 45 PassOwnPtr<CSSParserSelector> consumeAttribute(CSSParserTokenRange&); |
| 46 | 46 |
| 47 CSSSelector::Relation consumeCombinator(CSSParserTokenRange&); | 47 CSSSelector::Relation consumeCombinator(CSSParserTokenRange&); |
| 48 CSSSelector::Match consumeAttributeMatch(CSSParserTokenRange&); | 48 CSSSelector::Match consumeAttributeMatch(CSSParserTokenRange&); |
| 49 CSSSelector::AttributeMatchType consumeAttributeFlags(CSSParserTokenRange&); | 49 CSSSelector::AttributeMatchType consumeAttributeFlags(CSSParserTokenRange&); |
| 50 | 50 |
| 51 const AtomicString& defaultNamespace() const; |
| 51 QualifiedName determineNameInNamespace(const AtomicString& prefix, const Ato
micString& localName); | 52 QualifiedName determineNameInNamespace(const AtomicString& prefix, const Ato
micString& localName); |
| 52 void prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const
AtomicString& elementName, CSSParserSelector*); | 53 void prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const
AtomicString& elementName, CSSParserSelector*); |
| 53 void rewriteSpecifiersWithElementNameForCustomPseudoElement(const QualifiedN
ame& tag, CSSParserSelector*, bool tagIsImplicit); | 54 void rewriteSpecifiersWithElementNameForCustomPseudoElement(const QualifiedN
ame& tag, CSSParserSelector*, bool tagIsImplicit); |
| 54 void rewriteSpecifiersWithElementNameForContentPseudoElement(const Qualified
Name& tag, CSSParserSelector*, bool tagIsImplicit); | 55 void rewriteSpecifiersWithElementNameForContentPseudoElement(const Qualified
Name& tag, CSSParserSelector*, bool tagIsImplicit); |
| 55 static PassOwnPtr<CSSParserSelector> addSimpleSelectorToCompound(PassOwnPtr<
CSSParserSelector> compoundSelector, PassOwnPtr<CSSParserSelector> simpleSelecto
r); | 56 static PassOwnPtr<CSSParserSelector> addSimpleSelectorToCompound(PassOwnPtr<
CSSParserSelector> compoundSelector, PassOwnPtr<CSSParserSelector> simpleSelecto
r); |
| 56 | 57 |
| 57 const CSSParserContext& m_context; | 58 const CSSParserContext& m_context; |
| 58 AtomicString m_defaultNamespace; | |
| 59 RawPtrWillBeMember<StyleSheetContents> m_styleSheet; // FIXME: Should be con
st | 59 RawPtrWillBeMember<StyleSheetContents> m_styleSheet; // FIXME: Should be con
st |
| 60 | 60 |
| 61 bool m_failedParsing; | 61 bool m_failedParsing; |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 } // namespace | 64 } // namespace |
| 65 | 65 |
| 66 #endif // CSSSelectorParser_h | 66 #endif // CSSSelectorParser_h |
| OLD | NEW |