Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSParserToken.cpp

Issue 2024373002: Replace CSSParserString with StringView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Match arguments to equalStringView. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "core/css/parser/CSSParserToken.h" 5 #include "core/css/parser/CSSParserToken.h"
6 6
7 #include "core/css/CSSMarkup.h" 7 #include "core/css/CSSMarkup.h"
8 #include "core/css/CSSPrimitiveValueUnitTrie.h" 8 #include "core/css/CSSPrimitiveValueUnitTrie.h"
9 #include "core/css/parser/CSSPropertyParser.h" 9 #include "core/css/parser/CSSPropertyParser.h"
10 #include "wtf/HashMap.h" 10 #include "wtf/HashMap.h"
(...skipping 10 matching lines...) Expand all
21 21
22 // Just a helper used for Delimiter tokens. 22 // Just a helper used for Delimiter tokens.
23 CSSParserToken::CSSParserToken(CSSParserTokenType type, UChar c) 23 CSSParserToken::CSSParserToken(CSSParserTokenType type, UChar c)
24 : m_type(type) 24 : m_type(type)
25 , m_blockType(NotBlock) 25 , m_blockType(NotBlock)
26 , m_delimiter(c) 26 , m_delimiter(c)
27 { 27 {
28 ASSERT(m_type == DelimiterToken); 28 ASSERT(m_type == DelimiterToken);
29 } 29 }
30 30
31 CSSParserToken::CSSParserToken(CSSParserTokenType type, CSSParserString value, B lockType blockType) 31 CSSParserToken::CSSParserToken(CSSParserTokenType type, StringView value, BlockT ype blockType)
32 : m_type(type) 32 : m_type(type)
33 , m_blockType(blockType) 33 , m_blockType(blockType)
34 { 34 {
35 initValueFromCSSParserString(value); 35 initValueFromStringView(value);
36 m_id = -1; 36 m_id = -1;
37 } 37 }
38 38
39 CSSParserToken::CSSParserToken(CSSParserTokenType type, double numericValue, Num ericValueType numericValueType, NumericSign sign) 39 CSSParserToken::CSSParserToken(CSSParserTokenType type, double numericValue, Num ericValueType numericValueType, NumericSign sign)
40 : m_type(type) 40 : m_type(type)
41 , m_blockType(NotBlock) 41 , m_blockType(NotBlock)
42 , m_numericValueType(numericValueType) 42 , m_numericValueType(numericValueType)
43 , m_numericSign(sign) 43 , m_numericSign(sign)
44 , m_unit(static_cast<unsigned>(CSSPrimitiveValue::UnitType::Number)) 44 , m_unit(static_cast<unsigned>(CSSPrimitiveValue::UnitType::Number))
45 , m_numericValue(numericValue) 45 , m_numericValue(numericValue)
46 { 46 {
47 ASSERT(type == NumberToken); 47 ASSERT(type == NumberToken);
48 } 48 }
49 49
50 CSSParserToken::CSSParserToken(CSSParserTokenType type, UChar32 start, UChar32 e nd) 50 CSSParserToken::CSSParserToken(CSSParserTokenType type, UChar32 start, UChar32 e nd)
51 : m_type(UnicodeRangeToken) 51 : m_type(UnicodeRangeToken)
52 , m_blockType(NotBlock) 52 , m_blockType(NotBlock)
53 { 53 {
54 ASSERT_UNUSED(type, type == UnicodeRangeToken); 54 ASSERT_UNUSED(type, type == UnicodeRangeToken);
55 m_unicodeRange.start = start; 55 m_unicodeRange.start = start;
56 m_unicodeRange.end = end; 56 m_unicodeRange.end = end;
57 } 57 }
58 58
59 CSSParserToken::CSSParserToken(HashTokenType type, CSSParserString value) 59 CSSParserToken::CSSParserToken(HashTokenType type, StringView value)
60 : m_type(HashToken) 60 : m_type(HashToken)
61 , m_blockType(NotBlock) 61 , m_blockType(NotBlock)
62 , m_hashTokenType(type) 62 , m_hashTokenType(type)
63 { 63 {
64 initValueFromCSSParserString(value); 64 initValueFromStringView(value);
65 } 65 }
66 66
67 void CSSParserToken::convertToDimensionWithUnit(CSSParserString unit) 67 void CSSParserToken::convertToDimensionWithUnit(StringView unit)
68 { 68 {
69 ASSERT(m_type == NumberToken); 69 ASSERT(m_type == NumberToken);
70 m_type = DimensionToken; 70 m_type = DimensionToken;
71 initValueFromCSSParserString(unit); 71 initValueFromStringView(unit);
72 72
73 if (unit.is8Bit()) 73 if (unit.is8Bit())
74 m_unit = static_cast<unsigned>(lookupCSSPrimitiveValueUnit(unit.characte rs8(), unit.length())); 74 m_unit = static_cast<unsigned>(lookupCSSPrimitiveValueUnit(unit.characte rs8(), unit.length()));
75 else 75 else
76 m_unit = static_cast<unsigned>(lookupCSSPrimitiveValueUnit(unit.characte rs16(), unit.length())); 76 m_unit = static_cast<unsigned>(lookupCSSPrimitiveValueUnit(unit.characte rs16(), unit.length()));
77 } 77 }
78 78
79 void CSSParserToken::convertToPercentage() 79 void CSSParserToken::convertToPercentage()
80 { 80 {
81 ASSERT(m_type == NumberToken); 81 ASSERT(m_type == NumberToken);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 CSSParserTokenType tokenType = type(); 138 CSSParserTokenType tokenType = type();
139 return tokenType == IdentToken 139 return tokenType == IdentToken
140 || tokenType == FunctionToken 140 || tokenType == FunctionToken
141 || tokenType == AtKeywordToken 141 || tokenType == AtKeywordToken
142 || tokenType == HashToken 142 || tokenType == HashToken
143 || tokenType == UrlToken 143 || tokenType == UrlToken
144 || tokenType == DimensionToken 144 || tokenType == DimensionToken
145 || tokenType == StringToken; 145 || tokenType == StringToken;
146 } 146 }
147 147
148 CSSParserToken CSSParserToken::copyWithUpdatedString(const CSSParserString& pars erString) const 148 CSSParserToken CSSParserToken::copyWithUpdatedString(const StringView& string) c onst
149 { 149 {
150 CSSParserToken copy(*this); 150 CSSParserToken copy(*this);
151 copy.initValueFromCSSParserString(parserString); 151 copy.initValueFromStringView(string);
152 return copy; 152 return copy;
153 } 153 }
154 154
155 bool CSSParserToken::valueDataCharRawEqual(const CSSParserToken& other) const 155 bool CSSParserToken::valueDataCharRawEqual(const CSSParserToken& other) const
156 { 156 {
157 if (m_valueLength != other.m_valueLength) 157 if (m_valueLength != other.m_valueLength)
158 return false; 158 return false;
159 159
160 if (m_valueDataCharRaw == other.m_valueDataCharRaw && m_valueIs8Bit == other .m_valueIs8Bit) 160 if (m_valueDataCharRaw == other.m_valueDataCharRaw && m_valueIs8Bit == other .m_valueIs8Bit)
161 return true; 161 return true;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 return true; 200 return true;
201 } 201 }
202 } 202 }
203 203
204 void CSSParserToken::serialize(StringBuilder& builder) const 204 void CSSParserToken::serialize(StringBuilder& builder) const
205 { 205 {
206 // This is currently only used for @supports CSSOM. To keep our implementati on 206 // This is currently only used for @supports CSSOM. To keep our implementati on
207 // simple we handle some of the edge cases incorrectly (see comments below). 207 // simple we handle some of the edge cases incorrectly (see comments below).
208 switch (type()) { 208 switch (type()) {
209 case IdentToken: 209 case IdentToken:
210 serializeIdentifier(value(), builder); 210 serializeIdentifier(value().toString(), builder);
211 break; 211 break;
212 case FunctionToken: 212 case FunctionToken:
213 serializeIdentifier(value(), builder); 213 serializeIdentifier(value().toString(), builder);
214 return builder.append('('); 214 return builder.append('(');
215 case AtKeywordToken: 215 case AtKeywordToken:
216 builder.append('@'); 216 builder.append('@');
217 serializeIdentifier(value(), builder); 217 serializeIdentifier(value().toString(), builder);
218 break; 218 break;
219 case HashToken: 219 case HashToken:
220 // This will always serialize as a hash-token with 'id' type instead of 220 // This will always serialize as a hash-token with 'id' type instead of
221 // preserving the type of the input. 221 // preserving the type of the input.
222 builder.append('#'); 222 builder.append('#');
223 serializeIdentifier(value(), builder); 223 serializeIdentifier(value().toString(), builder);
224 break; 224 break;
225 case UrlToken: 225 case UrlToken:
226 builder.append("url("); 226 builder.append("url(");
227 serializeIdentifier(value(), builder); 227 serializeIdentifier(value().toString(), builder);
228 return builder.append(")"); 228 return builder.append(")");
229 case DelimiterToken: 229 case DelimiterToken:
230 if (delimiter() == '\\') 230 if (delimiter() == '\\')
231 return builder.append("\\\n"); 231 return builder.append("\\\n");
232 return builder.append(delimiter()); 232 return builder.append(delimiter());
233 case NumberToken: 233 case NumberToken:
234 // These won't properly preserve the NumericValueType flag 234 // These won't properly preserve the NumericValueType flag
235 return builder.appendNumber(numericValue()); 235 return builder.appendNumber(numericValue());
236 case PercentageToken: 236 case PercentageToken:
237 builder.appendNumber(numericValue()); 237 builder.appendNumber(numericValue());
238 return builder.append('%'); 238 return builder.append('%');
239 case DimensionToken: 239 case DimensionToken:
240 // This will incorrectly serialize e.g. 4e3e2 as 4000e2 240 // This will incorrectly serialize e.g. 4e3e2 as 4000e2
241 builder.appendNumber(numericValue()); 241 builder.appendNumber(numericValue());
242 serializeIdentifier(value(), builder); 242 serializeIdentifier(value().toString(), builder);
243 break; 243 break;
244 case UnicodeRangeToken: 244 case UnicodeRangeToken:
245 return builder.append(String::format("U+%X-%X", unicodeRangeStart(), uni codeRangeEnd())); 245 return builder.append(String::format("U+%X-%X", unicodeRangeStart(), uni codeRangeEnd()));
246 case StringToken: 246 case StringToken:
247 return serializeString(value(), builder); 247 return serializeString(value().toString(), builder);
248 248
249 case IncludeMatchToken: 249 case IncludeMatchToken:
250 return builder.append("~="); 250 return builder.append("~=");
251 case DashMatchToken: 251 case DashMatchToken:
252 return builder.append("|="); 252 return builder.append("|=");
253 case PrefixMatchToken: 253 case PrefixMatchToken:
254 return builder.append("^="); 254 return builder.append("^=");
255 case SuffixMatchToken: 255 case SuffixMatchToken:
256 return builder.append("$="); 256 return builder.append("$=");
257 case SubstringMatchToken: 257 case SubstringMatchToken:
(...skipping 30 matching lines...) Expand all
288 return builder.append('}'); 288 return builder.append('}');
289 289
290 case EOFToken: 290 case EOFToken:
291 case CommentToken: 291 case CommentToken:
292 ASSERT_NOT_REACHED(); 292 ASSERT_NOT_REACHED();
293 return; 293 return;
294 } 294 }
295 } 295 }
296 296
297 } // namespace blink 297 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698