Index: Source/core/css/parser/MediaQueryParser.h |
diff --git a/Source/core/css/parser/MediaQueryParser.h b/Source/core/css/parser/MediaQueryParser.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5e51e6f31a7b3205e7df4ddb40824d90aa0e0e29 |
--- /dev/null |
+++ b/Source/core/css/parser/MediaQueryParser.h |
@@ -0,0 +1,97 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef MediaQueryParser_h |
+#define MediaQueryParser_h |
+ |
+#include "core/css/CSSParserValues.h" |
+#include "core/css/MediaList.h" |
+#include "core/css/MediaQuery.h" |
+#include "core/css/MediaQueryExp.h" |
+#include "core/css/parser/MediaQueryToken.h" |
+#include "wtf/Vector.h" |
+#include "wtf/text/WTFString.h" |
+ |
+namespace WebCore { |
+ |
+class MediaQuerySet; |
+ |
+class MediaQueryData { |
+private: |
+ MediaQuery::Restrictor m_restrictor; |
+ String m_mediaType; |
+ OwnPtr<ExpressionHeapVector> m_expressions; |
+ String m_mediaFeature; |
+ CSSParserValueList m_valueList; |
+ bool m_mediaTypeSet; |
+ |
+public: |
+ MediaQueryData(); |
+ void resetCurrentQuery(); |
+ bool addExpression(); |
+ void addParserValue(MediaQueryTokenType, MediaQueryToken&); |
+ void setMediaType(const String&); |
+ PassOwnPtr<MediaQuery> takeMediaQueryAndClear(); |
+ |
+ inline bool currentMediaQueryChanged() const |
+ { |
+ return (m_restrictor != MediaQuery::None || m_mediaTypeSet || m_expressions->size() > 0); |
+ } |
+ |
+ inline void setRestrictor(MediaQuery::Restrictor restrictor) { m_restrictor = restrictor; } |
+ |
+ inline void setMediaFeature(const String& str) { m_mediaFeature = str; } |
+}; |
+ |
+class MediaQueryParser { |
+public: |
+ static PassRefPtrWillBeRawPtr<MediaQuerySet> parse(const String&); |
+ |
+private: |
+ MediaQueryParser(const String&); |
+ virtual ~MediaQueryParser() { }; |
+ |
+ PassRefPtrWillBeRawPtr<MediaQuerySet> parseImpl(); |
+ |
+ typedef Vector<MediaQueryToken>::iterator TokenIterator; |
+ |
+ void processToken(TokenIterator&); |
+ |
+ void readRestrictor(MediaQueryTokenType, TokenIterator&); |
+ void readMediaType(MediaQueryTokenType, TokenIterator&); |
+ void readAnd(MediaQueryTokenType, TokenIterator&); |
+ void readFeatureStart(MediaQueryTokenType, TokenIterator&); |
+ void readFeature(MediaQueryTokenType, TokenIterator&); |
+ void readFeatureColon(MediaQueryTokenType, TokenIterator&); |
+ void readFeatureValue(MediaQueryTokenType, TokenIterator&); |
+ void readFeatureEnd(MediaQueryTokenType, TokenIterator&); |
+ void skipUntilComma(MediaQueryTokenType, TokenIterator&); |
+ void skipUntilParenthesis(MediaQueryTokenType, TokenIterator&); |
+ void done(MediaQueryTokenType, TokenIterator&); |
+ |
+ typedef void (MediaQueryParser::*State)(MediaQueryTokenType, TokenIterator&); |
+ |
+ void setStateAndRestrict(State, MediaQuery::Restrictor); |
+ |
+ const State ReadRestrictor = &MediaQueryParser::readRestrictor; |
+ const State ReadMediaType = &MediaQueryParser::readMediaType; |
+ const State ReadAnd = &MediaQueryParser::readAnd; |
+ const State ReadFeatureStart = &MediaQueryParser::readFeatureStart; |
+ const State ReadFeature = &MediaQueryParser::readFeature; |
+ const State ReadFeatureColon = &MediaQueryParser::readFeatureColon; |
+ const State ReadFeatureValue = &MediaQueryParser::readFeatureValue; |
+ const State ReadFeatureEnd = &MediaQueryParser::readFeatureEnd; |
+ const State SkipUntilComma = &MediaQueryParser::skipUntilComma; |
+ const State SkipUntilParenthesis = &MediaQueryParser::skipUntilParenthesis; |
+ const State Done = &MediaQueryParser::done; |
+ |
+ State m_state; |
+ Vector<MediaQueryToken> m_tokens; |
+ MediaQueryData m_mediaQueryData; |
+ RefPtrWillBeMember<MediaQuerySet> m_querySet; |
+}; |
+ |
+} // namespace WebCore |
+ |
+#endif // MediaQueryParser_h |