OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CSSTokenizer_h | 5 #ifndef CSSTokenizer_h |
6 #define CSSTokenizer_h | 6 #define CSSTokenizer_h |
7 | 7 |
8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
9 #include "core/css/parser/CSSParserToken.h" | 9 #include "core/css/parser/CSSParserToken.h" |
10 #include "core/css/parser/CSSTokenizerInputStream.h" | 10 #include "core/css/parser/CSSTokenizerInputStream.h" |
11 #include "core/html/parser/InputStreamPreprocessor.h" | 11 #include "core/html/parser/InputStreamPreprocessor.h" |
12 #include "wtf/Allocator.h" | 12 #include "wtf/Allocator.h" |
13 #include "wtf/text/StringView.h" | 13 #include "wtf/text/StringView.h" |
14 #include "wtf/text/WTFString.h" | 14 #include "wtf/text/WTFString.h" |
15 | 15 |
16 #include <climits> | 16 #include <climits> |
17 | 17 |
18 namespace blink { | 18 namespace blink { |
19 | 19 |
20 class CSSTokenizerInputStream; | 20 class CSSTokenizerInputStream; |
21 class CSSParserObserverWrapper; | 21 class CSSParserObserver; |
22 class CSSParserTokenRange; | 22 class CSSParserTokenRange; |
23 | 23 |
24 class CORE_EXPORT CSSTokenizer { | 24 class CORE_EXPORT CSSTokenizer { |
25 WTF_MAKE_NONCOPYABLE(CSSTokenizer); | 25 WTF_MAKE_NONCOPYABLE(CSSTokenizer); |
26 DISALLOW_NEW(); | 26 DISALLOW_NEW(); |
27 | 27 |
28 public: | 28 public: |
29 CSSTokenizer(const String&); | 29 CSSTokenizer(const String&, size_t startOffset = 0); |
30 CSSTokenizer(const String&, CSSParserObserverWrapper&); // For the inspector | |
31 | 30 |
32 CSSParserTokenRange tokenRange(); | 31 CSSParserTokenRange tokenRange(); |
33 unsigned tokenCount(); | |
34 | 32 |
35 Vector<String> takeEscapedStrings() { return std::move(m_stringPool); } | 33 Vector<String> takeEscapedStrings() { return std::move(m_stringPool); } |
36 | 34 |
37 private: | 35 private: |
38 CSSParserToken nextToken(); | 36 CSSParserToken nextToken(); |
| 37 void tokenizeSingle(); |
39 | 38 |
40 UChar consume(); | 39 UChar consume(); |
41 void reconsume(UChar); | 40 void reconsume(UChar); |
42 | 41 |
43 CSSParserToken consumeNumericToken(); | 42 CSSParserToken consumeNumericToken(); |
44 CSSParserToken consumeIdentLikeToken(); | 43 CSSParserToken consumeIdentLikeToken(); |
45 CSSParserToken consumeNumber(); | 44 CSSParserToken consumeNumber(); |
46 CSSParserToken consumeStringTokenUntil(UChar); | 45 CSSParserToken consumeStringTokenUntil(UChar); |
47 CSSParserToken consumeUnicodeRange(); | 46 CSSParserToken consumeUnicodeRange(); |
48 CSSParserToken consumeUrlToken(); | 47 CSSParserToken consumeUrlToken(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 CSSParserToken letterU(UChar); | 92 CSSParserToken letterU(UChar); |
94 CSSParserToken nameStart(UChar); | 93 CSSParserToken nameStart(UChar); |
95 CSSParserToken stringStart(UChar); | 94 CSSParserToken stringStart(UChar); |
96 CSSParserToken endOfFile(UChar); | 95 CSSParserToken endOfFile(UChar); |
97 | 96 |
98 StringView registerString(const String&); | 97 StringView registerString(const String&); |
99 | 98 |
100 using CodePoint = CSSParserToken (CSSTokenizer::*)(UChar); | 99 using CodePoint = CSSParserToken (CSSTokenizer::*)(UChar); |
101 static const CodePoint codePoints[]; | 100 static const CodePoint codePoints[]; |
102 | 101 |
| 102 void skipToBlockEnd(); |
| 103 void skipComments(); |
| 104 void skipWhitespaceAndComments(); |
| 105 void yieldComments(CSSParserObserver&); |
| 106 |
| 107 bool skipIdentCharacters(UChar); |
| 108 void skipIdentCharacters(); |
| 109 |
103 CSSTokenizerInputStream m_input; | 110 CSSTokenizerInputStream m_input; |
104 Vector<CSSParserTokenType, 8> m_blockStack; | 111 Vector<CSSParserTokenType, 8> m_blockStack; |
105 | 112 |
106 Vector<CSSParserToken, 32> m_tokens; | 113 Vector<CSSParserToken, 32> m_tokens; |
107 // We only allocate strings when escapes are used. | 114 // We only allocate strings when escapes are used. |
108 Vector<String> m_stringPool; | 115 Vector<String> m_stringPool; |
| 116 |
| 117 bool m_finishedTokenizing = false; |
| 118 |
| 119 friend class CSSParserTokenStream; |
109 }; | 120 }; |
110 | 121 |
111 } // namespace blink | 122 } // namespace blink |
112 | 123 |
113 #endif // CSSTokenizer_h | 124 #endif // CSSTokenizer_h |
OLD | NEW |