mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 16:17:34 +00:00
LibWeb: Allow optional values to be missing when parsing <position>
s
This commit is contained in:
parent
b7d436fe1b
commit
c02163c31f
2 changed files with 30 additions and 22 deletions
|
@ -2644,7 +2644,7 @@ RefPtr<StyleValue> Parser::parse_conic_gradient_function(ComponentValue const& c
|
||||||
return ConicGradientStyleValue::create(from_angle, at_position, move(*color_stops), repeating_gradient);
|
return ConicGradientStyleValue::create(from_angle, at_position, move(*color_stops), repeating_gradient);
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& tokens)
|
Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& tokens, PositionValue initial_value)
|
||||||
{
|
{
|
||||||
auto transaction = tokens.begin_transaction();
|
auto transaction = tokens.begin_transaction();
|
||||||
tokens.skip_whitespace();
|
tokens.skip_whitespace();
|
||||||
|
@ -2700,7 +2700,7 @@ Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& toke
|
||||||
// [ left | center | right ] || [ top | center | bottom ]
|
// [ left | center | right ] || [ top | center | bottom ]
|
||||||
auto alternation_1 = [&]() -> Optional<PositionValue> {
|
auto alternation_1 = [&]() -> Optional<PositionValue> {
|
||||||
auto transaction = tokens.begin_transaction();
|
auto transaction = tokens.begin_transaction();
|
||||||
PositionValue position {};
|
PositionValue position = initial_value;
|
||||||
auto& first_token = tokens.next_token();
|
auto& first_token = tokens.next_token();
|
||||||
if (!first_token.is(Token::Type::Ident))
|
if (!first_token.is(Token::Type::Ident))
|
||||||
return {};
|
return {};
|
||||||
|
@ -2709,15 +2709,17 @@ Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& toke
|
||||||
auto horizontal_position = parse_horizontal_preset(ident);
|
auto horizontal_position = parse_horizontal_preset(ident);
|
||||||
if (horizontal_position.has_value()) {
|
if (horizontal_position.has_value()) {
|
||||||
position.horizontal_position = *horizontal_position;
|
position.horizontal_position = *horizontal_position;
|
||||||
|
auto transaction_optional_parse = tokens.begin_transaction();
|
||||||
tokens.skip_whitespace();
|
tokens.skip_whitespace();
|
||||||
if (tokens.has_next_token()) {
|
if (tokens.has_next_token()) {
|
||||||
auto& second_token = tokens.next_token();
|
auto& second_token = tokens.next_token();
|
||||||
if (!second_token.is(Token::Type::Ident))
|
if (second_token.is(Token::Type::Ident)) {
|
||||||
return {};
|
auto vertical_position = parse_vertical_preset(second_token.token().ident());
|
||||||
auto vertical_position = parse_vertical_preset(second_token.token().ident());
|
if (vertical_position.has_value()) {
|
||||||
if (!vertical_position.has_value())
|
transaction_optional_parse.commit();
|
||||||
return {};
|
position.vertical_position = *vertical_position;
|
||||||
position.vertical_position = *vertical_position;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// <vertical-position> <horizontal-position>?
|
// <vertical-position> <horizontal-position>?
|
||||||
|
@ -2725,14 +2727,17 @@ Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& toke
|
||||||
if (!vertical_position.has_value())
|
if (!vertical_position.has_value())
|
||||||
return {};
|
return {};
|
||||||
position.vertical_position = *vertical_position;
|
position.vertical_position = *vertical_position;
|
||||||
|
auto transaction_optional_parse = tokens.begin_transaction();
|
||||||
|
tokens.skip_whitespace();
|
||||||
if (tokens.has_next_token()) {
|
if (tokens.has_next_token()) {
|
||||||
auto& second_token = tokens.next_token();
|
auto& second_token = tokens.next_token();
|
||||||
if (!second_token.is(Token::Type::Ident))
|
if (second_token.is(Token::Type::Ident)) {
|
||||||
return {};
|
auto horizontal_position = parse_horizontal_preset(second_token.token().ident());
|
||||||
auto horizontal_position = parse_horizontal_preset(second_token.token().ident());
|
if (horizontal_position.has_value()) {
|
||||||
if (!horizontal_position.has_value())
|
transaction_optional_parse.commit();
|
||||||
return {};
|
position.horizontal_position = *horizontal_position;
|
||||||
position.horizontal_position = *horizontal_position;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
@ -2743,7 +2748,7 @@ Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& toke
|
||||||
// [ top | center | bottom | <length-percentage> ]?
|
// [ top | center | bottom | <length-percentage> ]?
|
||||||
auto alternation_2 = [&]() -> Optional<PositionValue> {
|
auto alternation_2 = [&]() -> Optional<PositionValue> {
|
||||||
auto transaction = tokens.begin_transaction();
|
auto transaction = tokens.begin_transaction();
|
||||||
PositionValue position {};
|
PositionValue position = initial_value;
|
||||||
auto& first_token = tokens.next_token();
|
auto& first_token = tokens.next_token();
|
||||||
if (first_token.is(Token::Type::Ident)) {
|
if (first_token.is(Token::Type::Ident)) {
|
||||||
auto horizontal_position = parse_horizontal_preset(first_token.token().ident());
|
auto horizontal_position = parse_horizontal_preset(first_token.token().ident());
|
||||||
|
@ -2756,19 +2761,22 @@ Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& toke
|
||||||
return {};
|
return {};
|
||||||
position.horizontal_position = dimension->length_percentage();
|
position.horizontal_position = dimension->length_percentage();
|
||||||
}
|
}
|
||||||
|
auto transaction_optional_parse = tokens.begin_transaction();
|
||||||
tokens.skip_whitespace();
|
tokens.skip_whitespace();
|
||||||
if (tokens.has_next_token()) {
|
if (tokens.has_next_token()) {
|
||||||
auto& second_token = tokens.next_token();
|
auto& second_token = tokens.next_token();
|
||||||
if (second_token.is(Token::Type::Ident)) {
|
if (second_token.is(Token::Type::Ident)) {
|
||||||
auto vertical_position = parse_vertical_preset(second_token.token().ident());
|
auto vertical_position = parse_vertical_preset(second_token.token().ident());
|
||||||
if (!vertical_position.has_value())
|
if (vertical_position.has_value()) {
|
||||||
return {};
|
transaction_optional_parse.commit();
|
||||||
position.vertical_position = *vertical_position;
|
position.vertical_position = *vertical_position;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
auto dimension = parse_dimension(second_token);
|
auto dimension = parse_dimension(second_token);
|
||||||
if (!dimension.has_value() || !dimension->is_length_percentage())
|
if (dimension.has_value() && dimension->is_length_percentage()) {
|
||||||
return {};
|
transaction_optional_parse.commit();
|
||||||
position.vertical_position = dimension->length_percentage();
|
position.vertical_position = dimension->length_percentage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
|
@ -255,7 +255,7 @@ private:
|
||||||
Optional<GridMinMax> parse_min_max(Vector<ComponentValue> const&);
|
Optional<GridMinMax> parse_min_max(Vector<ComponentValue> const&);
|
||||||
Optional<GridRepeat> parse_repeat(Vector<ComponentValue> const&);
|
Optional<GridRepeat> parse_repeat(Vector<ComponentValue> const&);
|
||||||
Optional<ExplicitGridTrack> parse_track_sizing_function(ComponentValue const&);
|
Optional<ExplicitGridTrack> parse_track_sizing_function(ComponentValue const&);
|
||||||
Optional<PositionValue> parse_position(TokenStream<ComponentValue>&);
|
Optional<PositionValue> parse_position(TokenStream<ComponentValue>&, PositionValue initial_value = PositionValue::center());
|
||||||
|
|
||||||
enum class AllowedDataUrlType {
|
enum class AllowedDataUrlType {
|
||||||
None,
|
None,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue