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 MediaQueryParser_h | 5 #ifndef MediaQueryParser_h |
6 #define MediaQueryParser_h | 6 #define MediaQueryParser_h |
7 | 7 |
8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
9 #include "core/css/MediaList.h" | 9 #include "core/css/MediaList.h" |
10 #include "core/css/MediaQuery.h" | 10 #include "core/css/MediaQuery.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 String m_mediaFeature; | 29 String m_mediaFeature; |
30 Vector<CSSParserToken, 4> m_valueList; | 30 Vector<CSSParserToken, 4> m_valueList; |
31 bool m_mediaTypeSet; | 31 bool m_mediaTypeSet; |
32 | 32 |
33 public: | 33 public: |
34 MediaQueryData(); | 34 MediaQueryData(); |
35 void clear(); | 35 void clear(); |
36 bool addExpression(); | 36 bool addExpression(); |
37 bool tryAddParserToken(CSSParserTokenType, const CSSParserToken&); | 37 bool tryAddParserToken(CSSParserTokenType, const CSSParserToken&); |
38 void setMediaType(const String&); | 38 void setMediaType(const String&); |
39 MediaQuery* takeMediaQuery(); | 39 std::unique_ptr<MediaQuery> takeMediaQuery(); |
40 | 40 |
41 inline bool currentMediaQueryChanged() const { | 41 inline bool currentMediaQueryChanged() const { |
42 return (m_restrictor != MediaQuery::None || m_mediaTypeSet || | 42 return (m_restrictor != MediaQuery::None || m_mediaTypeSet || |
43 m_expressions.size() > 0); | 43 m_expressions.size() > 0); |
44 } | 44 } |
45 inline MediaQuery::RestrictorType restrictor() { return m_restrictor; } | 45 inline MediaQuery::RestrictorType restrictor() { return m_restrictor; } |
46 | 46 |
47 inline void setRestrictor(MediaQuery::RestrictorType restrictor) { | 47 inline void setRestrictor(MediaQuery::RestrictorType restrictor) { |
48 m_restrictor = restrictor; | 48 m_restrictor = restrictor; |
49 } | 49 } |
50 | 50 |
51 inline void setMediaFeature(const String& str) { m_mediaFeature = str; } | 51 inline void setMediaFeature(const String& str) { m_mediaFeature = str; } |
52 }; | 52 }; |
53 | 53 |
54 class CORE_EXPORT MediaQueryParser { | 54 class CORE_EXPORT MediaQueryParser { |
55 STACK_ALLOCATED(); | 55 STACK_ALLOCATED(); |
56 WTF_MAKE_NONCOPYABLE(MediaQueryParser); | 56 WTF_MAKE_NONCOPYABLE(MediaQueryParser); |
57 | 57 |
58 public: | 58 public: |
59 static MediaQuerySet* parseMediaQuerySet(const String&); | 59 static RefPtr<MediaQuerySet> parseMediaQuerySet(const String&); |
60 static MediaQuerySet* parseMediaQuerySet(CSSParserTokenRange); | 60 static RefPtr<MediaQuerySet> parseMediaQuerySet(CSSParserTokenRange); |
61 static MediaQuerySet* parseMediaCondition(CSSParserTokenRange); | 61 static RefPtr<MediaQuerySet> parseMediaCondition(CSSParserTokenRange); |
62 | 62 |
63 private: | 63 private: |
64 enum ParserType { | 64 enum ParserType { |
65 MediaQuerySetParser, | 65 MediaQuerySetParser, |
66 MediaConditionParser, | 66 MediaConditionParser, |
67 }; | 67 }; |
68 | 68 |
69 MediaQueryParser(ParserType); | 69 MediaQueryParser(ParserType); |
70 virtual ~MediaQueryParser(); | 70 virtual ~MediaQueryParser(); |
71 | 71 |
72 MediaQuerySet* parseImpl(CSSParserTokenRange); | 72 RefPtr<MediaQuerySet> parseImpl(CSSParserTokenRange); |
73 | 73 |
74 void processToken(const CSSParserToken&); | 74 void processToken(const CSSParserToken&); |
75 | 75 |
76 void readRestrictor(CSSParserTokenType, const CSSParserToken&); | 76 void readRestrictor(CSSParserTokenType, const CSSParserToken&); |
77 void readMediaNot(CSSParserTokenType, const CSSParserToken&); | 77 void readMediaNot(CSSParserTokenType, const CSSParserToken&); |
78 void readMediaType(CSSParserTokenType, const CSSParserToken&); | 78 void readMediaType(CSSParserTokenType, const CSSParserToken&); |
79 void readAnd(CSSParserTokenType, const CSSParserToken&); | 79 void readAnd(CSSParserTokenType, const CSSParserToken&); |
80 void readFeatureStart(CSSParserTokenType, const CSSParserToken&); | 80 void readFeatureStart(CSSParserTokenType, const CSSParserToken&); |
81 void readFeature(CSSParserTokenType, const CSSParserToken&); | 81 void readFeature(CSSParserTokenType, const CSSParserToken&); |
82 void readFeatureColon(CSSParserTokenType, const CSSParserToken&); | 82 void readFeatureColon(CSSParserTokenType, const CSSParserToken&); |
83 void readFeatureValue(CSSParserTokenType, const CSSParserToken&); | 83 void readFeatureValue(CSSParserTokenType, const CSSParserToken&); |
84 void readFeatureEnd(CSSParserTokenType, const CSSParserToken&); | 84 void readFeatureEnd(CSSParserTokenType, const CSSParserToken&); |
85 void skipUntilComma(CSSParserTokenType, const CSSParserToken&); | 85 void skipUntilComma(CSSParserTokenType, const CSSParserToken&); |
86 void skipUntilBlockEnd(CSSParserTokenType, const CSSParserToken&); | 86 void skipUntilBlockEnd(CSSParserTokenType, const CSSParserToken&); |
87 void done(CSSParserTokenType, const CSSParserToken&); | 87 void done(CSSParserTokenType, const CSSParserToken&); |
88 | 88 |
89 using State = void (MediaQueryParser::*)(CSSParserTokenType, | 89 using State = void (MediaQueryParser::*)(CSSParserTokenType, |
90 const CSSParserToken&); | 90 const CSSParserToken&); |
91 | 91 |
92 void setStateAndRestrict(State, MediaQuery::RestrictorType); | 92 void setStateAndRestrict(State, MediaQuery::RestrictorType); |
93 void handleBlocks(const CSSParserToken&); | 93 void handleBlocks(const CSSParserToken&); |
94 | 94 |
95 State m_state; | 95 State m_state; |
96 ParserType m_parserType; | 96 ParserType m_parserType; |
97 MediaQueryData m_mediaQueryData; | 97 MediaQueryData m_mediaQueryData; |
98 Member<MediaQuerySet> m_querySet; | 98 RefPtr<MediaQuerySet> m_querySet; |
99 MediaQueryBlockWatcher m_blockWatcher; | 99 MediaQueryBlockWatcher m_blockWatcher; |
100 | 100 |
101 const static State ReadRestrictor; | 101 const static State ReadRestrictor; |
102 const static State ReadMediaNot; | 102 const static State ReadMediaNot; |
103 const static State ReadMediaType; | 103 const static State ReadMediaType; |
104 const static State ReadAnd; | 104 const static State ReadAnd; |
105 const static State ReadFeatureStart; | 105 const static State ReadFeatureStart; |
106 const static State ReadFeature; | 106 const static State ReadFeature; |
107 const static State ReadFeatureColon; | 107 const static State ReadFeatureColon; |
108 const static State ReadFeatureValue; | 108 const static State ReadFeatureValue; |
109 const static State ReadFeatureEnd; | 109 const static State ReadFeatureEnd; |
110 const static State SkipUntilComma; | 110 const static State SkipUntilComma; |
111 const static State SkipUntilBlockEnd; | 111 const static State SkipUntilBlockEnd; |
112 const static State Done; | 112 const static State Done; |
113 }; | 113 }; |
114 | 114 |
115 } // namespace blink | 115 } // namespace blink |
116 | 116 |
117 #endif // MediaQueryParser_h | 117 #endif // MediaQueryParser_h |
OLD | NEW |