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 11namespace blink { 12 13enum 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 36enum NumericValueType { 37 IntegerValueType, 38 NumberValueType, 39}; 40 41class MediaQueryToken { 42public: 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 71private: 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 84typedef Vector<MediaQueryToken>::iterator MediaQueryTokenIterator; 85 86} // namespace 87 88#endif // MediaQueryToken_h 89