diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS')
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp | 27 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/Parser/Parser.h | 2 |
2 files changed, 22 insertions, 7 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index debadf3358..2833f12f0d 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -833,20 +833,35 @@ Vector<StyleComponentValueRule> Parser::parse_as_list_of_component_values() return rules; } -Vector<StyleComponentValueRule> Parser::parse_as_list_of_comma_separated_component_values() +Vector<Vector<StyleComponentValueRule>> Parser::parse_as_comma_separated_list_of_component_values() { - Vector<StyleComponentValueRule> rules; + Vector<Vector<StyleComponentValueRule>> lists; + lists.append({}); for (;;) { - rules.append(consume_a_component_value()); + auto next = next_token(); - if (peek_token().is_comma()) + if (next.is_comma()) { + lists.append({}); continue; - if (peek_token().is_eof()) + } else if (next.is_eof()) { break; + } + + reconsume_current_input_token(); + auto component_value = consume_a_component_value(); + lists.last().append(component_value); } - return rules; + for (auto& list : lists) { + if (!list.is_empty() && list.first().is(Token::TokenType::Whitespace)) + list.take_first(); + + if (!list.is_empty() && list.last().is(Token::TokenType::Whitespace)) + list.take_last(); + } + + return lists; } RefPtr<CSSRule> Parser::convert_rule(NonnullRefPtr<QualifiedStyleRule>) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 67cc146123..0ab9421f37 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -46,7 +46,7 @@ public: // For the contents of presentational attributes, which parse text into a single declaration’s value, or for parsing a stand-alone selector [SELECT] or list of Media Queries [MEDIAQ], as in Selectors API or the media HTML attribute. Vector<StyleComponentValueRule> parse_as_list_of_component_values(); - Vector<StyleComponentValueRule> parse_as_list_of_comma_separated_component_values(); + Vector<Vector<StyleComponentValueRule>> parse_as_comma_separated_list_of_component_values(); Vector<CSS::Selector::ComplexSelector> parse_selectors(Vector<StyleComponentValueRule> parts); |