From ee5b00d1ee22c104e49be815f6d5c1a7729153c6 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Tue, 26 Dec 2023 14:54:46 +0000 Subject: [PATCH] LibWeb: Parse grid-auto-[columns,rows] properties using TokenStream --- Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp | 15 +++++++++------ Userland/Libraries/LibWeb/CSS/Parser/Parser.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 5ead50991d..1ed44b069c 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -5350,21 +5350,24 @@ RefPtr Parser::parse_grid_auto_flow_value(TokenStream Parser::parse_grid_auto_track_sizes(Vector const& component_values) +RefPtr Parser::parse_grid_auto_track_sizes(TokenStream& tokens) { // https://www.w3.org/TR/css-grid-2/#auto-tracks // + Vector track_list; - TokenStream tokens { component_values }; + auto transaction = tokens.begin_transaction(); while (tokens.has_next_token()) { auto token = tokens.next_token(); auto track_sizing_function = parse_track_sizing_function(token); - if (!track_sizing_function.has_value()) + if (!track_sizing_function.has_value()) { + transaction.commit(); return GridTrackSizeListStyleValue::make_auto(); + } // FIXME: Handle multiple repeat values (should combine them here, or remove - // any other ones if the first one is auto-fill, etc.) + // any other ones if the first one is auto-fill, etc.) track_list.append(track_sizing_function.value()); } + transaction.commit(); return GridTrackSizeListStyleValue::create(CSS::GridTrackSizeList(track_list, {})); } @@ -5889,11 +5892,11 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridAutoColumns: - if (auto parsed_value = parse_grid_auto_track_sizes(component_values)) + if (auto parsed_value = parse_grid_auto_track_sizes(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridAutoRows: - if (auto parsed_value = parse_grid_auto_track_sizes(component_values)) + if (auto parsed_value = parse_grid_auto_track_sizes(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::ListStyle: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 0c841ce988..7b7d47ba12 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -259,7 +259,7 @@ private: RefPtr parse_transform_value(TokenStream&); RefPtr parse_transform_origin_value(TokenStream&); RefPtr parse_grid_track_size_list(Vector const&, bool allow_separate_line_name_blocks = false); - RefPtr parse_grid_auto_track_sizes(Vector const&); + RefPtr parse_grid_auto_track_sizes(TokenStream&); RefPtr parse_grid_auto_flow_value(TokenStream&); RefPtr parse_grid_track_size_list_shorthand_value(PropertyID, Vector const&); RefPtr parse_grid_track_placement(TokenStream&);