From a16b35a755433313e9fc4340aa25d7a6bda0966e Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Thu, 7 Dec 2023 17:36:46 +0000 Subject: [PATCH] LibWeb: Parse grid-column and grid-row properties using TokenStream --- Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp | 16 +++++++++------- Userland/Libraries/LibWeb/CSS/Parser/Parser.h | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index fe78d28c0f..e533773fe0 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -5469,12 +5469,12 @@ RefPtr Parser::parse_grid_track_placement(Vector con return GridTrackPlacementStyleValue::create(GridTrackPlacement::make_span(span_or_position_value)); } -RefPtr Parser::parse_grid_track_placement_shorthand_value(PropertyID property_id, Vector const& component_values) +RefPtr Parser::parse_grid_track_placement_shorthand_value(PropertyID property_id, TokenStream& tokens) { auto start_property = (property_id == PropertyID::GridColumn) ? PropertyID::GridColumnStart : PropertyID::GridRowStart; auto end_property = (property_id == PropertyID::GridColumn) ? PropertyID::GridColumnEnd : PropertyID::GridRowEnd; - auto tokens = TokenStream { component_values }; + auto transaction = tokens.begin_transaction(); auto current_token = tokens.next_token(); Vector track_start_placement_tokens; @@ -5500,6 +5500,7 @@ RefPtr Parser::parse_grid_track_placement_shorthand_value(PropertyID auto parsed_start_value = parse_grid_track_placement(track_start_placement_tokens); if (parsed_start_value && track_end_placement_tokens.is_empty()) { + transaction.commit(); return ShorthandStyleValue::create(property_id, { start_property, end_property }, { parsed_start_value.release_nonnull(), GridTrackPlacementStyleValue::create(GridTrackPlacement::make_auto()) }); @@ -5507,6 +5508,7 @@ RefPtr Parser::parse_grid_track_placement_shorthand_value(PropertyID auto parsed_end_value = parse_grid_track_placement(track_end_placement_tokens); if (parsed_start_value && parsed_end_value) { + transaction.commit(); return ShorthandStyleValue::create(property_id, { start_property, end_property }, { parsed_start_value.release_nonnull(), parsed_end_value.release_nonnull() }); @@ -5818,10 +5820,6 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property if (auto parsed_value = parse_font_family_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; - case PropertyID::GridColumn: - if (auto parsed_value = parse_grid_track_placement_shorthand_value(property_id, component_values)) - return parsed_value.release_nonnull(); - return ParseError::SyntaxError; case PropertyID::GridArea: if (auto parsed_value = parse_grid_area_shorthand_value(component_values)) return parsed_value.release_nonnull(); @@ -5834,6 +5832,10 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property if (auto parsed_value = parse_grid_template_areas_value(component_values)) return parsed_value.release_nonnull(); return ParseError::SyntaxError; + case PropertyID::GridColumn: + if (auto parsed_value = parse_grid_track_placement_shorthand_value(property_id, tokens); parsed_value && !tokens.has_next_token()) + return parsed_value.release_nonnull(); + return ParseError::SyntaxError; case PropertyID::GridColumnEnd: if (auto parsed_value = parse_grid_track_placement(component_values)) return parsed_value.release_nonnull(); @@ -5843,7 +5845,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridRow: - if (auto parsed_value = parse_grid_track_placement_shorthand_value(property_id, component_values)) + if (auto parsed_value = parse_grid_track_placement_shorthand_value(property_id, tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::GridRowEnd: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index fb4a4916f7..4c191e1085 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -263,7 +263,7 @@ private: [[nodiscard]] RefPtr parse_grid_auto_flow_value(Vector const&); RefPtr parse_grid_track_size_list_shorthand_value(PropertyID, Vector const&); RefPtr parse_grid_track_placement(Vector const&); - RefPtr parse_grid_track_placement_shorthand_value(PropertyID, Vector const&); + RefPtr parse_grid_track_placement_shorthand_value(PropertyID, TokenStream&); RefPtr parse_grid_template_areas_value(Vector const&); RefPtr parse_grid_area_shorthand_value(Vector const&); RefPtr parse_grid_shorthand_value(Vector const&);