From 4017b5a9f67e06145129d75de452c8a42e2d2f5a Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 11 Jun 2021 14:42:20 +0200 Subject: [PATCH] Push some nodes directly into the stack --- bench/src/bench.rs | 2 +- src/exec/context.rs | 50 +++++++++++++++++++++++-------------- src/exec/mod.rs | 9 ++----- src/layout/fixed.rs | 4 +-- src/layout/mod.rs | 20 +++++++-------- src/layout/par.rs | 4 +-- src/layout/stack.rs | 22 +++++++++++----- src/library/grid.rs | 2 +- src/library/image.rs | 2 +- src/library/pad.rs | 2 +- src/library/shapes.rs | 8 +++--- src/library/stack.rs | 2 +- tests/ref/layout/fixed.png | Bin 1372 -> 1389 bytes tests/ref/layout/pad.png | Bin 1226 -> 44396 bytes tests/typ/layout/fixed.typ | 6 ++--- tests/typ/layout/pad.typ | 16 +++++++++--- 16 files changed, 88 insertions(+), 61 deletions(-) diff --git a/bench/src/bench.rs b/bench/src/bench.rs index d4e297bf3..832d538f2 100644 --- a/bench/src/bench.rs +++ b/bench/src/bench.rs @@ -13,7 +13,7 @@ use typst::typeset; const FONT_DIR: &str = "../fonts"; const TYP_DIR: &str = "../tests/typ"; -const CASES: &[&str] = &["full/coma.typ", "text/basic.typ"]; +const CASES: &[&str] = &["coma.typ", "text/basic.typ"]; fn benchmarks(c: &mut Criterion) { let mut loader = FsLoader::new(); diff --git a/src/exec/context.rs b/src/exec/context.rs index e03a7c677..3994fdb97 100644 --- a/src/exec/context.rs +++ b/src/exec/context.rs @@ -74,17 +74,6 @@ impl ExecContext { mem::replace(&mut self.stack, stack).build() } - /// Push any node into the active paragraph. - pub fn push(&mut self, node: impl Into) { - let align = self.state.aligns.cross; - self.stack.par.push(ParChild::Any(node.into(), align)); - } - - /// Push a word space into the active paragraph. - pub fn push_word_space(&mut self) { - self.stack.par.push_soft(self.make_text_node(" ")); - } - /// Push text into the active paragraph. /// /// The text is split into lines at newlines. @@ -92,11 +81,30 @@ impl ExecContext { self.stack.par.push(self.make_text_node(text)); } - /// Push spacing into paragraph or stack depending on `axis`. + /// Push a word space into the active paragraph. + pub fn push_word_space(&mut self) { + self.stack.par.push_soft(self.make_text_node(" ")); + } + + /// Push any node into the active paragraph. + pub fn push_into_par(&mut self, node: impl Into) { + let align = self.state.aligns.cross; + self.stack.par.push(ParChild::Any(node.into(), align)); + } + + /// Push any node into the active stack. + pub fn push_into_stack(&mut self, node: impl Into) { + self.parbreak(); + let aligns = self.state.aligns; + self.stack.push(StackChild::Any(node.into(), aligns)); + self.parbreak(); + } + + /// Push spacing into the active paragraph or stack depending on the `axis`. pub fn push_spacing(&mut self, axis: GenAxis, amount: Length) { match axis { GenAxis::Main => { - self.stack.parbreak(&self.state); + self.stack.finish_par(&self.state); self.stack.push_hard(StackChild::Spacing(amount)); } GenAxis::Cross => { @@ -113,18 +121,18 @@ impl ExecContext { /// Apply a forced paragraph break. pub fn parbreak(&mut self) { let amount = self.state.par.spacing.resolve(self.state.font.size); - self.stack.parbreak(&self.state); + self.stack.finish_par(&self.state); self.stack.push_soft(StackChild::Spacing(amount)); } /// Apply a forced page break. - pub fn pagebreak(&mut self, keep: bool, hard: bool, source: Span) { + pub fn pagebreak(&mut self, keep: bool, hard: bool, span: Span) { if let Some(builder) = &mut self.page { let page = mem::replace(builder, PageBuilder::new(&self.state, hard)); let stack = mem::replace(&mut self.stack, StackBuilder::new(&self.state)); self.tree.runs.extend(page.build(stack.build(), keep)); } else { - self.diag(error!(source, "cannot modify page from here")); + self.diag(error!(span, "cannot modify page from here")); } } @@ -185,6 +193,11 @@ impl StackBuilder { } } + fn push(&mut self, child: StackChild) { + self.children.extend(self.last.any()); + self.children.push(child); + } + fn push_soft(&mut self, child: StackChild) { self.last.soft(child); } @@ -194,11 +207,10 @@ impl StackBuilder { self.children.push(child); } - fn parbreak(&mut self, state: &State) { + fn finish_par(&mut self, state: &State) { let par = mem::replace(&mut self.par, ParBuilder::new(state)); if let Some(par) = par.build() { - self.children.extend(self.last.any()); - self.children.push(par); + self.push(par); } } diff --git a/src/exec/mod.rs b/src/exec/mod.rs index 8b088f85a..fea6de337 100644 --- a/src/exec/mod.rs +++ b/src/exec/mod.rs @@ -11,7 +11,7 @@ use std::rc::Rc; use crate::diag::Pass; use crate::eval::{ExprMap, TemplateFunc, TemplateNode, TemplateValue, Value}; use crate::geom::{Dir, Gen}; -use crate::layout::{self, FixedNode, StackChild, StackNode}; +use crate::layout::{self, StackChild, StackNode}; use crate::pretty::pretty; use crate::syntax; @@ -127,12 +127,7 @@ fn exec_item(ctx: &mut ExecContext, label: String, body: &syntax::Tree, map: &Ex ], }; - ctx.push(FixedNode { - width: None, - height: None, - child: stack.into(), - }); - + ctx.push_into_stack(stack); ctx.parbreak(); } diff --git a/src/layout/fixed.rs b/src/layout/fixed.rs index 7c28e8e5c..233c27f36 100644 --- a/src/layout/fixed.rs +++ b/src/layout/fixed.rs @@ -19,8 +19,8 @@ impl Layout for FixedNode { self.height.map_or(current.height, |h| h.resolve(base.height)), ); - let fixed = Spec::new(self.width.is_some(), self.height.is_some()); - let regions = Regions::one(size, fixed); + let expand = Spec::new(self.width.is_some(), self.height.is_some()); + let regions = Regions::one(size, expand); self.child.layout(ctx, ®ions) } } diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 9d8549e67..4153fc3cd 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -64,8 +64,8 @@ impl PageRun { // When one of the lengths is infinite the page fits its content along // that axis. let Size { width, height } = self.size; - let fixed = Spec::new(width.is_finite(), height.is_finite()); - let regions = Regions::repeat(self.size, fixed); + let expand = Spec::new(width.is_finite(), height.is_finite()); + let regions = Regions::repeat(self.size, expand); self.child.layout(ctx, ®ions) } } @@ -214,34 +214,34 @@ pub struct Regions { pub backlog: Vec, /// The final region that is repeated once the backlog is drained. pub last: Option, - /// Whether layouting into these regions should produce frames of the exact - /// size of `current` instead of shrinking to fit the content. + /// Whether nodes should expand to fill the regions instead of shrinking to + /// fit the content. /// /// This property is only handled by nodes that have the ability to control /// their own size. - pub fixed: Spec, + pub expand: Spec, } impl Regions { /// Create a new region sequence with exactly one region. - pub fn one(size: Size, fixed: Spec) -> Self { + pub fn one(size: Size, expand: Spec) -> Self { Self { current: size, base: size, backlog: vec![], last: None, - fixed, + expand, } } /// Create a new sequence of same-size regions that repeats indefinitely. - pub fn repeat(size: Size, fixed: Spec) -> Self { + pub fn repeat(size: Size, expand: Spec) -> Self { Self { current: size, base: size, backlog: vec![], last: Some(size), - fixed, + expand, } } @@ -255,7 +255,7 @@ impl Regions { base: f(self.base), backlog: self.backlog.iter().copied().map(|s| f(s)).collect(), last: self.last.map(f), - fixed: self.fixed, + expand: self.expand, } } diff --git a/src/layout/par.rs b/src/layout/par.rs index d51bad3eb..241854581 100644 --- a/src/layout/par.rs +++ b/src/layout/par.rs @@ -92,7 +92,7 @@ impl Debug for ParChild { fn fmt(&self, f: &mut Formatter) -> fmt::Result { match self { Self::Spacing(amount) => write!(f, "Spacing({:?})", amount), - Self::Text(text, _, align) => write!(f, "Text({:?}, {:?})", text, align), + Self::Text(text, align, _) => write!(f, "Text({:?}, {:?})", text, align), Self::Any(any, align) => { f.debug_tuple("Any").field(any).field(align).finish() } @@ -304,7 +304,7 @@ impl<'a> LineStack<'a> { } fn finish_region(&mut self, ctx: &LayoutContext) { - if self.regions.fixed.horizontal { + if self.regions.expand.horizontal { self.size.width = self.regions.current.width; } diff --git a/src/layout/stack.rs b/src/layout/stack.rs index e4c0708d5..7049f60cc 100644 --- a/src/layout/stack.rs +++ b/src/layout/stack.rs @@ -44,6 +44,8 @@ struct StackLayouter<'a> { stack: &'a StackNode, /// The axis of the main direction. main: SpecAxis, + /// Whether the stack should expand to fill the region. + expand: Spec, /// The region to layout into. regions: Regions, /// Offset, alignment and frame for all children that fit into the current @@ -62,19 +64,27 @@ struct StackLayouter<'a> { impl<'a> StackLayouter<'a> { fn new(stack: &'a StackNode, mut regions: Regions) -> Self { + let main = stack.dirs.main.axis(); + let full = regions.current; + let expand = regions.expand; + + // Disable expansion on the main axis for children. + *regions.expand.get_mut(main) = false; + if let Some(aspect) = stack.aspect { regions.apply_aspect_ratio(aspect); } Self { stack, - main: stack.dirs.main.axis(), + main, + expand, + regions, finished: vec![], frames: vec![], - full: regions.current, + full, used: Gen::zero(), ruler: Align::Start, - regions, } } @@ -138,13 +148,13 @@ impl<'a> StackLayouter<'a> { fn finish_region(&mut self) { let used = self.used.to_size(self.main); - let fixed = self.regions.fixed; + let expand = self.expand; // Determine the stack's size dependening on whether the region is // fixed. let mut stack_size = Size::new( - if fixed.horizontal { self.full.width } else { used.width }, - if fixed.vertical { self.full.height } else { used.height }, + if expand.horizontal { self.full.width } else { used.width }, + if expand.vertical { self.full.height } else { used.height }, ); // Make sure the stack's size satisfies the aspect ratio. diff --git a/src/library/grid.rs b/src/library/grid.rs index cfe46bf46..79070e796 100644 --- a/src/library/grid.rs +++ b/src/library/grid.rs @@ -47,7 +47,7 @@ pub fn grid(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value { .map(|child| ctx.exec_template_stack(child).into()) .collect(); - ctx.push(GridNode { + ctx.push_into_stack(GridNode { column_dir: column_dir.unwrap_or(ctx.state.lang.dir), children, tracks: Gen::new(columns.clone(), rows.clone()), diff --git a/src/library/image.rs b/src/library/image.rs index 7fabfe357..e926b9557 100644 --- a/src/library/image.rs +++ b/src/library/image.rs @@ -33,7 +33,7 @@ pub fn image(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value { Value::template("image", move |ctx| { if let Some(node) = node { - ctx.push(node); + ctx.push_into_par(node); } }) } diff --git a/src/library/pad.rs b/src/library/pad.rs index 6b944c9c8..5fa565674 100644 --- a/src/library/pad.rs +++ b/src/library/pad.rs @@ -32,6 +32,6 @@ pub fn pad(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value { Value::template("pad", move |ctx| { let child = ctx.exec_template_stack(&body).into(); - ctx.push(PadNode { padding, child }); + ctx.push_into_stack(PadNode { padding, child }); }) } diff --git a/src/library/shapes.rs b/src/library/shapes.rs index 287b1c107..3c6f801d1 100644 --- a/src/library/shapes.rs +++ b/src/library/shapes.rs @@ -67,13 +67,13 @@ fn rect_impl( let fixed = FixedNode { width, height, child: stack.into() }; if let Some(color) = fill { - ctx.push(BackgroundNode { + ctx.push_into_par(BackgroundNode { shape: BackgroundShape::Rect, fill: Fill::Color(color), child: fixed.into(), }); } else { - ctx.push(fixed); + ctx.push_into_par(fixed); } }) } @@ -151,13 +151,13 @@ fn ellipse_impl( }; if let Some(color) = fill { - ctx.push(BackgroundNode { + ctx.push_into_par(BackgroundNode { shape: BackgroundShape::Ellipse, fill: Fill::Color(color), child: fixed.into(), }); } else { - ctx.push(fixed); + ctx.push_into_par(fixed); } }) } diff --git a/src/library/stack.rs b/src/library/stack.rs index 03bdc6a1d..672cfbeff 100644 --- a/src/library/stack.rs +++ b/src/library/stack.rs @@ -31,7 +31,7 @@ pub fn stack(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value { }) .collect(); - ctx.push(StackNode { + ctx.push_into_stack(StackNode { dirs: Gen::new(ctx.state.lang.dir, dir), aspect: None, children, diff --git a/tests/ref/layout/fixed.png b/tests/ref/layout/fixed.png index e07e15e8cd610f79e1cb273f9c3326126c30d65a..5ee9c4ff46389f8e64bdc97822dd64ceb2ad510c 100644 GIT binary patch literal 1389 zcmeAS@N?(olHy`uVBq!ia0y~yU}OQZk8%JBhUp6~7c(%hns~Z6hE&{od-rYN8Uqow z2bUR37-Tods>mj=UtqlL_=3SY!TJE76T4=kP|%_3`j#^m=B``6RG9n5FWT{f*guhUxm*Js&kWrn2@N&<`@GRwXi zGVb%cb5wAO-{!f`Uw?B8Xv%yp_)sC)Y2q)Ss<60oZ4CKlZVt+KBL!0Ctwryx`lDR$Lsz+28&RsV&78JD%Z`%rQ90n zLBnG##TN}1*7r9k?Y&ZXsOF}>{AJgNR@T$!#6Dcj!CS%a2q4H0zz?t;B2falFYvN=!u1l3}*>gaM zDdEUjzkKu36SwB+3dF?vcyoMMzmQ#GrPjpcWx3atI%f9F%n$!1=#;+e!+GyjK00?d(FD4`qi#^`47$S#;Vj;Fzj9O{rJJMDXRt4 zve#}kZt6|U{n5jH`q?}a0ju%p*W5Yz1MaIg}!BwSi5!IytyF^Qfogund*x< zguk*0etP=xO5KH%xg6AG8$36~PC6IH#Sr#tL(vJAFW%bD|M(8g>0WcBcFKg>udgnoaP0>`^}l8 zW+t^>cso1WG`H!3I`cQTg3SI6OLk5BGn@1NR*s})n^vj4=?Mr;m0+E6Al%4C`r-ey zo#EvUE(}-9-!pwv7o78AuV6z~I?IgrvPSD%EB>=R+E!U4SiWYqQ;a1`KvBII)3T^X zbC(-jRqEd$bRsz4??v>)>p#w}ZV`2^QQTV1*JON5Lip7+b>YJ^(&xEXCi}$vw9S#` uKM;O0yj|m*I_^-rA=P*gQp$aF{KITrR`_UMn2-pl9QAbdb6Mw<&;$UhQB8vY literal 1372 zcmeAS@N?(olHy`uVBq!ia0y~yU}OQZcX0p-hTJPT=?o04%APKcAr-gY-tEp^Z6Lz- zU^8P5gY*Hm3g%6WIS%Fq(ieD7u)Sp4(CGewL+)YB&0|4PrlG|PZ4T8h3DcO^P_wb~ z<70;w2L%BR7N$mrKSn=N7+Dk;7&#mmm;@RaP?-+{4YarNG_4d`wB(Ze?>~1^U6!tS zbWJBvh)t_6l26I#OxF=3j!!cvUSy+DdnyvT0ID5s~GM3xlO@SUi zqvm(6&Nm_0{nZnW){e=&zh7^2)9CnmEWBlIjPRx#b7T*``&nedVpf#MlDEQ|i^=!z zRp0$rF3v2j-_Y~RSz*SkOZ|m1$E#MFt!w_8dcft%ti8$xs~1fP64RSzWf9&wCG};w z|CBef50^3{hq1T9jBBntauc4F|36i+Y|;X$t|ztP6W(=Hm7WeN6>Iq&{ZhcEZdFE& z7RyiBL;kBZ&$SrLkvjNQXUWBbYBl=33GLU--%8$gF5R)O`^Af?iF!^(C4n_xP8on;D}8aMw4dE1hC(_g-=`;V2isBG-R?Hup68+@1e_@#Qm$?c-~ zB?Ybbl{Scdn;X;dVc*KfD&6;EE-DDQ@3YanJbyv^!;G7%)7&hoa3m36!nwhfSn`lv z`D(`hYjQKT9N)6=@HdOTtWcKAE+VC|lW(y~$2v|i&E|J7DCZ2kZhmsMZTqEV>UoQ9 zt!X`wcV}r~a)91;>D1XGY4aC^eW3O3dY^AuTjcE7s7%3_+@7bC8Cwj!HF@2<+OrkIp6%5vp}i|N_)giL`+M3ttJim9STCkV)qO5hJY|1ltK{Wx$)YT8izNIxoI4UD zKG#)Qy}O?KZuX{V)`y`?$cdu9H9<=8(xMevw~MBkEiDwavdBFg+F_$9Rk&5QVd{y+ zi$t!+>dl=UDP*<1V^4AIoLQ63%W@uj>-jTKaC)q->(AASEqJ@m!f zhiTKjpHFjqu}{AI14rH786_Oi%UAyMZn=G)qlAlPzrz>7LtEOeD0O7?XD^-RD3JHy zF{9J_78xhmx1SP|x)r|s+g#h9@adHJv`szbvx<}Tm^@>{E?-`@-+4ml%X*}Jd~mwb8_kgRwD~jLuelm{?mDjac)mhNzkpqD@E)#1&)wIz=Sn7YeF!-EAtyUK zaKBX3I!&F0+i#bA)$Cn9eVt39lw|#plET}noqJWaX16a`!dw6Kx>3uNDlGxCJx=0r w>B^JWn@72?=UXp`t(1b4UDI4)Wm-*d{og0rU03FK)q;vmPgg&ebxsLQ01H%G%m4rY diff --git a/tests/ref/layout/pad.png b/tests/ref/layout/pad.png index 0bf0adde764de54f4c48e7cb0eb7191e85264df6..645c8db47bcf80e6136ed47daa0076dfa5fcc803 100644 GIT binary patch literal 44396 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 I&MBb@05ky!Z~y=R diff --git a/tests/typ/layout/fixed.typ b/tests/typ/layout/fixed.typ index bcb88fe1a..51646eaa4 100644 --- a/tests/typ/layout/fixed.typ +++ b/tests/typ/layout/fixed.typ @@ -1,14 +1,14 @@ -// Test shrink-to-fit vs fixed. +// Test shrink-to-fit vs expand. --- #let right(body) = align(right, body) #let pad(body) = pad(left: 10pt, right: 10pt, body) -// Top-level paragraph fills page, boxed paragraph only when width is fixed. +// Top-level paragraph fills page, boxed paragraph only when the width is set. L #right[R] \ #rect(width: 50pt)[L #right[R]] \ #rect[L #right[R]] // Pad inherits expansion behaviour. -#pad[PL #right[PR]] \ #rect(pad[PL #right[PR]]) +#pad[PL #right[PR]] diff --git a/tests/typ/layout/pad.typ b/tests/typ/layout/pad.typ index 3726ce53d..8c23549a8 100644 --- a/tests/typ/layout/pad.typ +++ b/tests/typ/layout/pad.typ @@ -5,9 +5,19 @@ #pad(left: 10pt, [Indented!]) // All sides together. -#rect(fill: conifer, - pad(10pt, right: 20pt, - rect(width: 20pt, height: 20pt, fill: #eb5278))) +#rect(fill: conifer)[ + #pad(10pt, right: 20pt)[ + #rect(width: 20pt, height: 20pt, fill: #eb5278) + ] +] // Error: 14-24 missing argument: body Hi #rect(pad(left: 10pt)) there + +--- +// Test that the pad node doesn't consume the whole region. + +#page(width: 4cm, height: 5cm) +#align(left)[Before] +#pad(10pt, image("../../res/tiger.jpg")) +#align(right)[After]