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

LibWeb: Move pseudo-element-from-string code into Selector

Sam Atkins 3 éve
szülő
commit
1c18bb13a2

+ 3 - 11
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -496,20 +496,12 @@ Result<Selector::SimpleSelector, Parser::ParsingResult> Parser::parse_simple_sel
             if (has_ignored_vendor_prefix(pseudo_name))
                 return ParsingResult::IncludesIgnoredVendorPrefix;
 
-            if (pseudo_name.equals_ignoring_case("after")) {
-                simple_selector.pseudo_element = Selector::PseudoElement::After;
-            } else if (pseudo_name.equals_ignoring_case("before")) {
-                simple_selector.pseudo_element = Selector::PseudoElement::Before;
-            } else if (pseudo_name.equals_ignoring_case("first-letter")) {
-                simple_selector.pseudo_element = Selector::PseudoElement::FirstLetter;
-            } else if (pseudo_name.equals_ignoring_case("first-line")) {
-                simple_selector.pseudo_element = Selector::PseudoElement::FirstLine;
-            } else if (pseudo_name.equals_ignoring_case("marker")) {
-                simple_selector.pseudo_element = Selector::PseudoElement::Marker;
-            } else {
+            auto pseudo_element = pseudo_element_from_string(pseudo_name);
+            if (!pseudo_element.has_value()) {
                 dbgln_if(CSS_PARSER_DEBUG, "Unrecognized pseudo-element: '::{}'", pseudo_name);
                 return ParsingResult::SyntaxError;
             }
+            simple_selector.pseudo_element = pseudo_element.value();
 
             return simple_selector;
         }

+ 16 - 0
Userland/Libraries/LibWeb/CSS/Selector.cpp

@@ -261,4 +261,20 @@ String serialize_a_group_of_selectors(NonnullRefPtrVector<Selector> const& selec
     return builder.to_string();
 }
 
+Optional<Selector::PseudoElement> pseudo_element_from_string(StringView name)
+{
+    if (name.equals_ignoring_case("after")) {
+        return Selector::PseudoElement::After;
+    } else if (name.equals_ignoring_case("before")) {
+        return Selector::PseudoElement::Before;
+    } else if (name.equals_ignoring_case("first-letter")) {
+        return Selector::PseudoElement::FirstLetter;
+    } else if (name.equals_ignoring_case("first-line")) {
+        return Selector::PseudoElement::FirstLine;
+    } else if (name.equals_ignoring_case("marker")) {
+        return Selector::PseudoElement::Marker;
+    }
+    return {};
+}
+
 }

+ 2 - 0
Userland/Libraries/LibWeb/CSS/Selector.h

@@ -165,6 +165,8 @@ constexpr StringView pseudo_element_name(Selector::PseudoElement pseudo_element)
     VERIFY_NOT_REACHED();
 }
 
+Optional<Selector::PseudoElement> pseudo_element_from_string(StringView);
+
 constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Type pseudo_class)
 {
     switch (pseudo_class) {