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 MediaQueryToken_h 6 #define MediaQueryToken_h 7 8 #include "core/css/CSSPrimitiveValue.h" 9 #include "wtf/text/WTFString.h" 10 11 namespace blink { 12 13 enum MediaQueryTokenType { 14 IdentToken = 0, 15 FunctionToken, 16 DelimiterToken, 17 NumberToken, 18 PercentageToken, 19 DimensionToken, 20 WhitespaceToken, 21 ColonToken, 22 SemicolonToken, 23 CommaToken, 24 LeftParenthesisToken, 25 RightParenthesisToken, 26 LeftBracketToken, 27 RightBracketToken, 28 LeftBraceToken, 29 RightBraceToken, 30 StringToken, 31 BadStringToken, 32 EOFToken, 33 CommentToken, 34 }; 35 36 enum NumericValueType { 37 IntegerValueType, 38 NumberValueType, 39 }; 40 41 class MediaQueryToken { 42 public: 43 enum BlockType { 44 NotBlock, 45 BlockStart, 46 BlockEnd, 47 }; 48 49 MediaQueryToken(MediaQueryTokenType, BlockType = NotBlock); 50 MediaQueryToken(MediaQueryTokenType, String value, BlockType = NotBlock); 51 52 MediaQueryToken(MediaQueryTokenType, UChar); // for DelimiterToken 53 MediaQueryToken(MediaQueryTokenType, double, NumericValueType); // for NumberToken 54 55 // Converts NumberToken to DimensionToken. 56 void convertToDimensionWithUnit(String); 57 58 // Converts NumberToken to PercentageToken. 59 void convertToPercentage(); 60 61 MediaQueryTokenType type() const { return m_type; } 62 String value() const { return m_value; } 63 String textForUnitTests() const; 64 65 UChar delimiter() const; 66 NumericValueType numericValueType() const; 67 double numericValue() const; 68 BlockType blockType() const { return m_blockType; } 69 CSSPrimitiveValue::UnitType unitType() const { return m_unit; } 70 71 private: 72 MediaQueryTokenType m_type; 73 String m_value; 74 75 UChar m_delimiter; // Could be rolled into m_value? 76 77 NumericValueType m_numericValueType; 78 double m_numericValue; 79 CSSPrimitiveValue::UnitType m_unit; 80 81 BlockType m_blockType; 82 }; 83 84 typedef Vector<MediaQueryToken>::iterator MediaQueryTokenIterator; 85 86 } // namespace 87 88 #endif // MediaQueryToken_h 89