mirror of
https://github.com/RGBCube/serenity
synced 2025-07-02 23:42:13 +00:00
LibWeb+Base: Fix An+B of foo
parsing
When I wrote the An+B parser, it was guaranteed to have no non-whitespace tokens after it. This is no longer true with the `of foo` syntax, so this patch corrects the logic when there is no `+B` segment. This makes this case shown on Twitter work correctly. :^) https://twitter.com/simevidas/status/1506657566012678151
This commit is contained in:
parent
5aad32b504
commit
c914e732d2
2 changed files with 37 additions and 12 deletions
|
@ -4491,12 +4491,14 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
|
|||
if (is_n_dimension(first_value)) {
|
||||
a = first_value.token().dimension_value_int();
|
||||
|
||||
values.skip_whitespace();
|
||||
auto& second_value = values.next_token();
|
||||
if (second_value.is(Token::Type::EndOfFile)) {
|
||||
if (!values.has_next_token() || values.peek_token().is(Token::Type::Whitespace)) {
|
||||
// <n-dimension>
|
||||
return make_return_value();
|
||||
} else if (is_signed_integer(second_value)) {
|
||||
}
|
||||
|
||||
values.skip_whitespace();
|
||||
auto& second_value = values.next_token();
|
||||
if (is_signed_integer(second_value)) {
|
||||
// <n-dimension> <signed-integer>
|
||||
b = second_value.token().to_integer();
|
||||
return make_return_value();
|
||||
|
@ -4552,12 +4554,14 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
|
|||
// -n ['+' | '-'] <signless-integer>
|
||||
if (is_dashn(first_value)) {
|
||||
a = -1;
|
||||
values.skip_whitespace();
|
||||
auto& second_value = values.next_token();
|
||||
if (second_value.is(Token::Type::EndOfFile)) {
|
||||
if (!values.has_next_token() || values.peek_token().is(Token::Type::Whitespace)) {
|
||||
// -n
|
||||
return make_return_value();
|
||||
} else if (is_signed_integer(second_value)) {
|
||||
}
|
||||
|
||||
values.skip_whitespace();
|
||||
auto& second_value = values.next_token();
|
||||
if (is_signed_integer(second_value)) {
|
||||
// -n <signed-integer>
|
||||
b = second_value.token().to_integer();
|
||||
return make_return_value();
|
||||
|
@ -4605,12 +4609,14 @@ Optional<Selector::SimpleSelector::ANPlusBPattern> Parser::parse_a_n_plus_b_patt
|
|||
// '+'?† n ['+' | '-'] <signless-integer>
|
||||
if (is_n(first_after_plus)) {
|
||||
a = 1;
|
||||
values.skip_whitespace();
|
||||
auto& second_value = values.next_token();
|
||||
if (second_value.is(Token::Type::EndOfFile)) {
|
||||
if (!values.has_next_token() || values.peek_token().is(Token::Type::Whitespace)) {
|
||||
// '+'?† n
|
||||
return make_return_value();
|
||||
} else if (is_signed_integer(second_value)) {
|
||||
}
|
||||
|
||||
values.skip_whitespace();
|
||||
auto& second_value = values.next_token();
|
||||
if (is_signed_integer(second_value)) {
|
||||
// '+'?† n <signed-integer>
|
||||
b = second_value.token().to_integer();
|
||||
return make_return_value();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue