Skip to content

Commit dd5adb2

Browse files
committed
LibWeb: Parse transform property using TokenStream
While I'm at it, use the helper for "none", and remove the unnecessary whitespace skipping.
1 parent 6a6995c commit dd5adb2

File tree

2 files changed

+10
-16
lines changed

2 files changed

+10
-16
lines changed

Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4814,25 +4814,18 @@ RefPtr<StyleValue> Parser::parse_easing_value(TokenStream<ComponentValue>& token
48144814
return EasingStyleValue::create(function, move(values));
48154815
}
48164816

4817-
RefPtr<StyleValue> Parser::parse_transform_value(Vector<ComponentValue> const& component_values)
4817+
RefPtr<StyleValue> Parser::parse_transform_value(TokenStream<ComponentValue>& tokens)
48184818
{
4819+
if (contains_single_none_ident(tokens)) {
4820+
tokens.next_token(); // none
4821+
return IdentifierStyleValue::create(ValueID::None);
4822+
}
4823+
48194824
StyleValueVector transformations;
4820-
auto tokens = TokenStream { component_values };
4821-
tokens.skip_whitespace();
4825+
auto transaction = tokens.begin_transaction();
48224826

48234827
while (tokens.has_next_token()) {
4824-
tokens.skip_whitespace();
48254828
auto const& part = tokens.next_token();
4826-
4827-
if (part.is_ident("none"sv)) {
4828-
if (!transformations.is_empty())
4829-
return nullptr;
4830-
tokens.skip_whitespace();
4831-
if (tokens.has_next_token())
4832-
return nullptr;
4833-
return IdentifierStyleValue::create(ValueID::None);
4834-
}
4835-
48364829
if (!part.is_function())
48374830
return nullptr;
48384831
auto maybe_function = transform_function_from_string(part.function().name());
@@ -4936,6 +4929,7 @@ RefPtr<StyleValue> Parser::parse_transform_value(Vector<ComponentValue> const& c
49364929

49374930
transformations.append(TransformationStyleValue::create(function, move(values)));
49384931
}
4932+
transaction.commit();
49394933
return StyleValueList::create(move(transformations), StyleValueList::Separator::Space);
49404934
}
49414935

@@ -5944,7 +5938,7 @@ Parser::ParseErrorOr<NonnullRefPtr<StyleValue>> Parser::parse_css_value(Property
59445938
return parsed_value.release_nonnull();
59455939
return ParseError::SyntaxError;
59465940
case PropertyID::Transform:
5947-
if (auto parsed_value = parse_transform_value(component_values))
5941+
if (auto parsed_value = parse_transform_value(tokens); parsed_value && !tokens.has_next_token())
59485942
return parsed_value.release_nonnull();
59495943
return ParseError::SyntaxError;
59505944
case PropertyID::TransformOrigin:

Userland/Libraries/LibWeb/CSS/Parser/Parser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ class Parser {
256256
RefPtr<StyleValue> parse_text_decoration_value(TokenStream<ComponentValue>&);
257257
RefPtr<StyleValue> parse_text_decoration_line_value(TokenStream<ComponentValue>&);
258258
RefPtr<StyleValue> parse_easing_value(TokenStream<ComponentValue>&);
259-
RefPtr<StyleValue> parse_transform_value(Vector<ComponentValue> const&);
259+
RefPtr<StyleValue> parse_transform_value(TokenStream<ComponentValue>&);
260260
RefPtr<StyleValue> parse_transform_origin_value(Vector<ComponentValue> const&);
261261
RefPtr<StyleValue> parse_grid_track_size_list(Vector<ComponentValue> const&, bool allow_separate_line_name_blocks = false);
262262
RefPtr<StyleValue> parse_grid_auto_track_sizes(Vector<ComponentValue> const&);

0 commit comments

Comments
 (0)