1717#include < react/renderer/css/CSSAngle.h>
1818#include < react/renderer/css/CSSNumber.h>
1919#include < react/renderer/css/CSSPercentage.h>
20- #include < react/renderer/css/CSSSyntaxParser.h>
2120#include < react/renderer/css/CSSValueParser.h>
2221#include < react/utils/PackTraits.h>
2322#include < react/utils/fnv1a.h>
@@ -154,16 +153,19 @@ constexpr std::optional<float> normalizeComponent(
154153}
155154
156155template <CSSDataType... FirstComponentAllowedTypesT>
157- constexpr bool isLegacyColorFunction (CSSSyntaxParser &parser)
156+ constexpr bool isLegacyColorFunction (CSSValueParser &parser)
158157{
159- auto lookahead = parser;
160- auto next = parseNextCSSValue <FirstComponentAllowedTypesT...>(lookahead );
158+ auto saved = parser. syntaxParser () ;
159+ auto next = parser. parseNextValue <FirstComponentAllowedTypesT...>();
161160 if (std::holds_alternative<std::monostate>(next)) {
161+ parser.syntaxParser () = saved;
162162 return false ;
163163 }
164164
165- return lookahead.consumeComponentValue <bool >(
166- CSSDelimiter::OptionalWhitespace, [](CSSPreservedToken token) { return token.type () == CSSTokenType::Comma; });
165+ parser.syntaxParser ().consumeWhitespace ();
166+ bool isLegacy = parser.syntaxParser ().peek ().type () == CSSTokenType::Comma;
167+ parser.syntaxParser () = saved;
168+ return isLegacy;
167169}
168170
169171/* *
@@ -172,29 +174,29 @@ constexpr bool isLegacyColorFunction(CSSSyntaxParser &parser)
172174 * https://www.w3.org/TR/css-color-4/#typedef-legacy-rgb-syntax
173175 */
174176template <typename CSSColor>
175- constexpr std::optional<CSSColor> parseLegacyRgbFunction (CSSSyntaxParser &parser)
177+ constexpr std::optional<CSSColor> parseLegacyRgbFunction (CSSValueParser &parser)
176178{
177- auto rawRed = parseNextCSSValue <CSSNumber, CSSPercentage>(parser );
179+ auto rawRed = parser. parseNextValue <CSSNumber, CSSPercentage>();
178180 bool usesNumber = std::holds_alternative<CSSNumber>(rawRed);
179181
180182 auto red = normalizeComponent (rawRed, 255 .0f );
181183 if (!red.has_value ()) {
182184 return {};
183185 }
184186
185- auto green = usesNumber ? normalizeNumberComponent (parseNextCSSValue <CSSNumber>(parser, CSSDelimiter::Comma))
186- : normalizeComponent (parseNextCSSValue <CSSPercentage>(parser, CSSDelimiter::Comma), 255 .0f );
187+ auto green = usesNumber ? normalizeNumberComponent (parser. parseNextValue <CSSNumber>(CSSDelimiter::Comma))
188+ : normalizeComponent (parser. parseNextValue <CSSPercentage>(CSSDelimiter::Comma), 255 .0f );
187189 if (!green.has_value ()) {
188190 return {};
189191 }
190192
191- auto blue = usesNumber ? normalizeNumberComponent (parseNextCSSValue <CSSNumber>(parser, CSSDelimiter::Comma))
192- : normalizeComponent (parseNextCSSValue <CSSPercentage>(parser, CSSDelimiter::Comma), 255 .0f );
193+ auto blue = usesNumber ? normalizeNumberComponent (parser. parseNextValue <CSSNumber>(CSSDelimiter::Comma))
194+ : normalizeComponent (parser. parseNextValue <CSSPercentage>(CSSDelimiter::Comma), 255 .0f );
193195 if (!blue.has_value ()) {
194196 return {};
195197 }
196198
197- auto alpha = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Comma), 1 .0f );
199+ auto alpha = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Comma), 1 .0f );
198200
199201 return CSSColor{
200202 .r = clamp255Component (*red),
@@ -210,26 +212,25 @@ constexpr std::optional<CSSColor> parseLegacyRgbFunction(CSSSyntaxParser &parser
210212 * https://www.w3.org/TR/css-color-4/#typedef-modern-rgb-syntax
211213 */
212214template <typename CSSColor>
213- constexpr std::optional<CSSColor> parseModernRgbFunction (CSSSyntaxParser &parser)
215+ constexpr std::optional<CSSColor> parseModernRgbFunction (CSSValueParser &parser)
214216{
215- auto red = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser ), 255 .0f );
217+ auto red = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(), 255 .0f );
216218 if (!red.has_value ()) {
217219 return {};
218220 }
219221
220- auto green =
221- normalizeComponent (parseNextCSSValue<CSSNumber, CSSPercentage>(parser, CSSDelimiter::Whitespace), 255 .0f );
222+ auto green = normalizeComponent (parser.parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Whitespace), 255 .0f );
222223 if (!green.has_value ()) {
223224 return {};
224225 }
225226
226- auto blue = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Whitespace), 255 .0f );
227+ auto blue = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Whitespace), 255 .0f );
227228 if (!blue.has_value ()) {
228229 return {};
229230 }
230231
231232 auto alpha =
232- normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::SolidusOrWhitespace), 1 .0f );
233+ normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::SolidusOrWhitespace), 1 .0f );
233234
234235 return CSSColor{
235236 .r = clamp255Component (*red),
@@ -244,7 +245,7 @@ constexpr std::optional<CSSColor> parseModernRgbFunction(CSSSyntaxParser &parser
244245 * https://www.w3.org/TR/css-color-4/#funcdef-rgb
245246 */
246247template <typename CSSColor>
247- constexpr std::optional<CSSColor> parseRgbFunction (CSSSyntaxParser &parser)
248+ constexpr std::optional<CSSColor> parseRgbFunction (CSSValueParser &parser)
248249{
249250 if (isLegacyColorFunction<CSSNumber, CSSPercentage>(parser)) {
250251 return parseLegacyRgbFunction<CSSColor>(parser);
@@ -259,24 +260,24 @@ constexpr std::optional<CSSColor> parseRgbFunction(CSSSyntaxParser &parser)
259260 * https://www.w3.org/TR/css-color-4/#typedef-legacy-hsl-syntax
260261 */
261262template <typename CSSColor>
262- inline std::optional<CSSColor> parseLegacyHslFunction (CSSSyntaxParser &parser)
263+ inline std::optional<CSSColor> parseLegacyHslFunction (CSSValueParser &parser)
263264{
264- auto h = normalizeHueComponent (parseNextCSSValue <CSSNumber, CSSAngle>(parser ));
265+ auto h = normalizeHueComponent (parser. parseNextValue <CSSNumber, CSSAngle>());
265266 if (!h.has_value ()) {
266267 return {};
267268 }
268269
269- auto s = normalizeComponent (parseNextCSSValue <CSSPercentage>(parser, CSSDelimiter::Comma), 100 .0f );
270+ auto s = normalizeComponent (parser. parseNextValue <CSSPercentage>(CSSDelimiter::Comma), 100 .0f );
270271 if (!s.has_value ()) {
271272 return {};
272273 }
273274
274- auto l = normalizeComponent (parseNextCSSValue <CSSPercentage>(parser, CSSDelimiter::Comma), 100 .0f );
275+ auto l = normalizeComponent (parser. parseNextValue <CSSPercentage>(CSSDelimiter::Comma), 100 .0f );
275276 if (!l.has_value ()) {
276277 return {};
277278 }
278279
279- auto a = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Comma), 1 .0f );
280+ auto a = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Comma), 1 .0f );
280281
281282 auto [r, g, b] = hslToRgb (*h, *s, *l);
282283
@@ -293,25 +294,24 @@ inline std::optional<CSSColor> parseLegacyHslFunction(CSSSyntaxParser &parser)
293294 * it is valid. https://www.w3.org/TR/css-color-4/#typedef-modern-hsl-syntax
294295 */
295296template <typename CSSColor>
296- inline std::optional<CSSColor> parseModernHslFunction (CSSSyntaxParser &parser)
297+ inline std::optional<CSSColor> parseModernHslFunction (CSSValueParser &parser)
297298{
298- auto h = normalizeHueComponent (parseNextCSSValue <CSSNumber, CSSAngle>(parser ));
299+ auto h = normalizeHueComponent (parser. parseNextValue <CSSNumber, CSSAngle>());
299300 if (!h.has_value ()) {
300301 return {};
301302 }
302303
303- auto s = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Whitespace), 100 .0f );
304+ auto s = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Whitespace), 100 .0f );
304305 if (!s.has_value ()) {
305306 return {};
306307 }
307308
308- auto l = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Whitespace), 100 .0f );
309+ auto l = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Whitespace), 100 .0f );
309310 if (!l.has_value ()) {
310311 return {};
311312 }
312313
313- auto a =
314- normalizeComponent (parseNextCSSValue<CSSNumber, CSSPercentage>(parser, CSSDelimiter::SolidusOrWhitespace), 1 .0f );
314+ auto a = normalizeComponent (parser.parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::SolidusOrWhitespace), 1 .0f );
315315
316316 auto [r, g, b] = hslToRgb (*h, *s, *l);
317317
@@ -328,7 +328,7 @@ inline std::optional<CSSColor> parseModernHslFunction(CSSSyntaxParser &parser)
328328 * https://www.w3.org/TR/css-color-4/#funcdef-hsl
329329 */
330330template <typename CSSColor>
331- inline std::optional<CSSColor> parseHslFunction (CSSSyntaxParser &parser)
331+ inline std::optional<CSSColor> parseHslFunction (CSSValueParser &parser)
332332{
333333 if (isLegacyColorFunction<CSSNumber, CSSAngle>(parser)) {
334334 return parseLegacyHslFunction<CSSColor>(parser);
@@ -342,25 +342,24 @@ inline std::optional<CSSColor> parseHslFunction(CSSSyntaxParser &parser)
342342 * https://www.w3.org/TR/css-color-4/#funcdef-hwb
343343 */
344344template <typename CSSColor>
345- inline std::optional<CSSColor> parseHwbFunction (CSSSyntaxParser &parser)
345+ inline std::optional<CSSColor> parseHwbFunction (CSSValueParser &parser)
346346{
347- auto h = normalizeHueComponent (parseNextCSSValue <CSSNumber, CSSAngle>(parser ));
347+ auto h = normalizeHueComponent (parser. parseNextValue <CSSNumber, CSSAngle>());
348348 if (!h.has_value ()) {
349349 return {};
350350 }
351351
352- auto w = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Whitespace), 100 .0f );
352+ auto w = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Whitespace), 100 .0f );
353353 if (!w.has_value ()) {
354354 return {};
355355 }
356356
357- auto b = normalizeComponent (parseNextCSSValue <CSSNumber, CSSPercentage>(parser, CSSDelimiter::Whitespace), 100 .0f );
357+ auto b = normalizeComponent (parser. parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::Whitespace), 100 .0f );
358358 if (!b.has_value ()) {
359359 return {};
360360 }
361361
362- auto a =
363- normalizeComponent (parseNextCSSValue<CSSNumber, CSSPercentage>(parser, CSSDelimiter::SolidusOrWhitespace), 1 .0f );
362+ auto a = normalizeComponent (parser.parseNextValue <CSSNumber, CSSPercentage>(CSSDelimiter::SolidusOrWhitespace), 1 .0f );
364363
365364 auto [red, green, blue] = hwbToRgb (*h, *w, *b);
366365
@@ -380,7 +379,7 @@ inline std::optional<CSSColor> parseHwbFunction(CSSSyntaxParser &parser)
380379 * https://www.w3.org/TR/css-color-4/#typedef-color-function
381380 */
382381template <typename CSSColor>
383- constexpr std::optional<CSSColor> parseCSSColorFunction (std::string_view colorFunction, CSSSyntaxParser &parser)
382+ constexpr std::optional<CSSColor> parseCSSColorFunction (std::string_view colorFunction, CSSValueParser &parser)
384383{
385384 switch (fnv1aLowercase (colorFunction)) {
386385 // CSS Color Module Level 4 treats the alpha variants of functions as the
0 commit comments