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