From 0e0f340502beada1cd9ee23857f48b91a0d11a90 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 16 Nov 2021 10:41:30 +0100 Subject: [PATCH] Revert page and inline levels --- benches/oneshot.rs | 2 +- src/eval/template.rs | 27 ++--- src/eval/walk.rs | 2 +- src/export/pdf.rs | 4 +- src/layout/constraints.rs | 14 ++- src/layout/levels.rs | 199 ----------------------------------- src/layout/mod.rs | 109 +++++++++++++++++-- src/lib.rs | 13 +-- src/library/container.rs | 3 +- src/library/document.rs | 16 +++ src/library/flow.rs | 10 +- src/library/grid.rs | 8 +- src/library/image.rs | 23 ++-- src/library/mod.rs | 2 + src/library/pad.rs | 6 +- src/library/page.rs | 20 ++++ src/library/par.rs | 17 +-- src/library/shape.rs | 44 ++++++-- src/library/stack.rs | 8 +- src/library/transform.rs | 40 +++---- src/main.rs | 4 +- src/source.rs | 2 +- tests/ref/layout/pad.png | Bin 52232 -> 52010 bytes tests/typ/layout/pad.typ | 14 +-- tests/typ/layout/stack-2.typ | 2 +- tests/typeset.rs | 12 +-- 26 files changed, 288 insertions(+), 313 deletions(-) delete mode 100644 src/layout/levels.rs create mode 100644 src/library/document.rs diff --git a/benches/oneshot.rs b/benches/oneshot.rs index bb385688f..6bfb923b4 100644 --- a/benches/oneshot.rs +++ b/benches/oneshot.rs @@ -60,7 +60,7 @@ fn bench_eval(iai: &mut Iai) { fn bench_to_tree(iai: &mut Iai) { let (mut ctx, id) = context(); let module = ctx.evaluate(id).unwrap(); - iai.run(|| module.template.to_pages(ctx.style())); + iai.run(|| module.template.to_document(ctx.style())); } fn bench_layout(iai: &mut Iai) { diff --git a/src/eval/template.rs b/src/eval/template.rs index 8fec398de..82a069f93 100644 --- a/src/eval/template.rs +++ b/src/eval/template.rs @@ -7,9 +7,10 @@ use std::rc::Rc; use crate::diag::StrResult; use crate::geom::{Align, Dir, GenAxis, Length, Linear, Sides, Size}; -use crate::layout::{BlockLevel, BlockNode, InlineLevel, InlineNode, PageNode}; +use crate::layout::{Layout, PackedNode}; use crate::library::{ - Decoration, FlowChild, FlowNode, PadNode, ParChild, ParNode, Spacing, + Decoration, DocumentNode, FlowChild, FlowNode, PadNode, PageNode, ParChild, ParNode, + Spacing, }; use crate::style::Style; use crate::util::EcoString; @@ -36,9 +37,9 @@ enum TemplateNode { /// A decorated template. Decorated(Decoration, Template), /// An inline node builder. - Inline(Rc InlineNode>), - /// An block node builder. - Block(Rc BlockNode>), + Inline(Rc PackedNode>), + /// A block node builder. + Block(Rc PackedNode>), /// Save the current style. Save, /// Restore the last saved style. @@ -57,7 +58,7 @@ impl Template { pub fn from_inline(f: F) -> Self where F: Fn(&Style) -> T + 'static, - T: InlineLevel + Hash + 'static, + T: Layout + Hash + 'static, { let node = TemplateNode::Inline(Rc::new(move |s| f(s).pack())); Self(Rc::new(vec![node])) @@ -67,7 +68,7 @@ impl Template { pub fn from_block(f: F) -> Self where F: Fn(&Style) -> T + 'static, - T: BlockLevel + Hash + 'static, + T: Layout + Hash + 'static, { let node = TemplateNode::Block(Rc::new(move |s| f(s).pack())); Self(Rc::new(vec![node])) @@ -158,10 +159,10 @@ impl Template { /// Build the layout tree resulting from instantiating the template with the /// given style. - pub fn to_pages(&self, style: &Style) -> Vec { + pub fn to_document(&self, style: &Style) -> DocumentNode { let mut builder = Builder::new(style, true); builder.template(self); - builder.build_pages() + builder.build_document() } /// Repeat this template `n` times. @@ -327,13 +328,13 @@ impl Builder { } /// Push an inline node into the active paragraph. - fn inline(&mut self, node: impl Into) { + fn inline(&mut self, node: impl Into) { let align = self.style.aligns.inline; self.flow.par.push(ParChild::Node(node.into(), align)); } /// Push a block node into the active flow, finishing the active paragraph. - fn block(&mut self, node: impl Into) { + fn block(&mut self, node: impl Into) { self.parbreak(); self.flow.push(FlowChild::Node(node.into(), self.style.aligns.block)); self.parbreak(); @@ -359,10 +360,10 @@ impl Builder { } /// Finish building and return the created layout tree. - fn build_pages(mut self) -> Vec { + fn build_document(mut self) -> DocumentNode { assert!(self.page.is_some()); self.pagebreak(true, false); - self.finished + DocumentNode { pages: self.finished } } /// Construct a text node with the given text and settings from the current diff --git a/src/eval/walk.rs b/src/eval/walk.rs index 7b3fb7a4d..134f10c70 100644 --- a/src/eval/walk.rs +++ b/src/eval/walk.rs @@ -3,7 +3,7 @@ use std::rc::Rc; use super::{Eval, EvalContext, Template, Value}; use crate::diag::TypResult; use crate::geom::Spec; -use crate::layout::BlockLevel; +use crate::layout::Layout; use crate::library::{GridNode, ParChild, ParNode, TrackSizing}; use crate::syntax::ast::*; use crate::util::{BoolExt, EcoString}; diff --git a/src/export/pdf.rs b/src/export/pdf.rs index d517aadfc..24944246d 100644 --- a/src/export/pdf.rs +++ b/src/export/pdf.rs @@ -19,13 +19,13 @@ use crate::geom::{self, Color, Em, Length, Paint, Size}; use crate::image::{Image, ImageId, ImageStore}; use crate::Context; -/// Export a collection of frames into a PDF document. +/// Export a collection of frames into a PDF file. /// /// This creates one page per frame. In addition to the frames, you need to pass /// in the context used during compilation such that things like fonts and /// images can be included in the PDF. /// -/// Returns the raw bytes making up the PDF document. +/// Returns the raw bytes making up the PDF file. pub fn pdf(ctx: &Context, frames: &[Rc]) -> Vec { PdfExporter::new(ctx, frames).write() } diff --git a/src/layout/constraints.rs b/src/layout/constraints.rs index fdcda276d..36cfa582c 100644 --- a/src/layout/constraints.rs +++ b/src/layout/constraints.rs @@ -1,7 +1,7 @@ use std::rc::Rc; use crate::frame::Frame; -use crate::geom::{Length, Size, Spec}; +use crate::geom::{Length, Linear, Size, Spec}; /// Constrain a frame with constraints. pub trait Constrain { @@ -68,6 +68,18 @@ impl Constraints { && verify(self.exact, current, Length::approx_eq) && verify(self.base, base, Length::approx_eq) } + + /// Set the appropriate base constraints for linear width and height sizing. + pub fn set_base_if_linear(&mut self, base: Size, sizing: Spec>) { + // The full sizes need to be equal if there is a relative component in + // the sizes. + if sizing.x.map_or(false, |l| l.is_relative()) { + self.base.x = Some(base.w); + } + if sizing.y.map_or(false, |l| l.is_relative()) { + self.base.y = Some(base.h); + } + } } /// Verify a single constraint. diff --git a/src/layout/levels.rs b/src/layout/levels.rs deleted file mode 100644 index a6b8d0503..000000000 --- a/src/layout/levels.rs +++ /dev/null @@ -1,199 +0,0 @@ -use std::fmt::{self, Debug, Formatter}; -use std::hash::{Hash, Hasher}; -use std::rc::Rc; - -use super::*; -use crate::geom::{Length, Size}; - -/// Page-level nodes directly produce frames representing pages. -/// -/// Such nodes create their own regions instead of being supplied with them from -/// some parent. -pub trait PageLevel: Debug { - /// Layout the node, producing one frame per page. - fn layout(&self, ctx: &mut LayoutContext) -> Vec>; -} - -/// Layouts its children onto one or multiple pages. -#[derive(Debug)] -pub struct PageNode { - /// The size of the page. - pub size: Size, - /// The node that produces the actual pages. - pub child: BlockNode, -} - -impl PageLevel for PageNode { - fn layout(&self, ctx: &mut LayoutContext) -> Vec> { - // When one of the lengths is infinite the page fits its content along - // that axis. - let expand = self.size.to_spec().map(Length::is_finite); - let regions = Regions::repeat(self.size, self.size, expand); - self.child.layout(ctx, ®ions).into_iter().map(|c| c.item).collect() - } -} - -impl PageLevel for T -where - T: AsRef<[PageNode]> + Debug + ?Sized, -{ - fn layout(&self, ctx: &mut LayoutContext) -> Vec> { - self.as_ref().iter().flat_map(|node| node.layout(ctx)).collect() - } -} - -/// Block-level nodes can be layouted into a sequence of regions. -/// -/// They return one frame per used region alongside constraints that define -/// whether the result is reusable in other regions. -pub trait BlockLevel: Debug { - /// Layout the node into the given regions, producing constrained frames. - fn layout( - &self, - ctx: &mut LayoutContext, - regions: &Regions, - ) -> Vec>>; - - /// Convert to a packed block-level node. - fn pack(self) -> BlockNode - where - Self: Sized + Hash + 'static, - { - BlockNode { - #[cfg(feature = "layout-cache")] - hash: hash_node(&self), - node: Rc::new(self), - } - } -} - -/// A packed [block-level](BlockLevel) layouting node with precomputed hash. -#[derive(Clone)] -pub struct BlockNode { - node: Rc, - #[cfg(feature = "layout-cache")] - hash: u64, -} - -impl BlockLevel for BlockNode { - fn layout( - &self, - ctx: &mut LayoutContext, - regions: &Regions, - ) -> Vec>> { - #[cfg(not(feature = "layout-cache"))] - return self.node.layout(ctx, regions); - - #[cfg(feature = "layout-cache")] - ctx.layouts.get(self.hash, regions).unwrap_or_else(|| { - ctx.level += 1; - let frames = self.node.layout(ctx, regions); - ctx.level -= 1; - - let entry = FramesEntry::new(frames.clone(), ctx.level); - - #[cfg(debug_assertions)] - if !entry.check(regions) { - eprintln!("node: {:#?}", self.node); - eprintln!("regions: {:#?}", regions); - eprintln!( - "constraints: {:#?}", - frames.iter().map(|c| c.cts).collect::>() - ); - panic!("constraints did not match regions they were created for"); - } - - ctx.layouts.insert(self.hash, entry); - frames - }) - } - - fn pack(self) -> BlockNode - where - Self: Sized + Hash + 'static, - { - self - } -} - -impl Hash for BlockNode { - fn hash(&self, _state: &mut H) { - #[cfg(feature = "layout-cache")] - _state.write_u64(self.hash); - #[cfg(not(feature = "layout-cache"))] - unimplemented!() - } -} - -impl Debug for BlockNode { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - self.node.fmt(f) - } -} - -/// Inline-level nodes are layouted as part of paragraph layout. -/// -/// They only know the width and not the height of the paragraph's region and -/// return only a single frame. -pub trait InlineLevel: Debug { - /// Layout the node into a frame. - fn layout(&self, ctx: &mut LayoutContext, space: Length, base: Size) -> Frame; - - /// Convert to a packed inline-level node. - fn pack(self) -> InlineNode - where - Self: Sized + Hash + 'static, - { - InlineNode { - #[cfg(feature = "layout-cache")] - hash: hash_node(&self), - node: Rc::new(self), - } - } -} - -/// A packed [inline-level](InlineLevel) layouting node with precomputed hash. -#[derive(Clone)] -pub struct InlineNode { - node: Rc, - #[cfg(feature = "layout-cache")] - hash: u64, -} - -impl InlineLevel for InlineNode { - fn layout(&self, ctx: &mut LayoutContext, space: Length, base: Size) -> Frame { - self.node.layout(ctx, space, base) - } - - fn pack(self) -> InlineNode - where - Self: Sized + Hash + 'static, - { - self - } -} - -impl Hash for InlineNode { - fn hash(&self, _state: &mut H) { - #[cfg(feature = "layout-cache")] - _state.write_u64(self.hash); - #[cfg(not(feature = "layout-cache"))] - unimplemented!() - } -} - -impl Debug for InlineNode { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - self.node.fmt(f) - } -} - -/// Hash a node alongside its type id. -#[cfg(feature = "layout-cache")] -fn hash_node(node: &(impl Hash + 'static)) -> u64 { - use std::any::Any; - let mut state = fxhash::FxHasher64::default(); - node.type_id().hash(&mut state); - node.hash(&mut state); - state.finish() -} diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 49ceccf63..7d2837de2 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -1,29 +1,27 @@ -//! Layouting. +//! Layouting infrastructure. mod constraints; #[cfg(feature = "layout-cache")] mod incremental; -mod levels; mod regions; pub use constraints::*; #[cfg(feature = "layout-cache")] pub use incremental::*; -pub use levels::*; pub use regions::*; +use std::fmt::{self, Debug, Formatter}; +use std::hash::{Hash, Hasher}; use std::rc::Rc; use crate::font::FontStore; use crate::frame::Frame; use crate::image::ImageStore; +use crate::library::DocumentNode; use crate::Context; -/// Layout a page-level node into a collection of frames. -pub fn layout(ctx: &mut Context, node: &T) -> Vec> -where - T: PageLevel + ?Sized, -{ +/// Layout a document node into a collection of frames. +pub fn layout(ctx: &mut Context, node: &DocumentNode) -> Vec> { let mut ctx = LayoutContext::new(ctx); node.layout(&mut ctx) } @@ -55,3 +53,98 @@ impl<'a> LayoutContext<'a> { } } } + +/// A node that can be layouted into a sequence of regions. +/// +/// Layout return one frame per used region alongside constraints that define +/// whether the result is reusable in other regions. +pub trait Layout: Debug { + /// Layout the node into the given regions, producing constrained frames. + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + ) -> Vec>>; + + /// Convert to a packed node. + fn pack(self) -> PackedNode + where + Self: Sized + Hash + 'static, + { + PackedNode { + #[cfg(feature = "layout-cache")] + hash: { + use std::any::Any; + let mut state = fxhash::FxHasher64::default(); + self.type_id().hash(&mut state); + self.hash(&mut state); + state.finish() + }, + node: Rc::new(self), + } + } +} + +/// A packed layouting node with precomputed hash. +#[derive(Clone)] +pub struct PackedNode { + node: Rc, + #[cfg(feature = "layout-cache")] + hash: u64, +} + +impl Layout for PackedNode { + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + ) -> Vec>> { + #[cfg(not(feature = "layout-cache"))] + return self.node.layout(ctx, regions); + + #[cfg(feature = "layout-cache")] + ctx.layouts.get(self.hash, regions).unwrap_or_else(|| { + ctx.level += 1; + let frames = self.node.layout(ctx, regions); + ctx.level -= 1; + + let entry = FramesEntry::new(frames.clone(), ctx.level); + + #[cfg(debug_assertions)] + if !entry.check(regions) { + eprintln!("node: {:#?}", self.node); + eprintln!("regions: {:#?}", regions); + eprintln!( + "constraints: {:#?}", + frames.iter().map(|c| c.cts).collect::>() + ); + panic!("constraints did not match regions they were created for"); + } + + ctx.layouts.insert(self.hash, entry); + frames + }) + } + + fn pack(self) -> PackedNode + where + Self: Sized + Hash + 'static, + { + self + } +} + +impl Hash for PackedNode { + fn hash(&self, _state: &mut H) { + #[cfg(feature = "layout-cache")] + _state.write_u64(self.hash); + #[cfg(not(feature = "layout-cache"))] + unimplemented!() + } +} + +impl Debug for PackedNode { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + self.node.fmt(f) + } +} diff --git a/src/lib.rs b/src/lib.rs index 895430a25..b05a57b37 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,9 +9,9 @@ //! [module], consisting of a scope of values that were exported by the code //! and a template with the contents of the module. This template can be //! instantiated with a style to produce a layout tree, a high-level, fully -//! styled representation of the document. The nodes of this tree are -//! self-contained and order-independent and thus much better suited for -//! layouting than the raw markup. +//! styled representation, rooted in the [document node]. The nodes of this +//! tree are self-contained and order-independent and thus much better suited +//! for layouting than the raw markup. //! - **Layouting:** Next, the tree is [layouted] into a portable version of the //! typeset document. The output of this is a collection of [`Frame`]s (one //! per page), ready for exporting. @@ -24,6 +24,7 @@ //! [evaluate]: eval::eval //! [module]: eval::Module //! [layout tree]: layout::LayoutTree +//! [document node]: library::DocumentNode //! [layouted]: layout::layout //! [PDF]: export::pdf @@ -53,9 +54,9 @@ use crate::eval::{Module, Scope}; use crate::font::FontStore; use crate::frame::Frame; use crate::image::ImageStore; -use crate::layout::PageNode; #[cfg(feature = "layout-cache")] use crate::layout::{EvictionPolicy, LayoutCache}; +use crate::library::DocumentNode; use crate::loading::Loader; use crate::source::{SourceId, SourceStore}; use crate::style::Style; @@ -107,9 +108,9 @@ impl Context { } /// Execute a source file and produce the resulting page nodes. - pub fn execute(&mut self, id: SourceId) -> TypResult> { + pub fn execute(&mut self, id: SourceId) -> TypResult { let module = self.evaluate(id)?; - Ok(module.template.to_pages(&self.style)) + Ok(module.template.to_document(&self.style)) } /// Typeset a source file into a collection of layouted frames. diff --git a/src/library/container.rs b/src/library/container.rs index 4b52139fb..2bcbbd192 100644 --- a/src/library/container.rs +++ b/src/library/container.rs @@ -5,14 +5,13 @@ use super::{ShapeKind, ShapeNode}; pub fn box_(_: &mut EvalContext, args: &mut Args) -> TypResult { let width = args.named("width")?; let height = args.named("height")?; - let fill = args.named("fill")?; let body: Template = args.find().unwrap_or_default(); Ok(Value::Template(Template::from_inline(move |style| { ShapeNode { shape: ShapeKind::Rect, width, height, - fill: fill.map(Paint::Color), + fill: None, child: Some(body.to_flow(style).pack()), } }))) diff --git a/src/library/document.rs b/src/library/document.rs new file mode 100644 index 000000000..fe01d2df2 --- /dev/null +++ b/src/library/document.rs @@ -0,0 +1,16 @@ +use super::prelude::*; +use super::PageNode; + +/// The root layout node, a document consisting of top-level page runs. +#[derive(Debug, Hash)] +pub struct DocumentNode { + /// The page runs. + pub pages: Vec, +} + +impl DocumentNode { + /// Layout the document into a sequence of frames, one per page. + pub fn layout(&self, ctx: &mut LayoutContext) -> Vec> { + self.pages.iter().flat_map(|node| node.layout(ctx)).collect() + } +} diff --git a/src/library/flow.rs b/src/library/flow.rs index cc53d5207..c41fb62c6 100644 --- a/src/library/flow.rs +++ b/src/library/flow.rs @@ -48,7 +48,7 @@ pub struct FlowNode { pub children: Vec, } -impl BlockLevel for FlowNode { +impl Layout for FlowNode { fn layout( &self, ctx: &mut LayoutContext, @@ -63,8 +63,8 @@ impl BlockLevel for FlowNode { pub enum FlowChild { /// Vertical spacing between other children. Spacing(Spacing), - /// Any block node and how to align it in the flow. - Node(BlockNode, Align), + /// A node and how to align it in the flow. + Node(PackedNode, Align), } impl Debug for FlowChild { @@ -157,8 +157,8 @@ impl<'a> FlowLayouter<'a> { self.items.push(FlowItem::Absolute(resolved)); } - /// Layout a block node. - fn layout_node(&mut self, ctx: &mut LayoutContext, node: &BlockNode, align: Align) { + /// Layout a node. + fn layout_node(&mut self, ctx: &mut LayoutContext, node: &PackedNode, align: Align) { let frames = node.layout(ctx, &self.regions); let len = frames.len(); for (i, frame) in frames.into_iter().enumerate() { diff --git a/src/library/grid.rs b/src/library/grid.rs index bafd639ca..692ed210f 100644 --- a/src/library/grid.rs +++ b/src/library/grid.rs @@ -58,7 +58,7 @@ pub struct GridNode { /// Defines sizing of gutter rows and columns between content. pub gutter: Spec>, /// The nodes to be arranged in a grid. - pub children: Vec, + pub children: Vec, } /// Defines how to size a grid cell along an axis. @@ -72,7 +72,7 @@ pub enum TrackSizing { Fractional(Fractional), } -impl BlockLevel for GridNode { +impl Layout for GridNode { fn layout( &self, ctx: &mut LayoutContext, @@ -92,7 +92,7 @@ impl BlockLevel for GridNode { /// Performs grid layout. struct GridLayouter<'a> { /// The children of the grid. - children: &'a [BlockNode], + children: &'a [PackedNode], /// Whether the grid should expand to fill the region. expand: Spec, /// The column tracks including gutter tracks. @@ -591,7 +591,7 @@ impl<'a> GridLayouter<'a> { /// /// Returns `None` if it's a gutter cell. #[track_caller] - fn cell(&self, x: usize, y: usize) -> Option<&'a BlockNode> { + fn cell(&self, x: usize, y: usize) -> Option<&'a PackedNode> { assert!(x < self.cols.len()); assert!(y < self.rows.len()); diff --git a/src/library/image.rs b/src/library/image.rs index b51e4e70a..f93d4b548 100644 --- a/src/library/image.rs +++ b/src/library/image.rs @@ -36,23 +36,31 @@ pub struct ImageNode { pub height: Option, } -impl InlineLevel for ImageNode { - fn layout(&self, ctx: &mut LayoutContext, space: Length, base: Size) -> Frame { +impl Layout for ImageNode { + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + ) -> Vec>> { let img = ctx.images.get(self.id); let pixel_size = Spec::new(img.width() as f64, img.height() as f64); let pixel_ratio = pixel_size.x / pixel_size.y; - let width = self.width.map(|w| w.resolve(base.w)); - let height = self.height.map(|w| w.resolve(base.h)); + let width = self.width.map(|w| w.resolve(regions.base.w)); + let height = self.height.map(|w| w.resolve(regions.base.h)); + + let mut cts = Constraints::new(regions.expand); + cts.set_base_if_linear(regions.base, Spec::new(self.width, self.height)); let size = match (width, height) { (Some(width), Some(height)) => Size::new(width, height), (Some(width), None) => Size::new(width, width / pixel_ratio), (None, Some(height)) => Size::new(height * pixel_ratio, height), (None, None) => { - if space.is_finite() { + cts.exact.x = Some(regions.current.w); + if regions.current.w.is_finite() { // Fit to width. - Size::new(space, space / pixel_ratio) + Size::new(regions.current.w, regions.current.w / pixel_ratio) } else { // Unbounded width, we have to make up something, // so it is 1pt per pixel. @@ -63,6 +71,7 @@ impl InlineLevel for ImageNode { let mut frame = Frame::new(size, size.h); frame.push(Point::zero(), Element::Image(self.id, size)); - frame + + vec![frame.constrain(cts)] } } diff --git a/src/library/mod.rs b/src/library/mod.rs index 775fb51f3..f11e05f39 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -6,6 +6,7 @@ mod align; mod container; mod deco; +mod document; mod flow; mod grid; mod image; @@ -36,6 +37,7 @@ pub use self::image::*; pub use align::*; pub use container::*; pub use deco::*; +pub use document::*; pub use flow::*; pub use grid::*; pub use pad::*; diff --git a/src/library/pad.rs b/src/library/pad.rs index d17a4ca23..88f8c5622 100644 --- a/src/library/pad.rs +++ b/src/library/pad.rs @@ -16,7 +16,7 @@ pub fn pad(_: &mut EvalContext, args: &mut Args) -> TypResult { bottom.or(all).unwrap_or_default(), ); - Ok(Value::Template(Template::from_block(move |style| { + Ok(Value::Template(Template::from_inline(move |style| { PadNode { padding, child: body.to_flow(style).pack(), @@ -30,10 +30,10 @@ pub struct PadNode { /// The amount of padding. pub padding: Sides, /// The child node whose sides to pad. - pub child: BlockNode, + pub child: PackedNode, } -impl BlockLevel for PadNode { +impl Layout for PadNode { fn layout( &self, ctx: &mut LayoutContext, diff --git a/src/library/page.rs b/src/library/page.rs index 16e6283de..a5935002b 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -73,3 +73,23 @@ pub fn pagebreak(_: &mut EvalContext, _: &mut Args) -> TypResult { template.pagebreak(true); Ok(Value::Template(template)) } + +/// Layouts its children onto one or multiple pages. +#[derive(Debug, Hash)] +pub struct PageNode { + /// The size of the page. + pub size: Size, + /// The node that produces the actual pages. + pub child: PackedNode, +} + +impl PageNode { + /// Layout the page run into a sequence of frames, one per page. + pub fn layout(&self, ctx: &mut LayoutContext) -> Vec> { + // When one of the lengths is infinite the page fits its content along + // that axis. + let expand = self.size.to_spec().map(Length::is_finite); + let regions = Regions::repeat(self.size, self.size, expand); + self.child.layout(ctx, ®ions).into_iter().map(|c| c.item).collect() + } +} diff --git a/src/library/par.rs b/src/library/par.rs index 216b7d410..c8befc2d0 100644 --- a/src/library/par.rs +++ b/src/library/par.rs @@ -8,7 +8,7 @@ use xi_unicode::LineBreakIterator; use super::prelude::*; use super::{shape, Decoration, ShapedText, Spacing}; use crate::style::TextStyle; -use crate::util::{EcoString, RangeExt, SliceExt}; +use crate::util::{EcoString, RangeExt, RcExt, SliceExt}; /// `par`: Configure paragraphs. pub fn par(ctx: &mut EvalContext, args: &mut Args) -> TypResult { @@ -63,7 +63,7 @@ pub struct ParNode { pub children: Vec, } -impl BlockLevel for ParNode { +impl Layout for ParNode { fn layout( &self, ctx: &mut LayoutContext, @@ -77,7 +77,7 @@ impl BlockLevel for ParNode { // Prepare paragraph layout by building a representation on which we can // do line breaking without layouting each and every line from scratch. - let layouter = ParLayouter::new(self, ctx, regions, bidi); + let layouter = ParLayouter::new(self, ctx, regions.clone(), bidi); // Find suitable linebreaks. layouter.layout(ctx, regions.clone()) @@ -126,7 +126,7 @@ pub enum ParChild { /// A run of text and how to align it in its line. Text(EcoString, Align, Rc), /// Any child node and how to align it in its line. - Node(InlineNode, Align), + Node(PackedNode, Align), /// A decoration that applies until a matching `Undecorate`. Decorate(Decoration), /// The end of a decoration. @@ -182,9 +182,12 @@ impl<'a> ParLayouter<'a> { fn new( par: &'a ParNode, ctx: &mut LayoutContext, - regions: &Regions, + mut regions: Regions, bidi: BidiInfo<'a>, ) -> Self { + // Disable expansion for children. + regions.expand = Spec::splat(false); + let mut items = vec![]; let mut ranges = vec![]; let mut starts = vec![]; @@ -216,8 +219,8 @@ impl<'a> ParLayouter<'a> { } } ParChild::Node(ref node, align) => { - let frame = node.layout(ctx, regions.current.w, regions.base); - items.push(ParItem::Frame(frame, align)); + let frame = node.layout(ctx, ®ions).remove(0); + items.push(ParItem::Frame(Rc::take(frame.item), align)); ranges.push(range); } ParChild::Decorate(ref deco) => { diff --git a/src/library/shape.rs b/src/library/shape.rs index 5be26aa49..c64dedb32 100644 --- a/src/library/shape.rs +++ b/src/library/shape.rs @@ -94,7 +94,7 @@ pub struct ShapeNode { /// How to fill the shape, if at all. pub fill: Option, /// The child node to place into the shape, if any. - pub child: Option, + pub child: Option, } /// The type of a shape. @@ -110,15 +110,36 @@ pub enum ShapeKind { Ellipse, } -impl InlineLevel for ShapeNode { - fn layout(&self, ctx: &mut LayoutContext, space: Length, base: Size) -> Frame { +impl Layout for ShapeNode { + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + ) -> Vec>> { // Resolve width and height relative to the region's base. - let width = self.width.map(|w| w.resolve(base.w)); - let height = self.height.map(|h| h.resolve(base.h)); + let width = self.width.map(|w| w.resolve(regions.base.w)); + let height = self.height.map(|h| h.resolve(regions.base.h)); + + // Generate constraints. + let mut cts = Constraints::new(regions.expand); + cts.set_base_if_linear(regions.base, Spec::new(self.width, self.height)); + + // Set tight exact and base constraints if the child is + // automatically sized since we don't know what the child might do. + if self.width.is_none() { + cts.exact.x = Some(regions.current.w); + cts.base.x = Some(regions.base.w); + } + + // Same here. + if self.height.is_none() { + cts.exact.y = Some(regions.current.h); + cts.base.y = Some(regions.base.h); + } // Layout. let mut frame = if let Some(child) = &self.child { - let mut node: &dyn BlockLevel = child; + let mut node: &dyn Layout = child; let padded; if matches!(self.shape, ShapeKind::Circle | ShapeKind::Ellipse) { @@ -133,11 +154,14 @@ impl InlineLevel for ShapeNode { // The "pod" is the region into which the child will be layouted. let mut pod = { - let size = Size::new(width.unwrap_or(space), height.unwrap_or(base.h)); + let size = Size::new( + width.unwrap_or(regions.current.w), + height.unwrap_or(regions.base.h), + ); let base = Size::new( - if width.is_some() { size.w } else { base.w }, - if height.is_some() { size.h } else { base.h }, + if width.is_some() { size.w } else { regions.base.w }, + if height.is_some() { size.h } else { regions.base.h }, ); let expand = Spec::new(width.is_some(), height.is_some()); @@ -180,6 +204,6 @@ impl InlineLevel for ShapeNode { frame.prepend(pos, Element::Geometry(geometry, fill)); } - frame + vec![frame.constrain(cts)] } } diff --git a/src/library/stack.rs b/src/library/stack.rs index fe1deda0f..46825939f 100644 --- a/src/library/stack.rs +++ b/src/library/stack.rs @@ -60,7 +60,7 @@ pub struct StackNode { pub children: Vec, } -impl BlockLevel for StackNode { +impl Layout for StackNode { fn layout( &self, ctx: &mut LayoutContext, @@ -76,7 +76,7 @@ pub enum StackChild { /// Spacing between other nodes. Spacing(Spacing), /// Any block node and how to align it in the stack. - Node(BlockNode), + Node(PackedNode), } impl Debug for StackChild { @@ -174,8 +174,8 @@ impl<'a> StackLayouter<'a> { self.items.push(StackItem::Absolute(resolved)); } - /// Layout a block node. - fn layout_node(&mut self, ctx: &mut LayoutContext, node: &BlockNode) { + /// Layout a node. + fn layout_node(&mut self, ctx: &mut LayoutContext, node: &PackedNode) { let frames = node.layout(ctx, &self.regions); let len = frames.len(); for (i, frame) in frames.into_iter().enumerate() { diff --git a/src/library/transform.rs b/src/library/transform.rs index b7e5e36c2..20d2bc1dc 100644 --- a/src/library/transform.rs +++ b/src/library/transform.rs @@ -1,5 +1,4 @@ use super::prelude::*; -use super::{ShapeKind, ShapeNode}; /// `move`: Move content without affecting layout. pub fn move_(_: &mut EvalContext, args: &mut Args) -> TypResult { @@ -10,13 +9,7 @@ pub fn move_(_: &mut EvalContext, args: &mut Args) -> TypResult { Ok(Value::Template(Template::from_inline(move |style| { MoveNode { offset: Spec::new(x, y), - child: ShapeNode { - shape: ShapeKind::Rect, - width: None, - height: None, - fill: None, - child: Some(body.to_flow(style).pack()), - }, + child: body.to_flow(style).pack(), } }))) } @@ -24,21 +17,30 @@ pub fn move_(_: &mut EvalContext, args: &mut Args) -> TypResult { #[derive(Debug, Hash)] struct MoveNode { offset: Spec>, - child: ShapeNode, + child: PackedNode, } -impl InlineLevel for MoveNode { - fn layout(&self, ctx: &mut LayoutContext, space: Length, base: Size) -> Frame { - let offset = Point::new( - self.offset.x.map(|x| x.resolve(base.w)).unwrap_or_default(), - self.offset.y.map(|y| y.resolve(base.h)).unwrap_or_default(), - ); +impl Layout for MoveNode { + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + ) -> Vec>> { + let mut frames = self.child.layout(ctx, regions); - let mut frame = self.child.layout(ctx, space, base); - for (point, _) in &mut frame.children { - *point += offset; + for (Constrained { item: frame, .. }, (_, base)) in + frames.iter_mut().zip(regions.iter()) + { + let offset = Point::new( + self.offset.x.map(|x| x.resolve(base.w)).unwrap_or_default(), + self.offset.y.map(|y| y.resolve(base.h)).unwrap_or_default(), + ); + + for (point, _) in &mut Rc::make_mut(frame).children { + *point += offset; + } } - frame + frames } } diff --git a/src/main.rs b/src/main.rs index b2ae1ea3a..fa8b61038 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,8 +60,8 @@ fn try_main() -> anyhow::Result<()> { // Typeset. match ctx.typeset(id) { // Export the PDF. - Ok(document) => { - let buffer = export::pdf(&ctx, &document); + Ok(frames) => { + let buffer = export::pdf(&ctx, &frames); fs::write(&args.output, buffer).context("failed to write PDF file")?; } diff --git a/src/source.rs b/src/source.rs index e692ac94d..74fa8d55b 100644 --- a/src/source.rs +++ b/src/source.rs @@ -1,4 +1,4 @@ -//! Source files. +//! Source file management. use std::collections::HashMap; use std::io; diff --git a/tests/ref/layout/pad.png b/tests/ref/layout/pad.png index 4d381ce24010fd0ba81c1a1a096c6561687414a9..6ce4016a89ef96c9297607fab03d58fd9fb01e5e 100644 GIT binary patch literal 52010 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

~ysREM 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 literal 52232 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 z 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 diff --git a/tests/typ/layout/pad.typ b/tests/typ/layout/pad.typ index 3729761a8..2a91d1ca7 100644 --- a/tests/typ/layout/pad.typ +++ b/tests/typ/layout/pad.typ @@ -11,19 +11,11 @@ ) ) -Hi #box(pad(left: 10pt)[]) there +Hi #pad(left: 10pt)[A] there --- -#let pad(body) = pad(left: 10pt, right: 10pt, body) - -// Pad inherits expansion behaviour from stack .... -#pad[PL #align(right)[PR]] - -// ... block ... -#block(pad[PL #align(right)[PR]]) - -// ... and box. -#box(pad[PL #align(right)[PR]]) +// Pad can grow. +#pad(left: 10pt, right: 10pt)[PL #h(1fr) PR] --- // Test that the pad node doesn't consume the whole region. diff --git a/tests/typ/layout/stack-2.typ b/tests/typ/layout/stack-2.typ index afc9de394..2167f48f7 100644 --- a/tests/typ/layout/stack-2.typ +++ b/tests/typ/layout/stack-2.typ @@ -17,7 +17,7 @@ World! 🌍 --- #page(height: 2cm) #font(white) -#box(fill: forest)[ +#rect(fill: forest)[ #v(1fr) #h(1fr) Hi you! #h(5pt) #v(5pt) diff --git a/tests/typeset.rs b/tests/typeset.rs index 68e56343c..aa4d250bb 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -19,7 +19,7 @@ use typst::geom::{ use typst::image::Image; use typst::layout::layout; #[cfg(feature = "layout-cache")] -use typst::layout::PageNode; +use typst::library::DocumentNode; use typst::loading::FsLoader; use typst::parse::Scanner; use typst::source::SourceFile; @@ -231,11 +231,11 @@ fn test_part( let mut ok = true; let (frames, mut errors) = match ctx.execute(id) { - Ok(tree) => { - let mut frames = layout(ctx, &tree); + Ok(document) => { + let mut frames = layout(ctx, &document); #[cfg(feature = "layout-cache")] - (ok &= test_incremental(ctx, i, &tree, &frames)); + (ok &= test_incremental(ctx, i, &document, &frames)); if !compare_ref { frames.clear(); @@ -283,7 +283,7 @@ fn test_part( fn test_incremental( ctx: &mut Context, i: usize, - tree: &[PageNode], + document: &DocumentNode, frames: &[Rc], ) -> bool { let mut ok = true; @@ -298,7 +298,7 @@ fn test_incremental( ctx.layouts.turnaround(); - let cached = layout(ctx, tree); + let cached = layout(ctx, document); let misses = ctx .layouts .entries()