浏览代码

LibWeb: Parse CSS selectors with no space before a combinator

Previously selectors like `.foo>.bar` did not parse, because there is no
whitespace between `.foo` and `>`. Now we correctly parse these. :^)
Sam Atkins 3 年之前
父节点
当前提交
640a980080
共有 1 个文件被更改,包括 10 次插入0 次删除
  1. 10 0
      Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

+ 10 - 0
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -637,6 +637,16 @@ Result<Selector::SimpleSelector, Parser::SelectorParsingResult> Parser::parse_si
         }
     }
 
+    // Whitespace is not required between the compound-selector and a combinator.
+    // So, if we see a combinator, return that this compound-selector is done, instead of a syntax error.
+    if (first_value.is(Token::Type::Delim)) {
+        auto delim = first_value.token().delim();
+        if ((delim == ">"sv) || (delim == "+"sv) || (delim == "~"sv) || (delim == "|"sv)) {
+            tokens.reconsume_current_input_token();
+            return SelectorParsingResult::Done;
+        }
+    }
+
     dbgln_if(CSS_PARSER_DEBUG, "!!! Invalid simple selector!");
     return SelectorParsingResult::SyntaxError;
 }