1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 22:27:42 +00:00

LibWeb: Refactor parsing a GridTrackSize

This functionality was duplicated and this way it is more clean. It will
also be used when parsing minmax() values.
This commit is contained in:
martinfalisse 2022-10-15 12:58:32 +02:00 committed by Andreas Kling
parent 202620e80c
commit 3cba4b6e41

View file

@ -5409,6 +5409,28 @@ RefPtr<StyleValue> Parser::parse_as_css_value(PropertyID property_id)
RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const& component_values) RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const& component_values)
{ {
auto parse_grid_track_size = [&](ComponentValue const& component_value) -> Optional<GridTrackSize> {
// FIXME: Parse calc here if necessary
if (component_value.is_function())
return {};
auto token = component_value.token();
if (token.is(Token::Type::Dimension) && token.dimension_unit().equals_ignoring_case("fr"sv)) {
float numeric_value = token.dimension_value();
if (numeric_value)
return GridTrackSize(numeric_value);
}
if (token.is(Token::Type::Ident) && token.ident().equals_ignoring_case("auto"sv))
return GridTrackSize::make_auto();
auto dimension = parse_dimension(token);
if (!dimension.has_value())
return {};
if (dimension->is_length())
return GridTrackSize(dimension->length());
else if (dimension->is_percentage())
return GridTrackSize(dimension->percentage());
return {};
};
Vector<CSS::MetaGridTrackSize> params; Vector<CSS::MetaGridTrackSize> params;
for (auto const& component_value : component_values) { for (auto const& component_value : component_values) {
if (component_value.is_function()) { if (component_value.is_function()) {
@ -5453,20 +5475,10 @@ RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const&
} else if (current_component_value.is_block()) { } else if (current_component_value.is_block()) {
// FIXME: Implement things like grid-template-columns: repeat(1, [col-start] 8); // FIXME: Implement things like grid-template-columns: repeat(1, [col-start] 8);
} else { } else {
current_token = current_component_value.token(); auto grid_track_size = parse_grid_track_size(current_component_value);
if (current_token.type() == Token::Type::Dimension && current_token.dimension_unit().equals_ignoring_case("fr"sv)) { if (!grid_track_size.has_value())
float numeric_value = current_token.dimension_value(); return GridTrackSizeStyleValue::create({});
if (numeric_value) repeat_params.append(grid_track_size.value());
repeat_params.append(GridTrackSize(numeric_value));
} else {
auto dimension = parse_dimension(current_token);
if (!dimension.has_value())
return GridTrackSizeStyleValue::create({});
if (dimension->is_length())
repeat_params.append(GridTrackSize(dimension->length()));
else if (dimension->is_percentage())
repeat_params.append(GridTrackSize(dimension->percentage()));
}
} }
part_two_tokens.skip_whitespace(); part_two_tokens.skip_whitespace();
if (!part_two_tokens.has_next_token()) if (!part_two_tokens.has_next_token())
@ -5508,22 +5520,10 @@ RefPtr<StyleValue> Parser::parse_grid_track_sizes(Vector<ComponentValue> const&
params.append(GridTrackSize(Length::make_auto())); params.append(GridTrackSize(Length::make_auto()));
continue; continue;
} }
if (component_value.token().type() == Token::Type::Dimension) { auto grid_track_size = parse_grid_track_size(component_value);
float numeric_value = component_value.token().dimension_value(); if (!grid_track_size.has_value())
auto unit_string = component_value.token().dimension_unit();
if (unit_string.equals_ignoring_case("fr"sv) && numeric_value) {
params.append(GridTrackSize(numeric_value));
continue;
}
}
auto dimension = parse_dimension(component_value);
if (!dimension.has_value())
return GridTrackSizeStyleValue::create({}); return GridTrackSizeStyleValue::create({});
if (dimension->is_length()) params.append(grid_track_size.value());
params.append(GridTrackSize(dimension->length()));
if (dimension->is_percentage())
params.append(GridTrackSize(dimension->percentage()));
} }
return GridTrackSizeStyleValue::create(params); return GridTrackSizeStyleValue::create(params);
} }