Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / parser / CSSParserToken.h
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 CSSParserToken_h
6 #define CSSParserToken_h
7
8 #include "core/css/CSSPrimitiveValue.h"
9 #include "wtf/text/WTFString.h"
10
11 namespace blink {
12
13 enum CSSParserTokenType {
14     IdentToken = 0,
15     FunctionToken,
16     HashToken,
17     UrlToken,
18     BadUrlToken,
19     DelimiterToken,
20     NumberToken,
21     PercentageToken,
22     DimensionToken,
23     UnicodeRangeToken,
24     WhitespaceToken,
25     ColonToken,
26     SemicolonToken,
27     CommaToken,
28     LeftParenthesisToken,
29     RightParenthesisToken,
30     LeftBracketToken,
31     RightBracketToken,
32     LeftBraceToken,
33     RightBraceToken,
34     StringToken,
35     BadStringToken,
36     EOFToken,
37     CommentToken,
38 };
39
40 enum NumericValueType {
41     IntegerValueType,
42     NumberValueType,
43 };
44
45 enum HashTokenType {
46     HashTokenId,
47     HashTokenUnrestricted,
48 };
49
50 class CSSParserToken {
51 public:
52     enum BlockType {
53         NotBlock,
54         BlockStart,
55         BlockEnd,
56     };
57
58     CSSParserToken(CSSParserTokenType, BlockType = NotBlock);
59     CSSParserToken(CSSParserTokenType, String value, BlockType = NotBlock);
60
61     CSSParserToken(CSSParserTokenType, UChar); // for DelimiterToken
62     CSSParserToken(CSSParserTokenType, double, NumericValueType); // for NumberToken
63     CSSParserToken(CSSParserTokenType, UChar32, UChar32); // for UnicodeRangeToken
64
65     CSSParserToken(HashTokenType, String);
66
67     // Converts NumberToken to DimensionToken.
68     void convertToDimensionWithUnit(String);
69
70     // Converts NumberToken to PercentageToken.
71     void convertToPercentage();
72
73     CSSParserTokenType type() const { return m_type; }
74     String value() const { return m_value; }
75
76     UChar delimiter() const;
77     NumericValueType numericValueType() const;
78     double numericValue() const;
79     HashTokenType hashTokenType() const { ASSERT(m_type == HashToken); return m_hashTokenType; }
80     BlockType blockType() const { return m_blockType; }
81     CSSPrimitiveValue::UnitType unitType() const { return m_unit; }
82     UChar32 unicodeRangeStart() const { ASSERT(m_type == UnicodeRangeToken); return m_unicodeRangeStart; }
83     UChar32 unicodeRangeEnd() const { ASSERT(m_type == UnicodeRangeToken); return m_unicodeRangeEnd; }
84
85 private:
86     CSSParserTokenType m_type;
87     String m_value;
88
89     // This could be a union to save space
90     UChar m_delimiter;
91     HashTokenType m_hashTokenType;
92     NumericValueType m_numericValueType;
93     double m_numericValue;
94     CSSPrimitiveValue::UnitType m_unit;
95     UChar32 m_unicodeRangeStart;
96     UChar32 m_unicodeRangeEnd;
97
98     BlockType m_blockType;
99 };
100
101 typedef Vector<CSSParserToken>::iterator CSSParserTokenIterator;
102
103 } // namespace
104
105 #endif // MediaQueryToken_h