From 513dee04d4a7e5fd83adb43caec083aaa702bcd6 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 8 Dec 2023 17:26:19 +0000 Subject: [PATCH] LibWeb: Parse place-self property using TokenStream --- Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp | 10 ++++++---- Userland/Libraries/LibWeb/CSS/Parser/Parser.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 86048e3418..2753b5af85 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -4560,16 +4560,17 @@ RefPtr Parser::parse_place_items_value(TokenStream& { *maybe_align_items_value, *maybe_justify_items_value }); } -RefPtr Parser::parse_place_self_value(Vector const& component_values) +RefPtr Parser::parse_place_self_value(TokenStream& tokens) { - auto tokens = TokenStream { component_values }; + auto transaction = tokens.begin_transaction(); auto maybe_align_self_value = parse_css_value_for_property(PropertyID::AlignSelf, tokens); if (!maybe_align_self_value) return nullptr; - if (component_values.size() == 1) { + if (!tokens.has_next_token()) { if (!property_accepts_identifier(PropertyID::JustifySelf, maybe_align_self_value->to_identifier())) return nullptr; + transaction.commit(); return ShorthandStyleValue::create(PropertyID::PlaceSelf, { PropertyID::AlignSelf, PropertyID::JustifySelf }, { *maybe_align_self_value, *maybe_align_self_value }); @@ -4578,6 +4579,7 @@ RefPtr Parser::parse_place_self_value(Vector const& auto maybe_justify_self_value = parse_css_value_for_property(PropertyID::JustifySelf, tokens); if (!maybe_justify_self_value) return nullptr; + transaction.commit(); return ShorthandStyleValue::create(PropertyID::PlaceSelf, { PropertyID::AlignSelf, PropertyID::JustifySelf }, { *maybe_align_self_value, *maybe_justify_self_value }); @@ -5921,7 +5923,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::PlaceSelf: - if (auto parsed_value = parse_place_self_value(component_values)) + if (auto parsed_value = parse_place_self_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::Quotes: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 9bbf995be1..1032d94b21 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -245,7 +245,7 @@ private: RefPtr parse_overflow_value(TokenStream&); RefPtr parse_place_content_value(TokenStream&); RefPtr parse_place_items_value(TokenStream&); - RefPtr parse_place_self_value(Vector const&); + RefPtr parse_place_self_value(TokenStream&); RefPtr parse_quotes_value(TokenStream&); enum class AllowInsetKeyword { No,