From ca71081d05e1d2fabf65f4d4576ef0ac095221f9 Mon Sep 17 00:00:00 2001 From: Pg Biel <9021226+PgBiel@users.noreply.github.com> Date: Thu, 6 Apr 2023 10:36:36 -0300 Subject: [PATCH] Add 'layout' function to obtain the size of the outer container (#557) --- library/src/lib.rs | 1 + library/src/meta/context.rs | 98 ++++++++++++++++++++++++++++++ tests/ref/layout/block-sizing.png | Bin 23032 -> 24503 bytes tests/ref/layout/page.png | Bin 8104 -> 14273 bytes tests/typ/layout/block-sizing.typ | 8 +++ tests/typ/layout/page.typ | 9 +++ 6 files changed, 116 insertions(+) diff --git a/library/src/lib.rs b/library/src/lib.rs index c11b818ec..ac99425fe 100644 --- a/library/src/lib.rs +++ b/library/src/lib.rs @@ -97,6 +97,7 @@ fn global(math: Module, calc: Module) -> Module { global.define("bibliography", meta::BibliographyElem::func()); global.define("locate", meta::locate); global.define("style", meta::style); + global.define("layout", meta::layout); global.define("counter", meta::counter); global.define("numbering", meta::numbering); global.define("state", meta::state); diff --git a/library/src/meta/context.rs b/library/src/meta/context.rs index 7426d27d7..3902f47aa 100644 --- a/library/src/meta/context.rs +++ b/library/src/meta/context.rs @@ -121,3 +121,101 @@ impl Show for StyleElem { Ok(self.func().call_vt(vt, [styles.to_map().into()])?.display()) } } + +/// Provides access to the current outer container's (or page's, if none) size (width and height). +/// +/// The given function must accept a single parameter, `size`, which is a dictionary with keys +/// `width` and `height`, both having the type [`length`]($type/length). +/// +/// That is, if this `layout` call is done inside (for example) a box of size 800pt (width) +/// by 400pt (height), then the specified function will be given the parameter +/// `(width: 800pt, height: 400pt)`. +/// +/// If, however, this `layout` call is placed directly on the page, not inside any container, +/// then the function will be given `(width: page_width, height: page_height)`, where `page_width` +/// and `page_height` correspond to the current page's respective dimensions, minus its margins. +/// +/// This is useful, for example, to convert a [`ratio`]($type/ratio) value (such as `5%`, `100%` +/// etc.), which are usually based upon the outer container's dimensions (precisely what this +/// function gives), to a fixed length (in `pt`). +/// +/// This is also useful if you're trying to make content fit a certain box, and doing certain +/// arithmetic using `pt` (for example, comparing different lengths) is required. +/// +/// Please note: This function may provide a width or height of `infpt` if one of the page +/// dimensions is `auto`, under certain circumstances. This should not normally occur for +/// usual page sizes, however. +/// +/// ```example +/// layout(size => { +/// // work with the width and height of the container we're in +/// // using size.width and size.height +/// }) +/// +/// layout(size => { +/// // convert 49% (of page width) to 'pt' +/// // note that "ratio" values are always relative to a certain, possibly arbitrary length, +/// // but it's usually the current container's width or height (e.g., for table columns, +/// // 15% would be relative to the width, but, for rows, it would be relative to the height). +/// let percentage_of_width = (49% / 1%) * 0.01 * size.width +/// // ... use the converted value ... +/// }) +/// +/// // The following two boxes are equivalent, and will have rectangles sized 200pt and 40pt: +/// +/// #box(width: 200pt, height: 40pt, { +/// rect(width: 100%, height: 100%) +/// }) +/// +/// #box(width: 200pt, height: 40pt, layout(size => { +/// rect(width: size.width, height: size.height) +/// })) +/// ``` +/// +/// Display: Layout +/// Category: meta +/// Returns: content +#[func] +pub fn layout( + /// A function to call with the outer container's size. Its return value is displayed + /// in the document. + /// + /// This function is called once for each time the content returned by + /// `layout` appears in the document. That makes it possible to generate + /// content that depends on the size of the container it is inside. + func: Func, +) -> Value { + LayoutElem::new(func).pack().into() +} + +/// Executes a `layout` call. +/// +/// Display: Layout +/// Category: special +#[element(Layout)] +struct LayoutElem { + /// The function to call with the outer container's (or page's) size. + #[required] + func: Func, +} + +impl Layout for LayoutElem { + fn layout( + &self, + vt: &mut Vt, + styles: StyleChain, + regions: Regions, + ) -> SourceResult { + // Gets the current region's base size, which will be the size of the outer container, + // or of the page if there is no such container. + let Size { x, y } = regions.base(); + let size_dict = dict! { "width" => x, "height" => y }.into(); + + let result = self + .func() + .call_vt(vt, [size_dict])? // calls func(size) + .display(); + + result.layout(vt, styles, regions) + } +} diff --git a/tests/ref/layout/block-sizing.png b/tests/ref/layout/block-sizing.png index ff95c34c03ac8c797064b5c63c8ffa449cc5387a..f6655e63ee7ff6ebead82673c097fa4c6e9fd924 100644 GIT binary patch literal 24503 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 VijJsy=-=<)R1`Gi%Vo_`{{>T`s9yj8 literal 23032 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 diff --git a/tests/ref/layout/page.png b/tests/ref/layout/page.png index 4881fa2b9211bfdbac6457cd0da3fe4fd78928a7..bcf325261b58cfab2a8c16dd0f332141c7cc2c8f 100644 GIT binary patch literal 14273 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 OCM_W^ULmR<_+J2ZC#X9B literal 8104 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 LbdRMUwf6fz_~PBZ diff --git a/tests/typ/layout/block-sizing.typ b/tests/typ/layout/block-sizing.typ index a768c3e3a..181bbe310 100644 --- a/tests/typ/layout/block-sizing.typ +++ b/tests/typ/layout/block-sizing.typ @@ -14,3 +14,11 @@ fill: aqua, lorem(8) + colbreak(), ) + +--- +// Layout inside a block with certain dimensions should provide those dimensions. + +#set page(height: 120pt) +#block(width: 60pt, height: 80pt, layout(size => [ + This block has a width of #size.width and height of #size.height +])) diff --git a/tests/typ/layout/page.typ b/tests/typ/layout/page.typ index ff050e55f..f5c7822d0 100644 --- a/tests/typ/layout/page.typ +++ b/tests/typ/layout/page.typ @@ -31,3 +31,12 @@ // Should result in one forest-colored A11 page and one auto-sized page. #page("a11", flipped: true, fill: forest)[] #pagebreak() + +--- +// Layout without any container should provide the page's dimensions, minus its margins. + +#page(width: 100pt, height: 100pt, { + layout(size => [This page has a width of #size.width and height of #size.height ]) + h(1em) + place(left, rect(width: 80pt, stroke: blue)) +})