Forráskód Böngészése

LibWeb: Remove broken CSS:Parser::is_combinator()

A single DELIM token is only one character long, so the check for
a "||" DELIM didn't work. We now just do the check inline.
Sam Atkins 4 éve
szülő
commit
f9ffa34622

+ 19 - 14
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -318,20 +318,30 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<StyleCompo
     auto parse_complex_selector = [&]() -> Optional<CSS::Selector::ComplexSelector> {
         auto relation = CSS::Selector::ComplexSelector::Relation::Descendant;
 
+        if (index >= parts.size())
+            return {};
+
         auto current_value = parts.at(index);
         if (current_value.is(Token::TokenType::Delim)) {
             auto delim = current_value.token().delim();
-            if (is_combinator(delim)) {
-                if (delim == ">") {
-                    relation = CSS::Selector::ComplexSelector::Relation::ImmediateChild;
-                } else if (delim == "+") {
-                    relation = CSS::Selector::ComplexSelector::Relation::AdjacentSibling;
-                } else if (delim == "~") {
-                    relation = CSS::Selector::ComplexSelector::Relation::GeneralSibling;
-                } else if (delim == "||") {
+            if (delim == ">") {
+                relation = CSS::Selector::ComplexSelector::Relation::ImmediateChild;
+                index++;
+            } else if (delim == "+") {
+                relation = CSS::Selector::ComplexSelector::Relation::AdjacentSibling;
+                index++;
+            } else if (delim == "~") {
+                relation = CSS::Selector::ComplexSelector::Relation::GeneralSibling;
+                index++;
+            } else if (delim == "|") {
+                if (index + 1 >= parts.size())
+                    return {};
+
+                auto next = parts.at(index + 1);
+                if (next.is(Token::TokenType::Delim) && next.token().delim() == "|") {
                     relation = CSS::Selector::ComplexSelector::Relation::Column;
+                    index += 2;
                 }
-                index++;
             }
         }
 
@@ -386,11 +396,6 @@ void Parser::reconsume_current_input_token()
     --m_iterator_offset;
 }
 
-bool Parser::is_combinator(String input)
-{
-    return input == ">" || input == "+" || input == "~" || input == "||";
-}
-
 NonnullRefPtrVector<QualifiedStyleRule> Parser::consume_a_list_of_rules(bool top_level)
 {
     NonnullRefPtrVector<QualifiedStyleRule> rules;

+ 0 - 1
Userland/Libraries/LibWeb/CSS/Parser/Parser.h

@@ -69,7 +69,6 @@ private:
     Token peek_token();
     Token current_token();
     void reconsume_current_input_token();
-    bool is_combinator(String);
 
     NonnullRefPtrVector<QualifiedStyleRule> consume_a_list_of_rules(bool top_level);
     NonnullRefPtr<AtStyleRule> consume_an_at_rule();