diff --git a/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp b/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp index 673e3247711..d85ff71f6a2 100644 --- a/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/SelectorParsing.cpp @@ -664,7 +664,7 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec } if (pseudo_class_token.is_function()) { - auto parse_an_plus_b_selector = [this](auto pseudo_class, Vector const& function_values, bool allow_of) -> ParseErrorOr { + auto parse_an_plus_b_selector = [this](auto pseudo_class, Vector const& function_values, bool allow_of = false) -> ParseErrorOr { auto tokens = TokenStream(function_values); auto an_plus_b_pattern = parse_a_n_plus_b_pattern(tokens); if (!an_plus_b_pattern.has_value()) { @@ -682,7 +682,7 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec .type = Selector::SimpleSelector::Type::PseudoClass, .value = Selector::SimpleSelector::PseudoClassSelector { .type = pseudo_class, - .an_plus_b_patterns = Vector { an_plus_b_pattern.release_value() } } + .an_plus_b_pattern = an_plus_b_pattern.release_value() } }; } @@ -705,42 +705,11 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec .type = Selector::SimpleSelector::Type::PseudoClass, .value = Selector::SimpleSelector::PseudoClassSelector { .type = pseudo_class, - .an_plus_b_patterns = Vector { an_plus_b_pattern.release_value() }, + .an_plus_b_pattern = an_plus_b_pattern.release_value(), .argument_selector_list = move(selector_list) } }; }; - auto parse_an_plus_b_list_selector = [this](auto pseudo_class, Vector const& function_values) -> ParseErrorOr { - TokenStream tokens { function_values }; - auto list = parse_a_comma_separated_list_of_component_values(tokens); - Vector an_plus_b_patterns; - - for (auto const& values : list) { - TokenStream pattern_tokens { values }; - auto an_plus_b_pattern = parse_a_n_plus_b_pattern(pattern_tokens); - if (!an_plus_b_pattern.has_value()) { - ErrorReporter::the().report(InvalidPseudoClassOrElementError { - .name = MUST(String::formatted(":{}", pseudo_class_name(pseudo_class))), - .value_string = pattern_tokens.dump_string(), - .description = "Invalid An+B format."_string, - }); - return ParseError::SyntaxError; - } - an_plus_b_patterns.append(an_plus_b_pattern.release_value()); - } - - tokens.discard_whitespace(); - if (tokens.has_next_token()) - return ParseError::SyntaxError; - - return Selector::SimpleSelector { - .type = Selector::SimpleSelector::Type::PseudoClass, - .value = Selector::SimpleSelector::PseudoClassSelector { - .type = pseudo_class, - .an_plus_b_patterns = move(an_plus_b_patterns) } - }; - }; - auto const& pseudo_function = pseudo_class_token.function(); auto maybe_pseudo_class = pseudo_class_from_string(pseudo_function.name); if (!maybe_pseudo_class.has_value()) { @@ -787,8 +756,6 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec switch (metadata.parameter_type) { case PseudoClassMetadata::ParameterType::ANPlusB: return parse_an_plus_b_selector(pseudo_class, pseudo_function.value, false); - case PseudoClassMetadata::ParameterType::ANPlusBList: - return parse_an_plus_b_list_selector(pseudo_class, pseudo_function.value); case PseudoClassMetadata::ParameterType::ANPlusBOf: return parse_an_plus_b_selector(pseudo_class, pseudo_function.value, true); case PseudoClassMetadata::ParameterType::CompoundSelector: { diff --git a/Libraries/LibWeb/CSS/Selector.cpp b/Libraries/LibWeb/CSS/Selector.cpp index d4d4eb354f8..f010bb15901 100644 --- a/Libraries/LibWeb/CSS/Selector.cpp +++ b/Libraries/LibWeb/CSS/Selector.cpp @@ -462,12 +462,7 @@ String Selector::SimpleSelector::serialize() const case PseudoClassMetadata::ParameterType::ANPlusB: case PseudoClassMetadata::ParameterType::ANPlusBOf: // The result of serializing the value using the rules to serialize an value. - s.append(pseudo_class.an_plus_b_patterns.first().serialize()); - break; - case PseudoClassMetadata::ParameterType::ANPlusBList: - serialize_a_comma_separated_list(s, pseudo_class.an_plus_b_patterns, [](auto& builder, ANPlusBPattern const& an_plus_b) { - builder.append(an_plus_b.serialize()); - }); + s.append(pseudo_class.an_plus_b_pattern.serialize()); break; case PseudoClassMetadata::ParameterType::CompoundSelector: case PseudoClassMetadata::ParameterType::ForgivingSelectorList: diff --git a/Libraries/LibWeb/CSS/Selector.h b/Libraries/LibWeb/CSS/Selector.h index 8a908f2b0d6..5fc8e5a650b 100644 --- a/Libraries/LibWeb/CSS/Selector.h +++ b/Libraries/LibWeb/CSS/Selector.h @@ -93,8 +93,8 @@ public: struct PseudoClassSelector { PseudoClass type; - // Used for the :nth-*() pseudo-classes, and :heading() - Vector an_plus_b_patterns {}; + // Used for the :nth-*() pseudo-classes + ANPlusBPattern an_plus_b_pattern {}; // FIXME: This would make more sense as part of SelectorList but that's currently a `using` bool is_forgiving { false }; diff --git a/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Libraries/LibWeb/CSS/SelectorEngine.cpp index f6978eb6c8b..49df556062c 100644 --- a/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -670,8 +670,6 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla case CSS::PseudoClass::NthLastChild: case CSS::PseudoClass::NthOfType: case CSS::PseudoClass::NthLastOfType: { - auto& an_plus_b = pseudo_class.an_plus_b_patterns.first(); - auto const* parent = element.parent(); if (!parent) return false; @@ -726,7 +724,7 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla default: VERIFY_NOT_REACHED(); } - return an_plus_b.matches(index); + return pseudo_class.an_plus_b_pattern.matches(index); } case CSS::PseudoClass::Playing: { if (!is(element)) diff --git a/Libraries/LibWeb/Dump.cpp b/Libraries/LibWeb/Dump.cpp index ce9bcca9165..49a4fa0380c 100644 --- a/Libraries/LibWeb/Dump.cpp +++ b/Libraries/LibWeb/Dump.cpp @@ -555,8 +555,7 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector, int in break; case CSS::PseudoClassMetadata::ParameterType::ANPlusB: case CSS::PseudoClassMetadata::ParameterType::ANPlusBOf: { - auto& an_plus_b = pseudo_class.an_plus_b_patterns.first(); - builder.appendff("(step={}, offset={}", an_plus_b.step_size, an_plus_b.offset); + builder.appendff("(step={}, offset={}", pseudo_class.an_plus_b_pattern.step_size, pseudo_class.an_plus_b_pattern.offset); if (!pseudo_class.argument_selector_list.is_empty()) { builder.append(", selectors=[\n"sv); for (auto const& child_selector : pseudo_class.argument_selector_list) @@ -567,16 +566,6 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector, int in builder.append(")"sv); break; } - case CSS::PseudoClassMetadata::ParameterType::ANPlusBList: { - builder.append("([\n"sv); - for (auto& an_plus_b : pseudo_class.an_plus_b_patterns) { - indent(builder, indent_levels + 2); - builder.appendff("(step={}, offset={})\n", an_plus_b.step_size, an_plus_b.offset); - } - indent(builder, indent_levels + 1); - builder.append("])"sv); - break; - } case CSS::PseudoClassMetadata::ParameterType::CompoundSelector: case CSS::PseudoClassMetadata::ParameterType::ForgivingSelectorList: case CSS::PseudoClassMetadata::ParameterType::ForgivingRelativeSelectorList: diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPseudoClass.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPseudoClass.cpp index 53ba1e031d7..8c9ec4d6892 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPseudoClass.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPseudoClass.cpp @@ -70,7 +70,6 @@ struct PseudoClassMetadata { enum class ParameterType { None, ANPlusB, - ANPlusBList, ANPlusBOf, CompoundSelector, ForgivingSelectorList, @@ -170,8 +169,6 @@ PseudoClassMetadata pseudo_class_metadata(PseudoClass pseudo_class) if (is_valid_as_function) { if (argument_string == ""sv) { parameter_type = "ANPlusB"_string; - } else if (argument_string == "#"sv) { - parameter_type = "ANPlusBList"_string; } else if (argument_string == ""sv) { parameter_type = "ANPlusBOf"_string; } else if (argument_string == ""sv) {