From 1cc88dc4bcdf53852dcc8a6938a5b2df18e3de0d Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Thu, 7 Dec 2023 12:54:27 +0000 Subject: [PATCH] LibWeb: Make parse_comma_separated_value_list() take a TokenStream This lets us use it from inside places that use TokenStreams. --- .../Libraries/LibWeb/CSS/Parser/Parser.cpp | 21 ++++++++++--------- Userland/Libraries/LibWeb/CSS/Parser/Parser.h | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 292f0feaef6..a2f7bb0820d 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -2634,9 +2634,8 @@ RefPtr Parser::parse_position_value(TokenStream -RefPtr Parser::parse_comma_separated_value_list(Vector const& component_values, ParseFunction parse_one_value) +RefPtr Parser::parse_comma_separated_value_list(TokenStream& tokens, ParseFunction parse_one_value) { - auto tokens = TokenStream { component_values }; auto first = parse_one_value(tokens); if (!first || !tokens.has_next_token()) return first; @@ -2658,9 +2657,9 @@ RefPtr Parser::parse_comma_separated_value_list(Vector Parser::parse_simple_comma_separated_value_list(PropertyID property_id, Vector const& component_values) +RefPtr Parser::parse_simple_comma_separated_value_list(PropertyID property_id, TokenStream& tokens) { - return parse_comma_separated_value_list(component_values, [=, this](auto& tokens) -> RefPtr { + return parse_comma_separated_value_list(tokens, [this, property_id](auto& tokens) -> RefPtr { if (auto value = parse_css_value_for_property(property_id, tokens)) return value; tokens.reconsume_current_input_token(); @@ -3298,6 +3297,8 @@ RefPtr Parser::parse_border_radius_shorthand_value(Vector Parser::parse_shadow_value(Vector const& component_values, AllowInsetKeyword allow_inset_keyword) { + TokenStream tokens { component_values }; + // "none" if (component_values.size() == 1 && component_values.first().is(Token::Type::Ident)) { auto ident = parse_identifier_value(component_values.first()); @@ -3305,7 +3306,7 @@ RefPtr Parser::parse_shadow_value(Vector const& comp return ident; } - return parse_comma_separated_value_list(component_values, [this, allow_inset_keyword](auto& tokens) { + return parse_comma_separated_value_list(tokens, [this, allow_inset_keyword](auto& tokens) { return parse_single_shadow_value(tokens, allow_inset_keyword); }); } @@ -5715,24 +5716,24 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property case PropertyID::BackgroundClip: case PropertyID::BackgroundImage: case PropertyID::BackgroundOrigin: - if (auto parsed_value = parse_simple_comma_separated_value_list(property_id, component_values)) + if (auto parsed_value = parse_simple_comma_separated_value_list(property_id, tokens)) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::BackgroundPosition: - if (auto parsed_value = parse_comma_separated_value_list(component_values, [this](auto& tokens) { return parse_position_value(tokens, PositionParsingMode::BackgroundPosition); })) + if (auto parsed_value = parse_comma_separated_value_list(tokens, [this](auto& tokens) { return parse_position_value(tokens, PositionParsingMode::BackgroundPosition); })) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::BackgroundPositionX: case PropertyID::BackgroundPositionY: - if (auto parsed_value = parse_comma_separated_value_list(component_values, [this, property_id](auto& tokens) { return parse_single_background_position_x_or_y_value(tokens, property_id); })) + if (auto parsed_value = parse_comma_separated_value_list(tokens, [this, property_id](auto& tokens) { return parse_single_background_position_x_or_y_value(tokens, property_id); })) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::BackgroundRepeat: - if (auto parsed_value = parse_comma_separated_value_list(component_values, [this](auto& tokens) { return parse_single_background_repeat_value(tokens); })) + if (auto parsed_value = parse_comma_separated_value_list(tokens, [this](auto& tokens) { return parse_single_background_repeat_value(tokens); })) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::BackgroundSize: - if (auto parsed_value = parse_comma_separated_value_list(component_values, [this](auto& tokens) { return parse_single_background_size_value(tokens); })) + if (auto parsed_value = parse_comma_separated_value_list(tokens, [this](auto& tokens) { return parse_single_background_size_value(tokens); })) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::Border: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index a6e32e78c93..1d119cd1e42 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -221,8 +221,8 @@ private: }; RefPtr parse_position_value(TokenStream&, PositionParsingMode = PositionParsingMode::Normal); template - RefPtr parse_comma_separated_value_list(Vector const&, ParseFunction); - RefPtr parse_simple_comma_separated_value_list(PropertyID, Vector const&); + RefPtr parse_comma_separated_value_list(TokenStream&, ParseFunction); + RefPtr parse_simple_comma_separated_value_list(PropertyID, TokenStream&); RefPtr parse_filter_value_list_value(Vector const&); RefPtr parse_aspect_ratio_value(Vector const&);