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

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

Issue 2698083003: support function in custom paint input arguments (Closed)
Patch Set: add comment Created 3 years, 10 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/CSSPropertyParserHelpers.h" 5 #include "core/css/parser/CSSPropertyParserHelpers.h"
6 6
7 #include "core/css/CSSCalculationValue.h" 7 #include "core/css/CSSCalculationValue.h"
8 #include "core/css/CSSColorValue.h" 8 #include "core/css/CSSColorValue.h"
9 #include "core/css/CSSCrossfadeValue.h" 9 #include "core/css/CSSCrossfadeValue.h"
10 #include "core/css/CSSGradientValue.h" 10 #include "core/css/CSSGradientValue.h"
(...skipping 23 matching lines...) Expand all
34 RefPtr<CSSVariableData> unparsedCSSVariableData = 34 RefPtr<CSSVariableData> unparsedCSSVariableData =
35 CSSVariableData::create(tokenRange, false, false); 35 CSSVariableData::create(tokenRange, false, false);
36 if (unparsedCSSVariableData.get()) { 36 if (unparsedCSSVariableData.get()) {
37 variableData->push_back(std::move(unparsedCSSVariableData)); 37 variableData->push_back(std::move(unparsedCSSVariableData));
38 return true; 38 return true;
39 } 39 }
40 } 40 }
41 return false; 41 return false;
42 } 42 }
43 43
44 // Consume input arguments, if encounter function, will return the function
45 // block as a Vector of CSSParserToken, otherwise, will just return a Vector of
46 // a single CSSParserToken.
47 Vector<CSSParserToken> consumeFunctionArgsOrNot(CSSParserTokenRange& args) {
48 Vector<CSSParserToken> argumentTokens;
49 if (args.peek().getBlockType() == CSSParserToken::BlockStart) {
50 // Function block.
51 // Push the function name and initial right parenthesis.
52 // Since we don't have any upfront knowledge about the input argument types
53 // here, we should just leave the token as it is and resolve it later in
54 // the variable parsing phase.
55 argumentTokens.push_back(args.peek());
56 CSSParserTokenRange contents = args.consumeBlock();
57 while (!contents.atEnd()) {
58 argumentTokens.push_back(contents.consume());
59 }
60 argumentTokens.push_back(
61 CSSParserToken(RightParenthesisToken, CSSParserToken::BlockEnd));
62
63 } else {
64 argumentTokens.push_back(args.consumeIncludingWhitespace());
65 }
66 return argumentTokens;
67 }
68
44 } // namespace 69 } // namespace
45 70
46 void complete4Sides(CSSValue* side[4]) { 71 void complete4Sides(CSSValue* side[4]) {
47 if (side[3]) 72 if (side[3])
48 return; 73 return;
49 if (!side[2]) { 74 if (!side[2]) {
50 if (!side[1]) 75 if (!side[1])
51 side[1] = side[0]; 76 side[1] = side[0];
52 side[2] = side[0]; 77 side[2] = side[0];
53 } 78 }
(...skipping 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 1183
1159 if (!RuntimeEnabledFeatures::cssPaintAPIArgumentsEnabled()) { 1184 if (!RuntimeEnabledFeatures::cssPaintAPIArgumentsEnabled()) {
1160 // Arguments not enabled, but exists. Invalid. 1185 // Arguments not enabled, but exists. Invalid.
1161 return nullptr; 1186 return nullptr;
1162 } 1187 }
1163 1188
1164 // Begin parse paint arguments. 1189 // Begin parse paint arguments.
1165 if (!consumeCommaIncludingWhitespace(args)) 1190 if (!consumeCommaIncludingWhitespace(args))
1166 return nullptr; 1191 return nullptr;
1167 1192
1168 // Consume arguments. Currently does not support complicated arguments 1193 // Consume arguments.
1169 // like function calls.
1170 // TODO(renjieliu): We may want to optimize the implementation by resolve 1194 // TODO(renjieliu): We may want to optimize the implementation by resolve
1171 // variables early if paint function is registered. 1195 // variables early if paint function is registered.
1172 Vector<CSSParserToken> argumentTokens; 1196 Vector<CSSParserToken> argumentTokens;
1173 Vector<RefPtr<CSSVariableData>> variableData; 1197 Vector<RefPtr<CSSVariableData>> variableData;
1174 while (!args.atEnd()) { 1198 while (!args.atEnd()) {
1175 if (args.peek().type() != CommaToken) { 1199 if (args.peek().type() != CommaToken) {
1176 argumentTokens.push_back(args.consumeIncludingWhitespace()); 1200 argumentTokens.appendVector(consumeFunctionArgsOrNot(args));
1177 } else { 1201 } else {
1178 if (!addCSSPaintArgument(argumentTokens, &variableData)) 1202 if (!addCSSPaintArgument(argumentTokens, &variableData))
1179 return nullptr; 1203 return nullptr;
1180 argumentTokens.clear(); 1204 argumentTokens.clear();
1181 if (!consumeCommaIncludingWhitespace(args)) 1205 if (!consumeCommaIncludingWhitespace(args))
1182 return nullptr; 1206 return nullptr;
1183 } 1207 }
1184 } 1208 }
1185 if (!addCSSPaintArgument(argumentTokens, &variableData)) 1209 if (!addCSSPaintArgument(argumentTokens, &variableData))
1186 return nullptr; 1210 return nullptr;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 1342
1319 // https://drafts.csswg.org/css-shapes-1/#typedef-shape-box 1343 // https://drafts.csswg.org/css-shapes-1/#typedef-shape-box
1320 CSSIdentifierValue* consumeShapeBox(CSSParserTokenRange& range) { 1344 CSSIdentifierValue* consumeShapeBox(CSSParserTokenRange& range) {
1321 return consumeIdent<CSSValueContentBox, CSSValuePaddingBox, CSSValueBorderBox, 1345 return consumeIdent<CSSValueContentBox, CSSValuePaddingBox, CSSValueBorderBox,
1322 CSSValueMarginBox>(range); 1346 CSSValueMarginBox>(range);
1323 } 1347 }
1324 1348
1325 } // namespace CSSPropertyParserHelpers 1349 } // namespace CSSPropertyParserHelpers
1326 1350
1327 } // namespace blink 1351 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698