diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index a959f843f1..4f538c2e68 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -496,20 +496,12 @@ Result 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; } diff --git a/Userland/Libraries/LibWeb/CSS/Selector.cpp b/Userland/Libraries/LibWeb/CSS/Selector.cpp index 385e45dc90..e088c8fefa 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.cpp +++ b/Userland/Libraries/LibWeb/CSS/Selector.cpp @@ -261,4 +261,20 @@ String serialize_a_group_of_selectors(NonnullRefPtrVector const& selec return builder.to_string(); } +Optional 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 {}; +} + } diff --git a/Userland/Libraries/LibWeb/CSS/Selector.h b/Userland/Libraries/LibWeb/CSS/Selector.h index 44cb1ed7aa..9ee035730f 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.h +++ b/Userland/Libraries/LibWeb/CSS/Selector.h @@ -165,6 +165,8 @@ constexpr StringView pseudo_element_name(Selector::PseudoElement pseudo_element) VERIFY_NOT_REACHED(); } +Optional pseudo_element_from_string(StringView); + constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Type pseudo_class) { switch (pseudo_class) {