LibWeb: Parse grid track placements closer to spec

This brings parsing of grid-row-* and grid-column-* properties (and
their associated shorthands) more inline with spec.

Changes:
- Only set omitted properties for combined-value shorthands (e.g.
  `grid-row: a` rather than `grid-row: a / b`) if the single value is
  `<custom-ident>`.

- `[ [ <integer [-∞,-1]> | <integer [1,∞]> ] && <custom-ident>? ]`:
  - Properly resolve `calc`s for `<integer>` that rely on compute-time
    information.

- `[ span && [ <integer [1,∞]> || <custom-ident> ] ]`
  - Allow `calc`s for `<integer>`
  - Allow `<custom-ident>`

There is still work to be done to properly use these parsed values.

Gains us 46 WPT tests.
This commit is contained in:
Callum Law 2025-07-08 14:31:40 +12:00 committed by Tim Ledbetter
parent a424a06d45
commit 36e2d25efa
Notes: github-actions[bot] 2025-07-08 16:27:31 +00:00
12 changed files with 153 additions and 171 deletions

View file

@ -19,15 +19,21 @@ String GridTrackPlacement::to_string() const
},
[&](AreaOrLine const& area_or_line) {
if (area_or_line.line_number.has_value() && area_or_line.name.has_value()) {
builder.appendff("{} {}", *area_or_line.line_number, *area_or_line.name);
builder.appendff("{} {}", area_or_line.line_number->to_string(), *area_or_line.name);
} else if (area_or_line.line_number.has_value()) {
builder.appendff("{}", *area_or_line.line_number);
builder.appendff("{}", area_or_line.line_number->to_string());
} else if (area_or_line.name.has_value()) {
builder.appendff("{}", *area_or_line.name);
}
},
[&](Span const& span) {
builder.appendff("span {}", span.value);
builder.append("span"sv);
if (!span.name.has_value() || span.value.is_calculated() || span.value.value() != 1)
builder.appendff(" {}", span.value.to_string());
if (span.name.has_value())
builder.appendff(" {}", span.name.value());
});
return MUST(builder.to_string());
}