LibWeb: Align CSS Grid properties parsing with the specification

Reimplements `grid`, `grid-template`, `grid-template-rows`, and
`grid-template-columns` in a way that uses a separate function for each
grammar rule defined in the specification. This change results in many
additional passing tests from the already imported WPT suite. Most of
the remaining test failures are related to incorrect serialization of
grid properties.
This commit is contained in:
Aliaksandr Kalenik 2025-06-16 22:27:17 +02:00 committed by Alexander Kalenik
commit af602b2555
Notes: github-actions[bot] 2025-06-21 20:08:32 +00:00
23 changed files with 894 additions and 574 deletions

View file

@ -120,16 +120,10 @@ String GridMinMax::to_string() const
return MUST(builder.to_string());
}
GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, int repeat_count)
: m_type(Type::Default)
, m_grid_track_size_list(grid_track_size_list)
, m_repeat_count(repeat_count)
{
}
GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, Type type)
: m_type(type)
, m_grid_track_size_list(grid_track_size_list)
GridRepeat::GridRepeat(GridTrackSizeList&& grid_track_size_list, GridRepeatParams const& params)
: m_type(params.type)
, m_grid_track_size_list(move(grid_track_size_list))
, m_repeat_count(params.count)
{
}
@ -138,13 +132,13 @@ String GridRepeat::to_string() const
StringBuilder builder;
builder.append("repeat("sv);
switch (m_type) {
case Type::AutoFit:
case GridRepeatType::AutoFit:
builder.append("auto-fit"sv);
break;
case Type::AutoFill:
case GridRepeatType::AutoFill:
builder.append("auto-fill"sv);
break;
case Type::Default:
case GridRepeatType::Fixed:
builder.appendff("{}", m_repeat_count);
break;
default:
@ -177,15 +171,6 @@ String GridLineNames::to_string() const
return MUST(builder.to_string());
}
GridTrackSizeList::GridTrackSizeList(Vector<Variant<ExplicitGridTrack, GridLineNames>>&& list)
: m_list(move(list))
{
}
GridTrackSizeList::GridTrackSizeList()
{
}
GridTrackSizeList GridTrackSizeList::make_none()
{
return GridTrackSizeList();
@ -222,4 +207,14 @@ Vector<ExplicitGridTrack> GridTrackSizeList::track_list() const
bool GridTrackSizeList::operator==(GridTrackSizeList const& other) const = default;
void GridTrackSizeList::append(GridLineNames&& line_names)
{
m_list.append(move(line_names));
}
void GridTrackSizeList::append(ExplicitGridTrack&& explicit_track)
{
m_list.append(move(explicit_track));
}
}