From decb4fd9b98968dbaa89451ab6620b33819260a5 Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:32:27 -0300 Subject: [PATCH] Merging cells: Rowspans [More Flexible Tables Pt.3b] (#3501) --- crates/typst/src/layout/grid/layout.rs | 818 ++++++++++++++++---- crates/typst/src/layout/grid/lines.rs | 680 ++++++++++++++--- crates/typst/src/layout/grid/mod.rs | 21 + crates/typst/src/layout/grid/rowspans.rs | 864 ++++++++++++++++++++++ crates/typst/src/model/table.rs | 22 +- tests/ref/bugs/grid-4.png | Bin 0 -> 1117 bytes tests/ref/layout/grid-rowspan-basic.png | Bin 0 -> 94597 bytes tests/ref/layout/grid-rowspan-split-1.png | Bin 0 -> 30406 bytes tests/ref/layout/grid-rowspan-split-2.png | Bin 0 -> 11282 bytes tests/ref/layout/grid-rowspan-split-3.png | Bin 0 -> 99690 bytes tests/ref/layout/grid-rtl.png | Bin 44946 -> 72464 bytes tests/ref/layout/grid-stroke.png | Bin 48899 -> 55633 bytes tests/typ/bugs/grid-4.typ | 17 + tests/typ/layout/grid-colspan.typ | 2 +- tests/typ/layout/grid-positioning.typ | 8 + tests/typ/layout/grid-rowspan-basic.typ | 211 ++++++ tests/typ/layout/grid-rowspan-split-1.typ | 89 +++ tests/typ/layout/grid-rowspan-split-2.typ | 37 + tests/typ/layout/grid-rowspan-split-3.typ | 108 +++ tests/typ/layout/grid-rtl.typ | 41 + tests/typ/layout/grid-stroke.typ | 14 + 21 files changed, 2656 insertions(+), 276 deletions(-) create mode 100644 crates/typst/src/layout/grid/rowspans.rs create mode 100644 tests/ref/bugs/grid-4.png create mode 100644 tests/ref/layout/grid-rowspan-basic.png create mode 100644 tests/ref/layout/grid-rowspan-split-1.png create mode 100644 tests/ref/layout/grid-rowspan-split-2.png create mode 100644 tests/ref/layout/grid-rowspan-split-3.png create mode 100644 tests/typ/bugs/grid-4.typ create mode 100644 tests/typ/layout/grid-rowspan-basic.typ create mode 100644 tests/typ/layout/grid-rowspan-split-1.typ create mode 100644 tests/typ/layout/grid-rowspan-split-2.typ create mode 100644 tests/typ/layout/grid-rowspan-split-3.typ diff --git a/crates/typst/src/layout/grid/layout.rs b/crates/typst/src/layout/grid/layout.rs index 83dbf069c..a27e42697 100644 --- a/crates/typst/src/layout/grid/layout.rs +++ b/crates/typst/src/layout/grid/layout.rs @@ -9,6 +9,7 @@ use super::lines::{ generate_line_segments, hline_stroke_at_column, vline_stroke_at_row, Line, LinePosition, LineSegment, }; +use super::rowspans::{Rowspan, UnbreakableRowGroup}; use crate::diag::{ bail, At, Hint, HintedStrResult, HintedString, SourceResult, StrResult, }; @@ -172,6 +173,8 @@ pub struct Cell { pub fill: Option, /// The amount of columns spanned by the cell. pub colspan: NonZeroUsize, + /// The amount of rows spanned by the cell. + pub rowspan: NonZeroUsize, /// The cell's stroke. /// /// We use an Arc to avoid unnecessary space usage when all sides are the @@ -185,6 +188,10 @@ pub struct Cell { /// override their own stroke properties (and thus have less priority when /// defining with which stroke to draw grid lines around this cell). pub stroke_overridden: Sides, + /// Whether rows spanned by this cell can be placed in different pages. + /// By default, a cell spanning only fixed-size rows is unbreakable, while + /// a cell spanning at least one `auto`-sized row is breakable. + pub breakable: bool, } impl From for Cell { @@ -194,8 +201,10 @@ impl From for Cell { body, fill: None, colspan: NonZeroUsize::ONE, + rowspan: NonZeroUsize::ONE, stroke: Sides::splat(None), stroke_overridden: Sides::splat(false), + breakable: true, } } } @@ -245,7 +254,7 @@ pub enum GridItem { stroke: Option>>, /// The span of the corresponding line element. span: Span, - /// The line's position. "before" here means on top of row 'y', while + /// The line's position. "before" here means on top of row `y`, while /// "after" means below it. position: LinePosition, }, @@ -258,7 +267,7 @@ pub enum GridItem { stroke: Option>>, /// The span of the corresponding line element. span: Span, - /// The line's position. "before" here means to the left of column 'x', + /// The line's position. "before" here means to the left of column `x`, /// while "after" means to its right (both considering LTR). position: LinePosition, }, @@ -270,7 +279,8 @@ pub enum GridItem { /// the table, and may have property overrides. pub trait ResolvableCell { /// Resolves the cell's fields, given its coordinates and default grid-wide - /// fill, align, inset and stroke properties. + /// fill, align, inset and stroke properties, plus the expected value of + /// the `breakable` field. /// Returns a final Cell. #[allow(clippy::too_many_arguments)] fn resolve_cell( @@ -281,6 +291,7 @@ pub trait ResolvableCell { align: Smart, inset: Sides>>, stroke: Sides>>>>, + breakable: bool, styles: StyleChain, ) -> Cell; @@ -293,6 +304,9 @@ pub trait ResolvableCell { /// The amount of columns spanned by this cell. fn colspan(&self, styles: StyleChain) -> NonZeroUsize; + /// The amount of rows spanned by this cell. + fn rowspan(&self, styles: StyleChain) -> NonZeroUsize; + /// The cell's span, for errors. fn span(&self) -> Span; } @@ -366,6 +380,27 @@ impl CellGrid { let mut pending_vlines: Vec<(Span, Line)> = vec![]; let has_gutter = gutter.any(|tracks| !tracks.is_empty()); + // Resolve the breakability of a cell, based on whether or not it spans + // an auto row. + let resolve_breakable = |y, rowspan| { + let auto = Sizing::Auto; + let zero = Sizing::Rel(Rel::zero()); + tracks + .y + .iter() + .chain(std::iter::repeat(tracks.y.last().unwrap_or(&auto))) + .skip(y) + .take(rowspan) + .any(|row| row == &Sizing::Auto) + || gutter + .y + .iter() + .chain(std::iter::repeat(gutter.y.last().unwrap_or(&zero))) + .skip(y) + .take(rowspan - 1) + .any(|row_gutter| row_gutter == &Sizing::Auto) + }; + // We can't just use the cell's index in the 'cells' vector to // determine its automatic position, since cells could have arbitrary // positions, so the position of a cell in 'cells' can differ from its @@ -471,6 +506,7 @@ impl CellGrid { let x = resolved_index % c; let y = resolved_index / c; let colspan = cell.colspan(styles).get(); + let rowspan = cell.rowspan(styles).get(); if colspan > c - x { bail!( @@ -480,11 +516,17 @@ impl CellGrid { ) } - let Some(largest_index) = resolved_index.checked_add(colspan - 1) else { + let Some(largest_index) = c + .checked_mul(rowspan - 1) + .and_then(|full_rowspan_offset| { + resolved_index.checked_add(full_rowspan_offset) + }) + .and_then(|last_row_pos| last_row_pos.checked_add(colspan - 1)) + else { bail!( cell_span, "cell would span an exceedingly large position"; - hint: "try reducing the cell's colspan" + hint: "try reducing the cell's rowspan or colspan" ) }; @@ -497,6 +539,7 @@ impl CellGrid { align.resolve(engine, styles, x, y)?, inset.resolve(engine, styles, x, y)?, stroke.resolve(engine, styles, x, y)?, + resolve_breakable(y, rowspan), styles, ); @@ -542,23 +585,29 @@ impl CellGrid { *slot = Some(Entry::Cell(cell)); - // Now, if the cell spans more than one column, we fill the spanned - // positions in the grid with Entry::Merged pointing to the + // Now, if the cell spans more than one row or column, we fill the + // spanned positions in the grid with Entry::Merged pointing to the // original cell as its parent. - for (offset, slot) in resolved_cells[resolved_index..][..colspan] - .iter_mut() - .enumerate() - .skip(1) - { - if slot.is_some() { - let spanned_x = x + offset; - bail!( - cell_span, - "cell would span a previously placed cell at column {spanned_x}, row {y}"; - hint: "try specifying your cells in a different order or reducing the cell's colspan" - ) + for rowspan_offset in 0..rowspan { + let spanned_y = y + rowspan_offset; + let first_row_index = resolved_index + c * rowspan_offset; + for (colspan_offset, slot) in + resolved_cells[first_row_index..][..colspan].iter_mut().enumerate() + { + let spanned_x = x + colspan_offset; + if spanned_x == x && spanned_y == y { + // This is the parent cell. + continue; + } + if slot.is_some() { + bail!( + cell_span, + "cell would span a previously placed cell at column {spanned_x}, row {spanned_y}"; + hint: "try specifying your cells in a different order or reducing the cell's rowspan or colspan" + ) + } + *slot = Some(Entry::Merged { parent: resolved_index }); } - *slot = Some(Entry::Merged { parent: resolved_index }); } } @@ -583,6 +632,7 @@ impl CellGrid { align.resolve(engine, styles, x, y)?, inset.resolve(engine, styles, x, y)?, stroke.resolve(engine, styles, x, y)?, + resolve_breakable(y, 1), styles, ); Ok(Entry::Cell(new_cell)) @@ -760,16 +810,6 @@ impl CellGrid { self.entry(x, y).and_then(Entry::as_cell) } - /// Returns the parent cell of the grid entry at the given position. - /// - If the entry at the given position is a cell, returns it. - /// - If it is a merged cell, returns the parent cell. - /// - If it is a gutter cell, returns None. - #[track_caller] - pub(super) fn parent_cell(&self, x: usize, y: usize) -> Option<&Cell> { - self.parent_cell_position(x, y) - .and_then(|Axes { x, y }| self.cell(x, y)) - } - /// Returns the position of the parent cell of the grid entry at the given /// position. It is guaranteed to have a non-gutter, non-merged cell at /// the returned position, due to how the grid is built. @@ -792,6 +832,72 @@ impl CellGrid { } }) } + + /// Returns the position of the actual parent cell of a merged position, + /// even if the given position is gutter, in which case we return the + /// parent of the nearest adjacent content cell which could possibly span + /// the given gutter position. If the given position is not a gutter cell, + /// then this function will return the same as `parent_cell_position` would. + /// If the given position is a gutter cell, but no cell spans it, returns + /// `None`. + /// + /// This is useful for lines. A line needs to check if a cell next to it + /// has a stroke override - even at a gutter position there could be a + /// stroke override, since a cell could be merged with two cells at both + /// ends of the gutter cell (e.g. to its left and to its right), and thus + /// that cell would impose a stroke under the gutter. This function allows + /// getting the position of that cell (which spans the given gutter + /// position, if it is gutter), if it exists; otherwise returns None (it's + /// gutter and no cell spans it). + #[track_caller] + pub(super) fn effective_parent_cell_position( + &self, + x: usize, + y: usize, + ) -> Option> { + if self.has_gutter { + // If (x, y) is a gutter cell, we skip it (skip a gutter column and + // row) to the nearest adjacent content cell, in the direction + // which merged cells grow toward (increasing x and increasing y), + // such that we can verify if that adjacent cell is merged with the + // gutter cell by checking if its parent would come before (x, y). + // Otherwise, no cell is merged with this gutter cell, and we + // return None. + self.parent_cell_position(x + x % 2, y + y % 2) + .filter(|&parent| parent.x <= x && parent.y <= y) + } else { + self.parent_cell_position(x, y) + } + } + + /// Checks if the track with the given index is gutter. + /// Does not check if the index is a valid track. + #[inline] + pub(super) fn is_gutter_track(&self, index: usize) -> bool { + self.has_gutter && index % 2 == 1 + } + + /// Returns the effective colspan of a cell, considering the gutters it + /// might span if the grid has gutters. + #[inline] + pub(super) fn effective_colspan_of_cell(&self, cell: &Cell) -> usize { + if self.has_gutter { + 2 * cell.colspan.get() - 1 + } else { + cell.colspan.get() + } + } + + /// Returns the effective rowspan of a cell, considering the gutters it + /// might span if the grid has gutters. + #[inline] + pub(super) fn effective_rowspan_of_cell(&self, cell: &Cell) -> usize { + if self.has_gutter { + 2 * cell.rowspan.get() - 1 + } else { + cell.rowspan.get() + } + } } /// Given a cell's requested x and y, the vector with the resolved cell @@ -889,27 +995,34 @@ fn resolve_cell_position( /// Performs grid layout. pub struct GridLayouter<'a> { /// The grid of cells. - grid: &'a CellGrid, + pub(super) grid: &'a CellGrid, /// The regions to layout children into. - regions: Regions<'a>, + pub(super) regions: Regions<'a>, /// The inherited styles. - styles: StyleChain<'a>, + pub(super) styles: StyleChain<'a>, /// Resolved column sizes. - rcols: Vec, + pub(super) rcols: Vec, /// The sum of `rcols`. - width: Abs, + pub(super) width: Abs, /// Resolve row sizes, by region. - rrows: Vec>, + pub(super) rrows: Vec>, /// Rows in the current region. - lrows: Vec, + pub(super) lrows: Vec, + /// The amount of unbreakable rows remaining to be laid out in the + /// current unbreakable row group. While this is positive, no region breaks + /// should occur. + pub(super) unbreakable_rows_left: usize, + /// Rowspans not yet laid out because not all of their spanned rows were + /// laid out yet. + pub(super) rowspans: Vec, /// The initial size of the current region before we started subtracting. - initial: Size, + pub(super) initial: Size, /// Frames for finished regions. - finished: Vec, + pub(super) finished: Vec, /// Whether this is an RTL grid. - is_rtl: bool, + pub(super) is_rtl: bool, /// The span of the grid element. - span: Span, + pub(super) span: Span, } /// Details about a resulting row piece. @@ -923,9 +1036,12 @@ pub struct RowPiece { /// Produced by initial row layout, auto and relative rows are already finished, /// fractional rows not yet. -enum Row { +pub(super) enum Row { /// Finished row frame of auto or relative row with y index. - Frame(Frame, usize), + /// The last parameter indicates whether or not this is the last region + /// where this row is laid out, and it can only be false when a row uses + /// `layout_multi_row`, which in turn is only used by breakable auto rows. + Frame(Frame, usize, bool), /// Fractional row with y index. Fr(Fr, usize), } @@ -953,6 +1069,8 @@ impl<'a> GridLayouter<'a> { width: Abs::zero(), rrows: vec![], lrows: vec![], + unbreakable_rows_left: 0, + rowspans: vec![], initial: regions.size, finished: vec![], is_rtl: TextElem::dir_in(styles) == Dir::RTL, @@ -966,27 +1084,59 @@ impl<'a> GridLayouter<'a> { for y in 0..self.grid.rows.len() { // Skip to next region if current one is full, but only for content - // rows, not for gutter rows. - if self.regions.is_full() && (!self.grid.has_gutter || y % 2 == 0) { + // rows, not for gutter rows, and only if we aren't laying out an + // unbreakable group of rows. + let is_content_row = !self.grid.is_gutter_track(y); + if self.unbreakable_rows_left == 0 && self.regions.is_full() && is_content_row + { self.finish_region(engine)?; } - match self.grid.rows[y] { - Sizing::Auto => self.layout_auto_row(engine, y)?, - Sizing::Rel(v) => self.layout_relative_row(engine, v, y)?, - Sizing::Fr(v) => self.lrows.push(Row::Fr(v, y)), + if is_content_row { + // Gutter rows have no rowspans or possibly unbreakable cells. + self.check_for_rowspans(y); + self.check_for_unbreakable_rows(y, engine)?; } + + // Don't layout gutter rows at the top of a region. + if is_content_row || !self.lrows.is_empty() { + match self.grid.rows[y] { + Sizing::Auto => self.layout_auto_row(engine, y)?, + Sizing::Rel(v) => self.layout_relative_row(engine, v, y)?, + Sizing::Fr(v) => self.lrows.push(Row::Fr(v, y)), + } + } + + self.unbreakable_rows_left = self.unbreakable_rows_left.saturating_sub(1); } self.finish_region(engine)?; + // Layout any missing rowspans. + // There are only two possibilities for rowspans not yet laid out + // (usually, a rowspan is laid out as soon as its last row, or any row + // after it, is laid out): + // 1. The rowspan was fully empty and only spanned fully empty auto + // rows, which were all prevented from being laid out. Those rowspans + // are ignored by 'layout_rowspan', and are not of any concern. + // + // 2. The rowspan's last row was an auto row at the last region which + // was not laid out, and no other rows were laid out after it. Those + // might still need to be laid out, so we check for them. + for rowspan in std::mem::take(&mut self.rowspans) { + self.layout_rowspan(rowspan, None, engine)?; + } + self.render_fills_strokes() } /// Add lines and backgrounds. fn render_fills_strokes(mut self) -> SourceResult { let mut finished = std::mem::take(&mut self.finished); - for (frame, rows) in finished.iter_mut().zip(&self.rrows) { + let frame_amount = finished.len(); + for ((frame_index, frame), rows) in + finished.iter_mut().enumerate().zip(&self.rrows) + { if self.rcols.is_empty() || rows.is_empty() { continue; } @@ -1033,7 +1183,7 @@ impl<'a> GridLayouter<'a> { // lines before it, not after). x / 2 }) - .map(|vlines| &**vlines) + .map(Vec::as_slice) .unwrap_or(&[]); let tracks = rows.iter().map(|row| (row.y, row.height)); @@ -1077,13 +1227,14 @@ impl<'a> GridLayouter<'a> { // Additionally, determine their indices (the indices of the // rows they are drawn on top of). In principle, this will // correspond to the rows' indices directly, except for the - // first and last hlines, which must be 0 and (amount of rows) - // respectively, as they are always drawn (due to being part of - // the table's border). - let hline_indices = std::iter::once(0) - .chain(rows.iter().map(|piece| piece.y).skip(1)) + // last hline index, which must be (amount of rows) in order to + // draw the table's bottom border. + let hline_indices = rows + .iter() + .map(|piece| piece.y) .chain(std::iter::once(self.grid.rows.len())); + let mut prev_y = None; for (y, dy) in hline_indices.zip(hline_offsets) { let is_bottom_border = y == self.grid.rows.len(); let hlines_at_row = self @@ -1098,10 +1249,37 @@ impl<'a> GridLayouter<'a> { // these index operations. y / 2 }) - .map(|hlines| &**hlines) - .unwrap_or(&[]); + .map(Vec::as_slice) + .unwrap_or(&[]) + .iter() + .chain(if prev_y.is_none() && y != 0 { + // For lines at the top of the region, give priority to + // the lines at the top border. + self.grid.hlines.first().map(Vec::as_slice).unwrap_or(&[]) + } else { + // When not at the top of the region, no border lines + // to consider. + // When at the top of the region but at the first row, + // its own lines are already the border lines. + &[] + }); + let tracks = self.rcols.iter().copied().enumerate(); + // Normally, given an hline above row y, the row above it is + // 'y - 1' (if y > 0). However, sometimes that's not true, for + // example if 'y - 1' is in a previous region, or if 'y - 1' + // was an empty auto row which was removed. Therefore, we tell + // the hlines at this index which row is actually above them in + // the laid out region so they can include that row's bottom + // strokes in the folding process. + let local_top_y = prev_y; + + // When we're in the last region, the bottom border stroke + // doesn't necessarily gain priority like it does in previous + // regions. + let in_last_region = frame_index + 1 == frame_amount; + // Determine all different line segments we have to draw in // this row, and convert them to points and shapes. let segments = generate_line_segments( @@ -1110,7 +1288,17 @@ impl<'a> GridLayouter<'a> { y, hlines_at_row, is_bottom_border, - hline_stroke_at_column, + |grid, y, x, stroke| { + hline_stroke_at_column( + grid, + rows, + local_top_y, + in_last_region, + y, + x, + stroke, + ) + }, ) .map(|segment| { let LineSegment { stroke, offset: dx, length, priority } = segment; @@ -1130,6 +1318,8 @@ impl<'a> GridLayouter<'a> { // Draw later (after we sort all lines below.) lines.extend(segments); + + prev_y = Some(y); } // Sort by increasing thickness, so that we draw larger strokes @@ -1151,10 +1341,72 @@ impl<'a> GridLayouter<'a> { for (x, &col) in self.rcols.iter().enumerate().rev_if(self.is_rtl) { let mut dy = Abs::zero(); for row in rows { - if let Some(cell) = self.grid.cell(x, row.y) { + // We want to only draw the fill starting at the parent + // positions of cells. However, sometimes the parent + // position is absent from the current region, either + // because the first few rows of a rowspan were empty auto + // rows and thus removed from layout, or because the parent + // cell was in a previous region (in which case we'd want + // to draw its fill again, in the current region). + // Therefore, we first analyze the parent position to see + // if the current row would be the first row spanned by the + // parent cell in this region. If so, this means we have to + // start drawing the cell's fill here. If not, we ignore + // the position `(x, row.y)`, as its fill will already have + // been rendered before. + // + // Note: In the case of gutter rows, we have to check the + // row below before discarding them fully, because a + // gutter row might be the first row spanned by a rowspan + // in this region (e.g. if the first row was empty and + // therefore removed), so its fill could start in that + // gutter row. That's why we use + // 'effective_parent_cell_position'. + let parent = self + .grid + .effective_parent_cell_position(x, row.y) + .filter(|parent| { + // Ensure this is the first column spanned by the + // cell before drawing its fill, otherwise we + // already rendered its fill in a previous + // iteration of the outer loop (and/or this is a + // gutter column, which we ignore). + // + // Additionally, we should only draw the fill when + // this row is the local parent Y for this cell, + // that is, the first row spanned by the cell's + // parent in this region, because if the parent + // cell's fill was already drawn in a previous + // region, we must render it again in later regions + // spanned by that cell. Note that said condition + // always holds when the current cell has a rowspan + // of 1 and we're not currently at a gutter row. + parent.x == x + && (parent.y == row.y + || rows + .iter() + .find(|row| row.y >= parent.y) + .is_some_and(|first_spanned_row| { + first_spanned_row.y == row.y + })) + }); + + if let Some(parent) = parent { + let cell = self.grid.cell(parent.x, parent.y).unwrap(); let fill = cell.fill.clone(); if let Some(fill) = fill { - let width = self.cell_spanned_width(x, cell.colspan.get()); + let rowspan = self.grid.effective_rowspan_of_cell(cell); + let height = if rowspan == 1 { + row.height + } else { + rows.iter() + .filter(|row| { + (parent.y..parent.y + rowspan).contains(&row.y) + }) + .map(|row| row.height) + .sum() + }; + let width = self.cell_spanned_width(cell, x); // In the grid, cell colspans expand to the right, // so we're at the leftmost (lowest 'x') column // spanned by the cell. However, in RTL, cells @@ -1167,7 +1419,7 @@ impl<'a> GridLayouter<'a> { let offset = if self.is_rtl { -width + col } else { Abs::zero() }; let pos = Point::new(dx + offset, dy); - let size = Size::new(width, row.height); + let size = Size::new(width, height); let rect = Geometry::Rect(size).filled(fill); fills.push((pos, FrameItem::Shape(rect, self.span))); } @@ -1237,12 +1489,9 @@ impl<'a> GridLayouter<'a> { /// Total width spanned by the cell (among resolved columns). /// Includes spanned gutter columns. - fn cell_spanned_width(&self, x: usize, colspan: usize) -> Abs { - self.rcols - .iter() - .skip(x) - .take(if self.grid.has_gutter { 2 * colspan - 1 } else { colspan }) - .sum() + pub(super) fn cell_spanned_width(&self, cell: &Cell, x: usize) -> Abs { + let colspan = self.grid.effective_colspan_of_cell(cell); + self.rcols.iter().skip(x).take(colspan).sum() } /// Measure the size that is available to auto columns. @@ -1272,25 +1521,23 @@ impl<'a> GridLayouter<'a> { let mut resolved = Abs::zero(); for y in 0..self.grid.rows.len() { // We get the parent cell in case this is a merged position. - let Some(Axes { x: parent_x, y: parent_y }) = - self.grid.parent_cell_position(x, y) - else { + let Some(parent) = self.grid.parent_cell_position(x, y) else { continue; }; - let cell = self.grid.cell(parent_x, parent_y).unwrap(); - let colspan = cell.colspan.get(); + if parent.y != y { + // Don't check the width of rowspans more than once. + continue; + } + let cell = self.grid.cell(parent.x, parent.y).unwrap(); + let colspan = self.grid.effective_colspan_of_cell(cell); if colspan > 1 { let last_spanned_auto_col = self .grid .cols .iter() .enumerate() - .skip(parent_x) - .take(if self.grid.has_gutter { - 2 * colspan - 1 - } else { - colspan - }) + .skip(parent.x) + .take(colspan) .rev() .find(|(_, col)| **col == Sizing::Auto) .map(|(x, _)| x); @@ -1307,7 +1554,7 @@ impl<'a> GridLayouter<'a> { && !all_frac_cols.is_empty() && all_frac_cols .iter() - .all(|x| (parent_x..parent_x + colspan).contains(x)) + .all(|x| (parent.x..parent.x + colspan).contains(x)) { // Additionally, as a heuristic, a colspan won't affect the // size of auto columns if it already spans all fractional @@ -1319,14 +1566,30 @@ impl<'a> GridLayouter<'a> { continue; } - // For relative rows, we can already resolve the correct - // base and for auto and fr we could only guess anyway. - let height = match self.grid.rows[y] { - Sizing::Rel(v) => { - v.resolve(self.styles).relative_to(self.regions.base().y) - } - _ => self.regions.base().y, - }; + // Sum the heights of spanned rows to find the expected + // available height for the cell, unless it spans a fractional + // or auto column. + let rowspan = self.grid.effective_rowspan_of_cell(cell); + let height = self + .grid + .rows + .iter() + .skip(y) + .take(rowspan) + .try_fold(Abs::zero(), |acc, col| { + // For relative rows, we can already resolve the correct + // base and for auto and fr we could only guess anyway. + match col { + Sizing::Rel(v) => Some( + acc + v + .resolve(self.styles) + .relative_to(self.regions.base().y), + ), + _ => None, + } + }) + .unwrap_or_else(|| self.regions.base().y); + // Don't expand this auto column more than the cell actually // needs. To do this, we check how much the other, previously // resolved columns provide to the cell in terms of width @@ -1341,7 +1604,7 @@ impl<'a> GridLayouter<'a> { // an auto column. One mitigation for this is the heuristic // used above to not expand the last auto column spanned by a // cell if it spans all fractional columns in a finite region. - let already_covered_width = self.cell_spanned_width(parent_x, colspan); + let already_covered_width = self.cell_spanned_width(cell, parent.x); let size = Size::new(available, height); let pod = Regions::one(size, Axes::splat(false)); @@ -1408,11 +1671,18 @@ impl<'a> GridLayouter<'a> { fn layout_auto_row(&mut self, engine: &mut Engine, y: usize) -> SourceResult<()> { // Determine the size for each region of the row. If the first region // ends up empty for some column, skip the region and remeasure. - let mut resolved = match self.measure_auto_row(engine, y, true)? { + let mut resolved = match self.measure_auto_row( + engine, + y, + true, + self.unbreakable_rows_left, + None, + )? { Some(resolved) => resolved, None => { self.finish_region(engine)?; - self.measure_auto_row(engine, y, false)?.unwrap() + self.measure_auto_row(engine, y, false, self.unbreakable_rows_left, None)? + .unwrap() } }; @@ -1424,7 +1694,7 @@ impl<'a> GridLayouter<'a> { // Layout into a single region. if let &[first] = resolved.as_slice() { let frame = self.layout_single_row(engine, first, y)?; - self.push_row(frame, y); + self.push_row(frame, y, true); return Ok(()); } @@ -1444,7 +1714,7 @@ impl<'a> GridLayouter<'a> { let fragment = self.layout_multi_row(engine, &resolved, y)?; let len = fragment.len(); for (i, frame) in fragment.into_iter().enumerate() { - self.push_row(frame, y); + self.push_row(frame, y, i + 1 == len); if i + 1 < len { self.finish_region(engine)?; } @@ -1455,43 +1725,175 @@ impl<'a> GridLayouter<'a> { /// Measure the regions sizes of an auto row. The option is always `Some(_)` /// if `can_skip` is false. - fn measure_auto_row( - &mut self, + /// If `unbreakable_rows_left` is positive, this function shall only return + /// a single frame. Useful when an unbreakable rowspan crosses this auto + /// row. + /// The `row_group_data` option is used within the unbreakable row group + /// simulator to predict the height of the auto row if previous rows in the + /// group were placed in the same region. + pub(super) fn measure_auto_row( + &self, engine: &mut Engine, y: usize, can_skip: bool, + unbreakable_rows_left: usize, + row_group_data: Option<&UnbreakableRowGroup>, ) -> SourceResult>> { + let breakable = unbreakable_rows_left == 0; let mut resolved: Vec = vec![]; + let mut pending_rowspans: Vec<(usize, usize, Vec)> = vec![]; for x in 0..self.rcols.len() { - if let Some(cell) = self.grid.cell(x, y) { - let mut pod = self.regions; - pod.size.x = self.cell_spanned_width(x, cell.colspan.get()); - - let frames = cell.measure(engine, self.styles, pod)?.into_frames(); - - // Skip the first region if one cell in it is empty. Then, - // remeasure. - if let [first, rest @ ..] = frames.as_slice() { - if can_skip - && first.is_empty() - && rest.iter().any(|frame| !frame.is_empty()) - { - return Ok(None); - } - } - - let mut sizes = frames.iter().map(|frame| frame.height()); - for (target, size) in resolved.iter_mut().zip(&mut sizes) { - target.set_max(size); - } - - // New heights are maximal by virtue of being new. Note that - // this extend only uses the rest of the sizes iterator. - resolved.extend(sizes); + // Get the parent cell in case this is a merged position. + let Some(parent) = self.grid.parent_cell_position(x, y) else { + // Skip gutter columns. + continue; + }; + if parent.x != x { + // Only check the height of a colspan once. + continue; } + // The parent cell is never a gutter or merged position. + let cell = self.grid.cell(parent.x, parent.y).unwrap(); + let rowspan = self.grid.effective_rowspan_of_cell(cell); + + if rowspan > 1 { + let last_spanned_auto_row = self + .grid + .rows + .iter() + .enumerate() + .skip(parent.y) + .take(rowspan) + .rev() + .find(|(_, &row)| row == Sizing::Auto) + .map(|(y, _)| y); + + if last_spanned_auto_row != Some(y) { + // A rowspan should only affect the height of its last + // spanned auto row. + continue; + } + } + + let measurement_data = self.prepare_auto_row_cell_measurement( + parent, + cell, + breakable, + row_group_data, + ); + let size = Axes::new(measurement_data.width, measurement_data.height); + let backlog = + measurement_data.backlog.unwrap_or(&measurement_data.custom_backlog); + + let pod = if !breakable { + // Force cell to fit into a single region when the row is + // unbreakable, even when it is a breakable rowspan, as a best + // effort. + let mut pod = Regions::one(size, self.regions.expand); + pod.full = measurement_data.full; + + if measurement_data.frames_in_previous_regions > 0 { + // Best effort to conciliate a breakable rowspan which + // started at a previous region going through an + // unbreakable auto row. Ensure it goes through previously + // laid out regions, but stops at this one when measuring. + pod.backlog = backlog; + } + + pod + } else { + // This row is breakable, so measure the cell normally, with + // the initial height and backlog determined previously. + let mut pod = self.regions; + pod.size = size; + pod.backlog = backlog; + pod.full = measurement_data.full; + pod + }; + + let frames = cell.measure(engine, self.styles, pod)?.into_frames(); + + // Skip the first region if one cell in it is empty. Then, + // remeasure. + if let Some([first, rest @ ..]) = + frames.get(measurement_data.frames_in_previous_regions..) + { + if can_skip + && breakable + && first.is_empty() + && rest.iter().any(|frame| !frame.is_empty()) + { + return Ok(None); + } + } + + // Skip frames from previous regions if applicable. + let mut sizes = frames + .iter() + .skip(measurement_data.frames_in_previous_regions) + .map(|frame| frame.height()) + .collect::>(); + + // Don't expand this row more than the cell needs. + // To figure out how much height the cell needs, we must first + // subtract, from the cell's expected height, the already resolved + // heights of its spanned rows. Note that this is the last spanned + // auto row, so all previous auto rows were already resolved, as + // well as fractional rows in previous regions. + // Additionally, we subtract the heights of fixed-size rows which + // weren't laid out yet, since those heights won't change in + // principle. + // Upcoming fractional rows are ignored. + // Upcoming gutter rows might be removed, so we need to simulate + // them. + if rowspan > 1 { + let should_simulate = self.prepare_rowspan_sizes( + y, + &mut sizes, + cell, + parent.y, + rowspan, + unbreakable_rows_left, + &measurement_data, + ); + + if should_simulate { + // Rowspan spans gutter and is breakable. We'll need to + // run a simulation to predict how much this auto row needs + // to expand so that the rowspan's contents fit into the + // table. + pending_rowspans.push((parent.y, rowspan, sizes)); + continue; + } + } + + let mut sizes = sizes.into_iter(); + + for (target, size) in resolved.iter_mut().zip(&mut sizes) { + target.set_max(size); + } + + // New heights are maximal by virtue of being new. Note that + // this extend only uses the rest of the sizes iterator. + resolved.extend(sizes); } + // Simulate the upcoming regions in order to predict how much we need + // to expand this auto row for rowspans which span gutter. + if !pending_rowspans.is_empty() { + self.simulate_and_measure_rowspans_in_auto_row( + y, + &mut resolved, + &pending_rowspans, + unbreakable_rows_left, + row_group_data, + engine, + )?; + } + + debug_assert!(breakable || resolved.len() <= 1); + Ok(Some(resolved)) } @@ -1506,18 +1908,22 @@ impl<'a> GridLayouter<'a> { let resolved = v.resolve(self.styles).relative_to(self.regions.base().y); let frame = self.layout_single_row(engine, resolved, y)?; - // Skip to fitting region. + // Skip to fitting region, but only if we aren't part of an unbreakable + // row group. let height = frame.height(); - while !self.regions.size.y.fits(height) && !self.regions.in_last() { + while self.unbreakable_rows_left == 0 + && !self.regions.size.y.fits(height) + && !self.regions.in_last() + { self.finish_region(engine)?; // Don't skip multiple regions for gutter and don't push a row. - if self.grid.has_gutter && y % 2 == 1 { + if self.grid.is_gutter_track(y) { return Ok(()); } } - self.push_row(frame, y); + self.push_row(frame, y, true); Ok(()) } @@ -1539,27 +1945,31 @@ impl<'a> GridLayouter<'a> { // Reverse the column order when using RTL. for (x, &rcol) in self.rcols.iter().enumerate().rev_if(self.is_rtl) { if let Some(cell) = self.grid.cell(x, y) { - let width = self.cell_spanned_width(x, cell.colspan.get()); - let size = Size::new(width, height); - let mut pod = Regions::one(size, Axes::splat(true)); - if self.grid.rows[y] == Sizing::Auto { - pod.full = self.regions.full; + // Rowspans have a separate layout step + if cell.rowspan.get() == 1 { + let width = self.cell_spanned_width(cell, x); + let size = Size::new(width, height); + let mut pod = Regions::one(size, Axes::splat(true)); + if self.grid.rows[y] == Sizing::Auto { + pod.full = self.regions.full; + } + let frame = cell.layout(engine, self.styles, pod)?.into_frame(); + let mut pos = pos; + if self.is_rtl { + // In the grid, cell colspans expand to the right, + // so we're at the leftmost (lowest 'x') column + // spanned by the cell. However, in RTL, cells + // expand to the left. Therefore, without the + // offset below, the cell's contents would be laid out + // starting at its rightmost visual position and extend + // over to unrelated cells to its right in RTL. + // We avoid this by ensuring the rendered cell starts at + // the very left of the cell, even with colspan > 1. + let offset = -width + rcol; + pos.x += offset; + } + output.push_frame(pos, frame); } - let mut frame = cell.layout(engine, self.styles, pod)?.into_frame(); - if self.is_rtl { - // In the grid, cell colspans expand to the right, - // so we're at the leftmost (lowest 'x') column - // spanned by the cell. However, in RTL, cells - // expand to the left. Therefore, without the - // offset below, the cell's contents would be laid out - // starting at its rightmost visual position and extend - // over to unrelated cells to its right in RTL. - // We avoid this by ensuring the rendered cell starts at - // the very left of the cell, even with colspan > 1. - let offset = Point::with_x(-width + rcol); - frame.translate(offset); - } - output.push_frame(pos, frame); } pos.x += rcol; @@ -1591,17 +2001,21 @@ impl<'a> GridLayouter<'a> { let mut pos = Point::zero(); for (x, &rcol) in self.rcols.iter().enumerate().rev_if(self.is_rtl) { if let Some(cell) = self.grid.cell(x, y) { - let width = self.cell_spanned_width(x, cell.colspan.get()); - pod.size.x = width; + // Rowspans have a separate layout step + if cell.rowspan.get() == 1 { + let width = self.cell_spanned_width(cell, x); + pod.size.x = width; - // Push the layouted frames into the individual output frames. - let fragment = cell.layout(engine, self.styles, pod)?; - for (output, mut frame) in outputs.iter_mut().zip(fragment) { - if self.is_rtl { - let offset = Point::with_x(-width + rcol); - frame.translate(offset); + // Push the layouted frames into the individual output frames. + let fragment = cell.layout(engine, self.styles, pod)?; + for (output, frame) in outputs.iter_mut().zip(fragment) { + let mut pos = pos; + if self.is_rtl { + let offset = -width + rcol; + pos.x += offset; + } + output.push_frame(pos, frame); } - output.push_frame(pos, frame); } } @@ -1612,19 +2026,29 @@ impl<'a> GridLayouter<'a> { } /// Push a row frame into the current region. - fn push_row(&mut self, frame: Frame, y: usize) { + /// The `is_last` parameter must be `true` if this is the last frame which + /// will be pushed for this particular row. It can be `false` for rows + /// spanning multiple regions. + fn push_row(&mut self, frame: Frame, y: usize, is_last: bool) { self.regions.size.y -= frame.height(); - self.lrows.push(Row::Frame(frame, y)); + self.lrows.push(Row::Frame(frame, y, is_last)); } /// Finish rows for one region. - fn finish_region(&mut self, engine: &mut Engine) -> SourceResult<()> { + pub(super) fn finish_region(&mut self, engine: &mut Engine) -> SourceResult<()> { + if self.lrows.last().is_some_and(|row| { + let (Row::Frame(_, y, _) | Row::Fr(_, y)) = row; + self.grid.is_gutter_track(*y) + }) { + // Remove the last row in the region if it is a gutter row. + self.lrows.pop().unwrap(); + } // Determine the height of existing rows in the region. let mut used = Abs::zero(); let mut fr = Fr::zero(); for row in &self.lrows { match row { - Row::Frame(frame, _) => used += frame.height(), + Row::Frame(frame, _, _) => used += frame.height(), Row::Fr(v, _) => fr += *v, } } @@ -1640,19 +2064,89 @@ impl<'a> GridLayouter<'a> { let mut output = Frame::soft(size); let mut pos = Point::zero(); let mut rrows = vec![]; + let current_region = self.finished.len(); // Place finished rows and layout fractional rows. for row in std::mem::take(&mut self.lrows) { - let (frame, y) = match row { - Row::Frame(frame, y) => (frame, y), + let (frame, y, is_last) = match row { + Row::Frame(frame, y, is_last) => (frame, y, is_last), Row::Fr(v, y) => { let remaining = self.regions.full - used; let height = v.share(fr, remaining); - (self.layout_single_row(engine, height, y)?, y) + (self.layout_single_row(engine, height, y)?, y, true) } }; let height = frame.height(); + + // Ensure rowspans which span this row will have enough space to + // be laid out over it later. + for rowspan in self + .rowspans + .iter_mut() + .filter(|rowspan| (rowspan.y..rowspan.y + rowspan.rowspan).contains(&y)) + { + // If the first region wasn't defined yet, it will have the the + // initial value of usize::MAX, so we can set it to the current + // region's index. + if rowspan.first_region > current_region { + rowspan.first_region = current_region; + // The rowspan starts at this region, precisely at this + // row. In other regions, it will start at dy = 0. + rowspan.dy = pos.y; + // When we layout the rowspan later, the full size of the + // pod must be equal to the full size of the first region + // it appears in. + rowspan.region_full = self.regions.full; + } + let amount_missing_heights = (current_region + 1) + .saturating_sub(rowspan.heights.len() + rowspan.first_region); + + // Ensure the vector of heights is long enough such that the + // last height is the one for the current region. + rowspan + .heights + .extend(std::iter::repeat(Abs::zero()).take(amount_missing_heights)); + + // Ensure that, in this region, the rowspan will span at least + // this row. + *rowspan.heights.last_mut().unwrap() += height; + } + + // Layout any rowspans which end at this row, but only if this is + // this row's last frame (to avoid having the rowspan stop being + // laid out at the first frame of the row). + if is_last { + // We use a for loop over indices to avoid borrow checking + // problems (we need to mutate the rowspans vector, so we can't + // have an iterator actively borrowing it). We keep a separate + // 'i' variable so we can step the counter back after removing + // a rowspan (see explanation below). + let mut i = 0; + while let Some(rowspan) = self.rowspans.get(i) { + if rowspan.y + rowspan.rowspan <= y + 1 { + // Rowspan ends at this or an earlier row, so we take + // it from the rowspans vector and lay it out. + // It's safe to pass the current region as a possible + // region for the rowspan to be laid out in, even if + // the rowspan's last row was at an earlier region, + // because the rowspan won't have an entry for this + // region in its 'heights' vector if it doesn't span + // any rows in this region. + // + // Here we don't advance the index counter ('i') because + // a new element we haven't checked yet in this loop + // will take the index of the now removed element, so + // we have to check the same index again in the next + // iteration. + let rowspan = self.rowspans.remove(i); + self.layout_rowspan(rowspan, Some(&mut output), engine)?; + } else { + i += 1; + } + } + } + output.push_frame(pos, frame); rrows.push(RowPiece { height, y }); pos.y += height; @@ -1669,7 +2163,9 @@ impl<'a> GridLayouter<'a> { /// Turn an iterator of extents into an iterator of offsets before, in between, /// and after the extents, e.g. [10mm, 5mm] -> [0mm, 10mm, 15mm]. -fn points(extents: impl IntoIterator) -> impl Iterator { +pub(super) fn points( + extents: impl IntoIterator, +) -> impl Iterator { let mut offset = Abs::zero(); std::iter::once(Abs::zero()).chain(extents).map(move |extent| { offset += extent; diff --git a/crates/typst/src/layout/grid/lines.rs b/crates/typst/src/layout/grid/lines.rs index 6eb43c9a4..7084c71ad 100644 --- a/crates/typst/src/layout/grid/lines.rs +++ b/crates/typst/src/layout/grid/lines.rs @@ -1,9 +1,9 @@ use std::num::NonZeroUsize; use std::sync::Arc; -use super::layout::CellGrid; +use super::layout::{CellGrid, RowPiece}; use crate::foundations::{AlternativeFold, Fold}; -use crate::layout::{Abs, Axes}; +use crate::layout::Abs; use crate::visualize::Stroke; /// Represents an explicit grid line (horizontal or vertical) specified by the @@ -67,7 +67,7 @@ pub(super) enum StrokePriority { } /// Data for a particular line segment in the grid as generated by -/// 'generate_line_segments'. +/// `generate_line_segments`. #[derive(Debug, PartialEq, Eq)] pub(super) struct LineSegment { /// The stroke with which to draw this segment. @@ -100,7 +100,7 @@ pub(super) struct LineSegment { /// this index to fold with, if any). Contiguous segments with the same stroke /// and priority are joined together automatically. /// -/// The function should return 'None' for positions at which the line would +/// The function should return `None` for positions at which the line would /// otherwise cross a merged cell (for example, a vline could cross a colspan), /// in which case a new segment should be drawn after the merged cell(s), even /// if it would have the same stroke as the previous one. @@ -115,13 +115,13 @@ pub(super) struct LineSegment { /// /// Note that we assume that the tracks are sorted according to ascending /// number, and they must be iterable over pairs of (number, size). For -/// vertical lines, for instance, 'tracks' would describe the rows in the +/// vertical lines, for instance, `tracks` would describe the rows in the /// current region, as pairs (row index, row height). -pub(super) fn generate_line_segments<'grid, F, I>( +pub(super) fn generate_line_segments<'grid, F, I, L>( grid: &'grid CellGrid, tracks: I, index: usize, - lines: &'grid [Line], + lines: L, is_max_index: bool, line_stroke_at_track: F, ) -> impl Iterator + 'grid @@ -135,6 +135,8 @@ where + 'grid, I: IntoIterator, I::IntoIter: 'grid, + L: IntoIterator, + L::IntoIter: Clone + 'grid, { // The segment currently being drawn. // @@ -162,7 +164,7 @@ where // Note that the maximum index is always an odd number when there's gutter, // so we must check for it to ensure we don't give it the same treatment as // a line before a gutter track. - let expected_line_position = if grid.has_gutter && index % 2 == 1 && !is_max_index { + let expected_line_position = if grid.is_gutter_track(index) && !is_max_index { LinePosition::After } else { LinePosition::Before @@ -194,6 +196,7 @@ where // interrupt the current segment one last time, to ensure the final segment // is always interrupted and yielded, if it wasn't interrupted earlier. let mut tracks = tracks.into_iter(); + let lines = lines.into_iter(); std::iter::from_fn(move || { // Each time this closure runs, we advance the track iterator as much // as possible before returning because the current segment was @@ -205,7 +208,7 @@ where // strokes of each user-specified line (with priority to the // user-specified line specified last). let mut line_strokes = lines - .iter() + .clone() .filter(|line| { line.position == expected_line_position && line @@ -332,45 +335,48 @@ pub(super) fn vline_stroke_at_row( y: usize, stroke: Option>>>, ) -> Option<(Arc>, StrokePriority)> { + // When the vline isn't at the border, we need to check if a colspan would + // be present between columns 'x' and 'x-1' at row 'y', and thus overlap + // with the line. + // To do so, we analyze the cell right after this vline. If it is merged + // with a cell before this line (parent.x < x) which is at this row or + // above it (parent.y <= y, which is checked by + // 'effective_parent_cell_position'), this means it would overlap with the + // vline, so the vline must not be drawn at this row. if x != 0 && x != grid.cols.len() { - // When the vline isn't at the border, we need to check if a colspan would - // be present between columns 'x' and 'x-1' at row 'y', and thus overlap - // with the line. - // To do so, we analyze the cell right after this vline. If it is merged - // with a cell before this line (parent_x < x) which is at this row or - // above it (parent_y <= y), this means it would overlap with the vline, - // so the vline must not be drawn at this row. - let first_adjacent_cell = if grid.has_gutter { - // Skip the gutters, if x or y represent gutter tracks. - // We would then analyze the cell one column after (if at a gutter - // column), and/or one row below (if at a gutter row), in order to - // check if it would be merged with a cell before the vline. - (x + x % 2, y + y % 2) - } else { - (x, y) - }; - let Axes { x: parent_x, y: parent_y } = grid - .parent_cell_position(first_adjacent_cell.0, first_adjacent_cell.1) - .unwrap(); - - if parent_x < x && parent_y <= y { - // There is a colspan cell going through this vline's position, - // so don't draw it here. - return None; + // Use 'effective_parent_cell_position' to skip the gutters, if x or y + // represent gutter tracks. + // We would then analyze the cell one column after (if at a gutter + // column), and/or one row below (if at a gutter row), in order to + // check if it would be merged with a cell before the vline. + if let Some(parent) = grid.effective_parent_cell_position(x, y) { + if parent.x < x { + // There is a colspan cell going through this vline's position, + // so don't draw it here. + return None; + } } } let (left_cell_stroke, left_cell_prioritized) = x .checked_sub(1) - .and_then(|left_x| grid.parent_cell(left_x, y)) - .map(|left_cell| { + .and_then(|left_x| { + // Let's find the parent cell of the position before us, in order + // to take its right stroke, even with gutter before us. + grid.effective_parent_cell_position(left_x, y) + }) + .map(|parent| { + let left_cell = grid.cell(parent.x, parent.y).unwrap(); (left_cell.stroke.right.clone(), left_cell.stroke_overridden.right) }) .unwrap_or((None, false)); let (right_cell_stroke, right_cell_prioritized) = if x < grid.cols.len() { - grid.parent_cell(x, y) - .map(|right_cell| { + // Let's find the parent cell of the position after us, in order + // to take its left stroke, even with gutter after us. + grid.effective_parent_cell_position(x, y) + .map(|parent| { + let right_cell = grid.cell(parent.x, parent.y).unwrap(); (right_cell.stroke.left.clone(), right_cell.stroke_overridden.left) }) .unwrap_or((None, false)) @@ -416,6 +422,12 @@ pub(super) fn vline_stroke_at_row( /// while `Some(None)` means specified to remove any stroke at this position). /// Also returns the stroke's drawing priority, which depends on its source. /// +/// The `local_top_y` parameter indicates which row is effectively on top of +/// this hline at the current region. This is `None` if the hline is above the +/// first row in the region, for instance. The `in_last_region` parameter +/// indicates whether this is the last region of the table. If not and this is +/// a line at the bottom border, the bottom border's line gains priority. +/// /// If the one (when at the border) or two (otherwise) cells above and below /// the hline have bottom and top stroke overrides, respectively, then the /// cells' stroke overrides are folded together with the hline's stroke (with @@ -428,58 +440,105 @@ pub(super) fn vline_stroke_at_row( /// /// The priority associated with the returned stroke follows the rules /// described in the docs for `generate_line_segment`. +/// +/// The rows argument is needed to know which rows are effectively present in +/// the current region, in order to avoid unnecessary hline splitting when a +/// rowspan's previous rows are either in a previous region or empty (and thus +/// wouldn't overlap with the hline, since its first row in the current region +/// is below the hline). +/// +/// This function assumes columns are sorted by increasing `x`, and rows are +/// sorted by increasing `y`. pub(super) fn hline_stroke_at_column( grid: &CellGrid, + rows: &[RowPiece], + local_top_y: Option, + in_last_region: bool, y: usize, x: usize, stroke: Option>>>, ) -> Option<(Arc>, StrokePriority)> { - // There are no rowspans yet, so no need to add a check here. The line will - // always be drawn, if it has a stroke. - let cell_x = if grid.has_gutter { - // Skip the gutter column this hline is in. - // This is because positions above and below it, even if gutter, could - // be part of a colspan, so we have to check the following cell. - // However, this is only valid if we're not in a gutter row. - x + x % 2 - } else { - x - }; + // When the hline isn't at the border, we need to check if a rowspan + // would be present between rows 'y' and 'y-1' at column 'x', and thus + // overlap with the line. + // To do so, we analyze the cell right below this hline. If it is + // merged with a cell above this line (parent.y < y) which is at this + // column or before it (parent.x <= x, which is checked by + // 'effective_parent_cell_position'), this means it would overlap with the + // hline, so the hline must not be drawn at this column. + if y != 0 && y != grid.rows.len() { + // Use 'effective_parent_cell_position' to skip the gutters, if x or y + // represent gutter tracks. + // We would then analyze the cell one column after (if at a gutter + // column), and/or one row below (if at a gutter row), in order to + // check if it would be merged with a cell before the hline. + if let Some(parent) = grid.effective_parent_cell_position(x, y) { + if parent.y < y { + // Get the first 'y' spanned by the possible rowspan in this region. + // The 'parent.y' row and any other spanned rows above 'y' could be + // missing from this region, which could have lead the check above + // to be triggered, even though there is no spanned row above the + // hline in the final layout of this region, and thus no overlap + // with the hline, allowing it to be drawn regardless of the + // theoretical presence of a rowspan going across its position. + let local_parent_y = rows + .iter() + .find(|row| row.y >= parent.y) + .map(|row| row.y) + .unwrap_or(y); - let (top_cell_stroke, top_cell_prioritized) = y - .checked_sub(1) + if local_parent_y < y { + // There is a rowspan cell going through this hline's + // position, so don't draw it here. + return None; + } + } + } + } + + // When the hline is at the top of the region and this isn't the first + // region, fold with the top stroke of the topmost cell at this column, + // that is, the top border. + let use_top_border_stroke = local_top_y.is_none() && y != 0; + let (top_cell_stroke, top_cell_prioritized) = local_top_y + .or(use_top_border_stroke.then_some(0)) .and_then(|top_y| { // Let's find the parent cell of the position above us, in order // to take its bottom stroke, even when we're below gutter. - grid.parent_cell_position(cell_x, top_y) + grid.effective_parent_cell_position(x, top_y) }) - .filter(|Axes { x: parent_x, .. }| { - // Only use the stroke of the cell above us but one column to the - // right if it is merged with a cell before this line's column. - // If the position above us is a simple non-merged cell, or the - // parent of a colspan, this will also evaluate to true. - parent_x <= &x - }) - .map(|Axes { x: parent_x, y: parent_y }| { - let top_cell = grid.cell(parent_x, parent_y).unwrap(); - (top_cell.stroke.bottom.clone(), top_cell.stroke_overridden.bottom) + .map(|parent| { + let top_cell = grid.cell(parent.x, parent.y).unwrap(); + if use_top_border_stroke { + (top_cell.stroke.top.clone(), top_cell.stroke_overridden.top) + } else { + (top_cell.stroke.bottom.clone(), top_cell.stroke_overridden.bottom) + } }) .unwrap_or((None, false)); - let (bottom_cell_stroke, bottom_cell_prioritized) = if y < grid.rows.len() { + // Use the bottom border stroke with priority if we're not in the last + // region, we have the last index, and (as a failsafe) we don't have the + // last row of cells above us. + let use_bottom_border_stroke = !in_last_region + && local_top_y.map_or(true, |top_y| top_y + 1 != grid.rows.len()) + && y == grid.rows.len(); + let bottom_y = + if use_bottom_border_stroke { grid.rows.len().saturating_sub(1) } else { y }; + let (bottom_cell_stroke, bottom_cell_prioritized) = if bottom_y < grid.rows.len() { // Let's find the parent cell of the position below us, in order // to take its top stroke, even when we're above gutter. - grid.parent_cell_position(cell_x, y) - .filter(|Axes { x: parent_x, .. }| { - // Only use the stroke of the cell below us but one column to the - // right if it is merged with a cell before this line's column. - // If the position below us is a simple non-merged cell, or the - // parent of a colspan, this will also evaluate to true. - parent_x <= &x - }) - .map(|Axes { x: parent_x, y: parent_y }| { - let bottom_cell = grid.cell(parent_x, parent_y).unwrap(); - (bottom_cell.stroke.top.clone(), bottom_cell.stroke_overridden.top) + grid.effective_parent_cell_position(x, bottom_y) + .map(|parent| { + let bottom_cell = grid.cell(parent.x, parent.y).unwrap(); + if use_bottom_border_stroke { + ( + bottom_cell.stroke.bottom.clone(), + bottom_cell.stroke_overridden.bottom, + ) + } else { + (bottom_cell.stroke.top.clone(), bottom_cell.stroke_overridden.top) + } }) .unwrap_or((None, false)) } else { @@ -496,11 +555,17 @@ pub(super) fn hline_stroke_at_column( }; let (prioritized_cell_stroke, deprioritized_cell_stroke) = - if top_cell_prioritized && !bottom_cell_prioritized { + if !use_bottom_border_stroke + && (use_top_border_stroke || top_cell_prioritized && !bottom_cell_prioritized) + { + // Top border must always be prioritized, even if it did not + // request for that explicitly. (top_cell_stroke, bottom_cell_stroke) } else { // When both cells' strokes have the same priority, we default to // prioritizing the bottom cell's top stroke. + // Additionally, the bottom border cell's stroke always has + // priority. (bottom_cell_stroke, top_cell_stroke) }; @@ -524,7 +589,7 @@ mod test { use super::super::layout::{Entry, RowPiece}; use super::*; use crate::foundations::Content; - use crate::layout::{Cell, Sides, Sizing}; + use crate::layout::{Axes, Cell, Sides, Sizing}; use crate::util::NonZeroExt; fn sample_cell() -> Cell { @@ -532,43 +597,47 @@ mod test { body: Content::default(), fill: None, colspan: NonZeroUsize::ONE, + rowspan: NonZeroUsize::ONE, stroke: Sides::splat(Some(Arc::new(Stroke::default()))), stroke_overridden: Sides::splat(false), + breakable: true, } } - fn cell_with_colspan(colspan: usize) -> Cell { + fn cell_with_colspan_rowspan(colspan: usize, rowspan: usize) -> Cell { Cell { body: Content::default(), fill: None, colspan: NonZeroUsize::try_from(colspan).unwrap(), + rowspan: NonZeroUsize::try_from(rowspan).unwrap(), stroke: Sides::splat(Some(Arc::new(Stroke::default()))), stroke_overridden: Sides::splat(false), + breakable: true, } } - fn sample_grid(gutters: bool) -> CellGrid { + fn sample_grid_for_vlines(gutters: bool) -> CellGrid { const COLS: usize = 4; const ROWS: usize = 6; let entries = vec![ // row 0 Entry::Cell(sample_cell()), Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(2)), + Entry::Cell(cell_with_colspan_rowspan(2, 1)), Entry::Merged { parent: 2 }, // row 1 Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(3)), + Entry::Cell(cell_with_colspan_rowspan(3, 1)), Entry::Merged { parent: 5 }, Entry::Merged { parent: 5 }, // row 2 Entry::Merged { parent: 4 }, Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(2)), + Entry::Cell(cell_with_colspan_rowspan(2, 1)), Entry::Merged { parent: 10 }, // row 3 Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(3)), + Entry::Cell(cell_with_colspan_rowspan(3, 2)), Entry::Merged { parent: 13 }, Entry::Merged { parent: 13 }, // row 4 @@ -579,7 +648,7 @@ mod test { // row 5 Entry::Cell(sample_cell()), Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(2)), + Entry::Cell(cell_with_colspan_rowspan(2, 1)), Entry::Merged { parent: 22 }, ]; CellGrid::new_internal( @@ -598,7 +667,7 @@ mod test { #[test] fn test_vline_splitting_without_gutter() { let stroke = Arc::new(Stroke::default()); - let grid = sample_grid(false); + let grid = sample_grid_for_vlines(false); let rows = &[ RowPiece { height: Abs::pt(1.0), y: 0 }, RowPiece { height: Abs::pt(2.0), y: 1 }, @@ -670,7 +739,7 @@ mod test { #[test] fn test_vline_splitting_with_gutter_and_per_cell_stroke() { let stroke = Arc::new(Stroke::default()); - let grid = sample_grid(true); + let grid = sample_grid_for_vlines(true); let rows = &[ RowPiece { height: Abs::pt(1.0), y: 0 }, RowPiece { height: Abs::pt(2.0), y: 1 }, @@ -694,16 +763,11 @@ mod test { length: Abs::pt(1.), priority: StrokePriority::GridStroke, }, + // Covers the rowspan between (original) rows 1 and 2 LineSegment { stroke: stroke.clone(), offset: Abs::pt(1. + 2.), - length: Abs::pt(4.), - priority: StrokePriority::GridStroke, - }, - LineSegment { - stroke: stroke.clone(), - offset: Abs::pt(1. + 2. + 4. + 8.), - length: Abs::pt(16.), + length: Abs::pt(4. + 8. + 16.), priority: StrokePriority::GridStroke, }, LineSegment { @@ -735,16 +799,11 @@ mod test { length: Abs::pt(1.), priority: StrokePriority::GridStroke, }, + // Covers the rowspan between (original) rows 1 and 2 LineSegment { stroke: stroke.clone(), offset: Abs::pt(1. + 2.), - length: Abs::pt(4.), - priority: StrokePriority::GridStroke, - }, - LineSegment { - stroke: stroke.clone(), - offset: Abs::pt(1. + 2. + 4. + 8.), - length: Abs::pt(16.), + length: Abs::pt(4. + 8. + 16.), priority: StrokePriority::GridStroke, }, LineSegment { @@ -787,16 +846,11 @@ mod test { length: Abs::pt(16.), priority: StrokePriority::GridStroke, }, + // Covers the rowspan between (original) rows 3 and 4 LineSegment { stroke: stroke.clone(), offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32.), - length: Abs::pt(64.), - priority: StrokePriority::GridStroke, - }, - LineSegment { - stroke: stroke.clone(), - offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128.), - length: Abs::pt(256.), + length: Abs::pt(64. + 128. + 256.), priority: StrokePriority::GridStroke, }, LineSegment { @@ -880,16 +934,11 @@ mod test { length: Abs::pt(16.), priority: StrokePriority::GridStroke, }, + // Covers the rowspan between (original) rows 3 and 4 LineSegment { stroke: stroke.clone(), offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32.), - length: Abs::pt(64.), - priority: StrokePriority::GridStroke, - }, - LineSegment { - stroke: stroke.clone(), - offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128.), - length: Abs::pt(256.), + length: Abs::pt(64. + 128. + 256.), priority: StrokePriority::GridStroke, }, LineSegment { @@ -922,7 +971,7 @@ mod test { #[test] fn test_vline_splitting_with_gutter_and_explicit_vlines() { let stroke = Arc::new(Stroke::default()); - let grid = sample_grid(true); + let grid = sample_grid_for_vlines(true); let rows = &[ RowPiece { height: Abs::pt(1.0), y: 0 }, RowPiece { height: Abs::pt(2.0), y: 1 }, @@ -1102,4 +1151,409 @@ mod test { ); } } + + fn sample_grid_for_hlines(gutters: bool) -> CellGrid { + const COLS: usize = 4; + const ROWS: usize = 9; + let entries = vec![ + // row 0 + Entry::Cell(cell_with_colspan_rowspan(1, 2)), + Entry::Cell(sample_cell()), + Entry::Cell(cell_with_colspan_rowspan(2, 2)), + Entry::Merged { parent: 2 }, + // row 1 + Entry::Merged { parent: 0 }, + Entry::Cell(sample_cell()), + Entry::Merged { parent: 2 }, + Entry::Merged { parent: 2 }, + // row 2 + Entry::Cell(sample_cell()), + Entry::Cell(sample_cell()), + Entry::Cell(sample_cell()), + Entry::Cell(sample_cell()), + // row 3 + Entry::Cell(cell_with_colspan_rowspan(4, 2)), + Entry::Merged { parent: 12 }, + Entry::Merged { parent: 12 }, + Entry::Merged { parent: 12 }, + // row 4 + Entry::Merged { parent: 12 }, + Entry::Merged { parent: 12 }, + Entry::Merged { parent: 12 }, + Entry::Merged { parent: 12 }, + // row 5 + Entry::Cell(sample_cell()), + Entry::Cell(cell_with_colspan_rowspan(1, 2)), + Entry::Cell(cell_with_colspan_rowspan(2, 1)), + Entry::Merged { parent: 22 }, + // row 6 + Entry::Cell(sample_cell()), + Entry::Merged { parent: 21 }, + Entry::Cell(sample_cell()), + Entry::Cell(sample_cell()), + // row 7 (adjacent rowspans covering the whole row) + Entry::Cell(cell_with_colspan_rowspan(2, 2)), + Entry::Merged { parent: 28 }, + Entry::Cell(cell_with_colspan_rowspan(2, 2)), + Entry::Merged { parent: 30 }, + // row 8 + Entry::Merged { parent: 28 }, + Entry::Merged { parent: 28 }, + Entry::Merged { parent: 30 }, + Entry::Merged { parent: 30 }, + ]; + CellGrid::new_internal( + Axes::with_x(&[Sizing::Auto; COLS]), + if gutters { + Axes::new(&[Sizing::Auto; COLS - 1], &[Sizing::Auto; ROWS - 1]) + } else { + Axes::default() + }, + vec![], + vec![], + entries, + ) + } + + #[test] + fn test_hline_splitting_without_gutter() { + let stroke = Arc::new(Stroke::default()); + let grid = sample_grid_for_hlines(false); + let columns = &[Abs::pt(1.), Abs::pt(2.), Abs::pt(4.), Abs::pt(8.)]; + // Assume all rows would be drawn in the same region, and are available. + let rows = grid + .rows + .iter() + .enumerate() + .map(|(y, _)| RowPiece { height: Abs::pt(f64::from(2u32.pow(y as u32))), y }) + .collect::>(); + let expected_hline_splits = &[ + // top border + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke, + }], + // interrupted a few times by rowspans + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1.), + length: Abs::pt(2.), + priority: StrokePriority::GridStroke, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke, + }], + // interrupted every time by rowspans + vec![], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke, + }], + // interrupted once by rowspan + vec![ + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2.), + length: Abs::pt(4. + 8.), + priority: StrokePriority::GridStroke, + }, + ], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke, + }], + // interrupted every time by successive rowspans + vec![], + // bottom border + vec![LineSegment { + stroke, + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke, + }], + ]; + for (y, expected_splits) in expected_hline_splits.iter().enumerate() { + let tracks = columns.iter().copied().enumerate(); + assert_eq!( + expected_splits, + &generate_line_segments( + &grid, + tracks, + y, + &[], + y == grid.rows.len(), + |grid, y, x, stroke| hline_stroke_at_column( + grid, + &rows, + y.checked_sub(1), + true, + y, + x, + stroke + ) + ) + .collect::>(), + ); + } + } + + #[test] + fn test_hline_splitting_with_gutter_and_explicit_hlines() { + let stroke = Arc::new(Stroke::default()); + let grid = sample_grid_for_hlines(true); + let columns = &[ + Abs::pt(1.0), + Abs::pt(2.0), + Abs::pt(4.0), + Abs::pt(8.0), + Abs::pt(16.0), + Abs::pt(32.0), + Abs::pt(64.0), + ]; + // Assume all rows would be drawn in the same region, and are available. + let rows = grid + .rows + .iter() + .enumerate() + .map(|(y, _)| RowPiece { height: Abs::pt(f64::from(2u32.pow(y as u32))), y }) + .collect::>(); + let expected_hline_splits = &[ + // top border + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + // interrupted a few times by rowspans + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1.), + length: Abs::pt(2. + 4. + 8.), + priority: StrokePriority::ExplicitLine, + }], + // interrupted a few times by rowspans + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1.), + length: Abs::pt(2. + 4. + 8.), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + // interrupted every time by rowspans + vec![], + // interrupted every time by rowspans + vec![], + // gutter line below + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + // interrupted once by rowspan + vec![ + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4.), + length: Abs::pt(8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }, + ], + // interrupted once by rowspan + vec![ + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4.), + length: Abs::pt(8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }, + ], + // gutter line below + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + // there are two consecutive rowspans, but the gutter column + // between them is free. + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4.), + length: Abs::pt(8.), + priority: StrokePriority::ExplicitLine, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4.), + length: Abs::pt(8.), + priority: StrokePriority::ExplicitLine, + }], + // bottom border + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64.), + priority: StrokePriority::ExplicitLine, + }], + ]; + for (y, expected_splits) in expected_hline_splits.iter().enumerate() { + let tracks = columns.iter().copied().enumerate(); + assert_eq!( + expected_splits, + &generate_line_segments( + &grid, + tracks, + y, + &[ + Line { + index: y, + start: 0, + end: None, + stroke: Some(stroke.clone()), + position: LinePosition::Before + }, + Line { + index: y, + start: 0, + end: None, + stroke: Some(stroke.clone()), + position: LinePosition::After + }, + ], + y == grid.rows.len(), + |grid, y, x, stroke| hline_stroke_at_column( + grid, + &rows, + y.checked_sub(1), + true, + y, + x, + stroke + ) + ) + .collect::>(), + ); + } + } + + #[test] + fn test_hline_splitting_considers_absent_rows() { + let grid = sample_grid_for_hlines(false); + let columns = &[Abs::pt(1.), Abs::pt(2.), Abs::pt(4.), Abs::pt(8.)]; + // Assume row 3 is absent (even though there's a rowspan between rows + // 3 and 4) + // This can happen if it is an auto row which turns out to be fully + // empty. + let rows = grid + .rows + .iter() + .enumerate() + .filter(|(y, _)| *y != 3) + .map(|(y, _)| RowPiece { height: Abs::pt(f64::from(2u32.pow(y as u32))), y }) + .collect::>(); + + // Hline above row 4 is no longer blocked, since the rowspan is now + // effectively spanning just one row (at least, visibly). + assert_eq!( + &vec![LineSegment { + stroke: Arc::new(Stroke::default()), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8.), + priority: StrokePriority::GridStroke + }], + &generate_line_segments( + &grid, + columns.iter().copied().enumerate(), + 4, + &[], + 4 == grid.rows.len(), + |grid, y, x, stroke| hline_stroke_at_column( + grid, + &rows, + if y == 4 { Some(2) } else { y.checked_sub(1) }, + true, + y, + x, + stroke + ) + ) + .collect::>() + ); + } } diff --git a/crates/typst/src/layout/grid/mod.rs b/crates/typst/src/layout/grid/mod.rs index fc884e806..6675f3e02 100644 --- a/crates/typst/src/layout/grid/mod.rs +++ b/crates/typst/src/layout/grid/mod.rs @@ -1,5 +1,6 @@ mod layout; mod lines; +mod rowspans; pub use self::layout::{Cell, CellGrid, Celled, GridItem, GridLayouter, ResolvableCell}; pub use self::lines::LinePosition; @@ -644,6 +645,10 @@ pub struct GridCell { #[default(NonZeroUsize::ONE)] pub colspan: NonZeroUsize, + /// The amount of rows spanned by this cell. + #[default(NonZeroUsize::ONE)] + pub rowspan: NonZeroUsize, + /// The cell's fill override. pub fill: Smart>, @@ -657,6 +662,12 @@ pub struct GridCell { #[resolve] #[fold] pub stroke: Sides>>>, + + /// Whether rows spanned by this cell can be placed in different pages. + /// When equal to `{auto}`, a cell spanning only fixed-size rows is + /// unbreakable, while a cell spanning at least one `{auto}`-sized row is + /// breakable. + pub breakable: Smart, } cast! { @@ -679,10 +690,13 @@ impl ResolvableCell for Packed { align: Smart, inset: Sides>>, stroke: Sides>>>>, + breakable: bool, styles: StyleChain, ) -> Cell { let cell = &mut *self; let colspan = cell.colspan(styles); + let rowspan = cell.rowspan(styles); + let breakable = cell.breakable(styles).unwrap_or(breakable); let fill = cell.fill(styles).unwrap_or_else(|| fill.clone()); let cell_stroke = cell.stroke(styles); @@ -727,12 +741,15 @@ impl ResolvableCell for Packed { })) }), ); + cell.push_breakable(Smart::Custom(breakable)); Cell { body: self.pack(), fill, colspan, + rowspan, stroke, stroke_overridden, + breakable, } } @@ -748,6 +765,10 @@ impl ResolvableCell for Packed { (**self).colspan(styles) } + fn rowspan(&self, styles: StyleChain) -> NonZeroUsize { + (**self).rowspan(styles) + } + fn span(&self) -> Span { Packed::span(self) } diff --git a/crates/typst/src/layout/grid/rowspans.rs b/crates/typst/src/layout/grid/rowspans.rs new file mode 100644 index 000000000..be63da5ce --- /dev/null +++ b/crates/typst/src/layout/grid/rowspans.rs @@ -0,0 +1,864 @@ +use crate::diag::SourceResult; +use crate::engine::Engine; +use crate::foundations::Resolve; +use crate::layout::{ + Abs, Axes, Cell, Frame, GridLayouter, LayoutMultiple, Point, Regions, Size, Sizing, +}; +use crate::util::MaybeReverseIter; + +use super::layout::{points, Row}; + +/// All information needed to layout a single rowspan. +pub(super) struct Rowspan { + // First column of this rowspan. + pub(super) x: usize, + // First row of this rowspan. + pub(super) y: usize, + // Amount of rows spanned by the cell at (x, y). + pub(super) rowspan: usize, + /// The horizontal offset of this rowspan in all regions. + pub(super) dx: Abs, + /// The vertical offset of this rowspan in the first region. + pub(super) dy: Abs, + /// The index of the first region this rowspan appears in. + pub(super) first_region: usize, + /// The full height in the first region this rowspan appears in, for + /// relative sizing. + pub(super) region_full: Abs, + /// The vertical space available for this rowspan in each region. + pub(super) heights: Vec, +} + +/// The output of the simulation of an unbreakable row group. +#[derive(Default)] +pub(super) struct UnbreakableRowGroup { + /// The rows in this group of unbreakable rows. + /// Includes their indices and their predicted heights. + pub(super) rows: Vec<(usize, Abs)>, + /// The total height of this row group. + pub(super) height: Abs, +} + +/// Data used to measure a cell in an auto row. +pub(super) struct CellMeasurementData<'layouter> { + /// The available width for the cell across all regions. + pub(super) width: Abs, + /// The available height for the cell in its first region. + pub(super) height: Abs, + /// The backlog of heights available for the cell in later regions. + /// When this is `None`, the `custom_backlog` field should be used instead. + pub(super) backlog: Option<&'layouter [Abs]>, + /// If the backlog needs to be built from scratch instead of reusing the + /// one at the current region, which is the case of a multi-region rowspan + /// (needs to join its backlog of already laid out heights with the current + /// backlog), then this vector will store the new backlog. + pub(super) custom_backlog: Vec, + /// The full height of the first region of the cell. + pub(super) full: Abs, + /// The total height of previous rows spanned by the cell in the current + /// region (so far). + pub(super) height_in_this_region: Abs, + /// The amount of previous regions spanned by the cell. + /// They are skipped for measurement purposes. + pub(super) frames_in_previous_regions: usize, +} + +impl<'a> GridLayouter<'a> { + /// Layout a rowspan over the already finished regions, plus the current + /// region, if it wasn't finished yet (because we're being called from + /// `finish_region`, but note that this function is also called once after + /// all regions are finished, in which case `current_region` is `None`). + /// + /// We need to do this only once we already know the heights of all + /// spanned rows, which is only possible after laying out the last row + /// spanned by the rowspan (or some row immediately after the last one). + pub(super) fn layout_rowspan( + &mut self, + rowspan_data: Rowspan, + current_region: Option<&mut Frame>, + engine: &mut Engine, + ) -> SourceResult<()> { + let Rowspan { + x, y, dx, dy, first_region, region_full, heights, .. + } = rowspan_data; + let [first_height, backlog @ ..] = heights.as_slice() else { + // Nothing to layout. + return Ok(()); + }; + let first_column = self.rcols[x]; + let cell = self.grid.cell(x, y).unwrap(); + let width = self.cell_spanned_width(cell, x); + let dx = if self.is_rtl { dx - width + first_column } else { dx }; + + // Prepare regions. + let size = Size::new(width, *first_height); + let mut pod = Regions::one(size, Axes::splat(true)); + pod.full = region_full; + pod.backlog = backlog; + + // Push the layouted frames directly into the finished frames. + // At first, we draw the rowspan starting at its expected offset + // in the first region. + let mut pos = Point::new(dx, dy); + let fragment = cell.layout(engine, self.styles, pod)?; + for (finished, frame) in self + .finished + .iter_mut() + .chain(current_region.into_iter()) + .skip(first_region) + .zip(fragment) + { + finished.push_frame(pos, frame); + + // From the second region onwards, the rowspan's continuation + // starts at the very top. + pos.y = Abs::zero(); + } + + Ok(()) + } + + /// Checks if a row contains the beginning of one or more rowspan cells. + /// If so, adds them to the rowspans vector. + pub(super) fn check_for_rowspans(&mut self, y: usize) { + // We will compute the horizontal offset of each rowspan in advance. + // For that reason, we must reverse the column order when using RTL. + let offsets = points(self.rcols.iter().copied().rev_if(self.is_rtl)); + for (x, dx) in (0..self.rcols.len()).rev_if(self.is_rtl).zip(offsets) { + let Some(cell) = self.grid.cell(x, y) else { + continue; + }; + let rowspan = self.grid.effective_rowspan_of_cell(cell); + if rowspan > 1 { + // Rowspan detected. We will lay it out later. + self.rowspans.push(Rowspan { + x, + y, + rowspan, + dx, + // The four fields below will be updated in 'finish_region'. + dy: Abs::zero(), + first_region: usize::MAX, + region_full: Abs::zero(), + heights: vec![], + }); + } + } + } + + /// Checks if the upcoming rows will be grouped together under an + /// unbreakable row group, and, if so, advances regions until there is + /// enough space for them. This can be needed, for example, if there's an + /// unbreakable rowspan crossing those rows. + pub(super) fn check_for_unbreakable_rows( + &mut self, + current_row: usize, + engine: &mut Engine, + ) -> SourceResult<()> { + if self.unbreakable_rows_left == 0 { + let row_group = + self.simulate_unbreakable_row_group(current_row, &self.regions, engine)?; + + // Skip to fitting region. + while !self.regions.size.y.fits(row_group.height) && !self.regions.in_last() { + self.finish_region(engine)?; + } + self.unbreakable_rows_left = row_group.rows.len(); + } + + Ok(()) + } + + /// Simulates a group of unbreakable rows, starting with the index of the + /// first row in the group. Keeps adding rows to the group until none have + /// unbreakable cells in common. + /// + /// This is used to figure out how much height the next unbreakable row + /// group (if any) needs. + pub(super) fn simulate_unbreakable_row_group( + &self, + first_row: usize, + regions: &Regions<'_>, + engine: &mut Engine, + ) -> SourceResult { + let mut row_group = UnbreakableRowGroup::default(); + let mut unbreakable_rows_left = 0; + for (y, row) in self.grid.rows.iter().enumerate().skip(first_row) { + let additional_unbreakable_rows = self.check_for_unbreakable_cells(y); + unbreakable_rows_left = + unbreakable_rows_left.max(additional_unbreakable_rows); + if unbreakable_rows_left == 0 { + // This check is in case the first row does not have any + // unbreakable cells. Therefore, no unbreakable row group + // is formed. + break; + } + let height = match row { + Sizing::Rel(v) => v.resolve(self.styles).relative_to(regions.base().y), + + // No need to pass the regions to the auto row, since + // unbreakable auto rows are always measured with infinite + // height, ignore backlog, and do not invoke the rowspan + // simulation procedure at all. + Sizing::Auto => self + .measure_auto_row( + engine, + y, + false, + unbreakable_rows_left, + Some(&row_group), + )? + .unwrap() + .first() + .copied() + .unwrap_or_else(Abs::zero), + // Fractional rows don't matter when calculating the space + // needed for unbreakable rows + Sizing::Fr(_) => Abs::zero(), + }; + row_group.height += height; + row_group.rows.push((y, height)); + unbreakable_rows_left -= 1; + if unbreakable_rows_left == 0 { + // This second check is necessary so we can tell distinct + // but consecutive unbreakable row groups apart. If the + // unbreakable row group ended at this row, we stop before + // checking the next one. + break; + } + } + + Ok(row_group) + } + + /// Checks if one or more of the cells at the given row are unbreakable. + /// If so, returns the largest rowspan among the unbreakable cells; + /// the spanned rows must, as a result, be laid out in the same region. + pub(super) fn check_for_unbreakable_cells(&self, y: usize) -> usize { + (0..self.grid.cols.len()) + .filter_map(|x| self.grid.cell(x, y)) + .filter(|cell| !cell.breakable) + .map(|cell| self.grid.effective_rowspan_of_cell(cell)) + .max() + .unwrap_or(0) + } + + /// Used by `measure_auto_row` to gather data needed to measure the cell. + pub(super) fn prepare_auto_row_cell_measurement( + &self, + parent: Axes, + cell: &Cell, + breakable: bool, + row_group_data: Option<&UnbreakableRowGroup>, + ) -> CellMeasurementData<'_> { + let rowspan = self.grid.effective_rowspan_of_cell(cell); + + // This variable is used to construct a custom backlog if the cell + // is a rowspan. When measuring, we join the heights from previous + // regions to the current backlog to form the rowspan's expected + // backlog. + let mut rowspan_backlog: Vec = vec![]; + + // Each declaration, from top to bottom: + // 1. The height available to the cell in the first region. + // Usually, this will just be the size remaining in the current + // region. + // 2. The backlog of upcoming region heights to specify as + // available to the cell. + // 3. The full height of the first region of the cell. + // 4. The total height of the cell covered by previously spanned + // rows in this region. This is used by rowspans to be able to tell + // how much the auto row needs to expand. + // 5. The amount of frames laid out by this cell in previous + // regions. When the cell isn't a rowspan, this is always zero. + // These frames are skipped after measuring. + let (height, backlog, full, height_in_this_region, frames_in_previous_regions); + if rowspan == 1 { + // Not a rowspan, so the cell only occupies this row. Therefore: + // 1. When we measure the cell below, use the available height + // remaining in the region as the height it has available. + // However, if the auto row is unbreakable, measure with infinite + // height instead to see how much content expands. + // 2. Also use the region's backlog when measuring. + // 3. Use the same full region height. + // 4. No height occupied by this cell in this region so far. + // 5. Yes, this cell started in this region. + height = if breakable { self.regions.size.y } else { Abs::inf() }; + backlog = Some(self.regions.backlog); + full = if breakable { self.regions.full } else { Abs::inf() }; + height_in_this_region = Abs::zero(); + frames_in_previous_regions = 0; + } else { + // Height of the rowspan covered by spanned rows in the current + // region. + let laid_out_height: Abs = self + .lrows + .iter() + .filter_map(|row| match row { + Row::Frame(frame, y, _) + if (parent.y..parent.y + rowspan).contains(y) => + { + Some(frame.height()) + } + // Either we have a row outside of the rowspan, or a + // fractional row, whose size we can't really guess. + _ => None, + }) + .sum(); + + // If we're currently simulating an unbreakable row group, also + // consider the height of previously spanned rows which are in + // the row group but not yet laid out. + let unbreakable_height: Abs = row_group_data + .into_iter() + .flat_map(|row_group| &row_group.rows) + .filter(|(y, _)| (parent.y..parent.y + rowspan).contains(y)) + .map(|(_, height)| height) + .sum(); + + height_in_this_region = laid_out_height + unbreakable_height; + + // Ensure we will measure the rowspan with the correct heights. + // For that, we will gather the total height spanned by this + // rowspan in previous regions. + if let Some((rowspan_full, [rowspan_height, rowspan_other_heights @ ..])) = + self.rowspans + .iter() + .find(|data| data.x == parent.x && data.y == parent.y) + .map(|data| (data.region_full, &*data.heights)) + { + // The rowspan started in a previous region (as it already + // has at least one region height). + // Therefore, its initial height will be the height in its + // first spanned region, and the backlog will be the + // remaining heights, plus the current region's size, plus + // the current backlog. + frames_in_previous_regions = rowspan_other_heights.len() + 1; + + let heights_up_to_current_region = rowspan_other_heights + .iter() + .copied() + .chain(std::iter::once(if breakable { + self.initial.y + } else { + // When measuring unbreakable auto rows, infinite + // height is available for content to expand. + Abs::inf() + })); + + rowspan_backlog = if breakable { + // This auto row is breakable. Therefore, join the + // rowspan's already laid out heights with the current + // region's height and current backlog to ensure a good + // level of accuracy in the measurements. + heights_up_to_current_region + .chain(self.regions.backlog.iter().copied()) + .collect::>() + } else { + // No extra backlog if this is an unbreakable auto row. + // Ensure, when measuring, that the rowspan can be laid + // out through all spanned rows which were already laid + // out so far, but don't go further than this region. + heights_up_to_current_region.collect::>() + }; + + height = *rowspan_height; + backlog = None; + full = rowspan_full; + } else { + // The rowspan started in the current region, as its vector + // of heights in regions is currently empty. + // Therefore, the initial height it has available will be + // the current available size, plus the size spanned in + // previous rows in this region (and/or unbreakable row + // group, if it's being simulated). + // The backlog and full will be that of the current region. + // However, use infinite height instead if we're measuring an + // unbreakable auto row. + height = if breakable { + height_in_this_region + self.regions.size.y + } else { + Abs::inf() + }; + backlog = Some(self.regions.backlog); + full = if breakable { self.regions.full } else { Abs::inf() }; + frames_in_previous_regions = 0; + } + } + + let width = self.cell_spanned_width(cell, parent.x); + CellMeasurementData { + width, + height, + backlog, + custom_backlog: rowspan_backlog, + full, + height_in_this_region, + frames_in_previous_regions, + } + } + + /// Used in `measure_auto_row` to prepare a rowspan's `sizes` vector. + /// Returns `true` if we'll need to run a simulation to more accurately + /// expand the auto row based on the rowspan's demanded size, or `false` + /// otherwise. + #[allow(clippy::too_many_arguments)] + pub(super) fn prepare_rowspan_sizes( + &self, + auto_row_y: usize, + sizes: &mut Vec, + cell: &Cell, + parent_y: usize, + rowspan: usize, + unbreakable_rows_left: usize, + measurement_data: &CellMeasurementData<'_>, + ) -> bool { + if sizes.len() <= 1 + && sizes.first().map_or(true, |&first_frame_size| { + first_frame_size <= measurement_data.height_in_this_region + }) + { + // Ignore a rowspan fully covered by rows in previous + // regions and/or in the current region. + sizes.clear(); + return false; + } + if let Some(first_frame_size) = sizes.first_mut() { + // Subtract already covered height from the size requested + // by this rowspan to the auto row in the first region. + *first_frame_size = (*first_frame_size + - measurement_data.height_in_this_region) + .max(Abs::zero()); + } + + let last_spanned_row = parent_y + rowspan - 1; + + // When the rowspan is unbreakable, or all of its upcoming + // spanned rows are in the same unbreakable row group, its + // spanned gutter will certainly be in the same region as all + // of its other spanned rows, thus gutters won't be removed, + // and we can safely reduce how much the auto row expands by + // without using simulation. + let is_effectively_unbreakable_rowspan = + !cell.breakable || auto_row_y + unbreakable_rows_left > last_spanned_row; + + // If the rowspan doesn't end at this row and the grid has + // gutter, we will need to run a simulation to find out how + // much to expand this row by later. This is because gutters + // spanned by this rowspan might be removed if they appear + // around a pagebreak, so the auto row might have to expand a + // bit more to compensate for the missing gutter height. + // However, unbreakable rowspans aren't affected by that + // problem. + if auto_row_y != last_spanned_row + && !sizes.is_empty() + && self.grid.has_gutter + && !is_effectively_unbreakable_rowspan + { + return true; + } + + // We can only predict the resolved size of upcoming fixed-size + // rows, but not fractional rows. In the future, we might be + // able to simulate and circumvent the problem with fractional + // rows. Relative rows are currently always measured relative + // to the first region as well. + // We can ignore auto rows since this is the last spanned auto + // row. + let will_be_covered_height: Abs = self + .grid + .rows + .iter() + .skip(auto_row_y + 1) + .take(last_spanned_row - auto_row_y) + .map(|row| match row { + Sizing::Rel(v) => { + v.resolve(self.styles).relative_to(self.regions.base().y) + } + _ => Abs::zero(), + }) + .sum(); + + // Remove or reduce the sizes of the rowspan at the current or future + // regions where it will already be covered by further rows spanned by + // it. + subtract_end_sizes(sizes, will_be_covered_height); + + // No need to run a simulation for this rowspan. + false + } + + /// Performs a simulation to predict by how much height the last spanned + /// auto row will have to expand, given the current sizes of the auto row + /// in each region and the pending rowspans' data (parent Y, rowspan amount + /// and vector of requested sizes). + pub(super) fn simulate_and_measure_rowspans_in_auto_row( + &self, + y: usize, + resolved: &mut Vec, + pending_rowspans: &[(usize, usize, Vec)], + unbreakable_rows_left: usize, + row_group_data: Option<&UnbreakableRowGroup>, + engine: &mut Engine, + ) -> SourceResult<()> { + // To begin our simulation, we have to unify the sizes demanded by + // each rowspan into one simple vector of sizes, as if they were + // all a single rowspan. These sizes will be appended to + // 'resolved' once we finish our simulation. + let mut simulated_sizes: Vec = vec![]; + let last_resolved_size = resolved.last().copied(); + let mut max_spanned_row = y; + for (parent_y, rowspan, sizes) in pending_rowspans { + let mut sizes = sizes.iter(); + for (target, size) in resolved.iter_mut().zip(&mut sizes) { + // First, we update the already resolved sizes as required + // by this rowspan. No need to simulate this since the auto row + // will already expand throughout already resolved regions. + // Our simulation, therefore, won't otherwise change already + // resolved sizes, other than, perhaps, the last one (at the + // last currently resolved region, at which we can expand). + target.set_max(*size); + } + for (simulated_target, rowspan_size) in + simulated_sizes.iter_mut().zip(&mut sizes) + { + // The remaining sizes are exclusive to rowspans, since + // other cells in this row didn't require as many regions. + // We will perform a simulation to see how much of these sizes + // does the auto row actually need to expand by, and how much + // is already covered by upcoming rows spanned by the rowspans. + simulated_target.set_max(*rowspan_size); + } + simulated_sizes.extend(sizes); + max_spanned_row = max_spanned_row.max(parent_y + rowspan - 1); + } + if simulated_sizes.is_empty() && resolved.last() == last_resolved_size.as_ref() { + // The rowspans already fit in the already resolved sizes. + // No need for simulation. + return Ok(()); + } + + // We will be updating the last resolved size (expanding the auto + // row) as needed. Therefore, consider it as part of the simulation. + // At the end, we push it back. + if let Some(modified_last_resolved_size) = resolved.pop() { + simulated_sizes.insert(0, modified_last_resolved_size); + } + + // Prepare regions for simulation. + // If we're currently inside an unbreakable row group simulation, + // subtract the current row group height from the available space + // when simulating rowspans in said group. + let mut simulated_regions = self.regions; + simulated_regions.size.y -= + row_group_data.map_or(Abs::zero(), |row_group| row_group.height); + + for _ in 0..resolved.len() { + // Ensure we start at the region where we will expand the auto + // row. + // Note that we won't accidentally call '.next()' once more than + // desired (we won't skip the last resolved frame, where we will + // expand) because we popped the last resolved size from the + // resolved vector, above. + simulated_regions.next(); + } + if let Some(original_last_resolved_size) = last_resolved_size { + // We're now at the (current) last region of this auto row. + // Consider resolved height as already taken space. + simulated_regions.size.y -= original_last_resolved_size; + } + + // Now we run the simulation to check how much the auto row needs to + // grow to ensure that rowspans have the height they need. + let simulations_stabilized = self.run_rowspan_simulation( + y, + max_spanned_row, + simulated_regions, + &mut simulated_sizes, + engine, + last_resolved_size, + unbreakable_rows_left, + )?; + + if !simulations_stabilized { + // If the simulation didn't stabilize above, we will just pretend + // all gutters were removed, as a best effort. That means the auto + // row will expand more than it normally should, but there isn't + // much we can do. + let will_be_covered_height = self + .grid + .rows + .iter() + .enumerate() + .skip(y + 1) + .take(max_spanned_row - y) + .filter(|(y, _)| !self.grid.is_gutter_track(*y)) + .map(|(_, row)| match row { + Sizing::Rel(v) => { + v.resolve(self.styles).relative_to(self.regions.base().y) + } + _ => Abs::zero(), + }) + .sum(); + + subtract_end_sizes(&mut simulated_sizes, will_be_covered_height); + } + + resolved.extend(simulated_sizes); + + Ok(()) + } + + /// Performs a simulation of laying out multiple rowspans (consolidated + /// into a single vector of simulated sizes) ending in a certain auto row + /// in order to find out how much the auto row will need to expand to cover + /// the rowspans' requested sizes, considering how much size has been + /// covered by other rows and by gutter between rows. + /// + /// For example, for a rowspan cell containing a block of 8pt of height + /// spanning rows (1pt, auto, 0.5pt, 0.5pt), with a gutter of 1pt between + /// each row, we have that the rows it spans provide 1pt + 0.5pt + 0.5pt + /// = 2pt of height, plus 1pt + 1pt + 1pt = 3pt of gutter, with a total of + /// 2pt + 3pt = 5pt of height already covered by fixed-size rows and + /// gutters. This means that the auto row must (under normal conditions) + /// expand by 3pt (8pt - 5pt) so that the rowspan has enough height across + /// rows to fully draw its contents. + /// + /// However, it's possible that the last row is sent to the next page to + /// respect a pagebreak, and then the 1pt gutter before it disappears. This + /// would lead to our rowspan having a height of 7pt available if we fail + /// to predict this situation when measuring the auto row. + /// + /// The algorithm below will, thus, attempt to simulate the layout of each + /// spanned row, considering the space available in the current page and in + /// upcoming pages (through the region backlog), in order to predict which + /// rows will be sent to a new page and thus have their preceding gutter + /// spacing removed (meaning the auto row has to grow a bit more). After + /// simulating, we subtract the total height spanned by upcoming rows and + /// gutter from the total rowspan height - this will be how much our auto + /// row has to expand. We then simulate again to check if, if the auto row + /// expanded by that amount, that would prompt the auto row to need to + /// expand even more, because expanding the auto row might cause some other + /// larger gutter spacing to disappear (leading to the rowspan having less + /// space available instead of more); if so, we update the amount to expand + /// and run the simulation again. Otherwise (if it should expand by the + /// same amount, meaning we predicted correctly, or by less, meaning the + /// auto row will be a bit larger than it should be, but that's a + /// compromise we're willing to accept), we conclude the simulation + /// (consider it stabilized) and return the result. + /// + /// Tries up to 5 times. If two consecutive simulations stabilize, then + /// we subtract the predicted expansion height ('amount_to_grow') from the + /// total height requested by rowspans (the 'requested_rowspan_height') to + /// obtain how much height is covered by upcoming rows, according to our + /// simulation, and the result of that operation is used to reduce or + /// remove heights from the end of the vector of simulated sizes, such that + /// the remaining heights are exactly how much the auto row should expand + /// by. Then, we return `true`. + /// + /// If the simulations don't stabilize (they return 5 different and + /// successively larger values), aborts and returns `false`. + #[allow(clippy::too_many_arguments)] + fn run_rowspan_simulation( + &self, + y: usize, + max_spanned_row: usize, + mut simulated_regions: Regions<'_>, + simulated_sizes: &mut Vec, + engine: &mut Engine, + last_resolved_size: Option, + unbreakable_rows_left: usize, + ) -> SourceResult { + // The max amount this row can expand will be the total size requested + // by rowspans which was not yet resolved. It is worth noting that, + // earlier, we pushed the last resolved size to 'simulated_sizes' as + // row expansion starts with it, so it's possible a rowspan requested + // to extend that size (we will see, through the simulation, if that's + // needed); however, we must subtract that resolved size from the total + // sum of sizes, as it was already resolved and thus the auto row will + // already grow by at least that much in the last resolved region (we + // would grow by the same size twice otherwise). + let requested_rowspan_height = + simulated_sizes.iter().sum::() - last_resolved_size.unwrap_or_default(); + + // The amount the row will effectively grow by, according to the latest + // simulation. + let mut amount_to_grow = Abs::zero(); + + // Try to simulate up to 5 times. If it doesn't stabilize at a value + // which, when used and combined with upcoming spanned rows, covers all + // of the requested rowspan height, we give up. + for _attempt in 0..5 { + let mut regions = simulated_regions; + let mut total_spanned_height = Abs::zero(); + let mut unbreakable_rows_left = unbreakable_rows_left; + + // Height of the latest spanned gutter row. + // Zero if it was removed. + let mut latest_spanned_gutter_height = Abs::zero(); + let spanned_rows = &self.grid.rows[y + 1..=max_spanned_row]; + for (offset, row) in spanned_rows.iter().enumerate() { + if (total_spanned_height + amount_to_grow).fits(requested_rowspan_height) + { + // Stop the simulation, as the combination of upcoming + // spanned rows (so far) and the current amount the auto + // row expands by has already fully covered the height the + // rowspans need. + break; + } + let spanned_y = y + 1 + offset; + let is_gutter = self.grid.is_gutter_track(spanned_y); + + if unbreakable_rows_left == 0 { + // Simulate unbreakable row groups, and skip regions until + // they fit. There is no risk of infinite recursion, as + // no auto rows participate in the simulation, so the + // unbreakable row group simulator won't recursively call + // 'measure_auto_row' or (consequently) this function. + let row_group = + self.simulate_unbreakable_row_group(spanned_y, ®ions, engine)?; + while !regions.size.y.fits(row_group.height) && !regions.in_last() { + total_spanned_height -= latest_spanned_gutter_height; + latest_spanned_gutter_height = Abs::zero(); + regions.next(); + } + + unbreakable_rows_left = row_group.rows.len(); + } + + match row { + // Fixed-size spanned rows are what we are interested in. + // They contribute a fixed amount of height to our rowspan. + Sizing::Rel(v) => { + let height = v.resolve(self.styles).relative_to(regions.base().y); + total_spanned_height += height; + if is_gutter { + latest_spanned_gutter_height = height; + } + + let mut skipped_region = false; + while unbreakable_rows_left == 0 + && !regions.size.y.fits(height) + && !regions.in_last() + { + // A row was pushed to the next region. Therefore, + // the immediately preceding gutter row is removed. + total_spanned_height -= latest_spanned_gutter_height; + latest_spanned_gutter_height = Abs::zero(); + skipped_region = true; + regions.next(); + } + + if !skipped_region || !is_gutter { + // No gutter at the top of a new region, so don't + // account for it if we just skipped a region. + regions.size.y -= height; + } + } + Sizing::Auto => { + // We only simulate for rowspans which end at the + // current auto row. Therefore, there won't be any + // further auto rows. + unreachable!(); + } + // For now, we ignore fractional rows on simulation. + Sizing::Fr(_) if is_gutter => { + latest_spanned_gutter_height = Abs::zero(); + } + Sizing::Fr(_) => {} + } + + unbreakable_rows_left = unbreakable_rows_left.saturating_sub(1); + } + + // If the total height spanned by upcoming spanned rows plus the + // current amount we predict the auto row will have to grow (from + // the previous iteration) are larger than the size requested by + // rowspans, this means the auto row will grow enough in order to + // cover the requested rowspan height, so we stop the simulation. + // + // If that's not yet the case, we will simulate again and make the + // auto row grow even more, and do so until either the auto row has + // grown enough, or we tried to do so over 5 times. + // + // A flaw of this approach is that we consider rowspans' content to + // be contiguous. That is, we treat rowspans' requested heights as + // a simple number, instead of properly using the vector of + // requested heights in each region. This can lead to some + // weirdness when using multi-page rowspans with content that + // reacts to the amount of space available, including paragraphs. + // However, this is probably the best we can do for now. + if (total_spanned_height + amount_to_grow).fits(requested_rowspan_height) { + // Reduce sizes by the amount to be covered by upcoming spanned + // rows, which is equivalent to the amount that we don't grow. + // We reduce from the end as that's where the spanned rows will + // cover. The remaining sizes will all be covered by the auto + // row instead (which will grow by those sizes). + subtract_end_sizes( + simulated_sizes, + requested_rowspan_height - amount_to_grow, + ); + + if let Some(last_resolved_size) = last_resolved_size { + // Ensure the first simulated size is at least as large as + // the last resolved size (its initial value). As it was + // already resolved before, we must not reduce below the + // resolved size to avoid problems with non-rowspan cells. + if let Some(first_simulated_size) = simulated_sizes.first_mut() { + first_simulated_size.set_max(last_resolved_size); + } else { + simulated_sizes.push(last_resolved_size); + } + } + + return Ok(true); + } + + // For the next simulation, we will test if the auto row can grow + // by precisely how much rowspan height is not covered by upcoming + // spanned rows, according to the current simulation. + // We know that the new amount to grow is larger (and thus the + // auto row only expands between each simulation), because we + // checked above if + // 'total_spanned_height + (now old_)amount_to_grow >= requested_rowspan_height', + // which was false, so it holds that + // 'total_spanned_height + old_amount_to_grow < requested_rowspan_height' + // Thus, + // 'old_amount_to_grow < requested_rowspan_height - total_spanned_height' + // Therefore, by definition, 'old_amount_to_grow < amount_to_grow'. + let old_amount_to_grow = std::mem::replace( + &mut amount_to_grow, + requested_rowspan_height - total_spanned_height, + ); + + // We advance the 'regions' variable accordingly, so that, in the + // next simulation, we consider already grown space as final. + // That is, we effectively simulate how rows would be placed if the + // auto row grew by precisely the new value of 'amount_to_grow'. + let mut extra_amount_to_grow = amount_to_grow - old_amount_to_grow; + while extra_amount_to_grow > Abs::zero() + && simulated_regions.size.y < extra_amount_to_grow + { + extra_amount_to_grow -= simulated_regions.size.y.max(Abs::zero()); + simulated_regions.next(); + } + simulated_regions.size.y -= extra_amount_to_grow; + } + + // Simulation didn't succeed in 5 attempts. + Ok(false) + } +} + +/// Subtracts some size from the end of a vector of sizes. +/// For example, subtracting 5pt from \[2pt, 1pt, 3pt\] will result in \[1pt\]. +fn subtract_end_sizes(sizes: &mut Vec, mut subtract: Abs) { + while subtract > Abs::zero() && sizes.last().is_some_and(|&size| size <= subtract) { + subtract -= sizes.pop().unwrap(); + } + if subtract > Abs::zero() { + if let Some(last_size) = sizes.last_mut() { + *last_size -= subtract; + } + } +} diff --git a/crates/typst/src/model/table.rs b/crates/typst/src/model/table.rs index a51fd1e7f..79521f2d1 100644 --- a/crates/typst/src/model/table.rs +++ b/crates/typst/src/model/table.rs @@ -535,6 +535,10 @@ pub struct TableCell { #[default(NonZeroUsize::ONE)] pub colspan: NonZeroUsize, + /// The amount of rows spanned by this cell. + #[default(NonZeroUsize::ONE)] + rowspan: NonZeroUsize, + /// The cell's alignment override. pub align: Smart, @@ -545,6 +549,12 @@ pub struct TableCell { #[resolve] #[fold] pub stroke: Sides>>>, + + /// Whether rows spanned by this cell can be placed in different pages. + /// When equal to `{auto}`, a cell spanning only fixed-size rows is + /// unbreakable, while a cell spanning at least one `{auto}`-sized row is + /// breakable. + pub breakable: Smart, } cast! { @@ -567,10 +577,13 @@ impl ResolvableCell for Packed { align: Smart, inset: Sides>>, stroke: Sides>>>>, + breakable: bool, styles: StyleChain, ) -> Cell { let cell = &mut *self; let colspan = cell.colspan(styles); + let rowspan = cell.rowspan(styles); + let breakable = cell.breakable(styles).unwrap_or(breakable); let fill = cell.fill(styles).unwrap_or_else(|| fill.clone()); let cell_stroke = cell.stroke(styles); @@ -615,12 +628,15 @@ impl ResolvableCell for Packed { })) }), ); + cell.push_breakable(Smart::Custom(breakable)); Cell { body: self.pack(), fill, colspan, + rowspan, stroke, stroke_overridden, + breakable, } } @@ -632,10 +648,14 @@ impl ResolvableCell for Packed { (**self).y(styles) } - fn colspan(&self, styles: StyleChain) -> std::num::NonZeroUsize { + fn colspan(&self, styles: StyleChain) -> NonZeroUsize { (**self).colspan(styles) } + fn rowspan(&self, styles: StyleChain) -> NonZeroUsize { + (**self).rowspan(styles) + } + fn span(&self) -> Span { Packed::span(self) } diff --git a/tests/ref/bugs/grid-4.png b/tests/ref/bugs/grid-4.png new file mode 100644 index 0000000000000000000000000000000000000000..475f561ea7f48966f4d0f5525843c099ffe09827 GIT binary patch literal 1117 zcmeAS@N?(olHy`uVBq!ia0y~yU}OQ}bsRtehTtdaaSRMBDxNNmAr-gY-u3SY4V5|Y zv3mXbw2Knci_DZd90NCZbaEx1Fc)Tx;=&T{LL14{b6zqjlE@+TbcW2=kG&fY5CDVVpz z{!u}tlKG*PtsUo2{oN^;RQLNA`zqU=g7;$nm7Pg--|=N*LqJ~l46XPxy&HDbe?I(p z`ueD8QV*vuZr|6v)A?}T?6b1Sc4E2$P2`_^i?Xlt(JjRjXP$Sx_SNHZ*RKVeFY)y_ zBixOq18Dq)2#(}rVPF5=vk_DEy8NPA!dBSR$<4bEo8FLG{Z^yJq0wW7pld%PHme zw#8M?RzwMBwB#9~1C7OKNR;|5zx^d8{n(6zgcd9z2X}blMuAsVTQXg1FRUtgcYf}d zS#4dJ?;}5L(&RAwee&iTj^+9FY2QEP6}8-c*E=K1XukBrrH2LML*A#$3;Vs@wfoLw z>4&eswVhAjth^>h+;F<=LYaPxuzho+7v?8iKK6Q5_Bsu|84juQ9D4iSW$a4-lFT1! r6WN5%L2#E5!6*m}^O&UKDSjirc3QwzpNt?KP`Tmh>gTe~DWM4fUlE@0 literal 0 HcmV?d00001 diff --git a/tests/ref/layout/grid-rowspan-basic.png b/tests/ref/layout/grid-rowspan-basic.png new file mode 100644 index 0000000000000000000000000000000000000000..966c8fd9df19d4f2c3013f36d5892d381d97657c GIT binary patch literal 94597 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 literal 0 HcmV?d00001 diff --git a/tests/ref/layout/grid-rowspan-split-1.png b/tests/ref/layout/grid-rowspan-split-1.png new file mode 100644 index 0000000000000000000000000000000000000000..12cd5fc6f5b65d30eecc32e58567ac99e4dfeec1 GIT binary patch literal 30406 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
A{b+1NisI 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 MP*Ji#T;K2i0h*iDtN;K2 literal 0 HcmV?d00001 diff --git a/tests/ref/layout/grid-rowspan-split-2.png b/tests/ref/layout/grid-rowspan-split-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e55c5e2300aa040cf25201b2e97d6c30dea09433 GIT binary patch literal 11282 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 literal 0 HcmV?d00001 diff --git a/tests/ref/layout/grid-rowspan-split-3.png b/tests/ref/layout/grid-rowspan-split-3.png new file mode 100644 index 0000000000000000000000000000000000000000..3d809123f4aa419430c4946c7be1dc2630ac673c GIT binary patch literal 99690 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

U3_xzas2s3PzFBLD?H37vUmG?G= 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 P1|aZs^>bP0l+XkKsPQ}r literal 44946 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 u^|nr#|45$u7hhxk*>B-kfK zM$D`n8X0vMlz@7I05u7f21kjhe)mvz}A zB_Sbk^LETL35k{-widgAIx;yyJJT>LsXCj!c~7|Z!k)~&WuGjd)Oih=%98Hn%Ln<^ z9iV9i?SFUZ?EBL^?xbNFR)%!ZN5+qa%|T&yO|+c~GBz3L0d!7i>!~{mhPkbluotlQ z1k_H1Ma1_+iw<*x^V&OiX1Dt-W~KyieedQ2%F3gIgM&h$ijoqwp0YU3W~1EUy2?%% z%VX5pqoYu$p+4Ih z*@xl#4qIt2QH@PZl75!BVzJ7qsyI(iomyUV^BNy90IC85!y6)s&PV5D5I21z~r0_sopz3=99LvNAiUGUCry*~h+!#bRZB+@-5m z`xC(Kp`TV~`=gg8pHmjSNTeka(NXNh`cHEVAxr6r8EI0`+R)G-f7ohM{82W#B&FYI z*&NE0Y=)sj)2Hdq4R7D~T#e3GKge~9@~ii3nW`uD8~U`h`Dp24rJxB&K};^Xk2oB< zvvv95LZhf_`)ySkgORnwVX-n5AT-kKhn=da`_>W6*MrK`ITHe%PS1bvpr@zD(aEXZ zhWQJhdCbMl&CM9?ghua%paX%y&CRBY3Sw;Rzu^pvWPX3Yfu<$|*abyq<>Tk(=Z_m0 zoQ(bpckUeh6p)aRARaEhu=<}3KZ?XRnvnws7!bxJ!;RjOgCec!gWZmYlr zO>ohX{YU5%Y4vLAM55p#FJV*P zPn+_oJr{Mt9j2)0W13%GRRu@kT{AQ&DT!}4sQ0_4&_|;A%L6RRp&w%>uX92wsLeIa z491?XiJ#}^!O{WgWO2*R2I=MIn$P#VaDmxP zsH&-Pzhz4?A@@D;`{S1tq`CPXC=wpqH!wc_pt!g-@p~+KC^ao@{hkf+`t@#03Qz6l zZ zCMFst`iE6Shzs7{3E$Q})m-NE?8b7-y3l4HRspL_TX1%uT9h2J4*6V8c$z%{ioBq3?JPcH3+ueFE8VVZ(7>x=?9moe1bi62d!-_%FQ1PT6< z=pS0KBz#;QRZ~;@Iqp&}SLnlziH-HD!6FA9zC=8y?o9IentFP2Ku16he{9U`Z=ukO zi`78{kbuR7%xl5Hk2xF|AUX_Rpv2*D1-eB~f`xUvWt9b|EFEbJy}ucNrYtBZ(CxkZ zs?c(bV3?EyWK93~zICD8nHmrj#2hOtD@#gBQcmk!*LXWNcC2~|yi1D$6Jull2jCNA zOk*$@wI??0!I@M(ejJ$~D6gpK&o{fX*O)6udMOfrt|eV z)ed!xM^;n~*xi;Yrscrr(Hh841Tzkq?Mim0gqY^zR)x>wqOV;m{d^ib+Pp3nr>3Un ztg93H>-=ywHa9sOj;g9C#Tt3DodJIc1|alpqn@E*cyFFwIO^gE+H3^@?ckT5rrX)s ziN59N%GGbpz1GYG@b6cF_#$TeAl#C}U#_1QRg#1u7)jK|tig4mZL$Lp;WUoa&3oSCk3fAaxje#nOF=Yri PfJiu;J%5IE3V-W=F+3t( diff --git a/tests/typ/bugs/grid-4.typ b/tests/typ/bugs/grid-4.typ new file mode 100644 index 000000000..691bf877a --- /dev/null +++ b/tests/typ/bugs/grid-4.typ @@ -0,0 +1,17 @@ +// Ensure gutter rows at the top or bottom of a region are skipped. + +--- +#set page(height: 10em) + +#table( + row-gutter: 1.5em, + inset: 0pt, + rows: (1fr, auto), + [a], + [], + [], + [f], + [e\ e], + [], + [a] +) diff --git a/tests/typ/layout/grid-colspan.typ b/tests/typ/layout/grid-colspan.typ index 3fd1a0fd4..1bdadcf17 100644 --- a/tests/typ/layout/grid-colspan.typ +++ b/tests/typ/layout/grid-colspan.typ @@ -81,7 +81,7 @@ --- // Error: 4:8-4:32 cell would span a previously placed cell at column 2, row 0 -// Hint: 4:8-4:32 try specifying your cells in a different order or reducing the cell's colspan +// Hint: 4:8-4:32 try specifying your cells in a different order or reducing the cell's rowspan or colspan #grid( columns: 3, grid.cell(x: 2, y: 0)[x], diff --git a/tests/typ/layout/grid-positioning.typ b/tests/typ/layout/grid-positioning.typ index ca71cb372..5461fb1c5 100644 --- a/tests/typ/layout/grid-positioning.typ +++ b/tests/typ/layout/grid-positioning.typ @@ -221,3 +221,11 @@ fill: (x, y) => if calc.odd(x + y) { red.lighten(50%) } else { green }, table.cell(x: 2, y: 6148914691236517206)[a], ) + +--- +// Error: 3:3-3:45 cell would span an exceedingly large position +// Hint: 3:3-3:45 try reducing the cell's rowspan or colspan +#grid( + columns: 500, + grid.cell(rowspan: 6148914691236517206)[a] +) diff --git a/tests/typ/layout/grid-rowspan-basic.typ b/tests/typ/layout/grid-rowspan-basic.typ new file mode 100644 index 000000000..49164fa69 --- /dev/null +++ b/tests/typ/layout/grid-rowspan-basic.typ @@ -0,0 +1,211 @@ +#grid( + columns: 4, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + inset: 5pt, + align: center, + grid.cell(rowspan: 2, fill: orange)[*Left*], + [Right A], [Right A], [Right A], + [Right B], grid.cell(colspan: 2, rowspan: 2, fill: orange.darken(10%))[B Wide], + [Left A], [Left A], + [Left B], [Left B], grid.cell(colspan: 2, rowspan: 3, fill: orange)[Wide and Long] +) + +#table( + columns: 4, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + inset: 5pt, + align: center, + table.cell(rowspan: 2, fill: orange)[*Left*], + [Right A], [Right A], [Right A], + [Right B], table.cell(colspan: 2, rowspan: 2, fill: orange.darken(10%))[B Wide], + [Left A], [Left A], + [Left B], [Left B], table.cell(colspan: 2, rowspan: 3, fill: orange)[Wide and Long] +) + +--- +#grid( + columns: 4, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + inset: 5pt, + align: center, + gutter: 3pt, + grid.cell(rowspan: 2, fill: orange)[*Left*], + [Right A], [Right A], [Right A], + [Right B], grid.cell(colspan: 2, rowspan: 2, fill: orange.darken(10%))[B Wide], + [Left A], [Left A], + [Left B], [Left B], grid.cell(colspan: 2, rowspan: 3, fill: orange)[Wide and Long] +) + +#table( + columns: 4, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + inset: 5pt, + align: center, + gutter: 3pt, + table.cell(rowspan: 2, fill: orange)[*Left*], + [Right A], [Right A], [Right A], + [Right B], table.cell(colspan: 2, rowspan: 2, fill: orange.darken(10%))[B Wide], + [Left A], [Left A], + [Left B], [Left B], table.cell(colspan: 2, rowspan: 3, fill: orange)[Wide and Long] +) + +--- +// Fixed-size rows +#set page(height: 10em) +#grid( + columns: 2, + rows: 1.5em, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + grid.cell(rowspan: 3)[R1], [b], + [c], + [d], + [e], [f], + grid.cell(rowspan: 5)[R2], [h], + [i], + [j], + [k], + [l], + [m], [n] +) + +--- +// Cell coordinate tests +#set page(height: 10em) +#show table.cell: it => [(#it.x, #it.y)] +#table( + columns: 3, + fill: red, + [a], [b], table.cell(rowspan: 2)[c], + table.cell(colspan: 2)[d], + table.cell(colspan: 3, rowspan: 10)[a], + table.cell(colspan: 2)[b], +) +#table( + columns: 3, + gutter: 3pt, + fill: red, + [a], [b], table.cell(rowspan: 2)[c], + table.cell(colspan: 2)[d], + table.cell(colspan: 3, rowspan: 9)[a], + table.cell(colspan: 2)[b], +) + +--- +// Auto row expansion +#set page(height: 10em) +#grid( + columns: (1em, 1em), + rows: (0.5em, 0.5em, auto), + fill: orange, + gutter: 3pt, + grid.cell(rowspan: 4, [x x x x] + place(bottom)[*Bot*]), + [a], + [b], + [c], + [d] +) + +--- +// Excessive rowspan (no gutter) +#set page(height: 10em) +#table( + columns: 4, + fill: red, + [a], [b], table.cell(rowspan: 2)[c], [d], + table.cell(colspan: 2, stroke: (bottom: aqua + 2pt))[e], table.cell(stroke: (bottom: aqua))[f], + table.cell(colspan: 2, rowspan: 10)[R1], table.cell(colspan: 2, rowspan: 10)[R2], + [b], +) + +--- +// Excessive rowspan (with gutter) +#set page(height: 10em) +#table( + columns: 4, + gutter: 3pt, + fill: red, + [a], [b], table.cell(rowspan: 2)[c], [d], + table.cell(colspan: 2, stroke: (bottom: aqua + 2pt))[e], table.cell(stroke: (bottom: aqua))[f], + table.cell(colspan: 2, rowspan: 10)[R1], table.cell(colspan: 2, rowspan: 10)[R2], + [b], +) + +--- +// Fractional rows +// They cause the auto row to expand more than needed. +#set page(height: 10em) +#grid( + fill: red, + gutter: 3pt, + columns: 3, + rows: (1em, auto, 1fr), + [a], [b], grid.cell(rowspan: 3, block(height: 4em, width: 1em, fill: orange)), + [c], [d], + [e], [f] +) + +--- +// Fractional rows +#set page(height: 10em) +#grid( + fill: red, + gutter: 3pt, + columns: 3, + rows: (1fr, auto, 1em), + [a], [b], grid.cell(rowspan: 3, block(height: 4em, width: 1em, fill: orange)), + [c], [d], + [e], [f] +) + +--- +// Cell order +#let count = counter("count") +#show grid.cell: it => { + count.step() + count.display() +} + +#grid( + columns: (2em,) * 3, + stroke: aqua, + rows: 1.2em, + fill: (x, y) => if calc.odd(x + y) { red } else { orange }, + [a], grid.cell(rowspan: 2)[b], grid.cell(rowspan: 2)[c], + [d], + grid.cell(rowspan: 2)[f], [g], [h], + [i], [j], + [k], [l], [m], + grid.cell(rowspan: 2)[n], [o], [p], + [q], [r], + [s], [t], [u] +) + +--- +#table( + columns: 3, + rows: (auto, auto, auto, 2em), + gutter: 3pt, + table.cell(rowspan: 4)[a \ b\ c\ d\ e], [c], [d], + [e], table.cell(breakable: false, rowspan: 2)[f], + [g] +) + +--- +// Test cell breakability +#show grid.cell: it => { + assert.eq(it.breakable, (it.x, it.y) != (0, 6) and (it.y in (2, 5, 6) or (it.x, it.y) in ((0, 1), (2, 3), (1, 7)))) + it.breakable +} +#grid( + columns: 3, + rows: (6pt, 1fr, auto, 1%, 1em, auto, auto, 0.2in), + row-gutter: (0pt, 0pt, 0pt, auto), + [a], [b], [c], + grid.cell(rowspan: 3)[d], [e], [f], + [g], [h], + [i], grid.cell(rowspan: 2)[j], + [k], + grid.cell(y: 5)[l], + grid.cell(y: 6, breakable: false)[m], grid.cell(y: 6, breakable: true)[n], + grid.cell(y: 7, breakable: false)[o], grid.cell(y: 7, breakable: true)[p], grid.cell(y: 7, breakable: auto)[q] +) diff --git a/tests/typ/layout/grid-rowspan-split-1.typ b/tests/typ/layout/grid-rowspan-split-1.typ new file mode 100644 index 000000000..e247fa80a --- /dev/null +++ b/tests/typ/layout/grid-rowspan-split-1.typ @@ -0,0 +1,89 @@ +// Rowspan split tests + +--- +#set page(height: 10em) +#table( + columns: 2, + rows: (auto, auto, 3em), + fill: red, + [a], table.cell(rowspan: 3, block(width: 50%, height: 10em, fill: orange) + place(bottom)[*ZD*]), + [e], + [f] +) + +--- +#set page(height: 10em) +#table( + columns: 2, + rows: (auto, auto, 3em), + row-gutter: 1em, + fill: red, + [a], table.cell(rowspan: 3, block(width: 50%, height: 10em, fill: orange) + place(bottom)[*ZD*]), + [e], + [f] +) + +--- +#set page(height: 5em) +#table( + columns: 2, + fill: red, + inset: 0pt, + table.cell(fill: orange, rowspan: 10, place(bottom)[*Z*] + [x\ ] * 10 + place(bottom)[*ZZ*]), + ..([y],) * 10, + [a], [b], +) + +--- +#set page(height: 5em) +#table( + columns: 2, + fill: red, + inset: 0pt, + gutter: 2pt, + table.cell(fill: orange, rowspan: 10, place(bottom)[*Z*] + [x\ ] * 10 + place(bottom)[*ZZ*]), + ..([y],) * 10, + [a], [b], +) + +--- +#set page(height: 5em) +#table( + columns: 2, + fill: red, + inset: 0pt, + table.cell(fill: orange, rowspan: 10, breakable: false, place(bottom)[*Z*] + [x\ ] * 10 + place(bottom)[*ZZ*]), + ..([y],) * 10, + [a], [b], +) + +--- +#set page(height: 5em) +#table( + columns: 2, + fill: red, + inset: 0pt, + gutter: 2pt, + table.cell(fill: orange, rowspan: 10, breakable: false, place(bottom)[*Z*] + [x\ ] * 10 + place(bottom)[*ZZ*]), + ..([y],) * 10, + [a], [b], +) + +--- +#set page(height: 5em) +#grid( + columns: 2, + stroke: red, + inset: 5pt, + grid.cell(rowspan: 5)[a\ b\ c\ d\ e] +) + +--- +#set page(height: 5em) +#table( + columns: 2, + gutter: 3pt, + stroke: red, + inset: 5pt, + table.cell(rowspan: 5)[a\ b\ c\ d\ e] +) diff --git a/tests/typ/layout/grid-rowspan-split-2.typ b/tests/typ/layout/grid-rowspan-split-2.typ new file mode 100644 index 000000000..189feed3e --- /dev/null +++ b/tests/typ/layout/grid-rowspan-split-2.typ @@ -0,0 +1,37 @@ +// Rowspan split without ending at the auto row + +--- +#set page(height: 6em) +#table( + rows: (4em,) * 7 + (auto,) + (4em,) * 7, + columns: 2, + column-gutter: 1em, + row-gutter: (1em, 2em) * 4, + fill: (x, y) => if calc.odd(x + y) { orange.lighten(20%) } else { red }, + table.cell(rowspan: 15, [a \ ] * 15), + [] * 15 +) + +--- +#set page(height: 6em) +#table( + rows: (4em,) * 7 + (auto,) + (4em,) * 7, + columns: 2, + column-gutter: 1em, + row-gutter: (1em, 2em) * 4, + fill: (x, y) => if calc.odd(x + y) { green } else { green.darken(40%) }, + table.cell(rowspan: 15, block(fill: blue, width: 2em, height: 4em * 14 + 3em)), + [] * 15 +) + +--- +#set page(height: 6em) +#table( + rows: (3em,) * 15, + columns: 2, + column-gutter: 1em, + row-gutter: (1em, 2em) * 4, + fill: (x, y) => if calc.odd(x + y) { aqua } else { blue }, + table.cell(breakable: true, rowspan: 15, [a \ ] * 15), + [] * 15 +) diff --git a/tests/typ/layout/grid-rowspan-split-3.typ b/tests/typ/layout/grid-rowspan-split-3.typ new file mode 100644 index 000000000..4c3ce7d8f --- /dev/null +++ b/tests/typ/layout/grid-rowspan-split-3.typ @@ -0,0 +1,108 @@ +// Some splitting corner cases + +--- +// Inside the larger rowspan's range, there's an unbreakable rowspan and a +// breakable rowspan. This should work normally. +// The auto row will also expand ignoring the last fractional row. +#set page(height: 10em) +#table( + gutter: 0.5em, + columns: 2, + rows: (2em,) * 10 + (auto, auto, 2em, 1fr), + fill: (_, y) => if calc.even(y) { aqua } else { blue }, + table.cell(rowspan: 14, block(width: 2em, height: 2em * 10 + 2em + 5em, fill: red)[]), + ..([a],) * 5, + table.cell(rowspan: 3)[a\ b], + table.cell(rowspan: 5, [a\ b\ c\ d\ e\ f\ g\ h]), + [z] +) + +--- +// Inset moving to next region bug +#set page(width: 10cm, height: 2.5cm, margin: 0.5cm) +#set text(size: 11pt) +#table( + columns: (1fr, 1fr, 1fr), + [A], + [B], + [C], + [D], + table.cell(rowspan: 2, lorem(4)), + [E], + [F], + [G], +) + +--- +// Second lorem must be sent to the next page, too big +#set page(width: 10cm, height: 9cm, margin: 1cm) +#set text(size: 11pt) +#table( + columns: (1fr, 1fr, 1fr), + align: center, + rows: (4cm, auto), + [A], [B], [C], + table.cell(rowspan: 4, breakable: false, lorem(10)), + [D], + table.cell(rowspan: 2, breakable: false, lorem(20)), + [E], +) + +--- +// Auto row must expand properly in both cases +#set text(10pt) +#show table.cell: it => if it.x == 0 { it } else { layout(size => size.height) } +#table( + columns: 2, + rows: (1em, auto, 2em, 3em, 4em), + gutter: 3pt, + table.cell(rowspan: 5, block(fill: orange, height: 15em)[a]), + [b], + [c], + [d], + [e], + [f] +) + +#table( + columns: 2, + rows: (1em, auto, 2em, 3em, 4em), + gutter: 3pt, + table.cell(rowspan: 5, breakable: false, block(fill: orange, height: 15em)[a]), + [b], + [c], + [d], + [e], + [f] +) + +--- +// Expanding on unbreakable auto row +#set page(height: 7em, margin: (bottom: 2em)) +#grid( + columns: 2, + rows: (1em, 1em, auto, 1em, 1em, 1em), + fill: (x, y) => if x == 0 { aqua } else { blue }, + stroke: black, + gutter: 2pt, + grid.cell(rowspan: 5, block(height: 10em)[a]), + [a], + [b], + grid.cell(breakable: false, v(3em) + [c]), + [d], + [e], + [f], [g] +) + +--- +#show table.cell.where(x: 0): strong +#show table.cell.where(y: 0): strong +#set page(height: 13em) +#let lets-repeat(thing, n) = ((thing + colbreak(),) * (calc.max(0, n - 1)) + (thing,)).join() +#table( + columns: 4, + fill: (x, y) => if x == 0 or y == 0 { gray }, + [], [Test 1], [Test 2], [Test 3], + table.cell(rowspan: 15, align: horizon, lets-repeat((rotate(-90deg, reflow: true)[*All Tests*]), 3)), + ..([123], [456], [789]) * 15 +) diff --git a/tests/typ/layout/grid-rtl.typ b/tests/typ/layout/grid-rtl.typ index dcac9810c..be9fac516 100644 --- a/tests/typ/layout/grid-rtl.typ +++ b/tests/typ/layout/grid-rtl.typ @@ -137,3 +137,44 @@ #grid( [a], grid.vline(position: left) ) + +--- +#set text(dir: rtl) + +#grid( + columns: 4, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + inset: 5pt, + align: center, + grid.cell(rowspan: 2, fill: orange)[*Left*], + [Right A], [Right A], [Right A], + [Right B], grid.cell(colspan: 2, rowspan: 2, fill: orange.darken(10%))[B Wide], + [Left A], [Left A], + [Left B], [Left B], grid.cell(colspan: 2, rowspan: 3, fill: orange)[Wide and Long] +) + +#table( + columns: 4, + fill: (x, y) => if calc.odd(x + y) { blue.lighten(50%) } else { blue.lighten(10%) }, + inset: 5pt, + align: center, + gutter: 3pt, + table.cell(rowspan: 2, fill: orange)[*Left*], + [Right A], [Right A], [Right A], + [Right B], table.cell(colspan: 2, rowspan: 2, fill: orange.darken(10%))[B Wide], + [Left A], [Left A], + [Left B], [Left B], table.cell(colspan: 2, rowspan: 3, fill: orange)[Wide and Long] +) + +--- +#set page(height: 10em) +#set text(dir: rtl) +#table( + columns: 2, + rows: (auto, auto, 3em), + row-gutter: 1em, + fill: red, + [a], table.cell(rowspan: 3, block(width: 50%, height: 10em, fill: orange) + place(bottom)[*ZD*]), + [e], + [f] +) diff --git a/tests/typ/layout/grid-stroke.typ b/tests/typ/layout/grid-stroke.typ index 51b810d9e..9d01e1cd1 100644 --- a/tests/typ/layout/grid-stroke.typ +++ b/tests/typ/layout/grid-stroke.typ @@ -274,6 +274,20 @@ table.hline(position: bottom) ) +--- +// Test partial border line overrides +#set page(width: auto, height: 7em, margin: (bottom: 1em)) +#table( + columns: 4, + stroke: (x, y) => if y == 0 or y == 4 { orange } else { aqua }, + table.hline(stroke: blue, start: 1, end: 2), table.cell(stroke: red, v(3em)), table.cell(stroke: blue)[b], table.cell(stroke: green)[c], [M], + [a], [b], [c], [M], + [d], [e], [f], [M], + [g], [h], [i], [M], + table.cell(stroke: red)[a], table.cell(stroke: blue)[b], table.cell(stroke: green)[c], [M], + table.hline(stroke: blue, start: 1, end: 2), +) + --- // Error: 8:3-8:32 cannot place horizontal line at the 'bottom' position of the bottom border (y = 2) // Hint: 8:3-8:32 set the line's position to 'top' or place it at a smaller 'y' index