OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef CSSSelectorParser_h |
| 6 #define CSSSelectorParser_h |
| 7 |
| 8 #include "core/css/parser/CSSParserTokenRange.h" |
| 9 #include "core/css/parser/CSSParserValues.h" |
| 10 |
| 11 namespace blink { |
| 12 |
| 13 class CSSSelectorList; |
| 14 class StyleSheetContents; |
| 15 |
| 16 // FIXME: We should consider building CSSSelectors directly instead of using |
| 17 // the intermediate CSSParserSelector. |
| 18 class CSSSelectorParser { |
| 19 public: |
| 20 static void parseSelector(CSSParserTokenRange, const CSSParserContext&, CSSS
electorList&); |
| 21 |
| 22 private: |
| 23 CSSSelectorParser(CSSParserTokenRange, const CSSParserContext&); |
| 24 |
| 25 // These will all consume trailing comments if successful |
| 26 |
| 27 void consumeComplexSelectorList(CSSSelectorList&); |
| 28 |
| 29 PassOwnPtr<CSSParserSelector> consumeComplexSelector(); |
| 30 PassOwnPtr<CSSParserSelector> consumeCompoundSelector(); |
| 31 // This doesn't include element names, since they're handled specially |
| 32 PassOwnPtr<CSSParserSelector> consumeSimpleSelector(); |
| 33 |
| 34 bool consumeName(AtomicString& name, AtomicString& namespacePrefix, bool& ha
sNamespace); |
| 35 |
| 36 // These will return nullptr when the selector is invalid |
| 37 PassOwnPtr<CSSParserSelector> consumeId(); |
| 38 PassOwnPtr<CSSParserSelector> consumeClass(); |
| 39 PassOwnPtr<CSSParserSelector> consumePseudo(); |
| 40 PassOwnPtr<CSSParserSelector> consumeAttribute(); |
| 41 |
| 42 CSSSelector::Relation consumeCombinator(); |
| 43 |
| 44 QualifiedName determineNameInNamespace(const AtomicString& prefix, const Ato
micString& localName); |
| 45 void rewriteSpecifiersWithNamespaceIfNeeded(CSSParserSelector*); |
| 46 void rewriteSpecifiersWithElementName(const AtomicString& namespacePrefix, c
onst AtomicString& elementName, CSSParserSelector*, bool tagIsForNamespaceRule =
false); |
| 47 void rewriteSpecifiersWithElementNameForCustomPseudoElement(const QualifiedN
ame& tag, const AtomicString& elementName, CSSParserSelector*, bool tagIsForName
spaceRule); |
| 48 void rewriteSpecifiersWithElementNameForContentPseudoElement(const Qualified
Name& tag, const AtomicString& elementName, CSSParserSelector*, bool tagIsForNam
espaceRule); |
| 49 PassOwnPtr<CSSParserSelector> rewriteSpecifiers(PassOwnPtr<CSSParserSelector
> specifiers, PassOwnPtr<CSSParserSelector> newSpecifier); |
| 50 |
| 51 CSSParserTokenRange m_tokenRange; |
| 52 |
| 53 const CSSParserContext& m_context; |
| 54 AtomicString m_defaultNamespace; |
| 55 StyleSheetContents* m_styleSheet; |
| 56 |
| 57 bool m_failedParsing; |
| 58 }; |
| 59 |
| 60 } // namespace |
| 61 |
| 62 #endif // CSSSelectorParser_h |
OLD | NEW |