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.
5 #ifndef MediaQueryParser_h
6 #define MediaQueryParser_h
8 #include "core/css/MediaList.h"
9 #include "core/css/MediaQuery.h"
10 #include "core/css/MediaQueryExp.h"
11 #include "core/css/parser/CSSParserValues.h"
12 #include "core/css/parser/MediaQueryBlockWatcher.h"
13 #include "core/css/parser/MediaQueryToken.h"
14 #include "wtf/text/WTFString.h"
20 class MediaQueryData {
23 MediaQuery::Restrictor m_restrictor;
25 OwnPtrWillBeMember<ExpressionHeapVector> m_expressions;
26 String m_mediaFeature;
27 CSSParserValueList m_valueList;
34 void addParserValue(MediaQueryTokenType, const MediaQueryToken&);
35 void setMediaType(const String&);
36 PassOwnPtrWillBeRawPtr<MediaQuery> takeMediaQuery();
38 inline bool currentMediaQueryChanged() const
40 return (m_restrictor != MediaQuery::None || m_mediaTypeSet || m_expressions->size() > 0);
43 inline void setRestrictor(MediaQuery::Restrictor restrictor) { m_restrictor = restrictor; }
45 inline void setMediaFeature(const String& str) { m_mediaFeature = str; }
48 class MediaQueryParser {
51 static PassRefPtrWillBeRawPtr<MediaQuerySet> parseMediaQuerySet(const String&);
52 static PassRefPtrWillBeRawPtr<MediaQuerySet> parseMediaCondition(MediaQueryTokenIterator, MediaQueryTokenIterator endToken);
60 MediaQueryParser(ParserType);
61 virtual ~MediaQueryParser();
63 PassRefPtrWillBeRawPtr<MediaQuerySet> parseImpl(MediaQueryTokenIterator, MediaQueryTokenIterator endToken);
65 void processToken(const MediaQueryToken&);
67 void readRestrictor(MediaQueryTokenType, const MediaQueryToken&);
68 void readMediaType(MediaQueryTokenType, const MediaQueryToken&);
69 void readAnd(MediaQueryTokenType, const MediaQueryToken&);
70 void readFeatureStart(MediaQueryTokenType, const MediaQueryToken&);
71 void readFeature(MediaQueryTokenType, const MediaQueryToken&);
72 void readFeatureColon(MediaQueryTokenType, const MediaQueryToken&);
73 void readFeatureValue(MediaQueryTokenType, const MediaQueryToken&);
74 void readFeatureEnd(MediaQueryTokenType, const MediaQueryToken&);
75 void skipUntilComma(MediaQueryTokenType, const MediaQueryToken&);
76 void skipUntilBlockEnd(MediaQueryTokenType, const MediaQueryToken&);
77 void done(MediaQueryTokenType, const MediaQueryToken&);
79 typedef void (MediaQueryParser::*State)(MediaQueryTokenType, const MediaQueryToken&);
81 void setStateAndRestrict(State, MediaQuery::Restrictor);
82 void handleBlocks(const MediaQueryToken&);
85 ParserType m_parserType;
86 MediaQueryData m_mediaQueryData;
87 RefPtrWillBeMember<MediaQuerySet> m_querySet;
88 MediaQueryBlockWatcher m_blockWatcher;
90 const static State ReadRestrictor;
91 const static State ReadMediaType;
92 const static State ReadAnd;
93 const static State ReadFeatureStart;
94 const static State ReadFeature;
95 const static State ReadFeatureColon;
96 const static State ReadFeatureValue;
97 const static State ReadFeatureEnd;
98 const static State SkipUntilComma;
99 const static State SkipUntilBlockEnd;
100 const static State Done;
106 #endif // MediaQueryParser_h