mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-22 09:18:55 +00:00
LibWeb/CSS: Remove unused <an+b>#
code for pseudo-classes
This revertse7890429aa
and partly revertsa59c15481f
. The one pseudo-class that accepted multiple of these was :heading(), and since that got changed to take integers instead, there's no need to keep this extra complexity (and memory usage) around.
This commit is contained in:
parent
d461e96f40
commit
f93819eda2
Notes:
github-actions[bot]
2025-08-28 10:41:23 +00:00
Author: https://github.com/AtkinsSJ
Commit: f93819eda2
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6009
Reviewed-by: https://github.com/gmta ✅
6 changed files with 8 additions and 62 deletions
|
@ -664,7 +664,7 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pseudo_class_token.is_function()) {
|
if (pseudo_class_token.is_function()) {
|
||||||
auto parse_an_plus_b_selector = [this](auto pseudo_class, Vector<ComponentValue> const& function_values, bool allow_of) -> ParseErrorOr<Selector::SimpleSelector> {
|
auto parse_an_plus_b_selector = [this](auto pseudo_class, Vector<ComponentValue> const& function_values, bool allow_of = false) -> ParseErrorOr<Selector::SimpleSelector> {
|
||||||
auto tokens = TokenStream<ComponentValue>(function_values);
|
auto tokens = TokenStream<ComponentValue>(function_values);
|
||||||
auto an_plus_b_pattern = parse_a_n_plus_b_pattern(tokens);
|
auto an_plus_b_pattern = parse_a_n_plus_b_pattern(tokens);
|
||||||
if (!an_plus_b_pattern.has_value()) {
|
if (!an_plus_b_pattern.has_value()) {
|
||||||
|
@ -682,7 +682,7 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
||||||
.type = Selector::SimpleSelector::Type::PseudoClass,
|
.type = Selector::SimpleSelector::Type::PseudoClass,
|
||||||
.value = Selector::SimpleSelector::PseudoClassSelector {
|
.value = Selector::SimpleSelector::PseudoClassSelector {
|
||||||
.type = pseudo_class,
|
.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<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
||||||
.type = Selector::SimpleSelector::Type::PseudoClass,
|
.type = Selector::SimpleSelector::Type::PseudoClass,
|
||||||
.value = Selector::SimpleSelector::PseudoClassSelector {
|
.value = Selector::SimpleSelector::PseudoClassSelector {
|
||||||
.type = pseudo_class,
|
.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) }
|
.argument_selector_list = move(selector_list) }
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
auto parse_an_plus_b_list_selector = [this](auto pseudo_class, Vector<ComponentValue> const& function_values) -> ParseErrorOr<Selector::SimpleSelector> {
|
|
||||||
TokenStream tokens { function_values };
|
|
||||||
auto list = parse_a_comma_separated_list_of_component_values(tokens);
|
|
||||||
Vector<Selector::SimpleSelector::ANPlusBPattern> 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 const& pseudo_function = pseudo_class_token.function();
|
||||||
auto maybe_pseudo_class = pseudo_class_from_string(pseudo_function.name);
|
auto maybe_pseudo_class = pseudo_class_from_string(pseudo_function.name);
|
||||||
if (!maybe_pseudo_class.has_value()) {
|
if (!maybe_pseudo_class.has_value()) {
|
||||||
|
@ -787,8 +756,6 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
||||||
switch (metadata.parameter_type) {
|
switch (metadata.parameter_type) {
|
||||||
case PseudoClassMetadata::ParameterType::ANPlusB:
|
case PseudoClassMetadata::ParameterType::ANPlusB:
|
||||||
return parse_an_plus_b_selector(pseudo_class, pseudo_function.value, false);
|
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:
|
case PseudoClassMetadata::ParameterType::ANPlusBOf:
|
||||||
return parse_an_plus_b_selector(pseudo_class, pseudo_function.value, true);
|
return parse_an_plus_b_selector(pseudo_class, pseudo_function.value, true);
|
||||||
case PseudoClassMetadata::ParameterType::CompoundSelector: {
|
case PseudoClassMetadata::ParameterType::CompoundSelector: {
|
||||||
|
|
|
@ -462,12 +462,7 @@ String Selector::SimpleSelector::serialize() const
|
||||||
case PseudoClassMetadata::ParameterType::ANPlusB:
|
case PseudoClassMetadata::ParameterType::ANPlusB:
|
||||||
case PseudoClassMetadata::ParameterType::ANPlusBOf:
|
case PseudoClassMetadata::ParameterType::ANPlusBOf:
|
||||||
// The result of serializing the value using the rules to serialize an <an+b> value.
|
// The result of serializing the value using the rules to serialize an <an+b> value.
|
||||||
s.append(pseudo_class.an_plus_b_patterns.first().serialize());
|
s.append(pseudo_class.an_plus_b_pattern.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());
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
case PseudoClassMetadata::ParameterType::CompoundSelector:
|
case PseudoClassMetadata::ParameterType::CompoundSelector:
|
||||||
case PseudoClassMetadata::ParameterType::ForgivingSelectorList:
|
case PseudoClassMetadata::ParameterType::ForgivingSelectorList:
|
||||||
|
|
|
@ -93,8 +93,8 @@ public:
|
||||||
struct PseudoClassSelector {
|
struct PseudoClassSelector {
|
||||||
PseudoClass type;
|
PseudoClass type;
|
||||||
|
|
||||||
// Used for the :nth-*() pseudo-classes, and :heading()
|
// Used for the :nth-*() pseudo-classes
|
||||||
Vector<ANPlusBPattern> an_plus_b_patterns {};
|
ANPlusBPattern an_plus_b_pattern {};
|
||||||
|
|
||||||
// FIXME: This would make more sense as part of SelectorList but that's currently a `using`
|
// FIXME: This would make more sense as part of SelectorList but that's currently a `using`
|
||||||
bool is_forgiving { false };
|
bool is_forgiving { false };
|
||||||
|
|
|
@ -670,8 +670,6 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla
|
||||||
case CSS::PseudoClass::NthLastChild:
|
case CSS::PseudoClass::NthLastChild:
|
||||||
case CSS::PseudoClass::NthOfType:
|
case CSS::PseudoClass::NthOfType:
|
||||||
case CSS::PseudoClass::NthLastOfType: {
|
case CSS::PseudoClass::NthLastOfType: {
|
||||||
auto& an_plus_b = pseudo_class.an_plus_b_patterns.first();
|
|
||||||
|
|
||||||
auto const* parent = element.parent();
|
auto const* parent = element.parent();
|
||||||
if (!parent)
|
if (!parent)
|
||||||
return false;
|
return false;
|
||||||
|
@ -726,7 +724,7 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla
|
||||||
default:
|
default:
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
return an_plus_b.matches(index);
|
return pseudo_class.an_plus_b_pattern.matches(index);
|
||||||
}
|
}
|
||||||
case CSS::PseudoClass::Playing: {
|
case CSS::PseudoClass::Playing: {
|
||||||
if (!is<HTML::HTMLMediaElement>(element))
|
if (!is<HTML::HTMLMediaElement>(element))
|
||||||
|
|
|
@ -555,8 +555,7 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector, int in
|
||||||
break;
|
break;
|
||||||
case CSS::PseudoClassMetadata::ParameterType::ANPlusB:
|
case CSS::PseudoClassMetadata::ParameterType::ANPlusB:
|
||||||
case CSS::PseudoClassMetadata::ParameterType::ANPlusBOf: {
|
case CSS::PseudoClassMetadata::ParameterType::ANPlusBOf: {
|
||||||
auto& an_plus_b = pseudo_class.an_plus_b_patterns.first();
|
builder.appendff("(step={}, offset={}", pseudo_class.an_plus_b_pattern.step_size, pseudo_class.an_plus_b_pattern.offset);
|
||||||
builder.appendff("(step={}, offset={}", an_plus_b.step_size, an_plus_b.offset);
|
|
||||||
if (!pseudo_class.argument_selector_list.is_empty()) {
|
if (!pseudo_class.argument_selector_list.is_empty()) {
|
||||||
builder.append(", selectors=[\n"sv);
|
builder.append(", selectors=[\n"sv);
|
||||||
for (auto const& child_selector : pseudo_class.argument_selector_list)
|
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);
|
builder.append(")"sv);
|
||||||
break;
|
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::CompoundSelector:
|
||||||
case CSS::PseudoClassMetadata::ParameterType::ForgivingSelectorList:
|
case CSS::PseudoClassMetadata::ParameterType::ForgivingSelectorList:
|
||||||
case CSS::PseudoClassMetadata::ParameterType::ForgivingRelativeSelectorList:
|
case CSS::PseudoClassMetadata::ParameterType::ForgivingRelativeSelectorList:
|
||||||
|
|
|
@ -70,7 +70,6 @@ struct PseudoClassMetadata {
|
||||||
enum class ParameterType {
|
enum class ParameterType {
|
||||||
None,
|
None,
|
||||||
ANPlusB,
|
ANPlusB,
|
||||||
ANPlusBList,
|
|
||||||
ANPlusBOf,
|
ANPlusBOf,
|
||||||
CompoundSelector,
|
CompoundSelector,
|
||||||
ForgivingSelectorList,
|
ForgivingSelectorList,
|
||||||
|
@ -170,8 +169,6 @@ PseudoClassMetadata pseudo_class_metadata(PseudoClass pseudo_class)
|
||||||
if (is_valid_as_function) {
|
if (is_valid_as_function) {
|
||||||
if (argument_string == "<an+b>"sv) {
|
if (argument_string == "<an+b>"sv) {
|
||||||
parameter_type = "ANPlusB"_string;
|
parameter_type = "ANPlusB"_string;
|
||||||
} else if (argument_string == "<an+b>#"sv) {
|
|
||||||
parameter_type = "ANPlusBList"_string;
|
|
||||||
} else if (argument_string == "<an+b-of>"sv) {
|
} else if (argument_string == "<an+b-of>"sv) {
|
||||||
parameter_type = "ANPlusBOf"_string;
|
parameter_type = "ANPlusBOf"_string;
|
||||||
} else if (argument_string == "<compound-selector>"sv) {
|
} else if (argument_string == "<compound-selector>"sv) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue