diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index a265c6718f..6e544371fd 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -2386,6 +2386,30 @@ static Optional> parse_color_stop_list(auto& tokens, auto is_po return color_stops; } +Optional> Parser::parse_linear_color_stop_list(TokenStream& tokens) +{ + // = + // , [ ? , ]# + return parse_color_stop_list( + tokens, + [](Dimension& dimension) { return dimension.is_length_percentage(); }, + [](Dimension& dimension) { return dimension.length_percentage(); }, + [&](auto& token) { return parse_color(token); }, + [&](auto& token) { return parse_dimension(token); }); +} + +Optional> Parser::parse_angular_color_stop_list(TokenStream& tokens) +{ + // = + // , [ ? , ]# + return parse_color_stop_list( + tokens, + [](Dimension& dimension) { return dimension.is_angle_percentage(); }, + [](Dimension& dimension) { return dimension.angle_percentage(); }, + [&](auto& token) { return parse_color(token); }, + [&](auto& token) { return parse_dimension(token); }); +} + static StringView consume_if_starts_with(StringView str, StringView start, auto found_callback) { if (str.starts_with(start, CaseSensitivity::CaseInsensitive)) { @@ -2516,19 +2540,7 @@ RefPtr Parser::parse_linear_gradient_function(ComponentValue const& if (has_direction_param && !tokens.next_token().is(Token::Type::Comma)) return {}; - // = - // , [ ? , ]# - auto is_length_percentage = [](Dimension& dimension) { - return dimension.is_length_percentage(); - }; - auto get_length_percentage = [](Dimension& dimension) { - return dimension.length_percentage(); - }; - auto color_stops = parse_color_stop_list( - tokens, is_length_percentage, get_length_percentage, - [&](auto& token) { return parse_color(token); }, - [&](auto& token) { return parse_dimension(token); }); - + auto color_stops = parse_linear_color_stop_list(tokens); if (!color_stops.has_value()) return {}; @@ -2625,19 +2637,7 @@ RefPtr Parser::parse_conic_gradient_function(ComponentValue const& c if ((got_from_angle || got_at_position || got_color_interpolation_method) && !tokens.next_token().is(Token::Type::Comma)) return {}; - // = - // , [ ? , ]# - auto is_angle_percentage = [](Dimension& dimension) { - return dimension.is_angle_percentage(); - }; - auto get_angle_percentage = [](Dimension& dimension) { - return dimension.angle_percentage(); - }; - auto color_stops = parse_color_stop_list( - tokens, is_angle_percentage, get_angle_percentage, - [&](auto& token) { return parse_color(token); }, - [&](auto& token) { return parse_dimension(token); }); - + auto color_stops = parse_angular_color_stop_list(tokens); if (!color_stops.has_value()) return {}; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 50b765d363..ea31c72909 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -264,6 +264,9 @@ private: }; Optional parse_url_function(ComponentValue const&, AllowedDataUrlType = AllowedDataUrlType::None); + Optional> parse_linear_color_stop_list(TokenStream&); + Optional> parse_angular_color_stop_list(TokenStream&); + RefPtr parse_linear_gradient_function(ComponentValue const&); RefPtr parse_conic_gradient_function(ComponentValue const&);