| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |