From 44ebefbec23114d6ed7a96e7e3cb9078441aff31 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 29 Jan 2022 22:32:01 +0100 Subject: [PATCH] Add `hide` class --- src/library/hidden.rs | 32 ++++++++++++++++++++++++++++++++ src/library/mod.rs | 3 +++ tests/ref/layout/hide.png | Bin 0 -> 936 bytes tests/typ/layout/hide.typ | 5 +++++ 4 files changed, 40 insertions(+) create mode 100644 src/library/hidden.rs create mode 100644 tests/ref/layout/hide.png create mode 100644 tests/typ/layout/hide.typ diff --git a/src/library/hidden.rs b/src/library/hidden.rs new file mode 100644 index 00000000..7287bf3d --- /dev/null +++ b/src/library/hidden.rs @@ -0,0 +1,32 @@ +//! Hiding of nodes without affecting layout. + +use super::prelude::*; + +/// A node that hides its child without affecting layout. +#[derive(Debug, Hash)] +pub struct HideNode(pub PackedNode); + +#[class] +impl HideNode { + fn construct(_: &mut EvalContext, args: &mut Args) -> TypResult { + Ok(Node::inline(Self(args.expect("body")?))) + } +} + +impl Layout for HideNode { + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + styles: StyleChain, + ) -> Vec>> { + let mut frames = self.0.layout(ctx, regions, styles); + + // Clear the frames. + for Constrained { item: frame, .. } in &mut frames { + *frame = Rc::new(Frame { elements: vec![], ..**frame }); + } + + frames + } +} diff --git a/src/library/mod.rs b/src/library/mod.rs index 51d57c3e..81c8fcdc 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -10,6 +10,7 @@ pub mod deco; pub mod flow; pub mod grid; pub mod heading; +pub mod hidden; pub mod image; pub mod link; pub mod list; @@ -33,6 +34,7 @@ pub use deco::*; pub use flow::*; pub use grid::*; pub use heading::*; +pub use hidden::*; pub use link::*; pub use list::*; pub use pad::*; @@ -116,6 +118,7 @@ pub fn new() -> Scope { std.def_class::>("move"); std.def_class::>("scale"); std.def_class::>("rotate"); + std.def_class::("hide"); std.def_class::("stack"); std.def_class::("grid"); std.def_class::("columns"); diff --git a/tests/ref/layout/hide.png b/tests/ref/layout/hide.png new file mode 100644 index 0000000000000000000000000000000000000000..8a60cf904d0a17efb2e118edce3d4274fb3c6242 GIT binary patch literal 936 zcmeAS@N?(olHy`uVBq!ia0y~yU}OQZQ#pVHL*Jf5a~T+z^F3W0Ln>~)z3J^C8pv?$ z!XtOPTgwRt5VhE;;LJ9v0Cv<-x+P&Eh<$P&bk+@pA}dx=&HBG)#aPR!ZkkH zi+#5mXmr2Wxv_PTh@hxu<>__bj-I*GxMPdJv5CsH|Ib=>Z=Uhfu$b)`$3cnY9>Zf1 z_J`}m1Unp9lmr?%Tojm4nJqsqeA-sMK#<{#K;*S0=VGQ?Z2q);6~l`&UV=)R-=!NG z3O6pECfCo$a>#q)vhw2sX03-GCbZcsTjh9MM0fu(v-7hr<|>G^9%k)+I;U(o2LqqF z`6(%G$1rK<^DQEwf}d=9j}^F1ljL}I_qytu;x2}Sns4tn&a78XX#TU}Me~FWH)qXx z&BS!6ilr-cb1;j|r0s$pKYp1X>RJ+KDyY{b{q2ey!@W}t!7OiNC0#e$WGgf5y_pC0o^}bnnhmn$l_hk;9>X+a1M2=cioBbUU1W zn}cE2(L__hbKSQ;avaExd?4^})*92}e>WXmU>3*wJv%qLKbqOgAoInhykmo% zWm2E-raNv7O^>E6n%#8&`vr-0Rb06&A-~NIOFE@rns!4cx2ti3nh2NZ`bpiQrViP= z%FC~|=H%WhXHJaQ*pj|3=EFfnr>$}FvqfL)UtBQT*G?i(lyR=*N~a!+FL(DO#a_Q` zwi`TA?fBhr46(uqYxEJatiG=>Xw@80pU8(RvtG3H(a|6EgTQ}%uPipy) zT3aT3Fg`G_ux6h|=+y%m*XhgQwAmJwXf&duoWI&l_9=%U080v{r#tmwS(>hwmnR^L431r8>w zc4=ljtNf`dS;Ea&npCPFaASMGx{xajvX^cDoifgTx=21x@xi%_%{>YIt2kbqlUH}m zI_batTg$>r)BXQOAD^#QY!_1(t{hN=9nS!#Qr>mdKI;Vst E0LXWuz5oCK literal 0 HcmV?d00001 diff --git a/tests/typ/layout/hide.typ b/tests/typ/layout/hide.typ new file mode 100644 index 00000000..a979b24f --- /dev/null +++ b/tests/typ/layout/hide.typ @@ -0,0 +1,5 @@ +// Test the `hide` function. + +--- +AB #h(1fr) CD \ +#hide[A]B #h(1fr) C#hide[D]