From 49bb04a6bacd7e8a5f0c7158b83557ec8b937342 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Fri, 26 May 2023 03:56:02 +0330 Subject: [PATCH] LibWeb: Visit CSS block tokens for var() tokens as well Also extract the equirecursive lambda functions into separate functions to simplify the code a little bit. --- .../Libraries/LibWeb/CSS/Parser/Parser.cpp | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 1e697a6dde..0bdc0c5b56 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -6892,6 +6892,32 @@ ErrorOr> Parser::parse_grid_template_areas_value(Vector> Parser::parse_css_value(PropertyID property_id, TokenStream& tokens) { // FIXME: This is a hack. Until we can reasonably combine the error types, just log the error @@ -6908,25 +6934,6 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property _temporary_result.release_value(); \ }) - auto function_contains_var_or_attr = [](Function const& function, auto&& recurse) -> bool { - if (function.name().equals_ignoring_ascii_case("var"sv) || function.name().equals_ignoring_ascii_case("attr"sv)) - return true; - for (auto const& token : function.values()) { - if (token.is_function() && recurse(token.function(), recurse)) - return true; - } - return false; - }; - auto block_contains_var_or_attr = [function_contains_var_or_attr](Block const& block, auto&& recurse) -> bool { - for (auto const& token : block.values()) { - if (token.is_function() && function_contains_var_or_attr(token.function(), function_contains_var_or_attr)) - return true; - if (token.is_block() && recurse(token.block(), recurse)) - return true; - } - return false; - }; - m_context.set_current_property_id(property_id); Vector component_values; bool contains_var_or_attr = false; @@ -6948,9 +6955,9 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property } if (!contains_var_or_attr) { - if (token.is_function() && function_contains_var_or_attr(token.function(), function_contains_var_or_attr)) + if (token.is_function() && function_contains_var_or_attr(token.function())) contains_var_or_attr = true; - else if (token.is_block() && block_contains_var_or_attr(token.block(), block_contains_var_or_attr)) + else if (token.is_block() && block_contains_var_or_attr(token.block())) contains_var_or_attr = true; }