From c25c6a35b274f227e46c774f53f1cb424d1f3b91 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 2 Oct 2021 18:59:53 +0200 Subject: [PATCH] Simpler and more versatile row and column gutter arguments --- src/library/layout.rs | 27 ++++++++++++++------------- tests/typ/layout/grid-1.typ | 4 ++-- tests/typ/layout/grid-2.typ | 4 ++-- tests/typ/layout/grid-3.typ | 16 ++++++++-------- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/library/layout.rs b/src/library/layout.rs index 87cedd994..b6204901c 100644 --- a/src/library/layout.rs +++ b/src/library/layout.rs @@ -251,7 +251,12 @@ pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult { /// `grid`: Arrange children into a grid. pub fn grid(_: &mut EvalContext, args: &mut Args) -> TypResult { castable! { - Vec: "array of autos, linears, and fractionals", + Vec: "integer or (auto, linear, fractional, or array thereof)", + Value::Auto => vec![TrackSizing::Auto], + Value::Length(v) => vec![TrackSizing::Linear(v.into())], + Value::Relative(v) => vec![TrackSizing::Linear(v.into())], + Value::Linear(v) => vec![TrackSizing::Linear(v)], + Value::Fractional(v) => vec![TrackSizing::Fractional(v)], Value::Int(count) => vec![TrackSizing::Auto; count.max(0) as usize], Value::Array(values) => values .into_iter() @@ -272,21 +277,17 @@ pub fn grid(_: &mut EvalContext, args: &mut Args) -> TypResult { let rows = args.named("rows")?.unwrap_or_default(); let tracks = Gen::new(columns, rows); + let base_gutter: Vec = args.named("gutter")?.unwrap_or_default(); + let column_gutter = args.named("column-gutter")?; + let row_gutter = args.named("row-gutter")?; + let gutter = Gen::new( + column_gutter.unwrap_or_else(|| base_gutter.clone()), + row_gutter.unwrap_or(base_gutter), + ); + let column_dir = args.named("column-dir")?; let row_dir = args.named("row-dir")?; - let gutter_columns = args.named("gutter-columns")?; - let gutter_rows = args.named("gutter-rows")?; - let gutter_default = args - .named("gutter")? - .map(|v| vec![TrackSizing::Linear(v)]) - .unwrap_or_default(); - - let gutter = Gen::new( - gutter_columns.unwrap_or_else(|| gutter_default.clone()), - gutter_rows.unwrap_or(gutter_default), - ); - let children: Vec