diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 0a7490945f..5ead50991d 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -4935,7 +4935,7 @@ RefPtr Parser::parse_transform_value(TokenStream& to // https://www.w3.org/TR/css-transforms-1/#propdef-transform-origin // FIXME: This only supports a 2D position -RefPtr Parser::parse_transform_origin_value(Vector const& component_values) +RefPtr Parser::parse_transform_origin_value(TokenStream& tokens) { enum class Axis { None, @@ -4974,15 +4974,14 @@ RefPtr Parser::parse_transform_origin_value(Vector c return OptionalNone {}; }; - auto make_list = [](NonnullRefPtr const& x_value, NonnullRefPtr const& y_value) -> NonnullRefPtr { - StyleValueVector values; - values.append(x_value); - values.append(y_value); - return StyleValueList::create(move(values), StyleValueList::Separator::Space); + auto transaction = tokens.begin_transaction(); + + auto make_list = [&transaction](NonnullRefPtr const& x_value, NonnullRefPtr const& y_value) -> NonnullRefPtr { + transaction.commit(); + return StyleValueList::create(StyleValueVector { x_value, y_value }, StyleValueList::Separator::Space); }; - auto tokens = TokenStream { component_values }; - switch (component_values.size()) { + switch (tokens.remaining_token_count()) { case 1: { auto single_value = to_axis_offset(parse_css_value_for_property(PropertyID::TransformOrigin, tokens)); if (!single_value.has_value()) @@ -5942,7 +5941,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::TransformOrigin: - if (auto parsed_value = parse_transform_origin_value(component_values)) + if (auto parsed_value = parse_transform_origin_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError ::SyntaxError; default: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index a30b3e0764..0c841ce988 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -257,7 +257,7 @@ private: RefPtr parse_text_decoration_line_value(TokenStream&); RefPtr parse_easing_value(TokenStream&); RefPtr parse_transform_value(TokenStream&); - RefPtr parse_transform_origin_value(Vector const&); + 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_flow_value(TokenStream&);