1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file. 4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#ifndef MediaQueryToken_h 6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#define MediaQueryToken_h 7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 8d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/CSSPrimitiveValue.h" 9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/text/WTFString.h" 10d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 11c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)enum MediaQueryTokenType { 14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) IdentToken = 0, 15f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu FunctionToken, 16f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu DelimiterToken, 17f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu NumberToken, 18f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu PercentageToken, 19f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu DimensionToken, 20f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WhitespaceToken, 21f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ColonToken, 22f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu SemicolonToken, 23f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu CommaToken, 24f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu LeftParenthesisToken, 25f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RightParenthesisToken, 26f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu LeftBracketToken, 27f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RightBracketToken, 28f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu LeftBraceToken, 29f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RightBraceToken, 30f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu StringToken, 31f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu BadStringToken, 32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu EOFToken, 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu CommentToken, 34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}; 35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)enum NumericValueType { 37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) IntegerValueType, 38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) NumberValueType, 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}; 40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class MediaQueryToken { 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public: 436f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch enum BlockType { 446f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch NotBlock, 456f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch BlockStart, 466f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch BlockEnd, 476f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch }; 486f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 496f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch MediaQueryToken(MediaQueryTokenType, BlockType = NotBlock); 506f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch MediaQueryToken(MediaQueryTokenType, String value, BlockType = NotBlock); 51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MediaQueryToken(MediaQueryTokenType, UChar); // for DelimiterToken 53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MediaQueryToken(MediaQueryTokenType, double, NumericValueType); // for NumberToken 54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Converts NumberToken to DimensionToken. 56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void convertToDimensionWithUnit(String); 57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Converts NumberToken to PercentageToken. 59d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void convertToPercentage(); 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 61d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MediaQueryTokenType type() const { return m_type; } 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) String value() const { return m_value; } 6307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch String textForUnitTests() const; 64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 65f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu UChar delimiter() const; 66f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu NumericValueType numericValueType() const; 67f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu double numericValue() const; 686f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch BlockType blockType() const { return m_blockType; } 69d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSPrimitiveValue::UnitType unitType() const { return m_unit; } 70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private: 72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MediaQueryTokenType m_type; 73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) String m_value; 74d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) UChar m_delimiter; // Could be rolled into m_value? 76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) NumericValueType m_numericValueType; 78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) double m_numericValue; 79d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSPrimitiveValue::UnitType m_unit; 806f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 816f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch BlockType m_blockType; 82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}; 83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 84f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liutypedef Vector<MediaQueryToken>::iterator MediaQueryTokenIterator; 85f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 866f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} // namespace 87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif // MediaQueryToken_h 89