From fd2eb0ceb25270e5ea738b76a2f5271e84234667 Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Wed, 13 Mar 2024 05:54:36 -0300 Subject: [PATCH] Ensure grids have at least the given amount of rows (#3644) --- crates/typst/src/layout/grid/layout.rs | 15 +++++++++++++-- tests/ref/layout/grid-5.png | Bin 3891 -> 9301 bytes tests/typ/layout/grid-5.typ | 10 ++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/crates/typst/src/layout/grid/layout.rs b/crates/typst/src/layout/grid/layout.rs index 6d89b73c8..645b68b6e 100644 --- a/crates/typst/src/layout/grid/layout.rs +++ b/crates/typst/src/layout/grid/layout.rs @@ -847,15 +847,26 @@ impl CellGrid { } } + // If the user specified cells occupying less rows than the given rows, + // we shall expand the grid so that it has at least the given amount of + // rows. + let Some(expected_total_cells) = c.checked_mul(tracks.y.len()) else { + bail!(span, "too many rows were specified"); + }; + let missing_cells = expected_total_cells.saturating_sub(resolved_cells.len()); + // Fixup phase (final step in cell grid generation): // 1. Replace absent entries by resolved empty cells, and produce a // vector of 'Entry' from 'Option'. - // 2. If any cells were added to the header's rows after the header's + // 2. Add enough empty cells to the end of the grid such that it has at + // least the given amount of rows. + // 3. If any cells were added to the header's rows after the header's // creation, ensure the header expands enough to accommodate them // across all of their spanned rows. Same for the footer. - // 3. If any cells before the footer try to span it, error. + // 4. If any cells before the footer try to span it, error. let resolved_cells = resolved_cells .into_iter() + .chain(std::iter::repeat_with(|| None).take(missing_cells)) .enumerate() .map(|(i, cell)| { if let Some(cell) = cell { diff --git a/tests/ref/layout/grid-5.png b/tests/ref/layout/grid-5.png index a57493e4943610224715db05fb1bb3ae4a784cc3..233ebb00c7efe63e6e2b20195bc99e26dbb7166e 100644 GIT binary patch literal 9301 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 diff --git a/tests/typ/layout/grid-5.typ b/tests/typ/layout/grid-5.typ index 64385f61d..662724218 100644 --- a/tests/typ/layout/grid-5.typ +++ b/tests/typ/layout/grid-5.typ @@ -28,3 +28,13 @@ ], align(top)[B], ) + +--- +// Ensure grids expand enough for the given rows. +#grid( + columns: (2em, 2em), + rows: (2em,) * 4, + fill: red, + stroke: aqua, + [a] +)