mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 15:48:12 +00:00
LibWeb: Parse grid-column and grid-row CSS values
This commit is contained in:
parent
44d08b81b7
commit
7bb3a8d646
5 changed files with 131 additions and 0 deletions
|
@ -5352,6 +5352,46 @@ RefPtr<StyleValue> Parser::parse_grid_track_placement(Vector<ComponentValue> con
|
|||
return {};
|
||||
}
|
||||
|
||||
RefPtr<StyleValue> Parser::parse_grid_track_placement_shorthand_value(Vector<ComponentValue> const& component_values)
|
||||
{
|
||||
auto tokens = TokenStream { component_values };
|
||||
auto current_token = tokens.next_token().token();
|
||||
|
||||
if (!tokens.has_next_token()) {
|
||||
if (current_token.to_string() == "auto"sv)
|
||||
return GridTrackPlacementShorthandStyleValue::create(CSS::GridTrackPlacement::make_auto());
|
||||
if (current_token.is(Token::Type::Number) && current_token.number().is_integer())
|
||||
return GridTrackPlacementShorthandStyleValue::create(CSS::GridTrackPlacement(current_token.number_value()));
|
||||
return {};
|
||||
}
|
||||
|
||||
auto calculate_grid_track_placement = [](auto& current_token, auto& tokens) -> CSS::GridTrackPlacement {
|
||||
auto grid_track_placement = CSS::GridTrackPlacement();
|
||||
if (current_token.to_string() == "span"sv) {
|
||||
grid_track_placement.set_has_span(true);
|
||||
tokens.skip_whitespace();
|
||||
current_token = tokens.next_token().token();
|
||||
}
|
||||
if (current_token.is(Token::Type::Number) && current_token.number().is_integer())
|
||||
grid_track_placement.set_position(static_cast<int>(current_token.number_value()));
|
||||
return grid_track_placement;
|
||||
};
|
||||
|
||||
auto first_grid_track_placement = calculate_grid_track_placement(current_token, tokens);
|
||||
if (!tokens.has_next_token())
|
||||
return GridTrackPlacementShorthandStyleValue::create(CSS::GridTrackPlacement(first_grid_track_placement));
|
||||
|
||||
tokens.skip_whitespace();
|
||||
current_token = tokens.next_token().token();
|
||||
tokens.skip_whitespace();
|
||||
current_token = tokens.next_token().token();
|
||||
|
||||
auto second_grid_track_placement = calculate_grid_track_placement(current_token, tokens);
|
||||
if (!tokens.has_next_token())
|
||||
return GridTrackPlacementShorthandStyleValue::create(GridTrackPlacementStyleValue::create(first_grid_track_placement), GridTrackPlacementStyleValue::create(second_grid_track_placement));
|
||||
return {};
|
||||
}
|
||||
|
||||
Parser::ParseErrorOr<NonnullRefPtr<StyleValue>> Parser::parse_css_value(PropertyID property_id, TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
auto function_contains_var_or_attr = [](Function const& function, auto&& recurse) -> bool {
|
||||
|
@ -5482,6 +5522,10 @@ Parser::ParseErrorOr<NonnullRefPtr<StyleValue>> Parser::parse_css_value(Property
|
|||
if (auto parsed_value = parse_font_family_value(component_values))
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::GridColumn:
|
||||
if (auto parsed_value = parse_grid_track_placement_shorthand_value(component_values))
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::GridColumnEnd:
|
||||
if (auto parsed_value = parse_grid_track_placement(component_values))
|
||||
return parsed_value.release_nonnull();
|
||||
|
@ -5490,6 +5534,10 @@ Parser::ParseErrorOr<NonnullRefPtr<StyleValue>> Parser::parse_css_value(Property
|
|||
if (auto parsed_value = parse_grid_track_placement(component_values))
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::GridRow:
|
||||
if (auto parsed_value = parse_grid_track_placement_shorthand_value(component_values))
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::GridRowEnd:
|
||||
if (auto parsed_value = parse_grid_track_placement(component_values))
|
||||
return parsed_value.release_nonnull();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue