From 4873312233f7e8db0dafd803a06d98d108d4a5cf Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Tue, 20 Feb 2024 12:41:43 -0300 Subject: [PATCH] Table line customization [More Flexible Tables Pt.4] (#3393) --- crates/typst/src/foundations/styles.rs | 28 + crates/typst/src/foundations/value.rs | 52 +- crates/typst/src/layout/abs.rs | 8 +- crates/typst/src/layout/align.rs | 62 ++ crates/typst/src/layout/corners.rs | 14 +- crates/typst/src/layout/grid/layout.rs | 855 ++++++++++-------- crates/typst/src/layout/grid/lines.rs | 1096 ++++++++++++++++++++++++ crates/typst/src/layout/grid/mod.rs | 273 +++++- crates/typst/src/layout/sides.rs | 14 +- crates/typst/src/model/bibliography.rs | 15 +- crates/typst/src/model/enum.rs | 3 +- crates/typst/src/model/list.rs | 3 +- crates/typst/src/model/table.rs | 246 +++++- tests/ref/layout/grid-colspan.png | Bin 91434 -> 91276 bytes tests/ref/layout/grid-positioning.png | Bin 55048 -> 54618 bytes tests/ref/layout/grid-rtl.png | Bin 41422 -> 44946 bytes tests/ref/layout/grid-stroke.png | Bin 0 -> 48961 bytes tests/ref/layout/table-cell.png | Bin 49018 -> 49090 bytes tests/ref/layout/table.png | Bin 22515 -> 22446 bytes tests/typ/layout/grid-rtl.typ | 49 ++ tests/typ/layout/grid-stroke.typ | 379 ++++++++ 21 files changed, 2674 insertions(+), 423 deletions(-) create mode 100644 crates/typst/src/layout/grid/lines.rs create mode 100644 tests/ref/layout/grid-stroke.png create mode 100644 tests/typ/layout/grid-stroke.typ diff --git a/crates/typst/src/foundations/styles.rs b/crates/typst/src/foundations/styles.rs index 9472e207a..fb8e56014 100644 --- a/crates/typst/src/foundations/styles.rs +++ b/crates/typst/src/foundations/styles.rs @@ -746,6 +746,34 @@ impl Fold for SmallVec<[T; N]> { } } +/// A variant of fold for foldable optional (`Option`) values where an inner +/// `None` value isn't respected (contrary to `Option`'s usual `Fold` +/// implementation, with which folding with an inner `None` always returns +/// `None`). Instead, when either of the `Option` objects is `None`, the other +/// one is necessarily returned by `fold_or`. Normal folding still occurs when +/// both values are `Some`, using `T`'s `Fold` implementation. +/// +/// This is useful when `None` in a particular context means "unspecified" +/// rather than "absent", in which case a specified value (`Some`) is chosen +/// over an unspecified one (`None`), while two specified values are folded +/// together. +pub trait AlternativeFold { + /// Attempts to fold this inner value with an outer value. However, if + /// either value is `None`, returns the other one instead of folding. + fn fold_or(self, outer: Self) -> Self; +} + +impl AlternativeFold for Option { + fn fold_or(self, outer: Self) -> Self { + match (self, outer) { + (Some(inner), Some(outer)) => Some(inner.fold(outer)), + // If one of values is `None`, return the other one instead of + // folding. + (inner, outer) => inner.or(outer), + } + } +} + /// A type that accumulates depth when folded. #[derive(Debug, Default, Clone, Copy, PartialEq, Hash)] pub struct Depth(pub usize); diff --git a/crates/typst/src/foundations/value.rs b/crates/typst/src/foundations/value.rs index 5da915d1e..b5f143d26 100644 --- a/crates/typst/src/foundations/value.rs +++ b/crates/typst/src/foundations/value.rs @@ -13,13 +13,14 @@ use crate::diag::StrResult; use crate::eval::ops; use crate::foundations::{ fields, repr, Args, Array, AutoValue, Bytes, CastInfo, Content, Datetime, Dict, - Duration, FromValue, Func, IntoValue, Label, Module, NativeElement, NativeType, - NoneValue, Plugin, Reflect, Repr, Scope, Str, Styles, Type, Version, + Duration, Fold, FromValue, Func, IntoValue, Label, Module, NativeElement, NativeType, + NoneValue, Plugin, Reflect, Repr, Resolve, Scope, Str, Styles, Type, Version, }; use crate::layout::{Abs, Angle, Em, Fr, Length, Ratio, Rel}; use crate::symbols::Symbol; use crate::syntax::{ast, Span}; use crate::text::{RawElem, TextElem}; +use crate::util::ArcExt; use crate::visualize::{Color, Gradient, Pattern}; /// A computational value. @@ -668,6 +669,53 @@ primitive! { Type: "type", Type } primitive! { Module: "module", Module } primitive! { Plugin: "plugin", Plugin } +impl Reflect for Arc { + fn input() -> CastInfo { + T::input() + } + + fn output() -> CastInfo { + T::output() + } + + fn castable(value: &Value) -> bool { + T::castable(value) + } + + fn error(found: &Value) -> EcoString { + T::error(found) + } +} + +impl IntoValue for Arc { + fn into_value(self) -> Value { + Arc::take(self).into_value() + } +} + +impl FromValue for Arc { + fn from_value(value: Value) -> StrResult { + match value { + v if T::castable(&v) => Ok(Arc::new(T::from_value(v)?)), + _ => Err(Self::error(&value)), + } + } +} + +impl Resolve for Arc { + type Output = Arc; + + fn resolve(self, styles: super::StyleChain) -> Self::Output { + Arc::new(Arc::take(self).resolve(styles)) + } +} + +impl Fold for Arc { + fn fold(self, outer: Self) -> Self { + Arc::new(Arc::take(self).fold(Arc::take(outer))) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/crates/typst/src/layout/abs.rs b/crates/typst/src/layout/abs.rs index cb61e1b28..459f03709 100644 --- a/crates/typst/src/layout/abs.rs +++ b/crates/typst/src/layout/abs.rs @@ -4,7 +4,7 @@ use std::ops::{Add, Div, Mul, Neg, Rem}; use ecow::EcoString; -use crate::foundations::{cast, repr, Repr, Value}; +use crate::foundations::{cast, repr, Fold, Repr, Value}; use crate::util::{Numeric, Scalar}; /// An absolute length. @@ -227,6 +227,12 @@ impl<'a> Sum<&'a Self> for Abs { } } +impl Fold for Abs { + fn fold(self, _: Self) -> Self { + self + } +} + cast! { Abs, self => Value::Length(self.into()), diff --git a/crates/typst/src/layout/align.rs b/crates/typst/src/layout/align.rs index 934bfa194..c108ec898 100644 --- a/crates/typst/src/layout/align.rs +++ b/crates/typst/src/layout/align.rs @@ -321,6 +321,40 @@ cast! { } } +/// A horizontal alignment which only allows `left`/`right` and `start`/`end`, +/// thus excluding `center`. +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Hash)] +pub enum OuterHAlignment { + #[default] + Start, + Left, + Right, + End, +} + +impl From for HAlignment { + fn from(value: OuterHAlignment) -> Self { + match value { + OuterHAlignment::Start => Self::Start, + OuterHAlignment::Left => Self::Left, + OuterHAlignment::Right => Self::Right, + OuterHAlignment::End => Self::End, + } + } +} + +cast! { + OuterHAlignment, + self => HAlignment::from(self).into_value(), + align: Alignment => match align { + Alignment::H(HAlignment::Start) => Self::Start, + Alignment::H(HAlignment::Left) => Self::Left, + Alignment::H(HAlignment::Right) => Self::Right, + Alignment::H(HAlignment::End) => Self::End, + v => bail!("expected `start`, `left`, `right`, or `end`, found {}", v.repr()), + } +} + /// Where to align something vertically. #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] pub enum VAlignment { @@ -383,6 +417,34 @@ cast! { } } +/// A vertical alignment which only allows `top` and `bottom`, thus excluding +/// `horizon`. +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub enum OuterVAlignment { + #[default] + Top, + Bottom, +} + +impl From for VAlignment { + fn from(value: OuterVAlignment) -> Self { + match value { + OuterVAlignment::Top => Self::Top, + OuterVAlignment::Bottom => Self::Bottom, + } + } +} + +cast! { + OuterVAlignment, + self => VAlignment::from(self).into_value(), + align: Alignment => match align { + Alignment::V(VAlignment::Top) => Self::Top, + Alignment::V(VAlignment::Bottom) => Self::Bottom, + v => bail!("expected `top` or `bottom`, found {}", v.repr()), + } +} + /// A fixed alignment in the global coordinate space. /// /// For horizontal alignment, start is globally left and for vertical alignment diff --git a/crates/typst/src/layout/corners.rs b/crates/typst/src/layout/corners.rs index 85fd05032..3a2262bfc 100644 --- a/crates/typst/src/layout/corners.rs +++ b/crates/typst/src/layout/corners.rs @@ -2,7 +2,8 @@ use std::fmt::{self, Debug, Formatter}; use crate::diag::StrResult; use crate::foundations::{ - CastInfo, Dict, Fold, FromValue, IntoValue, Reflect, Resolve, StyleChain, Value, + AlternativeFold, CastInfo, Dict, Fold, FromValue, IntoValue, Reflect, Resolve, + StyleChain, Value, }; use crate::layout::Side; use crate::util::Get; @@ -240,13 +241,10 @@ impl Resolve for Corners { impl Fold for Corners> { fn fold(self, outer: Self) -> Self { - self.zip(outer).map(|(inner, outer)| match (inner, outer) { - (Some(inner), Some(outer)) => Some(inner.fold(outer)), - // Usually, folding an inner `None` with an `outer` preferres the - // explicit `None`. However, here `None` means unspecified and thus - // we want `outer`. - (inner, outer) => inner.or(outer), - }) + // Usually, folding an inner `None` with an `outer` preferres the + // explicit `None`. However, here `None` means unspecified and thus + // we want `outer`, so we use `fold_or` to opt into such behavior. + self.zip(outer).map(|(inner, outer)| inner.fold_or(outer)) } } diff --git a/crates/typst/src/layout/grid/layout.rs b/crates/typst/src/layout/grid/layout.rs index c17bbda53..790aedac7 100644 --- a/crates/typst/src/layout/grid/layout.rs +++ b/crates/typst/src/layout/grid/layout.rs @@ -1,13 +1,20 @@ +use std::fmt::Debug; +use std::hash::Hash; use std::num::NonZeroUsize; +use std::sync::Arc; use ecow::eco_format; +use super::lines::{ + generate_line_segments, hline_stroke_at_column, vline_stroke_at_row, Line, + LinePosition, LineSegment, +}; use crate::diag::{ bail, At, Hint, HintedStrResult, HintedString, SourceResult, StrResult, }; use crate::engine::Engine; use crate::foundations::{ - Array, CastInfo, Content, FromValue, Func, IntoValue, Reflect, Resolve, Smart, + Array, CastInfo, Content, Fold, FromValue, Func, IntoValue, Reflect, Resolve, Smart, StyleChain, Value, }; use crate::layout::{ @@ -17,7 +24,7 @@ use crate::layout::{ use crate::syntax::Span; use crate::text::TextElem; use crate::util::{MaybeReverseIter, NonZeroExt, Numeric}; -use crate::visualize::{FixedStroke, Geometry, Paint}; +use crate::visualize::{Geometry, Paint, Stroke}; /// A value that can be configured per cell. #[derive(Debug, Clone, PartialEq, Hash)] @@ -88,6 +95,65 @@ impl FromValue for Celled { } } +impl Fold for Celled { + fn fold(self, outer: Self) -> Self { + match (self, outer) { + (Self::Value(inner), Self::Value(outer)) => Self::Value(inner.fold(outer)), + (self_, _) => self_, + } + } +} + +impl Resolve for Celled { + type Output = ResolvedCelled; + + fn resolve(self, styles: StyleChain) -> Self::Output { + match self { + Self::Value(value) => ResolvedCelled(Celled::Value(value.resolve(styles))), + Self::Func(func) => ResolvedCelled(Celled::Func(func)), + Self::Array(values) => ResolvedCelled(Celled::Array( + values.into_iter().map(|value| value.resolve(styles)).collect(), + )), + } + } +} + +/// The result of resolving a Celled's value according to styles. +/// Holds resolved values which depend on each grid cell's position. +/// When it is a closure, however, it is only resolved when the closure is +/// called. +#[derive(Default, Clone)] +pub struct ResolvedCelled(Celled); + +impl ResolvedCelled +where + T: FromValue + Resolve, + ::Output: Default + Clone, +{ + /// Resolve the value based on the cell position. + pub fn resolve( + &self, + engine: &mut Engine, + styles: StyleChain, + x: usize, + y: usize, + ) -> SourceResult { + Ok(match &self.0 { + Celled::Value(value) => value.clone(), + Celled::Func(func) => func + .call(engine, [x, y])? + .cast::() + .at(func.span())? + .resolve(styles), + Celled::Array(array) => x + .checked_rem(array.len()) + .and_then(|i| array.get(i)) + .cloned() + .unwrap_or_default(), + }) + } +} + /// Represents a cell in CellGrid, to be laid out by GridLayouter. #[derive(Clone)] pub struct Cell { @@ -97,12 +163,31 @@ pub struct Cell { pub fill: Option, /// The amount of columns spanned by the cell. pub colspan: NonZeroUsize, + /// The cell's stroke. + /// + /// We use an Arc to avoid unnecessary space usage when all sides are the + /// same, or when the strokes come from a common source. + pub stroke: Sides>>>, + /// Which stroke sides were explicitly overridden by the cell, over the + /// grid's global stroke setting. + /// + /// This is used to define whether or not this cell's stroke sides should + /// have priority over adjacent cells' stroke sides, if those don't + /// 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, } impl From for Cell { /// Create a simple cell given its body. fn from(body: Content) -> Self { - Self { body, fill: None, colspan: NonZeroUsize::ONE } + Self { + body, + fill: None, + colspan: NonZeroUsize::ONE, + stroke: Sides::splat(None), + stroke_overridden: Sides::splat(false), + } } } @@ -119,7 +204,7 @@ impl LayoutMultiple for Cell { /// A grid entry. #[derive(Clone)] -enum Entry { +pub(super) enum Entry { /// An entry which holds a cell. Cell(Cell), /// An entry which is merged with another cell. @@ -139,12 +224,46 @@ impl Entry { } } +/// A grid item, possibly affected by automatic cell positioning. Can be either +/// a line or a cell. +pub enum GridItem { + /// A horizontal line in the grid. + HLine { + /// The row above which the horizontal line is drawn. + y: Smart, + start: usize, + end: Option, + stroke: Option>>, + /// The span of the corresponding line element. + span: Span, + /// The line's position. "before" here means on top of row 'y', while + /// "after" means below it. + position: LinePosition, + }, + /// A vertical line in the grid. + VLine { + /// The column before which the vertical line is drawn. + x: Smart, + start: usize, + end: Option, + stroke: Option>>, + /// The span of the corresponding line element. + span: Span, + /// The line's position. "before" here means to the left of column 'x', + /// while "after" means to its right (both considering LTR). + position: LinePosition, + }, + /// A cell in the grid. + Cell(T), +} + /// Used for cell-like elements which are aware of their final properties in /// the table, and may have property overrides. pub trait ResolvableCell { /// Resolves the cell's fields, given its coordinates and default grid-wide - /// fill, align and inset properties. + /// fill, align, inset and stroke properties. /// Returns a final Cell. + #[allow(clippy::too_many_arguments)] fn resolve_cell( self, x: usize, @@ -152,6 +271,7 @@ pub trait ResolvableCell { fill: &Option, align: Smart, inset: Sides>>, + stroke: Sides>>>>, styles: StyleChain, ) -> Cell; @@ -171,13 +291,21 @@ pub trait ResolvableCell { /// A grid of cells, including the columns, rows, and cell data. pub struct CellGrid { /// The grid cells. - entries: Vec, + pub(super) entries: Vec, /// The column tracks including gutter tracks. - cols: Vec, + pub(super) cols: Vec, /// The row tracks including gutter tracks. - rows: Vec, + pub(super) rows: Vec, + /// The vertical lines before each column, or on the end border. + /// Gutter columns are not included. + /// Contains up to 'cols_without_gutter.len() + 1' vectors of lines. + pub(super) vlines: Vec>, + /// The horizontal lines on top of each row, or on the bottom border. + /// Gutter rows are not included. + /// Contains up to 'rows_without_gutter.len() + 1' vectors of lines. + pub(super) hlines: Vec>, /// Whether this grid has gutters. - has_gutter: bool, + pub(super) has_gutter: bool, } impl CellGrid { @@ -188,7 +316,7 @@ impl CellGrid { cells: impl IntoIterator, ) -> Self { let entries = cells.into_iter().map(Entry::Cell).collect(); - Self::new_internal(tracks, gutter, entries) + Self::new_internal(tracks, gutter, vec![], vec![], entries) } /// Resolves and positions all cells in the grid before creating it. @@ -198,20 +326,37 @@ impl CellGrid { /// must implement Default in order to fill positions in the grid which /// weren't explicitly specified by the user with empty cells. #[allow(clippy::too_many_arguments)] - pub fn resolve( + pub fn resolve( tracks: Axes<&[Sizing]>, gutter: Axes<&[Sizing]>, - cells: &[T], + items: I, fill: &Celled>, align: &Celled>, inset: Sides>>, + stroke: &ResolvedCelled>>>>, engine: &mut Engine, styles: StyleChain, span: Span, - ) -> SourceResult { + ) -> SourceResult + where + T: ResolvableCell + Default, + I: IntoIterator>, + I::IntoIter: ExactSizeIterator, + { // Number of content columns: Always at least one. let c = tracks.x.len().max(1); + // Lists of lines. + // Horizontal lines are only pushed later to be able to check for row + // validity, since the amount of rows isn't known until all items were + // analyzed in the for loop below. + // We keep their spans so we can report errors later. + let mut pending_hlines: Vec<(Span, Line)> = vec![]; + + // For consistency, only push vertical lines later as well. + let mut pending_vlines: Vec<(Span, Line)> = vec![]; + let has_gutter = gutter.any(|tracks| !tracks.is_empty()); + // 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 @@ -219,23 +364,92 @@ impl CellGrid { // Therefore, we use a counter, 'auto_index', to determine the position // of the next cell with (x: auto, y: auto). It is only stepped when // a cell with (x: auto, y: auto), usually the vast majority, is found. - let mut auto_index = 0; + let mut auto_index: usize = 0; // We have to rebuild the grid to account for arbitrary positions. - // Create at least 'cells.len()' positions, since there will be at - // least 'cells.len()' cells, even though some of them might be placed - // in arbitrary positions and thus cause the grid to expand. + // Create at least 'items.len()' positions, since there could be at + // least 'items.len()' cells (if no explicit lines were specified), + // even though some of them might be placed in arbitrary positions and + // thus cause the grid to expand. // Additionally, make sure we allocate up to the next multiple of 'c', // since each row will have 'c' cells, even if the last few cells // weren't explicitly specified by the user. // We apply '% c' twice so that the amount of cells potentially missing - // is zero when 'cells.len()' is already a multiple of 'c' (thus - // 'cells.len() % c' would be zero). - let Some(cell_count) = cells.len().checked_add((c - cells.len() % c) % c) else { - bail!(span, "too many cells were given") + // is zero when 'items.len()' is already a multiple of 'c' (thus + // 'items.len() % c' would be zero). + let items = items.into_iter(); + let Some(item_count) = items.len().checked_add((c - items.len() % c) % c) else { + bail!(span, "too many cells or lines were given") }; - let mut resolved_cells: Vec> = Vec::with_capacity(cell_count); - for cell in cells.iter().cloned() { + let mut resolved_cells: Vec> = Vec::with_capacity(item_count); + for item in items { + let cell = match item { + GridItem::HLine { y, start, end, stroke, span, position } => { + let y = y.unwrap_or_else(|| { + // When no 'y' is specified for the hline, we place it + // under the latest automatically positioned cell. + // The current value of the auto index is always the + // index of the latest automatically positioned cell + // placed plus one (that's what we do in + // 'resolve_cell_position'), so we subtract 1 to get + // that cell's index, and place the hline below its + // row. The exception is when the auto_index is 0, + // meaning no automatically positioned cell was placed + // yet. In that case, we place the hline at the top of + // the table. + auto_index + .checked_sub(1) + .map_or(0, |last_auto_index| last_auto_index / c + 1) + }); + if end.is_some_and(|end| end.get() < start) { + bail!(span, "line cannot end before it starts"); + } + let line = Line { index: y, start, end, stroke, position }; + + // Since the amount of rows is dynamic, delay placing + // hlines until after all cells were placed so we can + // properly verify if they are valid. Note that we can't + // place hlines even if we already know they would be in a + // valid row, since it's possible that we pushed pending + // hlines in the same row as this one in previous + // iterations, and we need to ensure that hlines from + // previous iterations are pushed to the final vector of + // hlines first - the order of hlines must be kept, as this + // matters when determining which one "wins" in case of + // conflict. Pushing the current hline before we push + // pending hlines later would change their order! + pending_hlines.push((span, line)); + continue; + } + GridItem::VLine { x, start, end, stroke, span, position } => { + let x = x.unwrap_or_else(|| { + // When no 'x' is specified for the vline, we place it + // after the latest automatically positioned cell. + // The current value of the auto index is always the + // index of the latest automatically positioned cell + // placed plus one (that's what we do in + // 'resolve_cell_position'), so we subtract 1 to get + // that cell's index, and place the vline after its + // column. The exception is when the auto_index is 0, + // meaning no automatically positioned cell was placed + // yet. In that case, we place the vline to the left of + // the table. + auto_index + .checked_sub(1) + .map_or(0, |last_auto_index| last_auto_index % c + 1) + }); + if end.is_some_and(|end| end.get() < start) { + bail!(span, "line cannot end before it starts"); + } + let line = Line { index: x, start, end, stroke, position }; + + // For consistency with hlines, we only push vlines to the + // final vector of vlines after processing every cell. + pending_vlines.push((span, line)); + continue; + } + GridItem::Cell(cell) => cell, + }; let cell_span = cell.span(); // Let's calculate the cell's final position based on its // requested position. @@ -273,6 +487,7 @@ impl CellGrid { &fill.resolve(engine, x, y)?, align.resolve(engine, x, y)?, inset, + stroke.resolve(engine, styles, x, y)?, styles, ); @@ -358,6 +573,7 @@ impl CellGrid { &fill.resolve(engine, x, y)?, align.resolve(engine, x, y)?, inset, + stroke.resolve(engine, styles, x, y)?, styles, ); Ok(Entry::Cell(new_cell)) @@ -365,13 +581,97 @@ impl CellGrid { }) .collect::>>()?; - Ok(Self::new_internal(tracks, gutter, resolved_cells)) + // Populate the final lists of lines. + // For each line type (horizontal or vertical), we keep a vector for + // every group of lines with the same index. + let mut vlines: Vec> = vec![]; + let mut hlines: Vec> = vec![]; + let row_amount = resolved_cells.len().div_ceil(c); + + for (line_span, line) in pending_hlines { + let y = line.index; + if y > row_amount { + bail!(line_span, "cannot place horizontal line at invalid row {y}"); + } + if y == row_amount && line.position == LinePosition::After { + bail!( + line_span, + "cannot place horizontal line at the 'bottom' position of the bottom border (y = {y})"; + hint: "set the line's position to 'top' or place it at a smaller 'y' index" + ); + } + let line = if line.position == LinePosition::After + && (!has_gutter || y + 1 == row_amount) + { + // Just place the line on top of the next row if + // there's no gutter and the line should be placed + // after the one with given index. + // + // Note that placing after the last row is also the same as + // just placing on the grid's bottom border, even with + // gutter. + Line { + index: y + 1, + position: LinePosition::Before, + ..line + } + } else { + line + }; + let y = line.index; + + if hlines.len() <= y { + hlines.resize_with(y + 1, Vec::new); + } + hlines[y].push(line); + } + + for (line_span, line) in pending_vlines { + let x = line.index; + if x > c { + bail!(line_span, "cannot place vertical line at invalid column {x}"); + } + if x == c && line.position == LinePosition::After { + bail!( + line_span, + "cannot place vertical line at the 'end' position of the end border (x = {c})"; + hint: "set the line's position to 'start' or place it at a smaller 'x' index" + ); + } + let line = + if line.position == LinePosition::After && (!has_gutter || x + 1 == c) { + // Just place the line before the next column if + // there's no gutter and the line should be placed + // after the one with given index. + // + // Note that placing after the last column is also the + // same as just placing on the grid's end border, even + // with gutter. + Line { + index: x + 1, + position: LinePosition::Before, + ..line + } + } else { + line + }; + let x = line.index; + + if vlines.len() <= x { + vlines.resize_with(x + 1, Vec::new); + } + vlines[x].push(line); + } + + Ok(Self::new_internal(tracks, gutter, vlines, hlines, resolved_cells)) } /// Generates the cell grid, given the tracks and resolved entries. - fn new_internal( + pub(super) fn new_internal( tracks: Axes<&[Sizing]>, gutter: Axes<&[Sizing]>, + vlines: Vec>, + hlines: Vec>, entries: Vec, ) -> Self { let mut cols = vec![]; @@ -418,14 +718,14 @@ impl CellGrid { rows.pop(); } - Self { cols, rows, entries, has_gutter } + Self { cols, rows, entries, vlines, hlines, has_gutter } } /// Get the grid entry in column `x` and row `y`. /// /// Returns `None` if it's a gutter cell. #[track_caller] - fn entry(&self, x: usize, y: usize) -> Option<&Entry> { + pub(super) fn entry(&self, x: usize, y: usize) -> Option<&Entry> { assert!(x < self.cols.len()); assert!(y < self.rows.len()); @@ -447,19 +747,29 @@ impl CellGrid { /// /// Returns `None` if it's a gutter cell or merged position. #[track_caller] - fn cell(&self, x: usize, y: usize) -> Option<&Cell> { + pub(super) fn cell(&self, x: usize, y: usize) -> Option<&Cell> { 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. - /// If the entry at the given position is a cell, returns the given + /// - If the entry at the given position is a cell, returns the given /// position. - /// If it is a merged cell, returns the parent cell's position. - /// If it is a gutter cell, returns None. + /// - If it is a merged cell, returns the parent cell's position. + /// - If it is a gutter cell, returns None. #[track_caller] - fn parent_cell_position(&self, x: usize, y: usize) -> Option> { + pub(super) fn parent_cell_position(&self, x: usize, y: usize) -> Option> { self.entry(x, y).map(|entry| match entry { Entry::Cell(_) => Axes::new(x, y), Entry::Merged { parent } => { @@ -571,8 +881,6 @@ fn resolve_cell_position( pub struct GridLayouter<'a> { /// The grid of cells. grid: &'a CellGrid, - // How to stroke the cells. - stroke: &'a Option, /// The regions to layout children into. regions: Regions<'a>, /// The inherited styles. @@ -617,10 +925,8 @@ impl<'a> GridLayouter<'a> { /// Create a new grid layouter. /// /// This prepares grid layout by unifying content and gutter tracks. - #[allow(clippy::too_many_arguments)] pub fn new( grid: &'a CellGrid, - stroke: &'a Option, regions: Regions<'a>, styles: StyleChain<'a>, span: Span, @@ -632,7 +938,6 @@ impl<'a> GridLayouter<'a> { Self { grid, - stroke, regions, styles, rcols: vec![Abs::zero(); grid.cols.len()], @@ -677,42 +982,161 @@ impl<'a> GridLayouter<'a> { continue; } - // Render table lines. - if let Some(stroke) = self.stroke { - let thickness = stroke.thickness; - let half = thickness / 2.0; + // Render grid lines. + // We collect lines into a vector before rendering so we can sort + // them based on thickness, such that the lines with largest + // thickness are drawn on top; and also so we can prepend all of + // them at once in the frame, as calling prepend() for each line, + // and thus pushing all frame items forward each time, would result + // in quadratic complexity. + let mut lines = vec![]; - // Render horizontal lines. - for offset in points(rows.iter().map(|piece| piece.height)) { - let target = Point::with_x(frame.width() + thickness); - let hline = Geometry::Line(target).stroked(stroke.clone()); - frame.prepend( - Point::new(-half, offset), - FrameItem::Shape(hline, self.span), - ); - } + // Render vertical lines. + // Render them first so horizontal lines have priority later. + for (x, dx) in points(self.rcols.iter().copied()).enumerate() { + let dx = if self.is_rtl { self.width - dx } else { dx }; + let is_end_border = x == self.grid.cols.len(); + let vlines_at_column = self + .grid + .vlines + .get(if !self.grid.has_gutter { + x + } else if is_end_border { + // The end border has its own vector of lines, but + // dividing it by 2 and flooring would give us the + // vector of lines with the index of the last column. + // Add 1 so we get the border's lines. + x / 2 + 1 + } else { + // If x is a gutter column, this will round down to the + // index of the previous content column, which is + // intentional - the only lines which can appear before + // a gutter column are lines for the previous column + // marked with "LinePosition::After". Therefore, we get + // the previous column's lines. Worry not, as + // 'generate_line_segments' will correctly filter lines + // based on their LinePosition for us. + // + // If x is a content column, this will correctly return + // its index before applying gutters, so nothing + // special here (lines with "LinePosition::After" would + // then be ignored for this column, as we are drawing + // lines before it, not after). + x / 2 + }) + .map(|vlines| &**vlines) + .unwrap_or(&[]); + let tracks = rows.iter().map(|row| (row.y, row.height)); - // Render vertical lines. - for (x, dx) in points(self.rcols.iter().copied()).enumerate() { - let dx = if self.is_rtl { self.width - dx } else { dx }; - // We want each vline to span the entire table (start - // at y = 0, end after all rows). - // We use 'split_vline' to split the vline such that it - // is not drawn above colspans. - for (dy, length) in - split_vline(self.grid, rows, x, 0, self.grid.rows.len()) - { - let target = Point::with_y(length + thickness); - let vline = Geometry::Line(target).stroked(stroke.clone()); - frame.prepend( - Point::new(dx, dy - half), - FrameItem::Shape(vline, self.span), - ); - } - } + // Determine all different line segments we have to draw in + // this column, and convert them to points and shapes. + // + // Even a single, uniform line might generate more than one + // segment, if it happens to cross a colspan (over which it + // must not be drawn). + let segments = generate_line_segments( + self.grid, + tracks, + x, + vlines_at_column, + is_end_border, + vline_stroke_at_row, + ) + .map(|segment| { + let LineSegment { stroke, offset: dy, length, priority } = segment; + let stroke = (*stroke).clone().unwrap_or_default(); + let thickness = stroke.thickness; + let half = thickness / 2.0; + let target = Point::with_y(length + thickness); + let vline = Geometry::Line(target).stroked(stroke); + ( + thickness, + priority, + Point::new(dx, dy - half), + FrameItem::Shape(vline, self.span), + ) + }); + + lines.extend(segments); } + // Render horizontal lines. + // They are rendered second as they default to appearing on top. + // First, calculate their offsets from the top of the frame. + let hline_offsets = points(rows.iter().map(|piece| piece.height)); + + // 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)) + .chain(std::iter::once(self.grid.rows.len())); + + for (y, dy) in hline_indices.zip(hline_offsets) { + let is_bottom_border = y == self.grid.rows.len(); + let hlines_at_row = self + .grid + .hlines + .get(if !self.grid.has_gutter { + y + } else if is_bottom_border { + y / 2 + 1 + } else { + // Check the vlines loop for an explanation regarding + // these index operations. + y / 2 + }) + .map(|hlines| &**hlines) + .unwrap_or(&[]); + let tracks = self.rcols.iter().copied().enumerate(); + + // Determine all different line segments we have to draw in + // this row, and convert them to points and shapes. + let segments = generate_line_segments( + self.grid, + tracks, + y, + hlines_at_row, + is_bottom_border, + hline_stroke_at_column, + ) + .map(|segment| { + let LineSegment { stroke, offset: dx, length, priority } = segment; + let stroke = (*stroke).clone().unwrap_or_default(); + let thickness = stroke.thickness; + let half = thickness / 2.0; + let dx = if self.is_rtl { self.width - dx - length } else { dx }; + let target = Point::with_x(length + thickness); + let hline = Geometry::Line(target).stroked(stroke); + ( + thickness, + priority, + Point::new(dx - half, dy), + FrameItem::Shape(hline, self.span), + ) + }); + + // Draw later (after we sort all lines below.) + lines.extend(segments); + } + + // Sort by increasing thickness, so that we draw larger strokes + // on top. When the thickness is the same, sort by priority. + // + // Sorting by thickness avoids layering problems where a smaller + // hline appears "inside" a larger vline. When both have the same + // size, hlines are drawn on top (since the sort is stable, and + // they are pushed later). + lines.sort_by_key(|(thickness, priority, ..)| (*thickness, *priority)); + // Render cell backgrounds. + // We collect them into a vector so they can all be prepended at + // once to the frame, together with lines. + let mut fills = vec![]; + // Reverse with RTL so that later columns start first. let mut dx = Abs::zero(); for (x, &col) in self.rcols.iter().enumerate().rev_if(self.is_rtl) { @@ -736,13 +1160,22 @@ impl<'a> GridLayouter<'a> { let pos = Point::new(dx + offset, dy); let size = Size::new(width, row.height); let rect = Geometry::Rect(size).filled(fill); - frame.prepend(pos, FrameItem::Shape(rect, self.span)); + fills.push((pos, FrameItem::Shape(rect, self.span))); } } dy += row.height; } dx += col; } + + // Now we render each fill and stroke by prepending to the frame, + // such that both appear below cell contents. Fills come first so + // that they appear below lines. + frame.prepend_multiple( + fills + .into_iter() + .chain(lines.into_iter().map(|(_, _, point, shape)| (point, shape))), + ); } Ok(Fragment::frames(finished)) @@ -1234,287 +1667,3 @@ fn points(extents: impl IntoIterator) -> impl Iterator { offset }) } - -/// Given the 'x' of the column right after the vline (or cols.len() at the -/// border) and its start..end range of rows, alongside the rows for the -/// current region, splits the vline into contiguous parts to draw, including -/// the height of the vline in each part. This will go through each row and -/// interrupt the current vline to be drawn when a colspan is detected, or the -/// end of the row range (or of the region) is reached. -/// The idea is to not draw vlines over colspans. -/// This will return the start offsets and lengths of each final segment of -/// this vline. The offsets are relative to the top of the first row. -/// Note that this assumes that rows are sorted according to ascending 'y'. -fn split_vline( - grid: &CellGrid, - rows: &[RowPiece], - x: usize, - start: usize, - end: usize, -) -> impl IntoIterator { - // Each segment of this vline that should be drawn. - // The last element in the vector below is the currently drawn segment. - // That is, the last segment will be expanded until interrupted. - let mut drawn_vlines = vec![]; - // Whether the latest vline segment is complete, because we hit a row we - // should skip while drawing the vline. Starts at true so we push - // the first segment to the vector. - let mut interrupted = true; - // How far down from the first row have we gone so far. - // Used to determine the positions at which to draw each segment. - let mut offset = Abs::zero(); - - // We start drawing at the first suitable row, and keep going down - // (increasing y) expanding the last segment until we hit a row on top of - // which we shouldn't draw, which is skipped, leading to the creation of a - // new vline segment later if a suitable row is found, restarting the - // cycle. - for row in rows.iter().take_while(|row| row.y < end) { - if should_draw_vline_at_row(grid, x, row.y, start, end) { - if interrupted { - // Last segment was interrupted by a colspan, or there are no - // segments yet. - // Create a new segment to draw. We start spanning this row. - drawn_vlines.push((offset, row.height)); - interrupted = false; - } else { - // Extend the current segment so it covers at least this row - // as well. - // The vector can't be empty if interrupted is false. - let current_segment = drawn_vlines.last_mut().unwrap(); - current_segment.1 += row.height; - } - } else { - interrupted = true; - } - offset += row.height; - } - - drawn_vlines -} - -/// Returns 'true' if the vline right before column 'x', given its start..end -/// range of rows, should be drawn when going through row 'y'. -/// That only occurs if the row is within its start..end range, and if it -/// wouldn't go through a colspan. -fn should_draw_vline_at_row( - grid: &CellGrid, - x: usize, - y: usize, - start: usize, - end: usize, -) -> bool { - if !(start..end).contains(&y) { - // Row is out of range for this line - return false; - } - if x == 0 || x == grid.cols.len() { - // Border vline. Always drawn. - return true; - } - // 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(); - - parent_x >= x || parent_y > y -} - -#[cfg(test)] -mod test { - use super::*; - - fn sample_cell() -> Cell { - Cell { - body: Content::default(), - fill: None, - colspan: NonZeroUsize::ONE, - } - } - - fn cell_with_colspan(colspan: usize) -> Cell { - Cell { - body: Content::default(), - fill: None, - colspan: NonZeroUsize::try_from(colspan).unwrap(), - } - } - - fn sample_grid(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::Merged { parent: 2 }, - // row 1 - Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(3)), - 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::Merged { parent: 10 }, - // row 3 - Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(3)), - Entry::Merged { parent: 13 }, - Entry::Merged { parent: 13 }, - // row 4 - Entry::Cell(sample_cell()), - Entry::Merged { parent: 13 }, - Entry::Merged { parent: 13 }, - Entry::Merged { parent: 13 }, - // row 5 - Entry::Cell(sample_cell()), - Entry::Cell(sample_cell()), - Entry::Cell(cell_with_colspan(2)), - Entry::Merged { parent: 22 }, - ]; - CellGrid::new_internal( - Axes::with_x(&[Sizing::Auto; COLS]), - if gutters { - Axes::new(&[Sizing::Auto; COLS - 1], &[Sizing::Auto; ROWS - 1]) - } else { - Axes::default() - }, - entries, - ) - } - - #[test] - fn test_vline_splitting_without_gutter() { - let grid = sample_grid(false); - let rows = &[ - RowPiece { height: Abs::pt(1.0), y: 0 }, - RowPiece { height: Abs::pt(2.0), y: 1 }, - RowPiece { height: Abs::pt(4.0), y: 2 }, - RowPiece { height: Abs::pt(8.0), y: 3 }, - RowPiece { height: Abs::pt(16.0), y: 4 }, - RowPiece { height: Abs::pt(32.0), y: 5 }, - ]; - let expected_vline_splits = &[ - vec![(Abs::pt(0.), Abs::pt(1. + 2. + 4. + 8. + 16. + 32.))], - vec![(Abs::pt(0.), Abs::pt(1. + 2. + 4. + 8. + 16. + 32.))], - // interrupted a few times by colspans - vec![ - (Abs::pt(0.), Abs::pt(1.)), - (Abs::pt(1. + 2.), Abs::pt(4.)), - (Abs::pt(1. + 2. + 4. + 8. + 16.), Abs::pt(32.)), - ], - // interrupted every time by colspans - vec![], - vec![(Abs::pt(0.), Abs::pt(1. + 2. + 4. + 8. + 16. + 32.))], - ]; - for (x, expected_splits) in expected_vline_splits.iter().enumerate() { - assert_eq!( - expected_splits, - &split_vline(&grid, rows, x, 0, 6).into_iter().collect::>(), - ); - } - } - - #[test] - fn test_vline_splitting_with_gutter() { - let grid = sample_grid(true); - let rows = &[ - RowPiece { height: Abs::pt(1.0), y: 0 }, - RowPiece { height: Abs::pt(2.0), y: 1 }, - RowPiece { height: Abs::pt(4.0), y: 2 }, - RowPiece { height: Abs::pt(8.0), y: 3 }, - RowPiece { height: Abs::pt(16.0), y: 4 }, - RowPiece { height: Abs::pt(32.0), y: 5 }, - RowPiece { height: Abs::pt(64.0), y: 6 }, - RowPiece { height: Abs::pt(128.0), y: 7 }, - RowPiece { height: Abs::pt(256.0), y: 8 }, - RowPiece { height: Abs::pt(512.0), y: 9 }, - RowPiece { height: Abs::pt(1024.0), y: 10 }, - ]; - let expected_vline_splits = &[ - // left border - vec![( - Abs::pt(0.), - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024.), - )], - // gutter line below - vec![( - Abs::pt(0.), - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024.), - )], - vec![( - Abs::pt(0.), - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024.), - )], - // gutter line below - // the two lines below are interrupted multiple times by colspans - vec![ - (Abs::pt(0.), Abs::pt(1. + 2.)), - (Abs::pt(1. + 2. + 4.), Abs::pt(8. + 16. + 32.)), - ( - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), - Abs::pt(512. + 1024.), - ), - ], - vec![ - (Abs::pt(0.), Abs::pt(1. + 2.)), - (Abs::pt(1. + 2. + 4.), Abs::pt(8. + 16. + 32.)), - ( - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), - Abs::pt(512. + 1024.), - ), - ], - // gutter line below - // the two lines below can only cross certain gutter rows, because - // all non-gutter cells in the following column are merged with - // cells from the previous column. - vec![ - (Abs::pt(1.), Abs::pt(2.)), - (Abs::pt(1. + 2. + 4.), Abs::pt(8.)), - (Abs::pt(1. + 2. + 4. + 8. + 16.), Abs::pt(32.)), - ( - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), - Abs::pt(512.), - ), - ], - vec![ - (Abs::pt(1.), Abs::pt(2.)), - (Abs::pt(1. + 2. + 4.), Abs::pt(8.)), - (Abs::pt(1. + 2. + 4. + 8. + 16.), Abs::pt(32.)), - ( - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), - Abs::pt(512.), - ), - ], - // right border - vec![( - Abs::pt(0.), - Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024.), - )], - ]; - for (x, expected_splits) in expected_vline_splits.iter().enumerate() { - assert_eq!( - expected_splits, - &split_vline(&grid, rows, x, 0, 11).into_iter().collect::>(), - ); - } - } -} diff --git a/crates/typst/src/layout/grid/lines.rs b/crates/typst/src/layout/grid/lines.rs new file mode 100644 index 000000000..9a4da26d3 --- /dev/null +++ b/crates/typst/src/layout/grid/lines.rs @@ -0,0 +1,1096 @@ +use std::num::NonZeroUsize; +use std::sync::Arc; + +use super::layout::CellGrid; +use crate::foundations::{AlternativeFold, Fold}; +use crate::layout::{Abs, Axes}; +use crate::visualize::Stroke; + +/// Represents an explicit grid line (horizontal or vertical) specified by the +/// user. +pub struct Line { + /// The index of the track after this line. This will be the index of the + /// row a horizontal line is above of, or of the column right after a + /// vertical line. + /// + /// Must be within `0..=tracks.len()` (where `tracks` is either `grid.cols` + /// or `grid.rows`, ignoring gutter tracks, as appropriate). + pub index: usize, + /// The index of the track at which this line starts being drawn. + /// This is the first column a horizontal line appears in, or the first row + /// a vertical line appears in. + /// + /// Must be within `0..tracks.len()` minus gutter tracks. + pub start: usize, + /// The index after the last track through which the line is drawn. + /// Thus, the line is drawn through tracks `start..end` (note that `end` is + /// exclusive). + /// + /// Must be within `1..=tracks.len()` minus gutter tracks. + /// `None` indicates the line should go all the way to the end. + pub end: Option, + /// The line's stroke. This is `None` when the line is explicitly used to + /// override a previously specified line. + pub stroke: Option>>, + /// The line's position in relation to the track with its index. + pub position: LinePosition, +} + +/// Indicates whether the line should be drawn before or after the track with +/// its index. This is mostly only relevant when gutter is used, since, then, +/// the position after a track is not the same as before the next +/// non-gutter track. +#[derive(PartialEq, Eq)] +pub enum LinePosition { + /// The line should be drawn before its track (e.g. hline on top of a row). + Before, + /// The line should be drawn after its track (e.g. hline below a row). + After, +} + +/// Indicates which priority a particular grid line segment should have, based +/// on the highest priority configuration that defined the segment's stroke. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub(super) enum StrokePriority { + /// The stroke of the segment was derived solely from the grid's global + /// stroke setting, so it should have the lowest priority. + GridStroke = 0, + /// The segment's stroke was derived (even if partially) from a cell's + /// stroke override, so it should have priority over non-overridden cell + /// strokes and be drawn on top of them (when they have the same + /// thickness). + CellStroke = 1, + /// The segment's stroke was derived from a user's explicitly placed line + /// (hline or vline), and thus should have maximum priority, drawn on top + /// of any cell strokes (when they have the same thickness). + ExplicitLine = 2, +} + +/// Data for a particular line segment in the grid as generated by +/// 'generate_line_segments'. +#[derive(Debug, PartialEq, Eq)] +pub(super) struct LineSegment { + /// The stroke with which to draw this segment. + pub(super) stroke: Arc>, + /// The offset of this segment since the beginning of its axis. + /// For a vertical line segment, this is the offset since the top of the + /// table in the current page; for a horizontal line segment, this is the + /// offset since the start border of the table. + pub(super) offset: Abs, + /// The length of this segment. + pub(super) length: Abs, + /// The segment's drawing priority, indicating on top of which other + /// segments this one should be drawn. + pub(super) priority: StrokePriority, +} + +/// Generates the segments of lines that should be drawn alongside a certain +/// axis in the grid, going through the given tracks (orthogonal to the lines). +/// Each returned segment contains its stroke, its offset from the start, and +/// its length. +/// +/// Accepts, as parameters, the index of the lines that should be produced +/// (for example, the column at which vertical lines will be drawn); a list of +/// user-specified lines with the same index (the `lines` parameter); whether +/// the given index corresponds to the maximum index for the line's axis; and a +/// function which returns the final stroke that should be used for each track +/// the line goes through, alongside the priority of the returned stroke (its +/// parameters are the grid, the index of the line to be drawn, the number of +/// the track to draw at and the stroke of the user hline/vline override at +/// 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 +/// 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. +/// +/// Regarding priority, the function should return a priority of ExplicitLine +/// when the user-defined line's stroke at the current position isn't None +/// (note that it is passed by parameter to the function). When it is None, the +/// function should return a priority of CellStroke if the stroke returned was +/// given or affected by a per-cell override of the grid's global stroke. +/// When that isn't the case, the returned stroke was entirely provided by the +/// grid's global stroke, and thus a priority of GridStroke should be returned. +/// +/// 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 +/// current region, as pairs (row index, row height). +pub(super) fn generate_line_segments<'grid, F, I>( + grid: &'grid CellGrid, + tracks: I, + index: usize, + lines: &'grid [Line], + is_max_index: bool, + line_stroke_at_track: F, +) -> impl Iterator + 'grid +where + F: Fn( + &CellGrid, + usize, + usize, + Option>>, + ) -> Option<(Arc>, StrokePriority)> + + 'grid, + I: IntoIterator, + I::IntoIter: 'grid, +{ + // The segment currently being drawn. + // + // It is extended for each consecutive track through which the line would + // be drawn with the same stroke and priority. + // + // Starts as None to force us to create a new segment as soon as we find + // the first track through which we should draw. + let mut current_segment: Option = None; + + // How far from the start (before the first track) have we gone so far. + // Used to determine the positions at which to draw each segment. + let mut offset = Abs::zero(); + + // How much to multiply line indices by to account for gutter. + let gutter_factor = if grid.has_gutter { 2 } else { 1 }; + + // Which line position to look for in the given list of lines. + // + // If the index represents a gutter track, this means the list of lines + // parameter will actually correspond to the list of lines in the previous + // index, so we must look for lines positioned after the previous index, + // and not before, to determine which lines should be placed in gutter. + // + // 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 { + LinePosition::After + } else { + LinePosition::Before + }; + + // Create an iterator of line segments, which will go through each track, + // from start to finish, to create line segments and extend them until they + // are interrupted and thus yielded through the iterator. We then repeat + // the process, picking up from the track after the one at which we had + // an interruption, until we have gone through all tracks. + // + // When going through each track, we check if the current segment would be + // interrupted, either because, at this track, we hit a merged cell over + // which we shouldn't draw, or because the line would have a different + // stroke or priority at this point (so we have to start a new segment). If + // so, the current segment is yielded and its variable is either set to + // 'None' (if no segment should be drawn at the point of interruption, + // meaning we might have to create a new segment later) or to the new + // segment (if we're starting to draw a segment with a different stroke or + // priority than before). + // Otherwise (if the current segment should span the current track), it is + // simply extended (or a new one is created, if it is 'None'), and no value + // is yielded for the current track, since the segment isn't yet complete + // (the next tracks might extend it further before it is interrupted and + // yielded). That is, we yield each segment only when it is interrupted, + // since then we will know its final length for sure. + // + // After the loop is done (and thus we went through all tracks), we + // 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(); + 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 + // interrupted. The for loop is resumed from where it stopped at the + // next call due to that, ensuring we go through all tracks and then + // stop. + for (track, size) in &mut tracks { + // Get the expected line stroke at this track by folding the + // strokes of each user-specified line (with priority to the + // user-specified line specified last). + let stroke = lines + .iter() + .filter(|line| { + line.position == expected_line_position + && line + .end + .map(|end| { + // Subtract 1 from end index so we stop at the last + // cell before it (don't cross one extra gutter). + let end = if grid.has_gutter { + 2 * end.get() - 1 + } else { + end.get() + }; + (gutter_factor * line.start..end).contains(&track) + }) + .unwrap_or_else(|| track >= gutter_factor * line.start) + }) + .map(|line| line.stroke.clone()) + .fold(None, |acc, line_stroke| line_stroke.fold(acc)); + + // The function shall determine if it is appropriate to draw + // the line at this position or not (i.e. whether or not it + // would cross a merged cell), and, if so, the final stroke it + // should have (because cells near this position could have + // stroke overrides, which have priority and should be folded + // with the stroke obtained above). + // + // If we are currently already drawing a segment and the function + // indicates we should, at this track, draw some other segment + // (with a different stroke or priority), or even no segment at + // all, we interrupt and yield the current segment (which was drawn + // up to the previous track) by returning it wrapped in 'Some()' + // (which indicates, in the context of 'std::iter::from_fn', that + // our iterator isn't over yet, and this should be its next value). + if let Some((stroke, priority)) = + line_stroke_at_track(grid, index, track, stroke) + { + // We should draw at this position. Let's check if we were + // already drawing in the previous position. + if let Some(current_segment) = &mut current_segment { + // We are currently building a segment. Let's check if + // we should extend it to this track as well. + if current_segment.stroke == stroke + && current_segment.priority == priority + { + // Extend the current segment so it covers at least + // this track as well, since we should use the same + // stroke as in the previous one when a line goes + // through this track, with the same priority. + current_segment.length += size; + } else { + // We got a different stroke or priority now, so create + // a new segment with the new stroke and spanning the + // current track. Yield the old segment, as it was + // interrupted and is thus complete. + let new_segment = + LineSegment { stroke, offset, length: size, priority }; + let old_segment = std::mem::replace(current_segment, new_segment); + offset += size; + return Some(old_segment); + } + } else { + // We should draw here, but there is no segment + // currently being drawn, either because the last + // position had a merged cell, had a stroke + // of 'None', or because this is the first track. + // Create a new segment to draw. We start spanning this + // track. + current_segment = + Some(LineSegment { stroke, offset, length: size, priority }); + } + } else if let Some(old_segment) = current_segment.take() { + // We shouldn't draw here (stroke of None), so we yield the + // current segment, as it was interrupted. + offset += size; + return Some(old_segment); + } + // Either the current segment is None (meaning we didn't start + // drawing a segment yet since the last yielded one), so we keep + // searching for a track where we should draw one; or the current + // segment is Some but wasn't interrupted at this track, so we keep + // looping through the following tracks until it is interrupted, + // or we reach the end. + offset += size; + } + + // Reached the end of all tracks, so we interrupt and finish + // the current segment. Note that, on future calls to this + // closure, the current segment will necessarily be 'None', + // so the iterator will necessarily end (that is, we will return None) + // after this. + current_segment.take() + }) +} + +/// Returns the correct stroke with which to draw a vline right before column +/// 'x' when going through row 'y', given the stroke of the user-specified line +/// at this position, if any. Also returns the stroke's drawing priority, which +/// depends on its source. +/// +/// If the vline would go through a colspan, returns None (shouldn't be drawn). +/// If the one (when at the border) or two (otherwise) cells to the left and +/// right of the vline have right and left stroke overrides, respectively, +/// then the cells' stroke overrides are folded together with the vline's +/// stroke (with priority to the vline's stroke, followed by the right cell's +/// stroke, and, finally, the left cell's) and returned. If only one of the two +/// cells around the vline (if there are two) has an override, that cell's +/// stroke is given priority when folding. If, however, the cells around the +/// vline at this row do not have any stroke overrides, then the vline's own +/// stroke, as defined by user-specified lines (if any), is returned. +/// +/// The priority associated with the returned stroke follows the rules +/// described in the docs for 'generate_line_segment'. +pub(super) fn vline_stroke_at_row( + grid: &CellGrid, + x: usize, + y: usize, + stroke: Option>>, +) -> Option<(Arc>, StrokePriority)> { + 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; + } + } + + let (left_cell_stroke, left_cell_prioritized) = x + .checked_sub(1) + .and_then(|left_x| grid.parent_cell(left_x, y)) + .map(|left_cell| { + (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| { + (right_cell.stroke.left.clone(), right_cell.stroke_overridden.left) + }) + .unwrap_or((None, false)) + } else { + (None, false) + }; + + let priority = if stroke.is_some() { + StrokePriority::ExplicitLine + } else if left_cell_prioritized || right_cell_prioritized { + StrokePriority::CellStroke + } else { + StrokePriority::GridStroke + }; + + let (prioritized_cell_stroke, deprioritized_cell_stroke) = + if left_cell_prioritized && !right_cell_prioritized { + (left_cell_stroke, right_cell_stroke) + } else { + // When both cells' strokes have the same priority, we default to + // prioritizing the right cell's left stroke. + (right_cell_stroke, left_cell_stroke) + }; + + // When both cells specify a stroke for this line segment, fold + // both strokes, with priority to either the one prioritized cell, + // or to the right cell's left stroke in case of a tie. But when one of + // them doesn't specify a stroke, the other cell's stroke should be used + // instead, regardless of priority (hence the usage of 'fold_or'). + let cell_stroke = prioritized_cell_stroke.fold_or(deprioritized_cell_stroke); + + // Fold the line stroke and folded cell strokes, if possible. + // Give priority to the explicit line stroke. + // Otherwise, use whichever of the two isn't 'none' or unspecified. + let final_stroke = stroke.fold_or(cell_stroke); + + final_stroke.zip(Some(priority)) +} + +/// Returns the correct stroke with which to draw a hline on top of row 'y' +/// when going through column 'x', given the stroke of the user-specified line +/// at this position, if any. Also returns the stroke's drawing priority, which +/// depends on its source. +/// +/// 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 +/// priority to hline's stroke, followed by the bottom cell's stroke, and, +/// finally, the top cell's) and returned. If only one of the two cells around +/// the vline (if there are two) has an override, that cell's stroke is given +/// priority when folding. If, however, the cells around the hline at this +/// column do not have any stroke overrides, then the hline's own stroke, as +/// defined by user-specified lines (if any), is directly returned. +/// +/// The priority associated with the returned stroke follows the rules +/// described in the docs for 'generate_line_segment'. +pub(super) fn hline_stroke_at_column( + grid: &CellGrid, + 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 + }; + + let (top_cell_stroke, top_cell_prioritized) = y + .checked_sub(1) + .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) + }) + .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) + }) + .unwrap_or((None, false)); + + let (bottom_cell_stroke, bottom_cell_prioritized) = if 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) + }) + .unwrap_or((None, false)) + } else { + // No cell below the bottom border. + (None, false) + }; + + let priority = if stroke.is_some() { + StrokePriority::ExplicitLine + } else if top_cell_prioritized || bottom_cell_prioritized { + StrokePriority::CellStroke + } else { + StrokePriority::GridStroke + }; + + let (prioritized_cell_stroke, deprioritized_cell_stroke) = + if top_cell_prioritized && !bottom_cell_prioritized { + (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. + (bottom_cell_stroke, top_cell_stroke) + }; + + // When both cells specify a stroke for this line segment, fold + // both strokes, with priority to either the one prioritized cell, + // or to the bottom cell's top stroke in case of a tie. But when one of + // them doesn't specify a stroke, the other cell's stroke should be used + // instead, regardless of priority (hence the usage of 'fold_or'). + let cell_stroke = prioritized_cell_stroke.fold_or(deprioritized_cell_stroke); + + // Fold the line stroke and folded cell strokes, if possible. + // Give priority to the explicit line stroke. + // Otherwise, use whichever of the two isn't 'none' or unspecified. + let final_stroke = stroke.fold_or(cell_stroke); + + final_stroke.zip(Some(priority)) +} + +#[cfg(test)] +mod test { + use super::super::layout::{Entry, RowPiece}; + use super::*; + use crate::foundations::Content; + use crate::layout::{Cell, Sides, Sizing}; + use crate::util::NonZeroExt; + + fn sample_cell() -> Cell { + Cell { + body: Content::default(), + fill: None, + colspan: NonZeroUsize::ONE, + stroke: Sides::splat(Some(Arc::new(Stroke::default()))), + stroke_overridden: Sides::splat(false), + } + } + + fn cell_with_colspan(colspan: usize) -> Cell { + Cell { + body: Content::default(), + fill: None, + colspan: NonZeroUsize::try_from(colspan).unwrap(), + stroke: Sides::splat(Some(Arc::new(Stroke::default()))), + stroke_overridden: Sides::splat(false), + } + } + + fn sample_grid(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::Merged { parent: 2 }, + // row 1 + Entry::Cell(sample_cell()), + Entry::Cell(cell_with_colspan(3)), + 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::Merged { parent: 10 }, + // row 3 + Entry::Cell(sample_cell()), + Entry::Cell(cell_with_colspan(3)), + Entry::Merged { parent: 13 }, + Entry::Merged { parent: 13 }, + // row 4 + Entry::Cell(sample_cell()), + Entry::Merged { parent: 13 }, + Entry::Merged { parent: 13 }, + Entry::Merged { parent: 13 }, + // row 5 + Entry::Cell(sample_cell()), + Entry::Cell(sample_cell()), + Entry::Cell(cell_with_colspan(2)), + Entry::Merged { parent: 22 }, + ]; + 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_vline_splitting_without_gutter() { + let stroke = Arc::new(Stroke::default()); + let grid = sample_grid(false); + let rows = &[ + RowPiece { height: Abs::pt(1.0), y: 0 }, + RowPiece { height: Abs::pt(2.0), y: 1 }, + RowPiece { height: Abs::pt(4.0), y: 2 }, + RowPiece { height: Abs::pt(8.0), y: 3 }, + RowPiece { height: Abs::pt(16.0), y: 4 }, + RowPiece { height: Abs::pt(32.0), y: 5 }, + ]; + let expected_vline_splits = &[ + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32.), + priority: StrokePriority::GridStroke, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32.), + priority: StrokePriority::GridStroke, + }], + // interrupted a few times by colspans + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16.), + length: Abs::pt(32.), + priority: StrokePriority::GridStroke, + }, + ], + // interrupted every time by colspans + vec![], + vec![LineSegment { + stroke, + offset: Abs::pt(0.), + length: Abs::pt(1. + 2. + 4. + 8. + 16. + 32.), + priority: StrokePriority::GridStroke, + }], + ]; + for (x, expected_splits) in expected_vline_splits.iter().enumerate() { + let tracks = rows.iter().map(|row| (row.y, row.height)); + assert_eq!( + expected_splits, + &generate_line_segments( + &grid, + tracks, + x, + &[], + x == grid.cols.len(), + vline_stroke_at_row + ) + .collect::>(), + ); + } + } + + #[test] + fn test_vline_splitting_with_gutter_and_per_cell_stroke() { + let stroke = Arc::new(Stroke::default()); + let grid = sample_grid(true); + let rows = &[ + RowPiece { height: Abs::pt(1.0), y: 0 }, + RowPiece { height: Abs::pt(2.0), y: 1 }, + RowPiece { height: Abs::pt(4.0), y: 2 }, + RowPiece { height: Abs::pt(8.0), y: 3 }, + RowPiece { height: Abs::pt(16.0), y: 4 }, + RowPiece { height: Abs::pt(32.0), y: 5 }, + RowPiece { height: Abs::pt(64.0), y: 6 }, + RowPiece { height: Abs::pt(128.0), y: 7 }, + RowPiece { height: Abs::pt(256.0), y: 8 }, + RowPiece { height: Abs::pt(512.0), y: 9 }, + RowPiece { height: Abs::pt(1024.0), y: 10 }, + ]; + // Stroke is per-cell so we skip gutter + let expected_vline_splits = &[ + // left border + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8.), + length: Abs::pt(16.), + priority: StrokePriority::GridStroke, + }, + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512., + ), + length: Abs::pt(1024.), + priority: StrokePriority::GridStroke, + }, + ], + // gutter line below + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8.), + length: Abs::pt(16.), + priority: StrokePriority::GridStroke, + }, + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512., + ), + length: Abs::pt(1024.), + priority: StrokePriority::GridStroke, + }, + ], + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8.), + length: Abs::pt(16.), + priority: StrokePriority::GridStroke, + }, + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512., + ), + length: Abs::pt(1024.), + priority: StrokePriority::GridStroke, + }, + ], + // gutter line below + // the two lines below are interrupted multiple times by colspans + 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. + 4. + 8.), + length: Abs::pt(16.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512., + ), + length: Abs::pt(1024.), + priority: StrokePriority::GridStroke, + }, + ], + 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. + 4. + 8.), + length: Abs::pt(16.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512., + ), + length: Abs::pt(1024.), + priority: StrokePriority::GridStroke, + }, + ], + // gutter line below + // the two lines below can only cross certain gutter rows, because + // all non-gutter cells in the following column are merged with + // cells from the previous column. + vec![], + vec![], + // right border + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8.), + length: Abs::pt(16.), + priority: StrokePriority::GridStroke, + }, + 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.), + priority: StrokePriority::GridStroke, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512., + ), + length: Abs::pt(1024.), + priority: StrokePriority::GridStroke, + }, + ], + ]; + for (x, expected_splits) in expected_vline_splits.iter().enumerate() { + let tracks = rows.iter().map(|row| (row.y, row.height)); + assert_eq!( + expected_splits, + &generate_line_segments( + &grid, + tracks, + x, + &[], + x == grid.cols.len(), + vline_stroke_at_row + ) + .collect::>(), + ); + } + } + + #[test] + fn test_vline_splitting_with_gutter_and_explicit_vlines() { + let stroke = Arc::new(Stroke::default()); + let grid = sample_grid(true); + let rows = &[ + RowPiece { height: Abs::pt(1.0), y: 0 }, + RowPiece { height: Abs::pt(2.0), y: 1 }, + RowPiece { height: Abs::pt(4.0), y: 2 }, + RowPiece { height: Abs::pt(8.0), y: 3 }, + RowPiece { height: Abs::pt(16.0), y: 4 }, + RowPiece { height: Abs::pt(32.0), y: 5 }, + RowPiece { height: Abs::pt(64.0), y: 6 }, + RowPiece { height: Abs::pt(128.0), y: 7 }, + RowPiece { height: Abs::pt(256.0), y: 8 }, + RowPiece { height: Abs::pt(512.0), y: 9 }, + RowPiece { height: Abs::pt(1024.0), y: 10 }, + ]; + let expected_vline_splits = &[ + // left border + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024., + ), + 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. + 128. + 256. + 512. + 1024., + ), + priority: StrokePriority::ExplicitLine, + }], + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024., + ), + priority: StrokePriority::ExplicitLine, + }], + // gutter line below + // the two lines below are interrupted multiple times by colspans + 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.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), + length: Abs::pt(512. + 1024.), + priority: StrokePriority::ExplicitLine, + }, + ], + 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.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), + length: Abs::pt(512. + 1024.), + priority: StrokePriority::ExplicitLine, + }, + ], + // gutter line below + // the two lines below can only cross certain gutter rows, because + // all non-gutter cells in the following column are merged with + // cells from the previous column. + vec![ + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1.), + length: Abs::pt(2.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4.), + length: Abs::pt(8.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16.), + length: Abs::pt(32.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), + length: Abs::pt(512.), + priority: StrokePriority::ExplicitLine, + }, + ], + vec![ + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1.), + length: Abs::pt(2.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4.), + length: Abs::pt(8.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16.), + length: Abs::pt(32.), + priority: StrokePriority::ExplicitLine, + }, + LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256.), + length: Abs::pt(512.), + priority: StrokePriority::ExplicitLine, + }, + ], + // right border + vec![LineSegment { + stroke: stroke.clone(), + offset: Abs::pt(0.), + length: Abs::pt( + 1. + 2. + 4. + 8. + 16. + 32. + 64. + 128. + 256. + 512. + 1024., + ), + priority: StrokePriority::ExplicitLine, + }], + ]; + for (x, expected_splits) in expected_vline_splits.iter().enumerate() { + let tracks = rows.iter().map(|row| (row.y, row.height)); + assert_eq!( + expected_splits, + &generate_line_segments( + &grid, + tracks, + x, + &[ + Line { + index: x, + start: 0, + end: None, + stroke: Some(stroke.clone()), + position: LinePosition::Before + }, + Line { + index: x, + start: 0, + end: None, + stroke: Some(stroke.clone()), + position: LinePosition::After + }, + ], + x == grid.cols.len(), + vline_stroke_at_row + ) + .collect::>(), + ); + } + } +} diff --git a/crates/typst/src/layout/grid/mod.rs b/crates/typst/src/layout/grid/mod.rs index ee2eeecfd..0ddecd841 100644 --- a/crates/typst/src/layout/grid/mod.rs +++ b/crates/typst/src/layout/grid/mod.rs @@ -1,8 +1,11 @@ mod layout; +mod lines; -pub use self::layout::{Cell, CellGrid, Celled, GridLayouter, ResolvableCell}; +pub use self::layout::{Cell, CellGrid, Celled, GridItem, GridLayouter, ResolvableCell}; +pub use self::lines::LinePosition; use std::num::NonZeroUsize; +use std::sync::Arc; use ecow::eco_format; use smallvec::{smallvec, SmallVec}; @@ -13,10 +16,11 @@ use crate::foundations::{ cast, elem, scope, Array, Content, Fold, Packed, Show, Smart, StyleChain, Value, }; use crate::layout::{ - AlignElem, Alignment, Axes, Fragment, LayoutMultiple, Length, Regions, Rel, Sides, - Sizing, + Abs, AlignElem, Alignment, Axes, Dir, Fragment, LayoutMultiple, Length, + OuterHAlignment, OuterVAlignment, Regions, Rel, Sides, Sizing, }; use crate::syntax::Span; +use crate::text::TextElem; use crate::util::NonZeroExt; use crate::visualize::{Paint, Stroke}; @@ -235,12 +239,14 @@ pub struct GridElem { /// Grids have no strokes by default, which can be changed by setting this /// option to the desired stroke. /// - /// _Note:_ Richer stroke customization for individual cells is not yet - /// implemented, but will be in the future. In the meantime, you can use the - /// third-party [tablex library](https://github.com/PgBiel/typst-tablex/). + /// If it is necessary to place lines which can cross spacing between cells + /// produced by the `gutter` option, or to override the stroke between + /// multiple specific cells, consider specifying one or more of + /// [`grid.hline`]($grid.hline) and [`grid.vline`]($grid.vline) alongside + /// your grid cells. #[resolve] #[fold] - pub stroke: Option, + pub stroke: Celled>>>>, /// How much to pad the cells' content. /// @@ -266,17 +272,25 @@ pub struct GridElem { #[fold] pub inset: Sides>>, - /// The contents of the grid cells. + /// The contents of the grid cells, plus any extra grid lines specified + /// with the [`grid.hline`]($grid.hline) and [`grid.vline`]($grid.vline) + /// elements. /// /// The cells are populated in row-major order. #[variadic] - pub children: Vec>, + pub children: Vec, } #[scope] impl GridElem { #[elem] type GridCell; + + #[elem] + type GridHLine; + + #[elem] + type GridVLine; } impl LayoutMultiple for Packed { @@ -294,26 +308,60 @@ impl LayoutMultiple for Packed { let column_gutter = self.column_gutter(styles); let row_gutter = self.row_gutter(styles); let fill = self.fill(styles); - let stroke = self.stroke(styles).map(Stroke::unwrap_or_default); + let stroke = self.stroke(styles); let tracks = Axes::new(columns.0.as_slice(), rows.0.as_slice()); let gutter = Axes::new(column_gutter.0.as_slice(), row_gutter.0.as_slice()); // Use trace to link back to the grid when a specific cell errors let tracepoint = || Tracepoint::Call(Some(eco_format!("grid"))); + let items = self.children().iter().map(|child| match child { + GridChild::HLine(hline) => GridItem::HLine { + y: hline.y(styles), + start: hline.start(styles), + end: hline.end(styles), + stroke: hline.stroke(styles), + span: hline.span(), + position: match hline.position(styles) { + OuterVAlignment::Top => LinePosition::Before, + OuterVAlignment::Bottom => LinePosition::After, + }, + }, + GridChild::VLine(vline) => GridItem::VLine { + x: vline.x(styles), + start: vline.start(styles), + end: vline.end(styles), + stroke: vline.stroke(styles), + span: vline.span(), + position: match vline.position(styles) { + OuterHAlignment::Left if TextElem::dir_in(styles) == Dir::RTL => { + LinePosition::After + } + OuterHAlignment::Right if TextElem::dir_in(styles) == Dir::RTL => { + LinePosition::Before + } + OuterHAlignment::Start | OuterHAlignment::Left => { + LinePosition::Before + } + OuterHAlignment::End | OuterHAlignment::Right => LinePosition::After, + }, + }, + GridChild::Cell(cell) => GridItem::Cell(cell.clone()), + }); let grid = CellGrid::resolve( tracks, gutter, - self.children(), + items, fill, align, inset, + &stroke, engine, styles, self.span(), ) .trace(engine.world, tracepoint, self.span())?; - let layouter = GridLayouter::new(&grid, &stroke, regions, styles, self.span()); + let layouter = GridLayouter::new(&grid, regions, styles, self.span()); // Measure the columns and layout the grid row-by-row. layouter.layout(engine) @@ -332,6 +380,151 @@ cast! { values: Array => Self(values.into_iter().map(Value::cast).collect::>()?), } +/// Any child of a grid element. +#[derive(Debug, PartialEq, Clone, Hash)] +pub enum GridChild { + HLine(Packed), + VLine(Packed), + Cell(Packed), +} + +cast! { + GridChild, + self => match self { + Self::HLine(hline) => hline.into_value(), + Self::VLine(vline) => vline.into_value(), + Self::Cell(cell) => cell.into_value(), + }, + v: Content => v.into(), +} + +impl From for GridChild { + fn from(value: Content) -> Self { + value + .into_packed::() + .map(GridChild::HLine) + .or_else(|value| value.into_packed::().map(GridChild::VLine)) + .or_else(|value| value.into_packed::().map(GridChild::Cell)) + .unwrap_or_else(|value| { + let span = value.span(); + GridChild::Cell(Packed::new(GridCell::new(value)).spanned(span)) + }) + } +} + +/// A horizontal line in the grid. +/// +/// Overrides any per-cell stroke, including stroke specified through the +/// grid's `stroke` field. Can cross spacing between cells created through +/// the grid's `column-gutter` option. +#[elem(name = "hline", title = "Grid Horizontal Line")] +pub struct GridHLine { + /// The row above which the horizontal line is placed (zero-indexed). + /// If the `position` field is set to `{bottom}`, the line is placed below + /// the row with the given index instead (see that field's docs for + /// details). + /// + /// Specifying `{auto}` causes the line to be placed at the row below the + /// last automatically positioned cell (that is, cell without coordinate + /// overrides) before the line among the grid's children. If there is no + /// such cell before the line, it is placed at the top of the grid (row 0). + /// Note that specifying for this option exactly the total amount of rows + /// in the grid causes this horizontal line to override the bottom border + /// of the grid, while a value of 0 overrides the top border. + pub y: Smart, + + /// The column at which the horizontal line starts (zero-indexed, inclusive). + pub start: usize, + + /// The column before which the horizontal line ends (zero-indexed, + /// exclusive). + /// Therefore, the horizontal line will be drawn up to and across column + /// `end - 1`. + /// + /// A value equal to `{none}` or to the amount of columns causes it to + /// extend all the way towards the end of the grid. + pub end: Option, + + /// The line's stroke. + /// + /// Specifying `{none}` interrupts previous hlines placed across this + /// line's range, but does not affect per-cell stroke or vlines. + #[resolve] + #[fold] + #[default(Some(Arc::new(Stroke::default())))] + pub stroke: Option>, + + /// The position at which the line is placed, given its row (`y`) - either + /// `{top}` to draw above it or `{bottom}` to draw below it. + /// + /// This setting is only relevant when row gutter is enabled (and + /// shouldn't be used otherwise - prefer just increasing the `y` field by + /// one instead), since then the position below a row becomes different + /// from the position above the next row due to the spacing between both. + #[default(OuterVAlignment::Top)] + pub position: OuterVAlignment, +} + +/// A vertical line in the grid. +/// +/// Overrides any per-cell stroke, including stroke specified through the +/// grid's `stroke` field. Can cross spacing between cells created through +/// the grid's `row-gutter` option. +#[elem(name = "vline", title = "Grid Vertical Line")] +pub struct GridVLine { + /// The column before which the horizontal line is placed (zero-indexed). + /// If the `position` field is set to `{end}`, the line is placed after the + /// column with the given index instead (see that field's docs for + /// details). + /// + /// Specifying `{auto}` causes the line to be placed at the column after + /// the last automatically positioned cell (that is, cell without + /// coordinate overrides) before the line among the grid's children. If + /// there is no such cell before the line, it is placed before the grid's + /// first column (column 0). + /// Note that specifying for this option exactly the total amount of + /// columns in the grid causes this vertical line to override the end + /// border of the grid (right in LTR, left in RTL), while a value of 0 + /// overrides the start border (left in LTR, right in RTL). + pub x: Smart, + + /// The row at which the vertical line starts (zero-indexed, inclusive). + pub start: usize, + + /// The row on top of which the vertical line ends (zero-indexed, + /// exclusive). + /// Therefore, the vertical line will be drawn up to and across row + /// `end - 1`. + /// + /// A value equal to `{none}` or to the amount of rows causes it to extend + /// all the way towards the bottom of the grid. + pub end: Option, + + /// The line's stroke. + /// + /// Specifying `{none}` interrupts previous vlines placed across this + /// line's range, but does not affect per-cell stroke or hlines. + #[resolve] + #[fold] + #[default(Some(Arc::new(Stroke::default())))] + pub stroke: Option>, + + /// The position at which the line is placed, given its column (`x`) - + /// either `{start}` to draw before it or `{end}` to draw after it. + /// + /// The values `{left}` and `{right}` are also accepted, but discouraged as + /// they cause your grid to be inconsistent between left-to-right and + /// right-to-left documents. + /// + /// This setting is only relevant when column gutter is enabled (and + /// shouldn't be used otherwise - prefer just increasing the `x` field by + /// one instead), since then the position after a column becomes different + /// from the position before the next column due to the spacing between + /// both. + #[default(OuterHAlignment::Start)] + pub position: OuterHAlignment, +} + /// A cell in the grid. Use this to either override grid properties for a /// particular cell, or in show rules to apply certain styles to multiple cells /// at once. @@ -383,7 +576,7 @@ cast! { pub struct GridCell { /// The cell's body. #[required] - body: Content, + pub body: Content, /// The cell's column (zero-indexed). /// This field may be used in show rules to style a cell depending on its @@ -408,7 +601,7 @@ pub struct GridCell { /// [1], grid.cell(x: 3)[4], [2], /// ) /// ``` - x: Smart, + pub x: Smart, /// The cell's row (zero-indexed). /// This field may be used in show rules to style a cell depending on its @@ -427,20 +620,25 @@ pub struct GridCell { /// [A], grid.cell(y: 1)[B], grid.cell(y: 1)[C], grid.cell(y: 2)[D] /// ) /// ``` - y: Smart, + pub y: Smart, /// The amount of columns spanned by this cell. #[default(NonZeroUsize::ONE)] - colspan: NonZeroUsize, + pub colspan: NonZeroUsize, /// The cell's fill override. - fill: Smart>, + pub fill: Smart>, /// The cell's alignment override. - align: Smart, + pub align: Smart, /// The cell's inset override. - inset: Smart>>>, + pub inset: Smart>>>, + + /// The cell's stroke override. + #[resolve] + #[fold] + pub stroke: Sides>>>, } cast! { @@ -462,11 +660,27 @@ impl ResolvableCell for Packed { fill: &Option, align: Smart, inset: Sides>>, + stroke: Sides>>>>, styles: StyleChain, ) -> Cell { let cell = &mut *self; let colspan = cell.colspan(styles); let fill = cell.fill(styles).unwrap_or_else(|| fill.clone()); + + let cell_stroke = cell.stroke(styles); + let stroke_overridden = + cell_stroke.as_ref().map(|side| matches!(side, Some(Some(_)))); + + // Using a typical 'Sides' fold, an unspecified side loses to a + // specified side. Additionally, when both are specified, an inner + // None wins over the outer Some, and vice-versa. When both are + // specified and Some, fold occurs, which, remarkably, leads to an Arc + // clone. + // + // In the end, we flatten because, for layout purposes, an unspecified + // cell stroke is the same as specifying 'none', so we equate the two + // concepts. + let stroke = cell_stroke.fold(stroke).map(Option::flatten); cell.push_x(Smart::Custom(x)); cell.push_y(Smart::Custom(y)); cell.push_fill(Smart::Custom(fill.clone())); @@ -482,7 +696,26 @@ impl ResolvableCell for Packed { cell.push_inset(Smart::Custom( cell.inset(styles).map_or(inset, |inner| inner.fold(inset)), )); - Cell { body: self.pack(), fill, colspan } + cell.push_stroke( + // Here we convert the resolved stroke to a regular stroke, however + // with resolved units (that is, 'em' converted to absolute units). + // We also convert any stroke unspecified by both the cell and the + // outer stroke ('None' in the folded stroke) to 'none', that is, + // all sides are present in the resulting Sides object accessible + // by show rules on grid cells. + stroke.as_ref().map(|side| { + Some(side.as_ref().map(|cell_stroke| { + Arc::new((**cell_stroke).clone().map(Length::from)) + })) + }), + ); + Cell { + body: self.pack(), + fill, + colspan, + stroke, + stroke_overridden, + } } fn x(&self, styles: StyleChain) -> Smart { diff --git a/crates/typst/src/layout/sides.rs b/crates/typst/src/layout/sides.rs index bb35ffb3e..119d7f194 100644 --- a/crates/typst/src/layout/sides.rs +++ b/crates/typst/src/layout/sides.rs @@ -3,7 +3,8 @@ use std::ops::Add; use crate::diag::{bail, StrResult}; use crate::foundations::{ - cast, CastInfo, Dict, Fold, FromValue, IntoValue, Reflect, Resolve, StyleChain, Value, + cast, AlternativeFold, CastInfo, Dict, Fold, FromValue, IntoValue, Reflect, Resolve, + StyleChain, Value, }; use crate::layout::{Abs, Alignment, Axes, Axis, Corner, Rel, Size}; use crate::util::Get; @@ -245,13 +246,10 @@ impl Resolve for Sides { impl Fold for Sides> { fn fold(self, outer: Self) -> Self { - self.zip(outer).map(|(inner, outer)| match (inner, outer) { - (Some(inner), Some(outer)) => Some(inner.fold(outer)), - // Usually, folding an inner `None` with an `outer` preferres the - // explicit `None`. However, here `None` means unspecified and thus - // we want `outer`. - (inner, outer) => inner.or(outer), - }) + // Usually, folding an inner `None` with an `outer` preferres the + // explicit `None`. However, here `None` means unspecified and thus + // we want `outer`, so we use `fold_or` to opt into such behavior. + self.zip(outer).map(|(inner, outer)| inner.fold_or(outer)) } } diff --git a/crates/typst/src/model/bibliography.rs b/crates/typst/src/model/bibliography.rs index 84ab2fffb..ca7695d93 100644 --- a/crates/typst/src/model/bibliography.rs +++ b/crates/typst/src/model/bibliography.rs @@ -29,7 +29,8 @@ use crate::foundations::{ }; use crate::introspection::{Introspector, Locatable, Location}; use crate::layout::{ - BlockElem, Em, GridCell, GridElem, HElem, PadElem, Sizing, TrackSizings, VElem, + BlockElem, Em, GridCell, GridChild, GridElem, HElem, PadElem, Sizing, TrackSizings, + VElem, }; use crate::model::{ CitationForm, CiteGroup, Destination, FootnoteElem, HeadingElem, LinkElem, ParElem, @@ -237,11 +238,13 @@ impl Show for Packed { if references.iter().any(|(prefix, _)| prefix.is_some()) { let mut cells = vec![]; for (prefix, reference) in references { - cells.push( + cells.push(GridChild::Cell( Packed::new(GridCell::new(prefix.clone().unwrap_or_default())) .spanned(span), - ); - cells.push(Packed::new(GridCell::new(reference.clone())).spanned(span)); + )); + cells.push(GridChild::Cell( + Packed::new(GridCell::new(reference.clone())).spanned(span), + )); } seq.push(VElem::new(row_gutter).with_weakness(3).pack()); @@ -945,8 +948,8 @@ impl ElemRenderer<'_> { if let Some(prefix) = suf_prefix { const COLUMN_GUTTER: Em = Em::new(0.65); content = GridElem::new(vec![ - Packed::new(GridCell::new(prefix)).spanned(self.span), - Packed::new(GridCell::new(content)).spanned(self.span), + GridChild::Cell(Packed::new(GridCell::new(prefix)).spanned(self.span)), + GridChild::Cell(Packed::new(GridCell::new(content)).spanned(self.span)), ]) .with_columns(TrackSizings(smallvec![Sizing::Auto; 2])) .with_column_gutter(TrackSizings(smallvec![COLUMN_GUTTER.into()])) diff --git a/crates/typst/src/model/enum.rs b/crates/typst/src/model/enum.rs index bb009df7c..6677913bd 100644 --- a/crates/typst/src/model/enum.rs +++ b/crates/typst/src/model/enum.rs @@ -271,7 +271,6 @@ impl LayoutMultiple for Packed { number = number.saturating_add(1); } - let stroke = None; let grid = CellGrid::new( Axes::with_x(&[ Sizing::Rel(indent.into()), @@ -282,7 +281,7 @@ impl LayoutMultiple for Packed { Axes::with_y(&[gutter.into()]), cells, ); - let layouter = GridLayouter::new(&grid, &stroke, regions, styles, self.span()); + let layouter = GridLayouter::new(&grid, regions, styles, self.span()); layouter.layout(engine) } diff --git a/crates/typst/src/model/list.rs b/crates/typst/src/model/list.rs index 6de78bbd5..12a698d1f 100644 --- a/crates/typst/src/model/list.rs +++ b/crates/typst/src/model/list.rs @@ -168,7 +168,6 @@ impl LayoutMultiple for Packed { )); } - let stroke = None; let grid = CellGrid::new( Axes::with_x(&[ Sizing::Rel(indent.into()), @@ -179,7 +178,7 @@ impl LayoutMultiple for Packed { Axes::with_y(&[gutter.into()]), cells, ); - let layouter = GridLayouter::new(&grid, &stroke, regions, styles, self.span()); + let layouter = GridLayouter::new(&grid, regions, styles, self.span()); layouter.layout(engine) } diff --git a/crates/typst/src/model/table.rs b/crates/typst/src/model/table.rs index 256459c74..ae4dbce76 100644 --- a/crates/typst/src/model/table.rs +++ b/crates/typst/src/model/table.rs @@ -1,4 +1,5 @@ use std::num::NonZeroUsize; +use std::sync::Arc; use ecow::eco_format; @@ -8,12 +9,13 @@ use crate::foundations::{ cast, elem, scope, Content, Fold, Packed, Show, Smart, StyleChain, }; use crate::layout::{ - show_grid_cell, Abs, Alignment, Axes, Cell, CellGrid, Celled, Fragment, GridLayouter, - LayoutMultiple, Length, Regions, Rel, ResolvableCell, Sides, TrackSizings, + show_grid_cell, Abs, Alignment, Axes, Cell, CellGrid, Celled, Dir, Fragment, + GridItem, GridLayouter, LayoutMultiple, Length, LinePosition, OuterHAlignment, + OuterVAlignment, Regions, Rel, ResolvableCell, Sides, TrackSizings, }; use crate::model::Figurable; use crate::syntax::Span; -use crate::text::{Lang, LocalName, Region}; +use crate::text::{Lang, LocalName, Region, TextElem}; use crate::util::NonZeroExt; use crate::visualize::{Paint, Stroke}; @@ -166,13 +168,17 @@ pub struct TableElem { /// /// Strokes can be disabled by setting this to `{none}`. /// - /// _Note:_ Richer stroke customization for individual cells is not yet - /// implemented, but will be in the future. In the meantime, you can use the - /// third-party [tablex library](https://github.com/PgBiel/typst-tablex/). + /// If it is necessary to place lines which can cross spacing between cells + /// produced by the `gutter` option, or to override the stroke between + /// multiple specific cells, consider specifying one or more of + /// [`table.hline`]($table.hline) and [`table.vline`]($table.vline) alongside + /// your table cells. + /// + /// See the [grid documentation]($grid) for more information on stroke. #[resolve] #[fold] - #[default(Some(Stroke::default()))] - pub stroke: Option, + #[default(Celled::Value(Sides::splat(Some(Some(Arc::new(Stroke::default()))))))] + pub stroke: Celled>>>>, /// How much to pad the cells' content. /// @@ -197,15 +203,23 @@ pub struct TableElem { #[default(Sides::splat(Some(Abs::pt(5.0).into())))] pub inset: Sides>>, - /// The contents of the table cells. + /// The contents of the table cells, plus any extra table lines specified + /// with the [`table.hline`]($table.hline) and + /// [`table.vline`]($table.vline) elements. #[variadic] - pub children: Vec>, + pub children: Vec, } #[scope] impl TableElem { #[elem] type TableCell; + + #[elem] + type TableHLine; + + #[elem] + type TableVLine; } impl LayoutMultiple for Packed { @@ -223,26 +237,60 @@ impl LayoutMultiple for Packed { let column_gutter = self.column_gutter(styles); let row_gutter = self.row_gutter(styles); let fill = self.fill(styles); - let stroke = self.stroke(styles).map(Stroke::unwrap_or_default); + let stroke = self.stroke(styles); let tracks = Axes::new(columns.0.as_slice(), rows.0.as_slice()); let gutter = Axes::new(column_gutter.0.as_slice(), row_gutter.0.as_slice()); // Use trace to link back to the table when a specific cell errors let tracepoint = || Tracepoint::Call(Some(eco_format!("table"))); + let items = self.children().iter().map(|child| match child { + TableChild::HLine(hline) => GridItem::HLine { + y: hline.y(styles), + start: hline.start(styles), + end: hline.end(styles), + stroke: hline.stroke(styles), + span: hline.span(), + position: match hline.position(styles) { + OuterVAlignment::Top => LinePosition::Before, + OuterVAlignment::Bottom => LinePosition::After, + }, + }, + TableChild::VLine(vline) => GridItem::VLine { + x: vline.x(styles), + start: vline.start(styles), + end: vline.end(styles), + stroke: vline.stroke(styles), + span: vline.span(), + position: match vline.position(styles) { + OuterHAlignment::Left if TextElem::dir_in(styles) == Dir::RTL => { + LinePosition::After + } + OuterHAlignment::Right if TextElem::dir_in(styles) == Dir::RTL => { + LinePosition::Before + } + OuterHAlignment::Start | OuterHAlignment::Left => { + LinePosition::Before + } + OuterHAlignment::End | OuterHAlignment::Right => LinePosition::After, + }, + }, + TableChild::Cell(cell) => GridItem::Cell(cell.clone()), + }); let grid = CellGrid::resolve( tracks, gutter, - self.children(), + items, fill, align, inset, + &stroke, engine, styles, self.span(), ) .trace(engine.world, tracepoint, self.span())?; - let layouter = GridLayouter::new(&grid, &stroke, regions, styles, self.span()); + let layouter = GridLayouter::new(&grid, regions, styles, self.span()); layouter.layout(engine) } } @@ -286,6 +334,122 @@ impl LocalName for Packed { impl Figurable for Packed {} +/// Any child of a table element. +#[derive(Debug, PartialEq, Clone, Hash)] +pub enum TableChild { + HLine(Packed), + VLine(Packed), + Cell(Packed), +} + +cast! { + TableChild, + self => match self { + Self::HLine(hline) => hline.into_value(), + Self::VLine(vline) => vline.into_value(), + Self::Cell(cell) => cell.into_value(), + }, + v: Content => v.into(), +} + +impl From for TableChild { + fn from(value: Content) -> Self { + value + .into_packed::() + .map(TableChild::HLine) + .or_else(|value| value.into_packed::().map(TableChild::VLine)) + .or_else(|value| value.into_packed::().map(TableChild::Cell)) + .unwrap_or_else(|value| { + let span = value.span(); + TableChild::Cell(Packed::new(TableCell::new(value)).spanned(span)) + }) + } +} + +/// A horizontal line in the table. See the docs for +/// [`grid.hline`]($grid.hline) for more information regarding how to use this +/// element's fields. +/// +/// Overrides any per-cell stroke, including stroke specified through the +/// table's `stroke` field. Can cross spacing between cells created through +/// the table's `column-gutter` option. +#[elem(name = "hline", title = "Table Horizontal Line")] +pub struct TableHLine { + /// The row above which the horizontal line is placed (zero-indexed). + /// Functions identically to the `y` field in [`grid.hline`]($grid.hline). + pub y: Smart, + + /// The column at which the horizontal line starts (zero-indexed, inclusive). + pub start: usize, + + /// The column before which the horizontal line ends (zero-indexed, + /// exclusive). + pub end: Option, + + /// The line's stroke. + /// + /// Specifying `{none}` interrupts previous hlines placed across this + /// line's range, but does not affect per-cell stroke or vlines. + #[resolve] + #[fold] + #[default(Some(Arc::new(Stroke::default())))] + pub stroke: Option>, + + /// The position at which the line is placed, given its row (`y`) - either + /// `{top}` to draw above it or `{bottom}` to draw below it. + /// + /// This setting is only relevant when row gutter is enabled (and + /// shouldn't be used otherwise - prefer just increasing the `y` field by + /// one instead), since then the position below a row becomes different + /// from the position above the next row due to the spacing between both. + #[default(OuterVAlignment::Top)] + pub position: OuterVAlignment, +} + +/// A vertical line in the table. See the docs for [`grid.vline`]($grid.vline) +/// for more information regarding how to use this element's fields. +/// +/// Overrides any per-cell stroke, including stroke specified through the +/// table's `stroke` field. Can cross spacing between cells created through +/// the table's `row-gutter` option. +#[elem(name = "vline", title = "Table Vertical Line")] +pub struct TableVLine { + /// The column before which the horizontal line is placed (zero-indexed). + /// Functions identically to the `x` field in [`grid.vline`]($grid.vline). + pub x: Smart, + + /// The row at which the vertical line starts (zero-indexed, inclusive). + pub start: usize, + + /// The row on top of which the vertical line ends (zero-indexed, + /// exclusive). + pub end: Option, + + /// The line's stroke. + /// + /// Specifying `{none}` interrupts previous vlines placed across this + /// line's range, but does not affect per-cell stroke or hlines. + #[resolve] + #[fold] + #[default(Some(Arc::new(Stroke::default())))] + pub stroke: Option>, + + /// The position at which the line is placed, given its column (`x`) - + /// either `{start}` to draw before it or `{end}` to draw after it. + /// + /// The values `{left}` and `{right}` are also accepted, but discouraged as + /// they cause your table to be inconsistent between left-to-right and + /// right-to-left documents. + /// + /// This setting is only relevant when column gutter is enabled (and + /// shouldn't be used otherwise - prefer just increasing the `x` field by + /// one instead), since then the position after a column becomes different + /// from the position before the next column due to the spacing between + /// both. + #[default(OuterHAlignment::Start)] + pub position: OuterHAlignment, +} + /// A cell in the table. Use this to either override table properties for a /// particular cell, or in show rules to apply certain styles to multiple cells /// at once. @@ -336,28 +500,33 @@ impl Figurable for Packed {} pub struct TableCell { /// The cell's body. #[required] - body: Content, + pub body: Content, /// The cell's column (zero-indexed). /// Functions identically to the `x` field in [`grid.cell`]($grid.cell). - x: Smart, + pub x: Smart, /// The cell's row (zero-indexed). /// Functions identically to the `y` field in [`grid.cell`]($grid.cell). - y: Smart, + pub y: Smart, /// The cell's fill override. - fill: Smart>, + pub fill: Smart>, /// The amount of columns spanned by this cell. #[default(NonZeroUsize::ONE)] - colspan: NonZeroUsize, + pub colspan: NonZeroUsize, /// The cell's alignment override. - align: Smart, + pub align: Smart, /// The cell's inset override. - inset: Smart>>>, + pub inset: Smart>>>, + + /// The cell's stroke override. + #[resolve] + #[fold] + pub stroke: Sides>>>, } cast! { @@ -379,11 +548,27 @@ impl ResolvableCell for Packed { fill: &Option, align: Smart, inset: Sides>>, + stroke: Sides>>>>, styles: StyleChain, ) -> Cell { let cell = &mut *self; let colspan = cell.colspan(styles); let fill = cell.fill(styles).unwrap_or_else(|| fill.clone()); + + let cell_stroke = cell.stroke(styles); + let stroke_overridden = + cell_stroke.as_ref().map(|side| matches!(side, Some(Some(_)))); + + // Using a typical 'Sides' fold, an unspecified side loses to a + // specified side. Additionally, when both are specified, an inner + // None wins over the outer Some, and vice-versa. When both are + // specified and Some, fold occurs, which, remarkably, leads to an Arc + // clone. + // + // In the end, we flatten because, for layout purposes, an unspecified + // cell stroke is the same as specifying 'none', so we equate the two + // concepts. + let stroke = cell_stroke.fold(stroke).map(Option::flatten); cell.push_x(Smart::Custom(x)); cell.push_y(Smart::Custom(y)); cell.push_fill(Smart::Custom(fill.clone())); @@ -399,7 +584,26 @@ impl ResolvableCell for Packed { cell.push_inset(Smart::Custom( cell.inset(styles).map_or(inset, |inner| inner.fold(inset)), )); - Cell { body: self.pack(), fill, colspan } + cell.push_stroke( + // Here we convert the resolved stroke to a regular stroke, however + // with resolved units (that is, 'em' converted to absolute units). + // We also convert any stroke unspecified by both the cell and the + // outer stroke ('None' in the folded stroke) to 'none', that is, + // all sides are present in the resulting Sides object accessible + // by show rules on table cells. + stroke.as_ref().map(|side| { + Some(side.as_ref().map(|cell_stroke| { + Arc::new((**cell_stroke).clone().map(Length::from)) + })) + }), + ); + Cell { + body: self.pack(), + fill, + colspan, + stroke, + stroke_overridden, + } } fn x(&self, styles: StyleChain) -> Smart { diff --git a/tests/ref/layout/grid-colspan.png b/tests/ref/layout/grid-colspan.png index 46577c62cbfd4b3e6a7f7716ce4cb7fe93c6f56e..e16ca347ee1dee74616eaa22b846a18b33de5b6d 100644 GIT binary patch delta 57945 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�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 MSJsA?-LZQ958JCw4gdfE delta 58137 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 }QoV$S8 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 W(p{9=V=j@5b9C<-LCQ63p8p3uSJ#LD diff --git a/tests/ref/layout/grid-positioning.png b/tests/ref/layout/grid-positioning.png index 5d60c8b71bbe87989b3e1414fa3d876451c7bcec..cac93f403883d1638f295a1b3c6994a425f1f1d3 100644 GIT binary patch delta 50368 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 diff --git a/tests/ref/layout/grid-rtl.png b/tests/ref/layout/grid-rtl.png index a1bfad5676a9e909d8b4fdb113a7ffe20250c6e7..f81e992e43c49497708a1c1715e727a3f3e8b6c8 100644 GIT binary patch delta 17323 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 delta 13847 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 f{?BS9=>?IO5bz*0j40MD%~In3H!eQfjHnW diff --git a/tests/ref/layout/grid-stroke.png b/tests/ref/layout/grid-stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..c31519e62c763a2a09d63b25a55ae7e1bd788f92 GIT binary patch literal 48961 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 Qv?|oo)z4*}6H`JH07uA}761SM delta 34904 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 if y != 1 { (bottom: black) }, + columns: 3, + table.cell(colspan: 3, align: center)[*Epic Table*], + align(center)[*Name*], align(center)[*Age*], align(center)[*Data*], + table.hline(stroke: (paint: double-line, thickness: 2pt)), + [John], [30], [None], + [Martha], [20], [A], + [Joseph], [35], [D] +) + +--- +// Test folding +#set grid(stroke: red) +#set grid(stroke: 5pt) + +#grid( + inset: 10pt, + columns: 2, + stroke: stroke(dash: "loosely-dotted"), + grid.vline(start: 2, end: 3, stroke: (paint: green, dash: none)), + [a], [b], + grid.hline(end: 1, stroke: blue), + [c], [d], + [e], grid.cell(stroke: aqua)[f] +) + +--- +// Test set rules on cells and folding +#set table.cell(stroke: 4pt) +#set table.cell(stroke: blue) +#set table.hline(stroke: red) +#set table.hline(stroke: 0.75pt) +#set table.vline(stroke: 0.75pt) +#set table.vline(stroke: aqua) + +#table( + columns: 3, + gutter: 3pt, + inset: 5pt, + [a], [b], table.vline(position: end), [c], + [d], [e], [f], + table.hline(position: bottom), + [g], [h], [i], +) + +--- +// Test stroke field on cell show rules +#set grid.cell(stroke: (x: 4pt)) +#set grid.cell(stroke: (x: blue)) +#show grid.cell: it => { + test(it.stroke, (left: stroke(paint: blue, thickness: 4pt, dash: "loosely-dotted"), right: blue + 4pt, top: stroke(thickness: 1pt), bottom: none)) + it +} +#grid( + stroke: (left: (dash: "loosely-dotted")), + inset: 5pt, + grid.hline(stroke: red), + grid.cell(stroke: (top: 1pt))[a], grid.vline(stroke: yellow), +) + +--- +#table( + columns: 3, + [a], table.cell(colspan: 2)[b c], + table.cell(stroke: blue)[d], [e], [f], + [g], [h], table.cell(stroke: (left: yellow, top: green, right: aqua, bottom: red))[i], + [j], [k], [l], + table.cell(stroke: 3pt)[m], [n], table.cell(stroke: (dash: "loosely-dotted"))[o], +) + +--- +// Test per-column stroke array +#let t = table( + columns: 3, + stroke: (red, blue, green), + [a], [b], [c], + [d], [e], [f], + [h], [i], [j], +) +#t +#set text(dir: rtl) +#t + +--- +#grid( + columns: 3, + inset: 3pt, + stroke: (x, _) => (right: (5pt, (dash: "dotted")).at(calc.rem(x, 2)), bottom: (dash: "densely-dotted")), + grid.vline(x: 0, stroke: red), + grid.vline(x: 1, stroke: red), + grid.vline(x: 2, stroke: red), + grid.vline(x: 3, stroke: red), + grid.hline(y: 0, end: 1, stroke: blue), + grid.hline(y: 1, end: 1, stroke: blue), + grid.cell[a], + [b], [c] +) + +--- +#set page(height: 5em) +#table( + columns: 3, + inset: 3pt, + table.hline(y: 0, end: none, stroke: 3pt + blue), + table.vline(x: 0, end: none, stroke: 3pt + green), + table.hline(y: 5, end: none, stroke: 3pt + red), + table.vline(x: 3, end: none, stroke: 3pt + yellow), + [a], [b], [c], + [a], [b], [c], + [a], [b], [c], + [a], [b], [c], + [a], [b], [c], +) + +--- +// Automatically positioned lines +// Plus stroke thickness ordering +#table( + columns: 3, + table.hline(stroke: red + 5pt), + table.vline(stroke: blue + 5pt), + table.vline(stroke: 2pt), + [a], + table.vline(x: 1, stroke: aqua + 5pt), + [b], + table.vline(stroke: aqua + 5pt), + [c], + table.vline(stroke: yellow + 5.2pt), + table.hline(stroke: green + 5pt), + [a], [b], [c], + [a], table.hline(stroke: green + 2pt), table.vline(stroke: 2pt), [b], [c], +) + +--- +// Line specification order priority +// The last line should be blue, not red. +// The middle line should have disappeared. +#grid( + columns: 2, + inset: 2pt, + grid.hline(y: 2, stroke: red + 5pt), + grid.vline(), + [a], [b], + grid.hline(stroke: red), + grid.hline(stroke: none), + [c], grid.cell(stroke: (top: aqua))[d], + grid.hline(stroke: blue), +) + +--- +// Position: bottom and position: end with gutter should have a visible effect +// of moving the lines after the next track. +#table( + columns: 3, + gutter: 3pt, + stroke: blue, + table.hline(end: 2, stroke: red), + table.hline(end: 2, stroke: aqua, position: bottom), + table.vline(end: 2, stroke: green), [a], table.vline(end: 2, stroke: green), table.vline(end: 2, position: end, stroke: orange), [b], table.vline(end: 2, stroke: aqua, position: end), table.vline(end: 2, stroke: green), [c], table.vline(end: 2, stroke: green), + [d], [e], [f], + table.hline(end: 2, stroke: red), + [g], [h], [ie], + table.hline(end: 2, stroke: green), +) + +--- +// Using position: bottom and position: end without gutter should be the same +// as placing a line after the next track. +#table( + columns: 3, + stroke: blue, + table.hline(end: 2, stroke: red), + table.hline(end: 2, stroke: aqua, position: bottom), + table.vline(end: 2, stroke: green), [a], table.vline(end: 2, stroke: green), [b], table.vline(end: 2, stroke: aqua, position: end), table.vline(end: 2, stroke: green), [c], table.vline(end: 2, stroke: green), + table.hline(end: 2, stroke: 5pt), + [d], [e], [f], + table.hline(end: 2, stroke: red), + [g], [h], [i], + table.hline(end: 2, stroke: red), +) + +--- +// Test left and right for grid vlines. +#grid( + columns: 3, + inset: 5pt, + grid.vline(stroke: green, position: left), grid.vline(stroke: red, position: right), [a], + grid.vline(stroke: 2pt, position: left), grid.vline(stroke: red, position: right), [b], + grid.vline(stroke: 2pt, position: left), grid.vline(stroke: red, position: right), [c], + grid.vline(stroke: 2pt, position: left) +) + +#grid( + columns: 3, + inset: 5pt, + gutter: 3pt, + grid.vline(stroke: green, position: left), grid.vline(stroke: red, position: right), [a], + grid.vline(stroke: blue, position: left), grid.vline(stroke: red, position: right), [b], + grid.vline(stroke: blue, position: left), grid.vline(stroke: red, position: right), [c], + grid.vline(stroke: 2pt, position: left) +) + +--- +// Test left and right for table vlines. +#table( + columns: 3, + inset: 5pt, + table.vline(stroke: green, position: left), table.vline(stroke: red, position: right), [a], + table.vline(stroke: 2pt, position: left), table.vline(stroke: red, position: right), [b], + table.vline(stroke: 2pt, position: left), table.vline(stroke: red, position: right), [c], + table.vline(stroke: 2pt, position: left) +) + +#table( + columns: 3, + inset: 5pt, + gutter: 3pt, + table.vline(stroke: green, position: left), table.vline(stroke: red, position: right), [a], + table.vline(stroke: blue, position: left), table.vline(stroke: red, position: right), [b], + table.vline(stroke: blue, position: left), table.vline(stroke: red, position: right), [c], + table.vline(stroke: 2pt, position: left) +) + +--- +// Hlines and vlines should always appear on top of cell strokes. +#table( + columns: 3, + stroke: aqua, + table.vline(stroke: red, position: end), [a], table.vline(stroke: red), [b], [c], + table.cell(stroke: blue)[d], [e], [f], + table.hline(stroke: red), + [g], table.cell(stroke: blue)[h], [i], +) + +#table( + columns: 3, + gutter: 3pt, + stroke: aqua, + table.vline(stroke: red, position: end), [a], table.vline(stroke: red), [b], [c], + table.cell(stroke: blue)[d], [e], [f], + table.hline(stroke: red), + [g], table.cell(stroke: blue)[h], [i], +) + +--- +// Ensure cell stroke overrides always appear on top. +#table( + columns: 2, + stroke: black, + table.cell(stroke: red)[a], [b], + [c], [d], +) + +#table( + columns: 2, + table.cell(stroke: red)[a], [b], + [c], [d], +) + +--- +// Error: 7:3-7:32 cannot place horizontal line at the 'bottom' position of the bottom border (y = 2) +// Hint: 7:3-7:32 set the line's position to 'top' or place it at a smaller 'y' index +#table( + columns: 2, + [a], [b], + [c], [d], + table.hline(stroke: aqua), + table.hline(position: top), + table.hline(position: bottom) +) + +--- +// 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 +#table( + columns: 2, + gutter: 3pt, + [a], [b], + [c], [d], table.vline(stroke: red), + table.hline(stroke: aqua), + table.hline(position: top), + table.hline(position: bottom) +) + +--- +// Error: 6:3-6:28 cannot place vertical line at the 'end' position of the end border (x = 2) +// Hint: 6:3-6:28 set the line's position to 'start' or place it at a smaller 'x' index +#grid( + columns: 2, + [a], [b], + grid.vline(stroke: aqua), + grid.vline(position: start), + grid.vline(position: end) +) + +--- +// Error: 7:3-7:28 cannot place vertical line at the 'end' position of the end border (x = 2) +// Hint: 7:3-7:28 set the line's position to 'start' or place it at a smaller 'x' index +#grid( + columns: 2, + gutter: 3pt, + [a], [b], + grid.vline(stroke: aqua), + grid.vline(position: start), + grid.vline(position: end) +) + +--- +// Error: 4:3-4:19 cannot place horizontal line at invalid row 3 +#grid( + [a], + [b], + grid.hline(y: 3) +) + +--- +// Error: 5:3-5:19 cannot place horizontal line at invalid row 3 +#grid( + gutter: 3pt, + [a], + [b], + grid.hline(y: 3) +) + +--- +// Error: 4:3-4:20 cannot place vertical line at invalid column 3 +#table( + columns: 2, + [a], [b], + table.vline(x: 3) +) + +--- +// Error: 5:3-5:20 cannot place vertical line at invalid column 3 +#table( + columns: 2, + gutter: 3pt, + [a], [b], + table.vline(x: 3) +) + +--- +// Error: 3:3-3:31 line cannot end before it starts +#grid( + columns: 3, + grid.hline(start: 2, end: 1), + [a], [b], [c], +) + +--- +// Error: 3:3-3:32 line cannot end before it starts +#table( + columns: 3, + table.vline(start: 2, end: 1), + [a], [b], [c], + [d], [e], [f], + [g], [h], [i], +) + +--- +// Error: 24-31 expected `top` or `bottom`, found horizon +#table.hline(position: horizon) + +--- +// Error: 24-30 expected `start`, `left`, `right`, or `end`, found center +#table.vline(position: center) + +--- +// Error: 24-29 expected `top` or `bottom`, found right +#table.hline(position: right) + +--- +// Error: 24-27 expected `start`, `left`, `right`, or `end`, found top +#table.vline(position: top)