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 media_feature_; | 29 String media_feature_; |
30 Vector<CSSParserToken, 4> value_list_; | 30 Vector<CSSParserToken, 4> value_list_; |
31 bool media_type_set_; | 31 bool media_type_set_; |
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 (restrictor_ != MediaQuery::kNone || media_type_set_ || | 42 return (restrictor_ != MediaQuery::kNone || media_type_set_ || |
43 expressions_.size() > 0); | 43 expressions_.size() > 0); |
44 } | 44 } |
45 inline MediaQuery::RestrictorType Restrictor() { return restrictor_; } | 45 inline MediaQuery::RestrictorType Restrictor() { return restrictor_; } |
46 | 46 |
47 inline void SetRestrictor(MediaQuery::RestrictorType restrictor) { | 47 inline void SetRestrictor(MediaQuery::RestrictorType restrictor) { |
48 restrictor_ = restrictor; | 48 restrictor_ = restrictor; |
49 } | 49 } |
50 | 50 |
51 inline void SetMediaFeature(const String& str) { media_feature_ = str; } | 51 inline void SetMediaFeature(const String& str) { media_feature_ = 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 kMediaQuerySetParser, | 65 kMediaQuerySetParser, |
66 kMediaConditionParser, | 66 kMediaConditionParser, |
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 state_; | 95 State state_; |
96 ParserType parser_type_; | 96 ParserType parser_type_; |
97 MediaQueryData media_query_data_; | 97 MediaQueryData media_query_data_; |
98 Member<MediaQuerySet> query_set_; | 98 RefPtr<MediaQuerySet> query_set_; |
99 MediaQueryBlockWatcher block_watcher_; | 99 MediaQueryBlockWatcher block_watcher_; |
100 | 100 |
101 const static State kReadRestrictor; | 101 const static State kReadRestrictor; |
102 const static State kReadMediaNot; | 102 const static State kReadMediaNot; |
103 const static State kReadMediaType; | 103 const static State kReadMediaType; |
104 const static State kReadAnd; | 104 const static State kReadAnd; |
105 const static State kReadFeatureStart; | 105 const static State kReadFeatureStart; |
106 const static State kReadFeature; | 106 const static State kReadFeature; |
107 const static State kReadFeatureColon; | 107 const static State kReadFeatureColon; |
108 const static State kReadFeatureValue; | 108 const static State kReadFeatureValue; |
109 const static State kReadFeatureEnd; | 109 const static State kReadFeatureEnd; |
110 const static State kSkipUntilComma; | 110 const static State kSkipUntilComma; |
111 const static State kSkipUntilBlockEnd; | 111 const static State kSkipUntilBlockEnd; |
112 const static State kDone; | 112 const static State kDone; |
113 }; | 113 }; |
114 | 114 |
115 } // namespace blink | 115 } // namespace blink |
116 | 116 |
117 #endif // MediaQueryParser_h | 117 #endif // MediaQueryParser_h |
OLD | NEW |