diff --git a/Libraries/LibWeb/CSS/Parser/Parser.h b/Libraries/LibWeb/CSS/Parser/Parser.h index 73b4e1cbf6a..15dc7b06fdf 100644 --- a/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Libraries/LibWeb/CSS/Parser/Parser.h @@ -358,7 +358,7 @@ private: RefPtr parse_time_value(TokenStream&); RefPtr parse_time_percentage_value(TokenStream&); - template + using ParseFunction = AK::Function(TokenStream&)>; RefPtr parse_comma_separated_value_list(TokenStream&, ParseFunction); RefPtr parse_simple_comma_separated_value_list(PropertyID, TokenStream&); RefPtr parse_all_as_single_keyword_value(TokenStream&, Keyword); diff --git a/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp b/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp index fc3e06b7a6f..d1342cf61ff 100644 --- a/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp @@ -80,30 +80,6 @@ RefPtr Parser::parse_all_as_single_keyword_value(TokenStream -RefPtr Parser::parse_comma_separated_value_list(TokenStream& tokens, ParseFunction parse_one_value) -{ - auto first = parse_one_value(tokens); - if (!first || !tokens.has_next_token()) - return first; - - StyleValueVector values; - values.append(first.release_nonnull()); - - while (tokens.has_next_token()) { - if (!tokens.consume_a_token().is(Token::Type::Comma)) - return nullptr; - - if (auto maybe_value = parse_one_value(tokens)) { - values.append(maybe_value.release_nonnull()); - continue; - } - return nullptr; - } - - return StyleValueList::create(move(values), StyleValueList::Separator::Comma); -} - RefPtr Parser::parse_simple_comma_separated_value_list(PropertyID property_id, TokenStream& tokens) { return parse_comma_separated_value_list(tokens, [this, property_id](auto& tokens) -> RefPtr { diff --git a/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp b/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp index afdd2c6d606..19446cde0ec 100644 --- a/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -64,6 +65,29 @@ namespace Web::CSS::Parser { +RefPtr Parser::parse_comma_separated_value_list(TokenStream& tokens, ParseFunction parse_one_value) +{ + auto first = parse_one_value(tokens); + if (!first || !tokens.has_next_token()) + return first; + + StyleValueVector values; + values.append(first.release_nonnull()); + + while (tokens.has_next_token()) { + if (!tokens.consume_a_token().is(Token::Type::Comma)) + return nullptr; + + if (auto maybe_value = parse_one_value(tokens)) { + values.append(maybe_value.release_nonnull()); + continue; + } + return nullptr; + } + + return StyleValueList::create(move(values), StyleValueList::Separator::Comma); +} + Optional Parser::parse_dimension(ComponentValue const& component_value) { if (component_value.is(Token::Type::Dimension)) {