From b22ce6f8b84e0a75d162feb6f3699e26f86f2453 Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Sat, 18 Dec 2021 18:04:26 +0100 Subject: [PATCH 1/6] Introduce equal-width columns --- src/eval/node.rs | 12 ++- src/library/columns.rs | 157 +++++++++++++++++++++++++++++++++++ src/library/flow.rs | 24 ++++-- src/library/mod.rs | 4 + src/library/page.rs | 22 ++++- tests/ref/layout/columns.png | Bin 0 -> 42011 bytes tests/typ/layout/columns.typ | 97 ++++++++++++++++++++++ 7 files changed, 305 insertions(+), 11 deletions(-) create mode 100644 src/library/columns.rs create mode 100644 tests/ref/layout/columns.png create mode 100644 tests/typ/layout/columns.typ diff --git a/src/eval/node.rs b/src/eval/node.rs index 34a4f275a..d5b67adb3 100644 --- a/src/eval/node.rs +++ b/src/eval/node.rs @@ -32,6 +32,8 @@ pub enum Node { Linebreak, /// A paragraph break. Parbreak, + /// A column break. + Colbreak, /// A page break. Pagebreak, /// Plain text. @@ -212,6 +214,14 @@ impl Packer { // paragraph. self.parbreak(Some(styles)); } + Node::Colbreak => { + // Explicit column breaks end the current paragraph and then + // discards the paragraph break. + self.parbreak(None); + self.make_flow_compatible(&styles); + self.flow.children.push(FlowChild::Skip); + self.flow.last.hard(); + } Node::Pagebreak => { // We must set the flow styles after the page break such that an // empty page created by two page breaks in a row has styles at @@ -345,7 +355,7 @@ impl Packer { // Take the flow and erase any styles that will be inherited anyway. let Builder { mut children, styles, .. } = mem::take(&mut self.flow); for child in &mut children { - child.styles_mut().erase(&styles); + child.styles_mut().map(|s| s.erase(&styles)); } let flow = FlowNode(children).pack(); diff --git a/src/library/columns.rs b/src/library/columns.rs new file mode 100644 index 000000000..88ad81725 --- /dev/null +++ b/src/library/columns.rs @@ -0,0 +1,157 @@ +use super::prelude::*; +use super::ParNode; + +/// `columns`: Stack children along an axis. +pub fn columns(_: &mut EvalContext, args: &mut Args) -> TypResult { + let count = args.expect("column count")?; + let gutter = args.named("gutter")?.unwrap_or(Relative::new(0.04).into()); + let body: Node = args.expect("body")?; + + Ok(Value::block(ColumnsNode { + columns: count, + gutter, + child: body.into_block(), + })) +} + +/// `colbreak`: Start a new column. +pub fn colbreak(_: &mut EvalContext, _: &mut Args) -> TypResult { + Ok(Value::Node(Node::Colbreak)) +} + +/// A node that separates a region into multiple equally sized columns. +#[derive(Debug, Hash)] +pub struct ColumnsNode { + /// How many columns there should be. + pub columns: usize, + /// The size of the gutter space between each column. + pub gutter: Linear, + /// The child to be layouted into the columns. Most likely, this should be a + /// flow or stack node. + pub child: PackedNode, +} + +impl Layout for ColumnsNode { + fn layout( + &self, + ctx: &mut LayoutContext, + regions: &Regions, + ) -> Vec>> { + // Separating the infinite space into infinite columns does not make + // much sense. + if regions.current.x.is_infinite() { + return self.child.layout(ctx, regions); + } + + // All gutters in the document. (Can be different because the relative + // component is calculated seperately for each region.) + let mut gutters = vec![]; + // Sizes of all columns resulting from `region.current` and + // `region.backlog`. + let mut sizes = vec![]; + + // Assure there is at least one column. + let columns = self.columns.max(1); + + for (current, base) in std::iter::once((regions.current, regions.base)) + .chain(regions.backlog.clone().into_iter().map(|s| (s, s))) + { + let gutter = self.gutter.resolve(base.x); + gutters.push(gutter); + let size = Spec::new( + (current.x - gutter * (columns - 1) as f64) / columns as f64, + current.y, + ); + for _ in 0 .. columns { + sizes.push(size); + } + } + + let first = sizes.remove(0); + let mut col_regions = Regions::one(first, first, regions.expand); + col_regions.backlog = sizes.clone().into_iter(); + + // We have to treat the last region separately. + let last_column_gutter = regions.last.map(|last| { + let gutter = self.gutter.resolve(last.x); + let size = Spec::new( + (last.x - gutter * (columns - 1) as f64) / columns as f64, + last.y, + ); + col_regions.last = Some(size); + (size, gutter) + }); + + let frames = self.child.layout(ctx, &col_regions); + let dir = ctx.styles.get(ParNode::DIR); + + // Dealing with infinite height areas here. + let height = if regions.current.y.is_infinite() { + frames + .iter() + .map(|frame| frame.item.size.y) + .max() + .unwrap_or(Length::zero()) + } else { + regions.current.y + }; + + let mut regions = regions.clone(); + + let to = |cursor: Length, width: Length, regions: &Regions| { + if dir.is_positive() { + cursor + } else { + regions.current.x - cursor - width + } + }; + let mut cursor = Length::zero(); + + let mut res = vec![]; + let mut frame = Frame::new(Spec::new(regions.current.x, height)); + + for (i, child_frame) in frames.into_iter().enumerate() { + let region = i / columns; + let size = std::iter::once(&first) + .chain(sizes.iter()) + .nth(i) + .copied() + .unwrap_or_else(|| last_column_gutter.unwrap().0); + + frame.push_frame( + Point::new(to(cursor, size.x, ®ions), Length::zero()), + child_frame.item, + ); + + cursor += size.x; + + if i % columns == columns - 1 { + // Refresh column height for non-infinite regions here. + let height = if regions.current.y.is_infinite() { + height + } else { + regions.current.y + }; + + regions.next(); + let old_frame = std::mem::replace( + &mut frame, + Frame::new(Spec::new(regions.current.x, height)), + ); + res.push(old_frame.constrain(Constraints::tight(®ions))); + cursor = Length::zero(); + } else { + cursor += gutters + .get(region) + .copied() + .unwrap_or_else(|| last_column_gutter.unwrap().1); + } + } + + if !frame.elements.is_empty() { + res.push(frame.constrain(Constraints::tight(®ions))); + } + + res + } +} diff --git a/src/library/flow.rs b/src/library/flow.rs index cfa761b6d..ca730db14 100644 --- a/src/library/flow.rs +++ b/src/library/flow.rs @@ -32,6 +32,8 @@ impl Debug for FlowNode { pub enum FlowChild { /// A paragraph/block break. Break(Styles), + /// Skip the rest of the region and move to the next. + Skip, /// Vertical spacing between other children. Spacing(SpacingNode), /// An arbitrary node. @@ -40,20 +42,22 @@ pub enum FlowChild { impl FlowChild { /// A reference to the child's styles. - pub fn styles(&self) -> &Styles { + pub fn styles(&self) -> Option<&Styles> { match self { - Self::Break(styles) => styles, - Self::Spacing(node) => &node.styles, - Self::Node(node) => &node.styles, + Self::Break(styles) => Some(styles), + Self::Spacing(node) => Some(&node.styles), + Self::Node(node) => Some(&node.styles), + Self::Skip => None, } } /// A mutable reference to the child's styles. - pub fn styles_mut(&mut self) -> &mut Styles { + pub fn styles_mut(&mut self) -> Option<&mut Styles> { match self { - Self::Break(styles) => styles, - Self::Spacing(node) => &mut node.styles, - Self::Node(node) => &mut node.styles, + Self::Break(styles) => Some(styles), + Self::Spacing(node) => Some(&mut node.styles), + Self::Node(node) => Some(&mut node.styles), + Self::Skip => None, } } } @@ -69,6 +73,7 @@ impl Debug for FlowChild { } Self::Spacing(node) => node.fmt(f), Self::Node(node) => node.fmt(f), + Self::Skip => write!(f, "Skip"), } } } @@ -138,6 +143,9 @@ impl<'a> FlowLayouter<'a> { let amount = chain.get(ParNode::SPACING).resolve(em); self.layout_absolute(amount.into()); } + FlowChild::Skip => { + self.finish_region(); + } FlowChild::Spacing(node) => match node.kind { SpacingKind::Linear(v) => self.layout_absolute(v), SpacingKind::Fractional(v) => { diff --git a/src/library/mod.rs b/src/library/mod.rs index b2dd0dbe5..313d423bb 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -4,6 +4,7 @@ //! definitions. mod align; +mod columns; mod flow; mod grid; mod heading; @@ -42,6 +43,7 @@ mod prelude { pub use self::image::*; pub use align::*; +pub use columns::*; pub use flow::*; pub use grid::*; pub use heading::*; @@ -83,6 +85,7 @@ pub fn new() -> Scope { // Break and spacing functions. std.def_func("pagebreak", pagebreak); + std.def_func("colbreak", colbreak); std.def_func("parbreak", parbreak); std.def_func("linebreak", linebreak); std.def_func("h", h); @@ -96,6 +99,7 @@ pub fn new() -> Scope { std.def_func("stack", stack); std.def_func("grid", grid); std.def_func("pad", pad); + std.def_func("columns", columns); std.def_func("align", align); std.def_func("place", place); std.def_func("move", move_); diff --git a/src/library/page.rs b/src/library/page.rs index 0e6907707..6585edb9f 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -4,7 +4,7 @@ use std::fmt::{self, Display, Formatter}; use std::str::FromStr; use super::prelude::*; -use super::PadNode; +use super::{ColumnsNode, PadNode}; /// `pagebreak`: Start a new page. pub fn pagebreak(_: &mut EvalContext, _: &mut Args) -> TypResult { @@ -40,6 +40,10 @@ impl PageNode { pub const BOTTOM: Smart = Smart::Auto; /// The page's background color. pub const FILL: Option = None; + /// How many columns the page has. + pub const COLUMNS: usize = 1; + /// How many columns the page has. + pub const COLUMN_GUTTER: Linear = Relative::new(0.04).into(); } impl Construct for PageNode { @@ -76,6 +80,8 @@ impl Set for PageNode { styles.set_opt(Self::RIGHT, args.named("right")?.or(margins)); styles.set_opt(Self::BOTTOM, args.named("bottom")?.or(margins)); styles.set_opt(Self::FILL, args.named("fill")?); + styles.set_opt(Self::COLUMNS, args.named("columns")?); + styles.set_opt(Self::COLUMN_GUTTER, args.named("column-gutter")?); Ok(()) } @@ -112,8 +118,20 @@ impl PageNode { bottom: ctx.styles.get(Self::BOTTOM).unwrap_or(default.bottom), }; + let columns = ctx.styles.get(Self::COLUMNS); + let child = if ctx.styles.get(Self::COLUMNS) > 1 { + ColumnsNode { + child: self.child.clone(), + columns, + gutter: ctx.styles.get(Self::COLUMN_GUTTER), + } + .pack() + } else { + self.child.clone() + }; + // Pad the child. - let padded = PadNode { child: self.child.clone(), padding }.pack(); + let padded = PadNode { child, padding }.pack(); // Layout the child. let expand = size.map(Length::is_finite); diff --git a/tests/ref/layout/columns.png b/tests/ref/layout/columns.png new file mode 100644 index 0000000000000000000000000000000000000000..a1aee61cb7cbd36a96533acdf01a34ab16c34c44 GIT binary patch literal 42011 zcmbq*cT^K!+wCL}z|bM|E~24|(ve<8L=t-My%*^Mp@iN&^d`LsQlv`nO^QnI zAWcMW-gm9<-ur#`_pNpBy7^~jPA0SF%sI2q^X$E!L?d1(6GQ2t000oHJXO#D05EnR z{~iGjwuL@qDFOgM5s2qninq77S2w>-|7;&$UhQ8mZ~mUz{5^Sic=+Sw*V^U4+GYRZ zMf>#L;q-a!=vm3=S@FusO8>^rz-i9FX?FL?o9>h3w&SRl)%C`s!13|%(b3V52c91f zJSrAe%NJJ5_U+2{Z9nW8f7mn1om$M9TI}xb&fV4M>gwv~==l8k^XrkB`uh6t{_(oH zy0E^n>gwvMsw(fUA+OG_#l^*TpL*ZFe{b8`i@{)Wb8`*qJ2Nse)T%x`ulkgfl$4m5 z7#kZaUD7C3(ijmD@u;ANzn}(%LInp02L=YRXIJ?8`uh0zxVgExy1F_#I@;UY+u7OK z+S*!LT3T3Gn3*?v~>gsA~X=!R|B9TZ00->(1{_NSar%#_MD=RB1 zD$2;nNJ~pgNJu<+@N}zkBy7N7NmtMQCU` zhV?%Df8RAGgoMtuK9-ezjv%9ieZhr1`oG<+wC)&b`vui^q`rM8-0FS*8;Q*P$>)yx zH%*iBH0W=j>c~-r%DA;V}sLXq|T!1*pjU)k5Iu^UG5NEbpuCyZlQc z;Qk$&3DmPXz8HM8FGRSFQ{L&N9bd zc+a1u_WK=Sn|NgPD|+A_l`{oX>>n{|I&ma_7HEWBE8p_!fC|lvR8Ij_r+6!%GWrwi zG=bv1-VE{SVRp4Ye^3&@$+QH8Gbr8uT+(YvB(lt~v?!-o^PA}87sk%#f{B_c)EyCa zKi@L}(-RUCR)FYZ%BwJEF!^irPVu4r7{F*fMfny;(mYfiY?eJr(Nv$}QUX!MOWo_d zKr@=*ok+4YaMT<G)qv)j0LN394+Y*Yy3yQ=&QAGFqJA5p`>(rKi#=1+H_$6kt9(3 zaqZ#jH+U$2Fd1`wGd?Oa6&_BxiFXv__wFu~1O-j>mge_MIo1O?r$@y(OXx-Z;0_xd5CA5131$)}r+0=@+?e{E&v{<0I9 z+hj0Cmbll1ByL=&Kpefg>+pTqCmzhwON(CEh>a}F&+~O-j&z%n5EEWvfr@{Z&bxPI z4r9zfP^)r2_?Rd+WYVj+Au#Lr$q{xL_Mnp5SL##{Mu3nUuM_A)%t@ym66>d@*ReB^ zY}iAtG!edbt$Lq)o$U0uWV{4s;Cf1InWmTy#X=`^mv|xzF{Gw*sss+)ud;o-nTKi0 zRLPD7qmrLFI=9Jz=!o|P7cJp>gYxr3P_&*^o1ARbsqg5UfjRK+*JWr!)yidC#Fl@~ z`fHrQO@x~{>-T=JXSjU=e$kSD+GrkN=Agr*(C@e)n#Ngi2?xAs4Z*s2drRa-`noqsojW8mKc8rf8nGxyCmCyzRRK$YJ5W zN)KhVB^+_cl5CMlr6o&u2<}WQ2kkHP3Q~H3g*w6PVbA&!9VgcM=e3Ru= z66CM)F)tsGa89R?-vSv$umWjYk(dL6azI5cs9TG zD}e*lu{BxR_uT~9H09=|f9YuW>ix9;OL!$Wb`t!Wv?ac2&aTHCbt3tR$;pNALc5eN zoN?>455wqie zRhtO#;h_W0x#|4MuHG6N{;A~cTD0(R^B*yPdmp!4_?DWs1c2g2m17#=gBv8X!4|xI!CnfFi?p9~Oh%6>`)H|IA3u@Em`~dnDzq~-@}Ucem{c$)>5`qH+o)4=bd@cP9Ff}Yc{06c{*_|&%3b4mDsFPRkG7XO1_7^PCehc>_5nD`Uf0Fpn z&-d2a_qYr3WJaJ;V|J)G2fjiQ2l0(;$pt{#8pZqo;9LhB9yi8x<$pFT0H~g2SAL?r z`BIA7;%ksI|3=BZ7n@Wm9(JTqr#cJA-8Ik)Bt>EBScbgR?n0Sz zR=7A~LLR<{y@+gQoPzv^SvZfjK_3Fe@ipkjChvB;2n=}hRv<$NipuysweW`(deuJU z6c5(g@&8NlEz8i+ln_E~$s`wo?MfcdvEfB_ZWI+-C|>Bjy9*WH%1DLda=ep_3jM~y zU4Qps zQHw-Cgvg_LID1bPI;ML`12#bBXv zFX|h`!vMX7UMAd*T}7E^&dD&Ldhd9-%VSTC=YbMv$JY{w$pcS~qkAugC*@C8ZxBZB zaIFNLS%jbLfb8gn2WAAI<}yYc0|_UADhvf3v5IcE=~w`h^7-LkP8M@@)C^7hBjGmO z5ph=lN5pYqY;&ScY*(ZGgaPUT-T)QTn}2bcqM+4NzOztPkzW`FeOzH>275 zo(j@WnqD)B0gGhgd$4@Is`*3K(4V}iPR-Gw+s%)^SHI?PbA+8k0O zAT$(nl%w|FL}j8jWwXuH9SCWkrGUDZPa$Z>0=J(zr?cvP5dsg5gr!8Z7;QJbmg=O% zp*zh#awfRj5MeJ>Uh!Yt_c~)kqA+fh@VU^oB&Tr~ecGbN*7(qcy-?RzI%bnDyh$!) zTSMhnb}$`hgY!Im853u3!><=?JDV}joxORu1Lm|z^#)xV3i^6Jvxxwfe zpa=!#@pu}4s4k|bsd+oXwaO{FQ*BtZAgMb8iBsE^q>mr@aw)5)q}Jw!RT(G=lzlD! z`GXei@{6sSA(5)9v5mBStF&N#bk7K8+~m*1z978}%~O{?W6K@|~=ooeCO$$e=sP<$|l;i=t|AwVPz ze)OR$kfG*31u$_nHC|&Mn|6bt?|-7awbZ@HQa^zmc8HZr9c{ZqwuPJ4H8pdS;a%%zjAnUJyY`7R*ept}_qscidZ#KztqBZ!oCZ(Lvpx zJ2%zTy=q2cdBUOIl{r+Y;~RhK7;)gGx)tEL2Z1MLALW`}4RzAK6uQ6MZ3+MK)C`$5 z6VQR1_9x{r$#Dn=)JTuyd1#!)Du}7Cfh~xsz%0aHW9^Qv<{j!`G%07&g&L0C;P>qa zj|ek67w7Vh#xU!6xR~g~_YL%*J2?cOh9cEO?edf1J1MKF(}7!Vt+5=6~uk-`Iqwpgt<-g8g?i9i546Y!i5^+ihV=pMOsci9#UK z3b3h1F#aocc(L#3EPQV_NnkKjB{x!T%EyzjW9~=*ihYa))kLg~!Pghk41*pTyL2Ex zt-%FVqnY9nHJL;wl*aS1l>^rGbc{$iAzjpJ!4n>SpsmL9!34t(H))iNk|UrZZdGFY zDN`>z#NHiuq6Le>8Si`@Q3~7rMhAJpXtNp-UE;pD-r>sviBp>mKdu9tiRaLoy_Cm$ zpF(LW{`?iHrL51;&;qO_?JVtTDca;rK;#33ZrNWq)7p3vpvPUA8(=SJnzW!yETlG2I&z`>?-HZ%NM$rH#5gmXhk^HkZyO`P-0Sqi zxelr7(vhKDwmK0NNLJV1wC_mH_OOd&HTy8JqeH<^oaY$r@+;oGQoCz**V-94@H8O* z5x#QtogN1p7aCCzpS;$YdzM%}#rl@$lho^X83F?fGR(%m*xs1qXTI()<9X?E%K79t z>T{Pee{c-5Dx%5fiBLi|#_f=L8D%dkOVqKazVI3Ok081yk6C@#^*~bB7XbPT(~2=# zJ=gv?i_u1IEx*3FR*cn$c4;H@6m6 z>^NBAU!}G$H~OWL>#L5ec$A|TSs59F>f(#PN=P@|k!A;V;;IWiV_jkAsnq$qTeEVJ zpB+VZ2(Y1;rFG^)-M-CBI#i@_%4>Hck+1pnUg8kpeLjd&{o>JRH5$)Jba!g7PP;XL zAXAcrA~OF&DLf`$FF(l|sCn+J_pM0Sxs_OKQ{s@N{>R*X;8(-CgE^JC;ryAp|KdTz z@_bU&;4(cF$tetZ=q~d6Q4>Z-@Vfm;Tqv^*Oa6eYm#6XQ8<3Xr@@R_3H$#uuryjd6 zZ9L}p0vu@Wh;pgNOXJT>YwxAIq)~lR=nMds8v}>l?`*U%`xOtW_5DRoKc*YeM3Dbx zjs2dB9rIMROFiVuuhC{6EL@`Mba^5?e*)_&IH?X0J@F{H1#X#9V&xkx&)TsJMHoFK zMItnAdnk)!>S;aLp`E7yVR>6#v>47B!R}KWc7%_Nx<0E_t)O3&ha<*5x!)g5B3fC% z+?~34Pa{oic{G_2++@`#tV2+_=k62yEabi@nq`-@!@T8Blf)1tL62v^D;Ekj$!JF{n=_ll9_{H}D$mXkWTmXtb?U_gdPPfbJ)OiAF#TENfebIBHm(3S3 zp${rY&_o9%=9Wi6#14~w?o&Zp5pN@R?lO667#FxXz`LTg#Wo~hp|_H}9_>ozZN*(2 zYfuBL$G*p@m$ualz|ngxYc zk=-9jzPpJ(RAg)D;3)A#R-+c)+V`H~Q*RagC;(nE67a^c%);$FVspz!J<34K$!j`D zS{-=!@W7NC85+UK1cJBrpvd|RAP4%9j`Yi1E^`G^+74kHf7d0E*q$Di&DK=n4Kh@t*nb?TC zXlPFa1ZsK>{YvS%Z5cz0$MTzDkCK_h*@xcjJhLCM>wjjJESdtK?;MSB&`m1} zw7x-tFkq|sI_sXwqv^&7xuL6#v3CQph<^LDdjp$HA6O{Stj39t&lew$T(uxq$$K9C z=$u+ex=>IUF1Z)wTJV2RdsxDcg&1uqPB0f@dbg`iVN7$tl|k}j!B0mztpMkCbwAEb zlY4(#d|>>()D#%H?AWTC3#9Kbx<7fT1PpWA$_?uUp%d~t#G|9+{tm56-GhE&{A|>0 z3o}_9dG@_z%*-gx5?;=sGaD^<9}f77PT!~_e7RwAUu}JyQ`)wj7hPsp%*z@cU&Eai zyd426NWD9^iy@KxzxW3lc(qN!8-j%f_yfX_olCf}oo4-XiH8HpA3PZ<=T_}wkIV}^ zTPh}+H(@i!v#4mrp$4NkGGbQ-(&{`-_}*ilY(Bx4MB+ZWa0OYzxz!;0T^nY>;H)Q1 z@_kp)JyJ*t5e;g~^6Eu*!A6-7As|9Jb9olWrm~ZcSMaUfzL(YYrsn@12+3kO>iLJMwNERAd zL$Htq18hcHL}y4Vet2a+(O%50D$L6e7lxX_M4e0;nU{F_pfQ<=F<^hvsg!#v$uO&{ zAE`XoydK6!@x(7)J;?9yctemR71zbJFd7XHAA7tuhy{-4#>w|oCXjARI(-rGL6^nw zjsTJ>B?TAh2?HL1Sx7KJX@(~fmCK{m!%$F#><~|#!_rI7yM0M74io41eU9S5X|egH z9%;<7AyR@+Vy4VOA#RxOWW_T2xwmVTkUanvQkaEm1#f(bgNLdOO@r zW*09vHXWn|lTcPefB(In=p6$7y6R_qECHLiUn@~#IYP}24cPg8?*Vx?+F(%kBY0At zDcp469hI#wy6flFAPWVANtk~A;F7(Reyk1$#WV|f6-Q(HP}bb5K%Q9n!#W9IFtM3O z*4@AVvJwUW!~x_ED~(6w2> z!(8%T=tfi?;Q8%zsb` zydT2LXMPuM)I&*GRg&*L(j6yPXl*#(7zk``F~7Q1jX7RMM8#AE!ZtSQSs=GLi2kOZ zKv(RRB^=ng4p202`*GsPV8(lPZd?z|3FHH+ZF@>Kp-@8AQATtUemgZ37^>si>3{>j z*$d2KqhsW{lj~dIBHWJwheZ#qIt-oaVgoctf|OTv_^8^^$9Z3`qPN{n)|N)mb=!qJ z$C(9Uh_PEFKI+hDJl)H4E~7nv;Vk-@O*eJYMNEnbV5lj(a^unV;E6mn(cb4XHYH;8 zNFZd0`Pj^Jh<)d*g6waGA8u}nL_N?$QFU;)r6pzP-{rp^U z;4ohPeIskuE-@;C$PA8;c!Rfq1P#^>4!_1rnUtY7#vyfh%d{@LjMtIf8V0FJ=LC-p zMbvi5nmJ_=(s|nxhO~Lq$Vf)Ym46A^L(}CCtMN45p|OOaT&9flXpGI@1;~ZqJPMa~ z+4f~*3Q{%rVokJCXl1U$C2}CApAlgr9tWNyyy5{Vd=iXoGc3L6ikOVqss9uqna+gY zGU@2E85p^QfV_IN{AD4)&0J{R2t1YM6nNW?Jc=E1TJ*c<) zBc%{-99i9FQ)!=Q@WgAo(kXff{(Btm!RaOYEpsFL9T017bYX=-@9&n!P)9YxD6<~W zH#;cb*D3eGEqt7B!!e0@n+QGTCZ&)x@};k2q^*v(DM= z#kku{jOKOF2wV$9A?CQA>v{k-Eeg!1%Lo~H=T;?9za3ndikoq*c$sQ3TBAcl*QqqQ zg~-3Kl9*fFn>i-`J3~U|f(50~Qb1|U{?w`FWP@P+x;8>a-T5Q2`QeZRRSzF7&Owp$ zQ{t${hm&fc2z6+4)6kLATwK48HEojD*fb>?K29N@^Zj=!i+9PNfWSbAH6~ni^zAeDKSN z+%0MDcfA$9p&}uTU7(lfY=@L}8!8H=rJ1ai&r-5LvD(PQ?85f>Ti()NQ$KOBOxW0% zuu8H8ttUL{t8)oSFit@bLK`DO`LIeQnSBK>OjM8lb zp@TRfraHpfYD|04rH?jb%B6_SDRQ{9<;Y7>9tk8IjrG!cq9JCb=UHYRP7Kt8kbMKP z!FjpUo@T93aCY5kfG~Lv!qv0L>`(uMSkT65$vuy1t%MJxi$C#&RK$db8MAVW#+zS5 zEHiR#4?%myRq{aNk-$f*5P8OK{Pfh^Wv9G@lw(H6oEweR#oI38a+Y(&;TqD4tv$Js|3gEI*uq zZ=qkrTff|#C(ko-s~!J2_atED)CA!RMX&BiaA0vkJ4sF|EYvhS>`q@~t0WIHYC)l$ zW_OtClD@w(wd?}3u5i~r0RrH(<8hrPLQi@B z2VM9&-UcVE0Rj-&w$JpRqdh1I*UypFbr8$~1wWb`_Ck*BOFYAdpu!tR;#E6%gJtlJ zUPzSP>N+DPV}TkWsm=40Q2p;zsv|74veIsJe_U6t*?GLz*oPLvH|+#c$37o=2+2t3 z)FkcQiV|8$-ouhdA2y#lzj7j*xQe^QZGOj;?ddhDd0G59%tP|*lNnh%pFV5fERZC8 zI+vviPGRUXP|P!uq_B6#&hl%uGzli!WZ5|g!lKiCcSO9G~% zp(T?4o(g926-Zy8yt@B3;LkYnpIrk@sZ2qn>EwPPt8MvY?1Pf_En}NGzL%+*&hauw zCP-1ml9!^rb8j9n%XZ!Y|BLBfM)og6FU)k*DbYN^5R#)aea{K3V8ys*kI$*&UX0WAp`sq(nNFrK5>EVD z;zMjHdBJ_(VX(Kk3Yf=%rT@BXnTahxl?m4<$00N`HWoUFWEyVv}cNH;6}35$U{ z&aBc5nk0scdVOww87L)cZjnXBu&;sWi9iC~HsasF2}8)W6Ok4E7~ ztO~tYC;|Ug0XeXCyo`826ep*|6TO@(8y@A(qZ*cz3WD~@g60N@zPA-r$G{^~3ilhT z?jYE;d%RBojU59Vneo4WIfUwYQJLO73H}hw`^w@%eSBG?te2U7r490S47g~Y_)spf zd?T~Y(fEPT-r-RxyQLFMmVE7JV+~RA{!4yV=M5>`L;)dFvX%pV+)V*l>=?ThPUi3(ALpU6OE8;!)Pi~X{6kTG6ofS?1{m0EiIoUnScmLI_@*h9<=7m|U z=~L%GAhNOuG8pdv`{pB7kU=Tz#qYHhuqGtBTK`%`0^Auo!uC*3B10h)t_6fDUSURONzqSsHu}%6U(BLf8Ld05C z>TL_MqN?vvajyOT(lQeY)Hty~+G(c>ow*OVyJVjd0%K^ry-H`1m|89U4ws@lcoT;7 z)%~P{1@BW?#M1%R2M2>82@bQG5Y*s+2)i~=U2s3BO#H-4ony5h%!z%m)cr$3*+qnN z?svmQ!I;AN=GR2PPMfREvyh3&t*@Fpjq7o21s{)3t7P=6nD^MU%2vz3k^8jR!p=usdJ_>nKpO-xx(X8UsxeI=t(lwaMi$81wbm%$FV8}S>k9tv^d!v}~0MW-I|zIx4PF)Hz3Zz=A;7A6|-0wUa9stEiP^IaIJ*mdWBl!5A*gMv0Bt+d|T_ z_fow2X96avCvNypn=7jDg-UmC=*~SheA*r6bokPr44|(ZSp=vm$IQ~1tEKobch}Q|Gws^bphYV<*^NzB&YsrGTsC>Ni zU4X==K!%Z9;VDT0S!EYorm?x6J}sZD?@s2E%ajRr_!lno@y6|0{ z-50ibW}=o@768+7JVyi$Lg*1WzAN-Z-B+f6%K1ZyV-YOVt@}MRlk;1!#-6fF$Q|If zD5B=HnzsS#ahhrMx@4Gl=Sq79Y z{z_Bz&W6Pt(9^M;no6^cXn|CuA*|c!3Qt(`tFu8I4O;NGiI{bw_Kb`alJ3^lMgJ(zp^_{I>W#4$N-gPzcG&178B86k)9DaOHfCi zJ&i}!<7@q(gM{vud<4usiS$bVllac|_~D8lh9V`h8opTVynfX$w-Zf|16beb5X|yx zPp`Dy@k8H19TNjTrSO4oLt5OEDJW+fXtQwqh0$2@%0P$UsS)>&Lnibl^yRj{R3g<3 zFM>XJs>zcQmZKCh8@1%M90r9p#(*&!c~6rg$FS}d5p?M1sSI`!@Jykjx}Y!}F67wx z5Bxuy2mg)7bA2+M6P_OVmU4nJK6MiBmL3UxF`O^q5T7<^*>b>IXGCjsz6n9+Tf(v7 z5^P4~W*H%R!l#JEZERjvW51|F4`_|o@QoZ?eno|rhF*|!_rWl+Au)0|q*zOlBkZUH zEMUC#^48)Nr22qPpZxFK1Bj=hZ;x{JN~AXPq6br>n=zjzLN0)4(6S{q%D?o z2lfS5vAI4WU?rHkW_m*PI*fUvkm#AXau83!UIHl}!;WAa%Rs;>5>Y(`^mF2;khX|I zF3C|AK9EcJJ9pHFtQ)BxYKQuAjfrwfbf}aQMd+iRDKrXlVJC&DP&VdP^@vWHCzUpjF-y-5xvA ziONka2*o6r!GM)hx?R}V5D>dX4VTdU?8#(|nOG(1afnR+(#7ky%}iNu8e?2B->Qoo zhSgq3BWnBAgP+5`59_GZ+@YBN7N%c-ia?d9V!_Niwlz(Gldb?jh?W<4L61Y?eO7s3 zJ9lJ1ZNssl`uvvwmeWr%d4)RyB9F_<35Ccc91C2(ZP7vWW{j0%CK048Fto+pyD<}< z`6YUJt5IJm6QDj1ne?7DB!U;|A?ln-0@*Jn>Hc;3ZS0OYBIgZrlJV? zIr>VRh5YYrG2AMJ`!ATkWOFmz)l#ke={h}$G50R_1@cIFfvLT#84h&l6=bDJ`aY`{ zpOOXm^+%ome$)Yd%hSob-l_oW(iT*&to1I=#Y-eaemA5wo}czFA3HX8gpEC?NuWYd z6lQX$E|D`bbBB-L4W{gaW+GQj&-)_)hn!;dEtc&7M%EPlm?{dA+O!1Vg7 zi>~{OS5P#67(%{XiR}fqSs{Ig1YCyrLB3h>eL|Vx3NXTpyx2|T0*R>jw(^>dYd0bp z%d>{!je+@`2KeKR*z2sfSCkb&sS){hOkQ+57=<4pX%}AFd&RndgG1~-KSO(fe@;w( zX$-|{4rap4ZE)7W%@%{i_Ba1uPLz#isgHIcueZ!jxhwxSV%D_$e zz;*qRgzBANj5Jzu__;s=Ng-!Q-7%`PyHF_SRf!HKs;WbyZb;MeS@3r}d$BTBXMsf7 z2%6I+D}F-Ln=DVdclkEVjyO77pcZD^++JDLjm-!Zf(-iZ=8Ri7d@0kqitVH4?5h%9 z_@~$PlGs=d1UDS~*G6XhbhgRKdz|pWKU$K7(|_tXh_$oYhCR#qd;6^LO=4*1=eHXc zOj+i<0ZpkycYQBDmI$mMp-`s=UtSWxs*fE$G@8Xy6kChANwpY7(fj|xd;kdV20+eNap*!U{YDB_~GUi$+ zj>n9|mDyCvE~i!?K`RqSDX{eP-X#6an^RLiem`|~ch{6v?nZO6P0eJ?Aq za;BBvfy#l*+|_k#5177AoxLu`M#3UGQGExFki$C=Z@dRHtl(PHUMMz_Thjtm-(dr& zaEaNBzzSaKb0Guo;HgpgB^6YhYx^a^1N(Gp(FsSG98uDKUQfw%^=n3cTyirnC!A|T z+hH8A=ivhv9gO$@uF?9i&uZ?A?XoO2B(ZrmlCQ^r#j~1ROp^B`|*b8 z6BU@AG)?FWdPT7udn&9WuDm>$0(~r&cxlMQP1M&5C77t;m(j#WuJ&vGu0VDyxp(0s z3C5KzCe``EmlDXmZ-zdXBSq`{tCc!GPLN&*XDBE^00DA9+8&^?Ct=WiAs*Lsfp&|N z6J=LO(~Lxnwf?C`nE5ehSi-~U!f{Y7yK<}W99aNEjbg(t&MeQsTG|rva`(zTFB&Sx zG#e{kktvR9)-!dr$f>tFD|?Az=H5mkv3?{f-oE>r{)%eOgiYL^DOQw2P8(gQ0D0p( zlB9~`Eq(+d(&EFjQ`Ap(x)mdw*DX8d^M>V!TDX?%{plf7Q&fxg!WR*t9_QM8opa4~vDK>IiCIY;TnE9&+$6y4Xde6kPTo%-3Qec}?-9Uyy6 zaN%}aScL$PzB!j}8)Sw5dnvIVs{5QF7hQ8rggUq=NT>;V_-sRt*lKv|Yrrn6R5-CK zQ~5K5Z;`jt*;B-&nazTEI5sH+defA!@j-j)e|33{D|D)6?g8@v1+C<%{|qI?%(+ihV`| zwARi=OC2|(cgubW29R#qd&?$KgT3BbA%A1E1A2Ml`F@T(XM316(~eVn5xA}7VZ1M~ zFZW*T&><6sDH<0WRhML(uFQG>xy;+xDbC;l)MGwaimmUN?M+cYzCK#CSYQS+_1zg0;yk=Xq)OD7{UIG9e@fO? znN(r@fW!MN>wrD*=#@g@d1TQ2m;$Wv{fP%fF>hne+8?8Dw)j}z{vHpHbtKmB@2mA( z0is6m@%_w=2=`ZC!wp|hPu|iqVAu*T*x_O*O@r~^!B)-;{7XPx6mvKE{>)X}mBS2N zv;+4J>yuvP!(ge~W#npd#Pv&DNPB0T+~x8FqI%FNKGYCX{jeg8o>PfM3<9BcJuY(V zVTU&fL0L(+tffH1`uYV)9#Xs2%hYlk?qY|O=**d1`HE~bcmkVn?Z9CEhiw<;cB^{7 zek;K{{O>x5<$9aFU7?4Fj@aI@;%UKg8r@uBfL>FTi{71Uu8=FI{CaUl2lI8hBcmSp z=K=;h5rTdk##%a(Mk6AXB=M;Y3&_3?^!O1@GYVvU^~0LBeQ~CfPW0H;KY~}9-XK;N z{OBP)6XL*@5>=O9cDUSe|OHxr=i~D9=m7RF`d`z@sm3GzJx@3$VM3fq?smt|hYL!J4=JwPRBzRHf9zSLcX1Ab zE9AT-{AIEWXsgGnG( zf=;m^oAJtst)d1ZXk&gsW*AXK_4?_U6b*3yr;7-Z{*(?DC{|CmYFF%i<5?lsZ~HY6 z=3g2!IIBrWYhoc67u(0S2?)Jdw9vhfAJ{YmhTC`_pi#lW1@Fs z{_UXnZwRS>vs6a2S2vlUxe@Y;wlrFA6moXtz&YQo0&voEetn(w@3y>+h54H;IIvKJ zrRjimtQE}}My+@65CXY3JC~=1Xqr0N#4C11gU4Rez+Nbr3m|9|&iqBtiGGM2ZDOF6 zJ?5nDo5Ht<(IEp%A6`^sLLt}FiJIbYhL$C~3PxgW+P73VYO>CSrP1CSMlgg9kklCS z*1a^-4lbvYbTFuR*POPRec@~da4u}92;suBI9`@l)Q9eoT~uc6>C^;UM$e53-+?t(DtkpQKg3 zCjq!lu+YL3NGEVI692|}wr#aaw$rz>DC9Yk~U0hz3Cx8Bv9$`~L}dSwJ7`hY5IPH<=@`^85JZqP7)O#oon zAZB~O7;UII{ds<(EK_faWEKNZ%909yE(G+@Pi$4*EFG+gNa;M~v~<^lyQ$dEhCx96 zQGq|^=Z1xPbsgb4u9xD(3DssH?-IwCBFH|h=YQ-n0?%iu1MtmsStLO}AUdc4R2E7;y&`y60uGP*T#K>!NhLa)g-1rXq-V==2<7u_r`xXv8Yes((ojUD7DN=ddh# zb!qrV=N)5U}L1YZz2aC z-mF}~gE^sq2N>SHwW`!H(XSz_6hgU1C;zPV-n>RH9Ju-J*2XsD6`r&s z`F|$4D~PdZSv^|b@n~j^1$}C&9J`)&C}55**5QU-!V~oT`Jm>uFjc4*zG*FOPA$c= z#vGwS1;Nc%t)Q=&jaX;{=@*c-pITjBddNN7FhQER8x7`pb?fD2YYWi19OgCIDypc$ zc38b8jb4}XUaj6lRpi~y0GV$8O4P8)7Y--q;CD*;hjhqQg-c%ngOO)4Y;goHX}RqH z{^Lf8rPa9S1kanRW~Spv%;3&1qWRnl;C0Zk?sC!mrG$J0{}8b7jI%iqnVC^!Jbt`P z7YBY!-_UA5wZs*tpfL48wZcg4Tf+wvP_ez;;>MB=n-jJNm-Y$-{^OaGh07KYcVQCdwOI}?_&Y#LB+ROn&mM9&f8g@>=_?)_?$nDcB>738rAkbD0GrZ zs_Sf-JFr4}&`=uO2eY1yi0O_nk!icNoJ)~rii`-~7CMe1zrWmPV2DXOh7_=>=QhOf zR&oRU;h+Zp?VRFS-)kq|4R_wK!siIl>F=d+e!KiGk-y(0p*`AXs1o-!?!g)T92KxN zWz$n-Rq>&jMb5~htqrdI=TEY!Ycvq6e>1O-s+`0xmQ4jPS>DYQurCMSO#f%G>Hnhd zMQPBDuPfRFFW)_itSaUE8b<*mSuiZ7Fri=EJi;qIc+3_Vz`>b>A*+zs+taqe7GKG) z^^f!|-+_jL0W&g~i$&|9L%#6f%us?J93QZE1h!_n>TCp%ef5nbYcmto+KjfuJmx># z>G0z`-*aWk5s1U&wPv%!LYK+Wr)mtI^oJ$$aEX;a0y}1A;-40t>ah8T) zn&vSSn4~RegQ(~o{rLK{TVp%>-F${4Rcv=!WgdOC3u89Ulwexreed`YM!z&r!r;PN zK|n_FgV!#9(P-Xk;P$gjL9_l=iSP(dEBWF^3A;-kAup|ty!XA$?vG_uyfPEtL_@_y z{AJB=hTEN-qvXU06~zGhCx92JUa44IKRx79-<`Dk(I=bQ7}kx;tN37nLF(Bj#1Lp& z1?UHW$-VS1)!_;G_((1*wsH^=NG-WOy`-eV!U`|{9M0lb-XSN3ApS+1q@l#+TdXLu zG0x&dbt!ea=^J^CEpfTLuSn`4osE|JEFK+3%lG?M5fF3f$>$k)ZBym5%{pUx;P@6R zUasS&m>}`gwohhQlsX?n{}>&RDqbJ~F*6IVZ1J)%Gr)qUDF(TEtNU6;6bDt5p0oZC zf-XYL(G2Q8ruDeQqbqSNs7B0U%O@G>ic|ZqUn5Zq=-b4+Rs927T(qVBQd$LXxJQcP zz54E*SuR0MdVdYvwk%CKNnw3uP!R6Ne&$|bH2YXXiWcZB8t9)|xkM`5(5dVSr)QUM7s=RN^Nz|zRV0v7r_p2N8)^TL{@-kFnl+U0qPP=7JExqWFVTLGV8 z_}e%OQDQ5>dL(|@_*6rn3bkEjjpb|`2C!;3pU)he*JX5j0YYl_BIh3mMWO1BU8KVe zMdi@N?)~&L%V?3V5o;dX*cL&>uwo#L?C`YK|Lq7a@4e@CA3+E~D2jDv9V zk`h?-Eh?WxolS5>wN?Jtoa>)_rT;E?{O`28e-!lokH({VB!IkozL0uvKn=rsu5_{1 zRezdEKGd>w*Ou?{HHQ@>`k-4ARkE&?783mmkRg)=+FPZXoxM1-y1<(_FSw4 z-`4LOz6<`-7yKu(>g}Zuw&BJnR1UQ&efw)Aas2PedS4^t`|Y)<^q=b@yW5l9V1G^4 z_Up#m-zSZFN1p?)s)DZ%EDMfqg59mFC8hpuuPkqw{P{DRJ9FN8d!r=y>LNE-KkfSX zp>)s%64~*&qAV=;HOuF~eZvsfzqc!a;&!)xPiJ4yU;b5(B>a21eoY$P^@xla`@aLX z=fS2l5w3q{i!9F<_<_%t9_4e`e@ie8Ivz*(wn$-5xjlb3yGI{%v8{5wR^M_5SowST zvXjO11h#Y+dV6)5CHZ%|o<71g=w@5&`j>i@V%NjJ*UcW%f7fYPAQ0@?+s!+^=5Hme zZ;uW~-H)~>i_|~=-O#4E-RFb^{~1jT1-IWEzTx_L>{`{?CH?1MQsw+1b}zAr>d*0K zDFSFw^3mmGOIXKf@)6g5mvk1i%dz?>QZqJ?lTak0 zOYEM}JG5p1zRj9r9OYaPRzexEzlZHAwky|}r%|qd*C+MQ%gRQWMz}A3TwEk{xsH}6 zsRj&(oqv|jwwG?z8SH2b7OPzizCLe9UY@&d<{$Z1)ZbsV-Aq2(_L-&U1A-+QmlA_p zTwx;>Nqv2NpN-05FE>_3Io2kNg4?O@tmGQ*#WIH)%C2=mo1K7qVc@ewT9|sSRN(LJ zw-nNi0lu$Zz54T2vfyZ)0`}KC+h*6-XR|Upx{OQ^;_T#GiKiGTEsHnOwU33>vphXmloRgO1oIyazh*cy(q9PyyMb4=} z5y?5{Ac$m;oJw*=L2}L_86>A$@7w3z{(AJ+qx*dK{5-$*t{Qun#J#A|v zL7?Bw3)Vn2Mf}=;HuljV>!&O{$ub=(9TUkiIG0DwIr}sCoT~?syv^i*uMaaM)A)DK zVT|SC!HlHB(r}_~kFe)QHI+I=;)7H*eBWL4fi4{VX}D`;MQz~;@TfWNz4adwKX>ok zlYL!G5B_xQ5H8-q%llUe6FqA|w?0<&!|9J_A&^8O@*#Q|Be&1?;gt6hDK0S?ltG*w zjQn=@zB(L9_4liXzJHeKdp`2DwejoZMoVTBIh2Q9IOEdZ(BtRX=4e^#_?Nc&qhEhj zmd-|5c$@He25-7-nxrZz6f?AWH>okPio^GL)72mlOnA1_^SN={t0(X%qGfA062O-i zGpX>V%Sp-H-0&dkoX?Lj-!J2Brag;PlXEXzIKoHN4Z8%EHFW%G|HNeYSk=p_0@Dv# z8`YpZK4O1$?tM%iO^hII!n3ruJov*!wI_+X-SvBKiKm8n!GD!j0^RyL{kY#J2X*U_ zYjN06)$8YDHNu-Lf8|~PyIQgirvWYAdY2$pLXC%Smo*S)owU-l6ZBk$W`Y@*H!K%* z;lRyB^+k}H*T=0t#EB;)8#36n@7wlT$F&bfHdm`%%`bMtGyDzYKxZd=Wz7SQJEEGI zH!BiY)BQ~g!^eMG*t2INO^Ofz%I}(kN1fM-qNVXUl*g8$w0h_0S*vcY{pR-Otm0D5 zljDts2IJ1o_#MON6V|)c4!e&rL+9+&ZjUC=$>f=_Hgos(gWH2~UUrk!u@kRZQOJf2 zedNUK;;E%ckyqX8Rd*F@cP&`jrRHzqy8P?kB_>aH9^q`12wor0cquInEVVH@7)e^! z*{{(rwn`SrU0o{7r~NhF1p995PZAauuC{1-dAKR&Z*Th8W@#V=m4AJHZJI5uy{%eB zEGQ6PrA`>CvBO$ACs}@d^n8<^1>es{hZM=r&~fVLm)`qR#Wm#f#UtMf2`j(Ljpw!m zc7$Ny?4WN-D8cQ9 zWm!BQ;C=c>Yk!U1Zq<$q?0vaXv9WS+5V^4Avh$!@kswp%x|_GvW38k05pKKMT2a!gisyT`~5ANidT&iDDA z6palW2ASNfmWgD{gl_xyOv`R1eR z-$9JNXG=jQw}%^#d{(|5gf3j2b^qIA-Hd)t>2il9xlFFy|9iqJ{~*HhKWDZWn|CiJ#0+3wf#TZZ3Dd?gHYUm zk}ZF=89S!@#VoXcJ*?nA%U*C7Qu{IBhw{$~GC*!AHw$OWyeok|>sJ(}?b5>Z-AFLfsKmUoRqg5Um~-jVz9F~Xygr|2`|YYw>)r|0bu(OW;ni6!codd z1^&f@4Q#hDSK*bjK8lTK4@JkAL5WEJbZKQy%HD-+OkbRUV8N}c)czq~g~&`{LHRTQ zA5l}CGbfC%wx6e>O@tB(G$YAhET={aWJPsJZd;(EF&x5deyIcRG8nYzVN^=$@xwRD z!TqEvB?|*i zOVq#siN9dlegMQn$uNsts0~<@fw@a{J%BLtLwGTJk`(ZL#OaZWPqg)(N z`Z-A|Rl4|q>rRIzhpo&HEHV|M5o&eo<@Z%O(2N)t@*RBil8}>Q`Cy8Qtm%2x?h~5& z#0zDzsSI*dJtZ{fihwCUqN5@~CN~F<&a^17{T-P(nLo2V9Gc-x$%*6PS8fjhxF|tr z@R3u=vcS9OQ|f%n_!N&wEOxXb?P_oobZVnYIJOlDv zX!UA8GPFI}5Tm)J)ETJJMQkO+aO>c}_Do?Zgv|0#531lGRuUU=56;4n`>fXCV# zk;Ak+s}{jgd}SSa%D{q(VXKeFSK%T0$ktoPa*JQ@G8V(}rEyaT=nrSBMVi!atD*C( z{^){!sc3oyraPYGtfl3N+;BY-ndEriht|G5%)BVheGkVHxw72>p%bz%i+(PIX5-5$ z8MyfA(A1IKi2P*OH-FPO-7ibo(At+-M3SGV`^Qa=IfC~~I1HxEIQA6u`78x&U3(JJ z#trd)2r0BXt4Bg^Y<{l?Lb{S;L8vOXjSclTe1i?t3QJ0ev#B99z_Y>D>qj*Alx30p zZCR-&D>6Zgu9F1>XEKtu{q$Ht>A*QpuX%@h!4%~*@xm+}+6G`zewZ;eB+P%CR^ z{L{T6zNe=v*dca+P<&3*TeH*U4Vd1!@Yah`m3yR{kMh>$z6wD*A5u`pBoh0#wIm+8 zQ4IM0d~jl&1K$fe=bkS<8K@spzZizdNu-ISIp z#HPem`}>E1<(LA8iL*P9`rnsezSb93Jufp);ge70v3Jy-7A?F&)$NSZ^0T!A=s-#! zffYy+p6iN&Q*DC6v`R0;u#%RCk=|nO9j(roIrgcu4f!sZ;7yUZwZ99x8#dRjLn>UOnPe4pa%iU zNcm>l=y~%Bn z_L^V9Z`f_3Z{sm@^^N64%?^8g@i*JtUKkG2#{?gOGU!dct99t4zZZW;if&uf)UvP;n+Hx{eJxAaS?Q3Y{csSFi;#-8=l67;TuI!-SRfda6{B;D@Vif48yk zrTzN4@3{0@{SYBdeGErUSnW9YT=J<0`=Z1Y?FkGx(cBm-ZkW|oSfUB+tPKTycL4@S z`^+P;7L{GsE$7FLd80k}FIJm=cj(B$P1zNzg!WYIw-Hh8ol_OsP-9M8E8ksk?cA$m zch2@0PC&hA*tgyQ$5afUlmHaz(yceu0lkAavU#BIw(G{fGIRDT*bY5=+l8zd_!zou zbFfVx7^g&6KN-?)A}A~na}avPNjCcSg>Ub5|6O}SV%*)KkhGlr?6{wS)re%U(v$^c82)~uKiesU1$M|sKgPIs*Pmc-29{CoFV0hRhx_rgt! zFu?IcrV|bPv{_-iwG6EcPY=u~$9~B)C=LB>QVjv4&uXW2U;I(ZT5)x; zm004fHp;bfLXA1GVWPs|0$)cGB1Nokf1b3MSZ`?TUH3Drg%Xj>Cqb>o_4vD&vRgLA z_s(yF?aZ#{EGkV11Je(UDk=J<^NXL%cyXcG77z|jU{m}en71bM1YaUmh!g%`#%q4< z^{~7n`4>CHXIC|JNSmeH%e~;F9oxeX1-BeiWVU@p)xO8TxN-5(@;XHCWbMfy{qaM@ z|P)}lv7aUaS)1Z+Qbk~Xy&X+zUg-W>|z<|)}F zm5qn%F%Nwwm_jxlhqM(u$=*;%3w#-}G5|qWGK4&WJ~b|gq{Cbl9G1JZ4lI>0vp8!| zj#zZ!@-XA;Vp&7!?K53uDWJhiZ^JgUN$sIka#ECS%F_Fllef2N<3;>U50bG;>|2d1 zOK%}YW{GVkW!S^^h{6vyQdkG8Yz`MixdjcwO9OyW^VJDk)9&&yz#SUa~dfH zYbnjlkw(G`ou#H*B3)Ew+w$y1$2E|2bwM@V((4W8I0_WLp8=N6XKuqgMCD6%qa!B! zfX$sbgH4Dmtv`ojC_mB~8_Z&2c61^0eq zsoeGxks2>6UO}YYTJLIXL`+lo7w(6`vz2ZtQ4Vi*JC_EIs9RNAWzq(m3;Zs$ zHN)D^4Lag0?CTl6^PS7+SU2|_&OQXPtRNS;S`C8@Xbj|#l2&E1NL%X8^ur_rEv;4R z%!ITSx-!|95p1x$c@#qg2Ex{XW4hlm!Z1AGBim;EBf~?|ELEcNLbO+lXGq&HDX`** z7x?F4?su@hSiA3Vn9#3<4zawtkJru)!zu}H8Q zbgq`cdlSgQPNm$*15G}00`w(WD0CG3mjs44As|01QE+1A$4`7PF>t#^ddW?z1&S@9 zXtwEPp&gZ8%lZVn;+h&{QV;R&8x*LB1fnJekM2~Y%Ehhng~f2U$qodmF&M<`grwWw zpQi-~M!TFt+LTDV%%1Z-7I0a!aCj(H^I~;U<{tBJh9OI!Wr50rA7!9r^#JRmGw?f3 z$!X3V2TO_71cb&GpO#A2hWb`Bod7o9DqtZN#)cPLFizro_U-k2fDQlAw~syo&DSHo zA6M;elhb;Zo=TfAzqyEapc|UbBz%)TY;?B>5+Sa`$E3>r5pP$VcZ_D&( z7djVihOl3*EdM_1)}x*1^g9cpYJ}|1E!>Wa13Vm%))#I2U)l%HoaQ*l0}B#J7sMi5 z_x$$Uh}acn%?!KCsq3UskIKTKc4+1Q=dJ^L!>tp5b^VmtGW` z;Uq+d1Yq_82D47zav$LbGLi$G2cG7|t`>=qQLvVU*!c8Lt0q+Qk=6b?22`s=!_D+a zUDMAQib*=(*K#^8;AnYQEeaLZ)fmV?s%rYjO;qck8x<3U{x888N}THAgUchnG&5A?1w!D0Pfsp_9YN?8v&4j_fr|FySkKbR*}Q&}m(SI{|o@ z20_yp%g-biEuuG^@^VNMId0oG#Pl%Yq?u6KUWwmqRuYRZe)fk`EX^C4k6thWGSfWi z68Ebt1HwfynuGfa>i2Nl*I#c9WX3(?Qq52CdXDw|z8&;0{0EroW0R=0vRweGy1zsQX=S4C0ek!Vf!z1MqYPCFTJ|1giMli~`!xP9oFESZ6!XSh#_H z?{DdW@N-P~W?8CjTckAf;uZ$+&-Ed|V8amkk?Zlt4%tdR93jgcMC;zLkap#aTewu3 zg`*fnCnJMm1aW6(y4ZmYpFP*jJ{p-BvF1Y%Jos&K+G$FLrf7*GLmvdQLqzHI%blG1 z2{3j@JI%PsX3r|S%Ce~_Vz)-G>VERkx~!ZTxqctcCh5$U?24`)u1~l%2HESWl*Sw0 zMF;nCj}5KDDk{WiO5dya{!>4fk&TjA2oTL~lwtPciitrf+QeeS1uHL<>9(jev#Z-nR1 zVT;H1m)=uB1UJwR(TfS{X8@z=sw}ZD6WZMrmU30q@RJa(U{W_7_ZnH=DwD|wYmI`f z@lUzUir>PD58W5_v5vkLpCF(yL21b=$FBP!ZM@``Wd(eXGu9vw05^q}{IFc0AnJvv zWzC61ZFgW1h$8{00kK;T?@A3>s zV8Fq`IGAH%@Y7VDJyv%HWvm-Lgl@dov{|Ft;I7aceJqP~ZqwcE?kw1qVf6bpKqSWL z$lfM}-}cXlgUwBWi_^*Bv|8(}C zBDWV0r*xygDY~7{`fNLhWOEi&96Ml?@D<#=*?U_l_LEjzhqkwnyabS;r!FNVagdX! zW3PACQF5#d2%v(SGk>^U@cUxZI6Lz|7PC2lDetA(ERK8aoyJNg9hz4qP>tfK+zf?I zvP|H9IH})xfZ;6`d?P4JAHVFv8jH179_-gmvRQF*uwzF}vBezA-+GDKeLNDxQ{K+& zc;%xD1v&RYR}quc1lr!itZl76=qwFZr{rbh)jOv7C^23io@8Cf z2;`sX!_d0f#J5|mG7e1>OUcWhLb{z;>ERzr33(muFMq+dm3*dr+<0RmPBnBbtUCo2 zesY@@np-KR>7BG8TThO3u^KzPmN@vfoIR444|HcjeTkqaM$&NUp}IfukvV)n`cB9- z@6)LMb^t_@y1gPZcMb^9N=@aC2~r)@wV9IM!cfy;&I!ik`aQ&FtdZX_6*(TcwsVA! zG1Fn(W2#Oof)g7Cos*#h_6w4G5VSKvTPQrkk*_ zxJc&HiH13mz#`t~0MEnDAgULG!LuB|hkJLD-wV|Wh(h{bjz4l^Mpu-vE6v-+QebCN+r0bv^en8DQ-|$A258vUMRxTr z%111gIeB6@t>nE_J-?*C?kg%RxI>-A65mLlGE1s1A^&3m8lcn4qS%A9{aP{`6_M!G zz`WgTBXDOPw^50?NRX|1Wkrt?c6SXb+|tDiy(h=W7CkMN^yyLe1k(l+b;XwqTi7#USA#yCl-BCiZlvYRLK&*!4_6|uQ;cia%+j( zlqPw+U3k425j7!>r9#fMK zIr0w<7{6`yDNqP){hGdAqWKWk^y5Upa%B4D=JS|aXjuLC8#6YP$2Ud}y265aqE;!CD`%87Tv=80-$h+FfF|y*)%G9w zUY3ZnC9f|7e_p2;x@u0OjSR;kpvDt#_o6>|M(cLgCI2@00G9x2E+{|w7rlE|7=WjK z&f9_Iv*o!#b*r!jnAF~~bzbgxvpzi^zDb?!k$E4i{LR0g;^udz7dpXh=rRlzr$pyx zLstt1^uG_V$3G+78dShau{}^U3+!m=<&oumr>Wt&bHZ!f^x{k6P?!uk1fSlIOU`+5 zhnB)BgQL*Ac7KIu?O|{!Ebe?x!d}LnBPuNrk~I|gIRSa(9d_^ zuh~9br{(|)+^>rVIiIEUu(#N_y}>i{m-vuobHBwxYxCKM0H-o9V(asAw~v06dFZNp z&@aT5-A7*imXDX>y&`)PCL^;+x(gDd#TvFHj*3K2z_VJri3{XlKjUsj&pv6${)SGe zi4=u19BCbY=y=TmWs@h4*zr4^l?F}}4!mnBYV}JVJ%k|Rs`}2&%YwN>wB>rawfO>Q z^Vqx+!lSOdwdRn^4==l~S)fl;_-|)!+iuScC0qAJ9u=i-wHQr&>btS>FlpYFKn{CQ z+KtX?2T8|zw8t2j$TsrmRAM)}SU+w=c+-M7QyEh-zP8eUfpsn~u30jtCc<${$j1d| z)^}S)f^+d0CjDpIecO+bPB~9a^5WAZ=TC~ zSJ_S;TZ^wsa;h}HFeeeXY&7w48K2}NiE+(&Wq*G}iJgwno1lEbZ0wpkMSE3chc+AW zGynrTEY@7%7bZjPb zln(R98ZH^vZEkOz*g{pj9FSY*SBZ&Nv+UC4B?aqTFng(6YaY6;<7`;Sx>RiY=G8)3 z4!yFs^(g)q3%8g43EBF9UHY5i)gxh8=MVM*@$L)R3Tp z=ff=+IJfv9Mvc2)5%>~5VBF8%7#@~S(XHE6Y0v}pt)yk0i#w^5ALC}LwTYmin8FS< zKzrG3hi->9n7BZpNIgEc@%y!~+Np((bLsKfxd~^d_%#1#CKe<>dDZymG}0V@0ty7f5F}JnL;*EDn=)){x17~wK%~&vA`dA6UOED zmCFHky!G0b0y3$HSYvQfjEYuqUiP8I`W&NQoZo2dCM>CWd>X$sDZz0u-NLdhPFtennvVY5zd@ezMYMq_hh(#gMc zOJxow9JT6PRWutvT`5%~%f*Rs6xQC#fz3|-!lmVTm02Iu*2tx)G&Hz085TLL%TZde z(rn`7S20~+6Szq=J!Uy%F9qoPN}LTUp@xW?te?9AbAQBIcN$7aB28eav0DHOUSx}72Lw?G;L za^hWa&i)u8$xLA5BYmB6F1Yuc$>qrDiX0kf5-R^RRl95ZJ4?hMpZTh{eMp;|oSewF z80ku6SjgjfA+f=FXkb}HThid6$F-6!t|^gV?J8-TKH_W|CKe&v?c|_(*S~9-SmCj8 z$ntRLin;k8a$aJ;v-aSoRr+$wtHJULSocF%Wh)0XY+H)vAJ>uqfoMtqKfv(QurgU~E&`8V%m!vJ!lKB|(#ImE9A=*qFKb4)Xp#LrBMZ!S$*6!t~@eSe+dmF4hb--9e+;0(Vg;fsTzi!Wo4#xio{s6 zp68+xh=8lt3%G$^IWTW$D2bh~^HZm&T~KHAMjME~O|&~KM0!24h7Se-*1rpB4Eb}b zOK|vXK*TBeu@u@@1XF@@_Cvh_*(_ty=8g%Kn7R^HUtr00ayym)I0>wG>*5_&R6_3j zk*ybqc>qNFvlSJK#Jv9f78)4&0gLXr$I_2V+}W?Ht&2whe=ROjALQ|y~wgcq)p?` zNZrR3X=pK2Sq@a>y#fXk*M-wPQ$(DFeXty6niK2tYQ{njJ-7!gS3ghPG6umO50Akh znGkSnbvKY1k8^SgM~^RAe2MA`v5qbU!}K3QGVca1z0$-_Knp07%|Fgo)AFy16;X=6 zkxZO`(Gda|-wzK|VyHVu%n1wbh}p_;920eCABe&xZM|U(iWsz$e+-9GCc7|wZ$}<| zqiDBae7rR4jwuxp$r{G32|_u>MyhxU%wlBAqSMlvZUFUXj)h3vJEGBsea+KJ`Ovqo zFd_uNxY}b-&dnSd`l5Mh((`l{fe8czyBHzJwV%8u_ z1<=q^7b{r9&|p{D{U`gk{GL=shv#r8hP`VQe9_=DHyWB48Ppf}8HO>Z?DkrH&e-O} zv~>iQ{hO4>zuWQ8@(&(15d!KjciN>Wz$CwHN7)ij+OS~7;v!0{3PM5L7Eqg)fB}^_ z1CU4c%x=w*4^Lbkadrom6g?WV{27}Q`I_+OR{;J4?BHVA%(F^Os@>0rq_s>9`G}CO zaKdx+kpdoe6_nut_JS*I-!NVboIt)Qy4w%vakTo^@?M<^lh-I&Q#(^nPdWckJPuc& zVK7*&ILqFtDNL{s!Tr4gi%)|BHpKy9G)E~ThFDRu0BrMU;lr`U^YZ$~s1B8_`9XQkG+Go+nQyAQOGd>Ltf4?5N}qY%zchgS2PQ`d$T} zYcu~{5V{Zij4Uu5ba_0i&;Yv34eSq?U&O%g)z)o4k$2bVQ73|$UaO2BeKTy zeqku!&cnL{MU_Xbl4ilYdqKzMB8r1Q_aXA2EPR`@C-^EAeB2s8Xh1JMgd zM;a;dajyk2;7Bpse9!0hOrs2QFaM2g;g`7%)R!Fc@Z2E6@F<)uqWv)|!roZsyvtJ@ zT4NQl-cUm9NJSJA&qIQ;)y&d~zY!M+2ls6sy{5HJUBBaCB#WW2JkJJdkq*mmfHd(= zTW(O2zuM|=43|mdlZ~Ule{>Tjiif9vQuP}jYr(^GK1Y2`-3GLQonnW(K1FHiT>k3O zs(zVPL@G8AmYTC)1ea~4LMvh8=%SK!Q^`7}tZ-i>pn{7AE9`!4f*Li5_CujzFON_& zp66c&B6G@hQ7e-m3w^>x>hO+15cW%1-WvcH@1}#e2HB3JU}JBD?>zyL~Id49D?L0b5X18*Q(Hf zlqBDs*CS&)ig?3OSQBYkOfSdkt^MqvB%GMqnjtr(F2!D4%YD!H>EjzYX5|0`MzG_d zeuty!S9205+u@-&)R}Pkd2SSGpCI5M0&JW5n`>C#x$oEaA}b3ea8E$_n*}Yf=pEsFVLZwIds<90NXJ9&v?%67JNk?SGF@@gT~pz)S1 zfbxU3*ckaw7w{L6zZdAg0Uajn%s*50Z>;KW_wV5MpLgc}7Sf)P|M%$F&+W42Z!m)a z41c4`|Aa;U*}s`!a4&GKvnFAA=%hJxQ&M{F9AGXP#Q0E9HD|9@9wb|LqmLjd)CZOC z#;-}9zJP8w6BN}d)t@SYP{hnQT_o~wDCXQVpv`(~R0#`0d(MCc6F#nG*K}M`~?zpvGWds)V z{4fg6GkK#w&i?pFoH)x&zYl1w2YE@Uc?8AAC6@h4^+2W+O9}ytG}ve%9_gQQZ`bXS zQcMqkntEj&U@^D)Ep2Fy%BjBaQ;an?o@2{9s&6`xQ}`k5d;6MK>6co?mwNXraWHoC zIyeuCYS@5n7#QfGs&BZeSkT2oml>pqDZjGDK;dxm#c^)MQe4^BlPnL@fq}YCUjuI7 zgW%>%MIN%}csMiwy&6F7M5|-C+<^~-g*h0k-C)gdBWCY4#^lS+zad{})?JBJLQf5i6hxsRe9d1$%P-W7;zGf*z34e$b0L|FB zLExUHVJnwi5$9JS^fddmZis?l5Gx&|9-}j_z%$MEYU~{J)|`YcNR7_zA;*dSrm5=LPT?JP>6*P4?%~iZuM8W^R<&Sf=ufSld~1&MsX3 zi*90TOhHWQrbn*7IaEZBT~q~G+ME$feCk-Q?mW9narmyFYf~vJosOQX-)FAvKoi5p zilMfH?>jbp4*&47Z2Oy|H%7b`iSxU&@_jvn@LFannJ2?GLtyHQ@S-%P)4R2^u5>oXs`uQqcxBCr)77)|$RsmRSijo|MqPI2!YFIp0a&OnL4}V##*9SP03c zjU3F+Qru0WZaN(`gY|4i=9q4B(>L5J`QvLb&#~u};<)lSu4TieIbfEK4;g>z8#2`~ z;#3zDU~Z+ClYWl^Skdhd_JRUvot^s-%uyC~Hauf^c{9_wz+&4){(Tcc1qW8FEhzbEyww%S9iBv$UVmK1?>sx(A4YIKbP?kFaerWL4d$O$+k z&<0JdKX&*yYM8yY4;MPcy#x5SFY*1sfjdeu3~gh`h5eo|BK{#l4x*st@{?NF$KboN zz4f@?%Y^>gfY7~qBq|AA&-d3K&v&O1#S9qx8E-C)t@j4dap9>X6uN(jue^;2107Mp zc!j+Y;XxbqSc`S8z!xvVD=!2plueQu#6PX9h=+Dw)lKz1Dt8Lw=V=1&(AM{SCa9Ci zv}38)so7uv_iRe_a|3Hnkj#-uLcm*UVxTV2FfEe>&f~ba0?T5r<*05>ls|>l1skS? zs#7Lx#8cSEYSWl1<7X|uH^HWJd$Bg2Ob;261%4~MJ)j9REd9y0 z$b$X-(@XbW;?}0b)_{R!aNtazmh;JHTYmNPl9sJ&8 z`V(>~$KCd~A?bg#;{U(sph+8o2h^PXhBdk5U${Lyh+lq4O=>qXd%ZZ9`2ZWRknj_R zGMz^p4QCPt#_6o~T2GR+9qPhxR6dy}U^srj8Hv0p0rUIekMfOxwfpAND-CE`Ud_w~ z_YDVjhfMfnfjo29RtI`7tc}SJ>(_^}hyZb-f`P_I#1HU+7JqSV;L1wOq?I73|GOSg z{UJXyQS0zR0_#EcB9;kT`d~xbcVFsahD- zz)~8|YHGd}m*ME-+`$bSG3&WsYTSpl`@%J`tCfzng&`JV^iDd9?jDDQG9r+6XmZBc zz(by50H;BiJ=l2p2_nfQ44dFftMPDZ59ifwTu_N zrov75EKb0Ul0#D2Z&9q&G)O}T9*4c=mWXN1W1B|Kzsih!&UX$^>EGNOYK%D z??}6{j!iMjG5(8e*v8db!4u{Ov|tiF&@U^0bju-6!9C(bn_s^`g50vH0>+p{@i(Zk zSkuwa8sN6>Eq>8kJ)+NUjjq7`-b?|0|NTd{f&Ayyu7*w^i4s4_O4tiZftQptiUgnd zsOCub9iZkodQ&qroVVgaH&>d!<$l6bpM9F8q7Vlsg;`{7JcP^PxX!;e8y- zxUy&(DUsTUX0HRqk&57V_G7P@1{M9>nlmrwa#^N)Z|9=fh*eI-hd)(|)}+Q_xFyOd z>C4}*;w1#drj5$C89T{Rt&I*=69VOUBn8g*PW2Hz9-8c*M04|O2K9TLG=HXgA4NU3 zJDN}p77wpmZD<`-p*HJ7oS98^G^ikrk!L9#I9r&}>0IuZc!+XrqPxqa*jl>oz>aZc z7IU!KdJM7N)?*f-h%Ec&jhUPC9S`!yL-bIrlC)>%gJ~AxMYBEUS1)L$U+PKf4Yk|P z(8aVGtE&xXGu4nQ0ypw8)PeDch7f7UOD_U&RT<=V3QaiRdP80C{SL_ zbZU@uRA1`?V+b>mlrEAtmF*?LVrX1S%(1@?Xs_aJ9{!}D`_VZvhbg7qOo!ix9m>>e z`zaq~)g-*qtFmvU?h6U516?;&O}wAEur)~?6r1usoHMdqDH&bcnKxt^PR7HkSJNJu zcBFKC9fq1(_cmEt2PxLiA6J93c`*_SGyw8zfPAT`V9yhW6he%ev&vj$WUeeex&r&l zlL5HNM9NE?SryNSi4**NFPc{BCr-y>1DedYTCcaFAx8Q5 ziKU6NlZ~RCV!71GgC5IFIC;Y&9B60?iE#=u6n?4#OA?YzGwbX27V5+3pomkr>FG3a5uzwxSxn>qfCr@$?>h``0xXrgmMrgDpj zpi7HMy<1(z>qN*yO2@)col0%s)mn~JocCT-teM>=ZeL*7P&e!tl=L8ydsU-x_f+$t z@6z8*J1u8Qoz&ZZ*$&TwNnJN!Y=4B{89hI08f;E~ho^y1h9D?`+u>cXUp?I#7qF(^ zw!TVcvoh!Lh5)tR=ClGzvgqM|^VB?LX%*0ZK=hOqEN#f9I+XEY>CcG5BeckPdQjD4 zh??30T9h-^i4<6LSD8?cTpr1ty5g##PNqwnwNl3T!w)pc1_K|n@^FOXMfs9hLOqoE zQewTi6VGj6Y>e&P8gz3stj{^a3Z7%sQ+y~Uc^q=ikjhMR`ttqmxQkQV{Eous{Md`* zC0n(IyHr}Qjhb50wc+^aQUl%tTVAi+b{Z$WjJnA4?LHo4D63hBu3+wymENi_k5e#i z*7C@w&(a>ashLY%3JE)y@A%Cn$YpSy`$mM#;lI0)p@C$igI@4ptZH*PQMtn+@6bfD zoWn`!x(3s97ZiG+jM!*R#|80cxaBhdDm9j`X)D7`^_~aOuQ$MG^H&3ur4Y(U*J(=y zhL8j#8t5kDmoFNi=MRQi-l=Fp)Ns*G(Ux@wpP#|FDC|jf*xT2SW2;lK)mx{Z1qa}n z#@?Pl?GVbP1zkOlX$xt?w0`HVk>w-4@F+;-ITmR@=T47HrAs}1S8fUJICn8CNkrBC zW`IP!k#T^FZX+|Mos(?t_ zT#f5dLfoly7;TkfCfTwF1f})H|=~rj9qtb}7=vINR zY~3r?2w-Ld9yQtdXXY4_*!}vax1`WEEtvAa9L7g@fpwR#udI(Da7HY#8?nFL94{DN zwxV{bAElO;aU%{rG!3Ye`XE26)O-ztltCc3zhKJtW?4dFrYA5%C0QgX{wWot`aRL? zV`kz}&CSVfU74T&oc4kPuSj`af7920a4);zzs5!7zqMFIW=2K?y!Ro*i4t0RTjK>i zT<~@A*mom{%r@1G)33uMp_D&HfUdwooqs}TlD3I_U!UV~TnY$~!f&&2WHK5&o3TvukAJ33^yWQ#n72y_(xTjDFwF!D_b{}fvt=B)E!NXTT_Vokjj&-P(~)4aH12KaNV z_?MOQ?*v?S2zxr3TPTEmIJ{Zzo2}DP)XFht!V-_+>`Yw~s|_@WZ(AvTf?Aubg>5-K zv?&!l*9wtwn)vkfp;$>;Php(Xrz{Rt6&PiupiVKWyr+Vfp6N@lhZftTXj@OJiT+7m zW}Cx@^j_Co`OhjGU-lk&9}*P0;8o4BC_Z?W(4s*plzA_3n8U8xBj9?}}ih<5t}(N45zO`N;*S--t&fIQKfUUq}R3`somAA`{P*lX&}>G6qJx6<}$ORt1~!O?D}l=H;mu1aA~=XiXQD6{oc-X zz5%Jz^i*J-iOtTA!4 z6Y^n?!)W`fo*ehSODzk)DtGD0eyvkl{Wem5exqUj7lv=_>acv1csMXtY=`$TETCg> z&b84n?0qU>Dp)-Z@)YKr8f)YFjELm=6)=-R=MxyAtFcQNE59<*Dp$D#N{9t*vz&%7 ze~Jwi6|GVNIk=#v#+g)jq`W-#%L3%pV&74(Z+)yafWD<+sxctcju~KIgVYmoF67$N zJGs7-cVtTkB?d6Cof=&98seo&2g=8p&Tn104F`6uK?MY4dknk#2J?6^Bl5wFn$c$| z_fs8s4>|mY>e$*}sdA}NCCnwo)TuaK&am!f+0(y*?WC7!9sLz=Nn(3%Q|PXU7j7Wh z2~vC{)lWSk$F~`nzD~=ykx~2BjGJ+_h>qg`23h7X>5t?MpFX1#{P+p)LWPFtju2+L z`J|wtEtF&cbnCNBm;_)kDlo$x>s7EYL@|lU?Oy69YK}7VX%69Sm|FkaGR$3c%i0`^R8&0mtuzz)fM}W-@FSEt@KKc=Pa|uTatQ*=) zaA)3!B7Km!4y8{hw=uT6lHL14NZ}m(I~W2isnLVeh5=l(M;u+hr7A^poc~ZUMj3PE zAT$fk-%3UHY%o~s?Yf#%NPrZ|$_NlE1r2%54s^V}pAp&3zvCVga17Mh+NSuYL#v3xA9rV4HE^6m~j z6p(|wH5zo1ujZP-}6hbfh;|z zgKXlY7(Y(E-p;Eb0KHl#a96b7!8~?g&|g3is99jU;il(YvblWN(N^+IaTvK0(>A)g zdSxE&lVqYt)y&q6z36p!IQAK8(+r$tlt(eWrC0aI{&116-=Y;4lH})%EI#Z^$W=|4 z<_p0xO?~;p6@iItn3S}o{C8rh>}+H4rEq^1tS^;>*9i;QQGK zF~bi_OqrT5s(-r1d>X{6saWGnBe-J6ix-X;-zaY|9Eb{4IdBjs8A=bzhC&ygZOsbF zX7RFj5#Dg|+k~{0DJ%^Xrm_heiXO1Q3=3xVZ4!N#f7Kcv4t4UMq}E9QlqYf;y9qM+ zT#m@OSFISBObyT5P%t0h zFw{HSgqeWhQO$$_c{*P7khTA(x9g5-YTfclXmUiF0Z~ATK|&Gfy-N=*0i*^{Ktzxt zT?hsg0i_w5ARrJz5edqrcd^iv4oU|@Z-NlIFu8Z;&b&A8zBjYhtTpGaQ@*p$I%n*f1JN zdD;K|#abRknu+h5#mknUB3jxB0evc|f$NHDT%f(0yI_~so+Q%I2P?&qJbG`8$DDM` z^A|OK#&oABEDM=ae`tvL-$ge5h8UDm7OQ!rpHov|d8?&5z-C_zK3&Y#MCo+p0q&Y=P;7G2$B3zM)tce$!sY4^7mbz!y>{81x5?$-?F*hfAE ze5Wb;e);^gDXJCU@7m1NM9I7YK+!jdH>W`JnE%Zx&yn0j$Q&x5^1OPpwf-@?HF$B! z^D*c93oQ+Cl=wEK%uJi_ux{a#ZwDt?QDRK&WfXNMUsTn|?D#s$1A(IIwEg0=3~tL{ z=b#irUBV|`y9s-JMXpjyO!-N~>NC(@G7B*=->|4W)c-x$K{KWdGr(wW`!k##VaohMDaz!$FT5LmMW=6+0B&lO9m| zTZn3u18YdoO(u{6Omoh55h&mMfuDqDNUcicGKUGmO>!OCB26M9+#dTsZ=@S#k1|VX zRsg~2PPY)A*C6gWZ9k-Pi~>O2d}|}BpShv{N53?m#KD^#9WERLUcx-wG_kgvb*moV zaNt|cJeRYzT9k<`wW50?l=O67GBM zmqD=8E*zjBK{6$3Ec*FI9HsiL3qU6XG-T7h(NW@it#3gw`~UzuMyVG^Ld7eeyC+w$ zm96PGVeukv6e1v{Nv0I_LYy=g$V1Fps0LK`mO?Vo7+4u338Ac`c;hWbQ6K7T++%{R)nv#U3vhPl8V z?sPdf%caF-cI9i7;58m$H%r$}a*^KGI5iimhUP)?Esx+jd=-=^fm|-}t|<8V5qg<( zSygf0?xVZ=B~$WSNS(eVffCGfZ-07u1Y}RGk=K{H3*!RMqpD39VKZC83Y?KA84%~-V-Y=C;q#0DrPHhJ13zGdN9{k=@7`$m$?gzA~F*f+c zQBQ0!=LZ*v-{x_Gswzd2K4yl)FFv;D!ZuG#!m<$TXRF870_qW<3rMQDa;?X%fSD}t z@>y%nRjE=-0Gq^E_%*#ZHH5hgzFPZ;Zv1+;L~_KeD{vF4DiEoo^g!@e3Z&%?Gg&eT z-oYJ7g!<)!rklzJVl+<-Z&2jmGzFL%*O|)TgWsd}Lu)s2nu3fu!arhMHjzb5nIgB5 z_>J0i*?^zxSh_tu7}lu99;1E<-&B&e zgu#t)Lod{S+_r8?e|?x4b#K;E2=sxvCi&G$byQe;EnmL3aIl>dqe39t-fZsCS=hc9 zlML2<8*R#@AV`;dBI{zLGn1rN_nq9mUHyryS2%175i>{q)h(?mC0(2wKdILP`A0!Fu4J(U7^bRDlE0OOgxLrIIwyS6bE zoQ_`G)Ezp;H_N=73nYM+g5RP*8KEi$J_?xYfL}&u!Tw~XtV32r)zY^!1~XIfCuxw4 zckj8~SNccVv=VU8QpeJ~V`HmyTM# zJzQTO%Y5+*0l}et@uK6Zozj7M`K#-szI9JOCToK;M6|OT+AY+dM+Lp0Yi%=*u_c!7 z2}9d`*HOdLIlcO6b(n!TF?!+j0c8Ga_;IaPVy4-s0I2e{kV}j@&UiSU7h{~|;WH#T zFiEigBt^6IRm>$F3s)dmD4TYfwgqpsT&pV>6AZk_rx@Qbs?}j6tSw+7c?bs^CE5lo z_7Zaac$2n^lR7jK!;)4zg4g>+-IfP<@l`idHVE)l#`YJeL`HA2?^_sSbRB0#&}f_n zZ4M6nt(@vHE~x6NZWxo6b!F_zkpPt>_BEp(tIQOEp+(w#aurVY*Xm=*!x_`jSBqg+ zWm+bwMDNoie{>(fQMaV!*M#(zVr>N=jX}|8rgvsavP9JTE8a!6)>`3KzC>O++}nzN zDK$7}KIyJ_hgT0|S8UOP;MMajFdcrCM%3-YO@?(RBA%=^*y%<)h2A!hCBy8ew41^9 zXN7r`DpElRp+vd65mm3hN)}!Zl>u1e8^3mu)&j)Xo!w4?RG&6ac*=F01M;G5NAQAx zva5Ii1xk#}>|WX?72Y#h2zVj+#@ObC=-siZHGVtYQ$GQQe#$C?lZ5L4b@9uyw{G># z7k!5fMQZl{F5UvDsd(bCX)emZFL~!H^EsAh&H0IHd7uU_etsTP=8dH5CYRRMb`nA5 z3#@7G(MyZo8O6t*&|^no^C?#um4Ku_u3D=5hBIk^eX{$5Uz-&|6Dt)aQnk~x~@ zt2)NY&_RS2=ZvU`L-tO_zy;vk^a(i4oF9PVQ^?+b@F~TPxf{jg! z*BNR2j#Z1I2RC+1kZxT zIQV^bOx0DI*O1$iqG|RbIgPoi=7ENqCZ-B2uCna73=ZW7bDdiXw=dXvD?4^7E?Td4 zW~gghwR6=G)0DS5d;5B$*KS)?lq(RYM}7inG^Fr>Rr8p0l8P~(-8gfTBv`dte;8;; z>9(C>M$zzrKkzLCiCrfv?ABTM2rbOoDFWOIMNSZJbT``Kj&kaCn=i;<}^yuC~X^u<$ z^QOv!m5kQg;5kj~f24+XSialt4VX2<`7{PT1PD7>$+!n&~3%Oi`91 z6>QAhui79DJN@pV-k-l$nRstl3hQ;|)u24yF`+hW_#Z*|F90?+;$vEl<7VaizXj{R z8FwTK1dv8Nl{snt0lEJL@cxPRPkW5PWihfX`(B4u)y*PI>pLbVvpdy9aE*d@_43h7 z*-X}Do!vk2m>|g0Bq11ogudl#)VpQ!shT*G+`5V%U!8X89j9*gz3_Is!K#{;*_T{z z+H1E`me)ykKyF;Zc5RB7!tW{)SPq*K$mv3`{d(feLnfZt@@KKFSB-NI?Sah_6tAmV z=T9O=cpY=Lc174X)NU@RqBdK! zXo4x-9%Xt~>R&fK)7816ohk<^9MV*YQQnTDruP~{7OfaC{fNQ02f^}1uW75?Z;6u$ zi?sx7n%^hb29x%NXiv3oWuj8^F?X(_vv!Pj3ELE0&13&AhV~UrWAGdm*%;#@@zPuE zm=8}-heV39ndJTuv%_JEw8$AwbkkZ>?p}F@K#%4${ zLi^`Jw@OgGS|8K}okHr_L%IjLDE65?Eo_P)Qok@sK~Mv_-^QmrT>*W{6d0?AjZ-Fl zX!zTT2a7`VukSTvBW92hL}hxLE8@3Z$omz@eqE>@#O;=sH>+ArSq_<#h5*X9&|+E> zq2cu`pSOdz+pil4r2BR&EHK(NKk=9`q^u*w@+$0{wX&%zOJC+x4P_VNd}Y-HYEW4z z){{|bCB*w)7rMdvT=B8tl_5H4MHoH@8vjMfeK&-FP1ES%cs5aw@#%?KLkzA26nNM9 z&n^GrSS(o&miHkyWyv+5dhaZpxgQ)Xu>{k|wnsUd7(dqDmRjXp(RfO$&lPWT^iujKWbl=@nHCLs z;Je}3{UwS5OaWo|pWFW!uTzYt$H$PM**CdV``r`s63-8(eV+F;&-iM;g+ z+Xf79H`;-|&xc3-j=r9qf&iHvYn&BcF%D3Ot~q=(QAJ z08VqMOOT}e9$G}5l+OGbUaFjIk{=f()#yFCle($uHfJvBKfSwVwHkPSN-(Ck{b!KJ zp^x{W#iw2U3%s4O@nh>I&~ecLWa*TDt-Z!;QjLCo@`W^*OLhFg73vfZmPM^hl=q=z z>l^Os+=?*XR9izF7IQu~P2zYMDt+2d^lNx=L?Y;WVie_96$$z}o9Qj2sc2808=CYL z{ZVNWp2$CqD@YA6>PFX6jV!#j#+!JR)MdUfuq2km70&6?alSIQShA86o69AlXlgDO z>*{rYE!@0QAj~L8VRdfyN`jC@TOGz=Is+Q!4zTYmKKT<7DL&X=;NV`M(9z)jjT49D z5qF)L-;nJm0SS3iT>p-lt#YWMupyrh@FQm+<>*ybn=9V50N3c%7Fy|<&rNc>oKgQ& zRJF@(*;9)JQm)L%{3<=7a_9luC*R7uM{HkwX?2|MPR2Y5@^^2J7 z%MM^U-!*W_>uGy`)bc1Tej^JSp?uF^YjbuI)5B7|h91xl_B1_6p4T@v>+v3#{OI|z z#VF)#9j5=6_&U0`)}OGWN0fY8pbt_>KgrCfoBzuhf^-W%poke@G6Hj`J;M^8+S9wLA? z1Fr`aYq)R>is$z?;>l}C(G2cA`T^%%k+3wPi@w{V(43cJ$tM}A1+MAJ*g9gNiGDGg zxyvB^Gwjf5w8Wh=wv`FBVW6>4kbF|w11+$Gc2iZT)vbv{zBZf9u74>)a~l>Wt)3iw zI5us5CM%l3e&KlR<7@(|H)aueXX2XT##Jf?7n=}vzh&zyxtTg34Z7P|?3M)s4F%qx zbIbg-%ixQvRi`84NzR)=KAq}PD{SuxXLM#lg!BTY(=2x7VZl^3#eD4(8q6~_8Q$0S zQy%S-GMiF&_HntXw6`fs1fhkCvMv1xrbO<})hbt@gig*tTYxENQtFMW-&C3`bnOv67=k{P~qlzAIpJV=#=#;Lcn_lsD{NJI0gCsI`$vh%ksa8Gn4MD7H1hUL$ngXlGf^tAg&uno{&tAA~I6 zkQp&m9Wtisr_+esLjsES50-;e5*qIuWY#Z=13S-G$}avlm-Np${da!qM=zsy-`%7B g%7vwj-+Q;m^P=CahFWj@DTuP^Ya443H60`V4L}Rzb^rhX literal 0 HcmV?d00001 diff --git a/tests/typ/layout/columns.typ b/tests/typ/layout/columns.typ new file mode 100644 index 000000000..b6019a8ae --- /dev/null +++ b/tests/typ/layout/columns.typ @@ -0,0 +1,97 @@ +// Test the column layouter. + +--- +// Test columns for a sized page. +#set page(height: 4.3cm, width: 7.05cm, columns: 2) + +Lorem ipsum dolor sit amet is a common blind text +and I again am in need of filling up this page so I'm +returning to this trusty tool of tangible terror. +Sure, it is not the most creative way of filling up +a page for a test but it does get the job done. + +--- +// Test the `columns` function. +#set page(width: auto) + +#rect(width: 180pt, height: 100pt, padding: 8pt, columns(2, [ + A special plight has befallen our document. + Columns in text boxes reigned down unto the soil + to waste a year's crop of rich layouts. + The columns at least were graciously balanced. +])) + +--- +// Test more than two columns. +#set page(height: 2cm, width: 7.05cm, columns: 3) +#set par(align: center) + +#circle(fill: eastern) +#circle(fill: conifer) +#circle(fill: eastern) + +--- +// Test setting a column gutter. +#set page(height: 3.25cm, width: 7.05cm, columns: 2, column-gutter: 30pt) + +#rect(width: 100%, height: 2.5cm, fill: conifer) +#rect(width: 100%, height: 2cm, fill: eastern) + +--- +// Test RTL columns. +#set page(height: 3.25cm, width: 7.05cm, columns: 2, column-gutter: 30pt) +#set text("Noto Sans Arabic", serif) +#set par(lang: "ar") + +#rect(fill: conifer, height: 8pt, width: 6pt) وتحفيز +العديد من التفاعلات الكيميائية. (DNA) من أهم الأحماض النووية التي تُشكِّل +إلى جانب كل من البروتينات والليبيدات والسكريات المتعددة +#rect(fill: eastern, height: 8pt, width: 6pt) +الجزيئات الضخمة الأربعة الضرورية للحياة. +--- +// Test the `colbreak` function. +#set page(height: 1cm, width: 7.05cm, columns: 2) + +A +#colbreak() +#colbreak() +B +#colbreak() +C + +--- +// Test an empty second column. +#set page(width: 7.05cm, columns: 2) + +#rect(width: 100%, padding: 3pt)[So there isn't anything in the second column?] + +--- +// Test columns when one of them is empty. +#set page(width: auto, columns: 3) + +The page can grow as much as it wants horizontally. + +--- +// Test columns in an infinitely wide frame. +#set page(width: 7.05cm, columns: 2) + +There can be as much content as you want in the left column +and the document will grow with it. + +#rect(fill: conifer, width: 100%, height: 30pt) + +Only an explicit #colbreak() `#colbreak()` can put content in the +second column. + +--- +// Test a page with a single column. +#set page(height: auto, width: 7.05cm, columns: 1) + +This is a normal page. Very normal. + +--- +// Test a page with zero columns. +#set page(height: auto, width: 7.05cm, columns: 0) + +This makes less sense but will still +produce a normal page. From 7efdcdf2472257102c6b4b30bf285e2058924070 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 26 Dec 2021 17:34:04 +0100 Subject: [PATCH 2/6] Apply simple suggestions from code review Co-Authored-By: Laurenz --- src/eval/node.rs | 4 ++-- src/library/columns.rs | 21 ++++++++++----------- src/library/flow.rs | 6 +++--- src/library/mod.rs | 10 ++++++++++ src/library/page.rs | 6 +++--- tests/ref/layout/columns.png | Bin 42011 -> 37509 bytes tests/typ/layout/columns.typ | 7 ++++--- 7 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/eval/node.rs b/src/eval/node.rs index d5b67adb3..43cb906b7 100644 --- a/src/eval/node.rs +++ b/src/eval/node.rs @@ -354,8 +354,8 @@ impl Packer { // Take the flow and erase any styles that will be inherited anyway. let Builder { mut children, styles, .. } = mem::take(&mut self.flow); - for child in &mut children { - child.styles_mut().map(|s| s.erase(&styles)); + for local in children.iter_mut().filter_map(FlowChild::styles_mut) { + local.erase(&styles); } let flow = FlowNode(children).pack(); diff --git a/src/library/columns.rs b/src/library/columns.rs index 88ad81725..3109eda33 100644 --- a/src/library/columns.rs +++ b/src/library/columns.rs @@ -3,12 +3,11 @@ use super::ParNode; /// `columns`: Stack children along an axis. pub fn columns(_: &mut EvalContext, args: &mut Args) -> TypResult { - let count = args.expect("column count")?; + let columns = args.expect("column count")?; let gutter = args.named("gutter")?.unwrap_or(Relative::new(0.04).into()); let body: Node = args.expect("body")?; - Ok(Value::block(ColumnsNode { - columns: count, + columns, gutter, child: body.into_block(), })) @@ -23,7 +22,7 @@ pub fn colbreak(_: &mut EvalContext, _: &mut Args) -> TypResult { #[derive(Debug, Hash)] pub struct ColumnsNode { /// How many columns there should be. - pub columns: usize, + pub columns: NonZeroUsize, /// The size of the gutter space between each column. pub gutter: Linear, /// The child to be layouted into the columns. Most likely, this should be a @@ -50,11 +49,10 @@ impl Layout for ColumnsNode { // `region.backlog`. let mut sizes = vec![]; - // Assure there is at least one column. - let columns = self.columns.max(1); + let columns = self.columns.get(); for (current, base) in std::iter::once((regions.current, regions.base)) - .chain(regions.backlog.clone().into_iter().map(|s| (s, s))) + .chain(regions.backlog.as_slice().iter().map(|&s| (s, s))) { let gutter = self.gutter.resolve(base.x); gutters.push(gutter); @@ -68,8 +66,9 @@ impl Layout for ColumnsNode { } let first = sizes.remove(0); - let mut col_regions = Regions::one(first, first, regions.expand); - col_regions.backlog = sizes.clone().into_iter(); + let mut pod = + Regions::one(first, Spec::new(first.x, regions.base.y), regions.expand); + pod.backlog = sizes.clone().into_iter(); // We have to treat the last region separately. let last_column_gutter = regions.last.map(|last| { @@ -78,11 +77,11 @@ impl Layout for ColumnsNode { (last.x - gutter * (columns - 1) as f64) / columns as f64, last.y, ); - col_regions.last = Some(size); + pod.last = Some(size); (size, gutter) }); - let frames = self.child.layout(ctx, &col_regions); + let frames = self.child.layout(ctx, &pod); let dir = ctx.styles.get(ParNode::DIR); // Dealing with infinite height areas here. diff --git a/src/library/flow.rs b/src/library/flow.rs index ca730db14..6bfa3ddd9 100644 --- a/src/library/flow.rs +++ b/src/library/flow.rs @@ -32,12 +32,12 @@ impl Debug for FlowNode { pub enum FlowChild { /// A paragraph/block break. Break(Styles), - /// Skip the rest of the region and move to the next. - Skip, /// Vertical spacing between other children. Spacing(SpacingNode), /// An arbitrary node. Node(PackedNode), + /// Skip the rest of the region and move to the next. + Skip, } impl FlowChild { @@ -73,7 +73,7 @@ impl Debug for FlowChild { } Self::Spacing(node) => node.fmt(f), Self::Node(node) => node.fmt(f), - Self::Skip => write!(f, "Skip"), + Self::Skip => f.pad("Skip"), } } } diff --git a/src/library/mod.rs b/src/library/mod.rs index 313d423bb..1c97f5297 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -26,6 +26,7 @@ mod utility; /// Helpful imports for creating library functionality. mod prelude { pub use std::fmt::{self, Debug, Formatter}; + pub use std::num::NonZeroUsize; pub use std::rc::Rc; pub use typst_macros::properties; @@ -171,6 +172,15 @@ castable! { Value::Int(int) => int.try_into().map_err(|_| "must be at least zero")?, } +castable! { + prelude::NonZeroUsize, + Expected: "positive integer", + Value::Int(int) => int + .try_into() + .and_then(|n: usize| n.try_into()) + .map_err(|_| "must be positive")?, +} + castable! { String, Expected: "string", diff --git a/src/library/page.rs b/src/library/page.rs index 6585edb9f..100b4d0c5 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -41,7 +41,7 @@ impl PageNode { /// The page's background color. pub const FILL: Option = None; /// How many columns the page has. - pub const COLUMNS: usize = 1; + pub const COLUMNS: NonZeroUsize = NonZeroUsize::new(1).unwrap(); /// How many columns the page has. pub const COLUMN_GUTTER: Linear = Relative::new(0.04).into(); } @@ -119,11 +119,11 @@ impl PageNode { }; let columns = ctx.styles.get(Self::COLUMNS); - let child = if ctx.styles.get(Self::COLUMNS) > 1 { + let child = if columns.get() > 1 { ColumnsNode { - child: self.child.clone(), columns, gutter: ctx.styles.get(Self::COLUMN_GUTTER), + child: self.child.clone(), } .pack() } else { diff --git a/tests/ref/layout/columns.png b/tests/ref/layout/columns.png index a1aee61cb7cbd36a96533acdf01a34ab16c34c44..a9e7f6619048d08da2f74169c174265501efa26d 100644 GIT binary patch literal 37509 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 literal 42011 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 diff --git a/tests/typ/layout/columns.typ b/tests/typ/layout/columns.typ index b6019a8ae..ed0eb5d69 100644 --- a/tests/typ/layout/columns.typ +++ b/tests/typ/layout/columns.typ @@ -48,6 +48,7 @@ a page for a test but it does get the job done. إلى جانب كل من البروتينات والليبيدات والسكريات المتعددة #rect(fill: eastern, height: 8pt, width: 6pt) الجزيئات الضخمة الأربعة الضرورية للحياة. + --- // Test the `colbreak` function. #set page(height: 1cm, width: 7.05cm, columns: 2) @@ -69,7 +70,7 @@ C // Test columns when one of them is empty. #set page(width: auto, columns: 3) -The page can grow as much as it wants horizontally. +Arbitrary horizontal growth. --- // Test columns in an infinitely wide frame. @@ -91,7 +92,7 @@ This is a normal page. Very normal. --- // Test a page with zero columns. +// Error: 49-50 must be positive #set page(height: auto, width: 7.05cm, columns: 0) -This makes less sense but will still -produce a normal page. +This makes less sense. From ee12bf67161f20983eeaf90ddbcd2d6a849f47ba Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Mon, 27 Dec 2021 13:41:57 +0100 Subject: [PATCH 3/6] Iterate over target regions instead in columns loop --- src/library/columns.rs | 76 ++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/src/library/columns.rs b/src/library/columns.rs index 3109eda33..779617ede 100644 --- a/src/library/columns.rs +++ b/src/library/columns.rs @@ -81,7 +81,10 @@ impl Layout for ColumnsNode { (size, gutter) }); - let frames = self.child.layout(ctx, &pod); + // We reverse the frames so they can be used as a stack. + let mut frames = self.child.layout(ctx, &pod); + frames.reverse(); + let dir = ctx.styles.get(ParNode::DIR); // Dealing with infinite height areas here. @@ -95,8 +98,6 @@ impl Layout for ColumnsNode { regions.current.y }; - let mut regions = regions.clone(); - let to = |cursor: Length, width: Length, regions: &Regions| { if dir.is_positive() { cursor @@ -108,47 +109,44 @@ impl Layout for ColumnsNode { let mut res = vec![]; let mut frame = Frame::new(Spec::new(regions.current.x, height)); + let total_regions = (frames.len() as f32 / columns as f32).ceil() as usize; - for (i, child_frame) in frames.into_iter().enumerate() { - let region = i / columns; - let size = std::iter::once(&first) - .chain(sizes.iter()) - .nth(i) - .copied() - .unwrap_or_else(|| last_column_gutter.unwrap().0); - - frame.push_frame( - Point::new(to(cursor, size.x, ®ions), Length::zero()), - child_frame.item, - ); - - cursor += size.x; - - if i % columns == columns - 1 { - // Refresh column height for non-infinite regions here. - let height = if regions.current.y.is_infinite() { - height - } else { - regions.current.y + for (i, (current, base)) in regions.iter().take(total_regions).enumerate() { + for col in 0 .. columns { + let total_col = i * columns + col; + let child_frame = match frames.pop() { + Some(frame) => frame.item, + None => break, }; - regions.next(); - let old_frame = std::mem::replace( - &mut frame, - Frame::new(Spec::new(regions.current.x, height)), - ); - res.push(old_frame.constrain(Constraints::tight(®ions))); - cursor = Length::zero(); - } else { - cursor += gutters - .get(region) + let size = std::iter::once(&first) + .chain(sizes.iter()) + .nth(total_col) .copied() - .unwrap_or_else(|| last_column_gutter.unwrap().1); - } - } + .unwrap_or_else(|| last_column_gutter.unwrap().0); - if !frame.elements.is_empty() { - res.push(frame.constrain(Constraints::tight(®ions))); + frame.push_frame( + Point::new(to(cursor, size.x, ®ions), Length::zero()), + child_frame, + ); + + cursor += size.x + + gutters + .get(i) + .copied() + .unwrap_or_else(|| last_column_gutter.unwrap().1) + } + + let old_frame = std::mem::replace( + &mut frame, + Frame::new(Spec::new(regions.current.x, height)), + ); + + let mut cts = Constraints::new(regions.expand); + cts.base = base.map(Some); + cts.exact = current.map(Some); + res.push(old_frame.constrain(cts)); + cursor = Length::zero(); } res From accf70949dba4237dbabff11f66fe6f4b6d731be Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Mon, 27 Dec 2021 13:50:36 +0100 Subject: [PATCH 4/6] Make column child frames expand horizontally --- src/library/columns.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/library/columns.rs b/src/library/columns.rs index 779617ede..04b5ae479 100644 --- a/src/library/columns.rs +++ b/src/library/columns.rs @@ -69,6 +69,7 @@ impl Layout for ColumnsNode { let mut pod = Regions::one(first, Spec::new(first.x, regions.base.y), regions.expand); pod.backlog = sizes.clone().into_iter(); + pod.expand.x = true; // We have to treat the last region separately. let last_column_gutter = regions.last.map(|last| { @@ -81,9 +82,7 @@ impl Layout for ColumnsNode { (size, gutter) }); - // We reverse the frames so they can be used as a stack. - let mut frames = self.child.layout(ctx, &pod); - frames.reverse(); + let frames = self.child.layout(ctx, &pod); let dir = ctx.styles.get(ParNode::DIR); @@ -107,30 +106,26 @@ impl Layout for ColumnsNode { }; let mut cursor = Length::zero(); + let mut frames = frames.into_iter(); let mut res = vec![]; let mut frame = Frame::new(Spec::new(regions.current.x, height)); let total_regions = (frames.len() as f32 / columns as f32).ceil() as usize; for (i, (current, base)) in regions.iter().take(total_regions).enumerate() { - for col in 0 .. columns { - let total_col = i * columns + col; - let child_frame = match frames.pop() { + for _ in 0 .. columns { + let child_frame = match frames.next() { Some(frame) => frame.item, None => break, }; - let size = std::iter::once(&first) - .chain(sizes.iter()) - .nth(total_col) - .copied() - .unwrap_or_else(|| last_column_gutter.unwrap().0); + let size = child_frame.size.x; frame.push_frame( - Point::new(to(cursor, size.x, ®ions), Length::zero()), + Point::new(to(cursor, size, ®ions), Length::zero()), child_frame, ); - cursor += size.x + cursor += size + gutters .get(i) .copied() From 37328f11edfca7afe918bb297ed1656eb053f7a3 Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Mon, 27 Dec 2021 19:01:36 +0100 Subject: [PATCH 5/6] Adjust column size and expansion handling --- src/library/columns.rs | 69 ++++++++++++++++------------------- tests/ref/layout/columns.png | Bin 37509 -> 37999 bytes tests/typ/layout/columns.typ | 68 +++++++++++++++++++--------------- 3 files changed, 71 insertions(+), 66 deletions(-) diff --git a/src/library/columns.rs b/src/library/columns.rs index 04b5ae479..225cba47a 100644 --- a/src/library/columns.rs +++ b/src/library/columns.rs @@ -37,7 +37,8 @@ impl Layout for ColumnsNode { regions: &Regions, ) -> Vec>> { // Separating the infinite space into infinite columns does not make - // much sense. + // much sense. Note that this line assumes that no infinitely wide + // region will follow if the first region's width is finite. if regions.current.x.is_infinite() { return self.child.layout(ctx, regions); } @@ -53,10 +54,11 @@ impl Layout for ColumnsNode { for (current, base) in std::iter::once((regions.current, regions.base)) .chain(regions.backlog.as_slice().iter().map(|&s| (s, s))) + .chain(regions.last.iter().map(|&s| (s, s))) { let gutter = self.gutter.resolve(base.x); gutters.push(gutter); - let size = Spec::new( + let size = Size::new( (current.x - gutter * (columns - 1) as f64) / columns as f64, current.y, ); @@ -67,36 +69,25 @@ impl Layout for ColumnsNode { let first = sizes.remove(0); let mut pod = - Regions::one(first, Spec::new(first.x, regions.base.y), regions.expand); - pod.backlog = sizes.clone().into_iter(); + Regions::one(first, Size::new(first.x, regions.base.y), regions.expand); pod.expand.x = true; - // We have to treat the last region separately. - let last_column_gutter = regions.last.map(|last| { - let gutter = self.gutter.resolve(last.x); - let size = Spec::new( - (last.x - gutter * (columns - 1) as f64) / columns as f64, - last.y, - ); + // Retrieve elements for the last region from the vectors. + let last_gutter = if regions.last.is_some() { + let gutter = gutters.pop().unwrap(); + let size = sizes.drain(sizes.len() - columns ..).next().unwrap(); pod.last = Some(size); - (size, gutter) - }); + Some(gutter) + } else { + None + }; + + pod.backlog = sizes.into_iter(); let frames = self.child.layout(ctx, &pod); let dir = ctx.styles.get(ParNode::DIR); - // Dealing with infinite height areas here. - let height = if regions.current.y.is_infinite() { - frames - .iter() - .map(|frame| frame.item.size.y) - .max() - .unwrap_or(Length::zero()) - } else { - regions.current.y - }; - let to = |cursor: Length, width: Length, regions: &Regions| { if dir.is_positive() { cursor @@ -108,39 +99,43 @@ impl Layout for ColumnsNode { let mut frames = frames.into_iter(); let mut res = vec![]; - let mut frame = Frame::new(Spec::new(regions.current.x, height)); let total_regions = (frames.len() as f32 / columns as f32).ceil() as usize; for (i, (current, base)) in regions.iter().take(total_regions).enumerate() { + // The height should be the parent height if the node shall expand. + // Otherwise its the maximum column height for the frame. In that + // case, the frame is first created with zero height and then + // resized. + let mut height = if regions.expand.y { current.y } else { Length::zero() }; + let mut frame = Frame::new(Spec::new(regions.current.x, height)); + for _ in 0 .. columns { let child_frame = match frames.next() { Some(frame) => frame.item, None => break, }; - let size = child_frame.size.x; + let width = child_frame.size.x; + + if !regions.expand.y { + height = height.max(child_frame.size.y); + } frame.push_frame( - Point::new(to(cursor, size, ®ions), Length::zero()), + Point::new(to(cursor, width, ®ions), Length::zero()), child_frame, ); - cursor += size - + gutters - .get(i) - .copied() - .unwrap_or_else(|| last_column_gutter.unwrap().1) + cursor += width + + gutters.get(i).copied().unwrap_or_else(|| last_gutter.unwrap()); } - let old_frame = std::mem::replace( - &mut frame, - Frame::new(Spec::new(regions.current.x, height)), - ); + frame.size.y = height; let mut cts = Constraints::new(regions.expand); cts.base = base.map(Some); cts.exact = current.map(Some); - res.push(old_frame.constrain(cts)); + res.push(frame.constrain(cts)); cursor = Length::zero(); } diff --git a/tests/ref/layout/columns.png b/tests/ref/layout/columns.png index a9e7f6619048d08da2f74169c174265501efa26d..34eb19076a4cfcc418fb01836d88087b25028a6e 100644 GIT binary patch literal 37999 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 literal 37509 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 diff --git a/tests/typ/layout/columns.typ b/tests/typ/layout/columns.typ index ed0eb5d69..7683c55e3 100644 --- a/tests/typ/layout/columns.typ +++ b/tests/typ/layout/columns.typ @@ -1,14 +1,16 @@ // Test the column layouter. --- -// Test columns for a sized page. -#set page(height: 4.3cm, width: 7.05cm, columns: 2) +// Test normal operation and RTL directions. +#set page(height: 3.25cm, width: 7.05cm, columns: 2, column-gutter: 30pt) +#set text("Noto Sans Arabic", serif) +#set par(lang: "ar") -Lorem ipsum dolor sit amet is a common blind text -and I again am in need of filling up this page so I'm -returning to this trusty tool of tangible terror. -Sure, it is not the most creative way of filling up -a page for a test but it does get the job done. +#rect(fill: conifer, height: 8pt, width: 6pt) وتحفيز +العديد من التفاعلات الكيميائية. (DNA) من أهم الأحماض النووية التي تُشكِّل +إلى جانب كل من البروتينات والليبيدات والسكريات المتعددة +#rect(fill: eastern, height: 8pt, width: 6pt) +الجزيئات الضخمة الأربعة الضرورية للحياة. --- // Test the `columns` function. @@ -22,43 +24,49 @@ a page for a test but it does get the job done. ])) --- -// Test more than two columns. -#set page(height: 2cm, width: 7.05cm, columns: 3) -#set par(align: center) +// Test columns for a sized page. +#set page(height: 5cm, width: 7.05cm, columns: 2) -#circle(fill: eastern) -#circle(fill: conifer) -#circle(fill: eastern) +Lorem ipsum dolor sit amet is a common blind text +and I again am in need of filling up this page +#align(bottom, rect(fill: eastern, width: 100%, height: 12pt)) +#colbreak() + +so I'm returning to this trusty tool of tangible terror. +Sure, it is not the most creative way of filling up +a page for a test but it does get the job done. --- -// Test setting a column gutter. -#set page(height: 3.25cm, width: 7.05cm, columns: 2, column-gutter: 30pt) +// Test the expansion behavior. +#set page(height: 2.5cm, width: 7.05cm) + +#rect(padding: 6pt, columns(2, [ + ABC \ + BCD + #colbreak() + DEF +])) + +--- +// Test setting a column gutter and more than two columns. +#set page(height: 3.25cm, width: 7.05cm, columns: 3, column-gutter: 30pt) #rect(width: 100%, height: 2.5cm, fill: conifer) #rect(width: 100%, height: 2cm, fill: eastern) +#circle(fill: eastern) --- -// Test RTL columns. -#set page(height: 3.25cm, width: 7.05cm, columns: 2, column-gutter: 30pt) -#set text("Noto Sans Arabic", serif) -#set par(lang: "ar") - -#rect(fill: conifer, height: 8pt, width: 6pt) وتحفيز -العديد من التفاعلات الكيميائية. (DNA) من أهم الأحماض النووية التي تُشكِّل -إلى جانب كل من البروتينات والليبيدات والسكريات المتعددة -#rect(fill: eastern, height: 8pt, width: 6pt) -الجزيئات الضخمة الأربعة الضرورية للحياة. - ---- -// Test the `colbreak` function. +// Test the `colbreak` and `pagebreak` functions. #set page(height: 1cm, width: 7.05cm, columns: 2) A #colbreak() #colbreak() B -#colbreak() +#pagebreak() C +#colbreak() +D --- // Test an empty second column. @@ -96,3 +104,5 @@ This is a normal page. Very normal. #set page(height: auto, width: 7.05cm, columns: 0) This makes less sense. + +// colbreak in auto stroke box on sized page that should be higher than box \ No newline at end of file From 7f7e14d95f7240727e0163451190ff63b230e393 Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Tue, 28 Dec 2021 00:23:42 +0100 Subject: [PATCH 6/6] Minor changes to columns --- src/library/columns.rs | 59 ++++++++++++++++++------------------ tests/typ/layout/columns.typ | 6 +--- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/src/library/columns.rs b/src/library/columns.rs index 225cba47a..25d6da9d7 100644 --- a/src/library/columns.rs +++ b/src/library/columns.rs @@ -43,18 +43,19 @@ impl Layout for ColumnsNode { return self.child.layout(ctx, regions); } - // All gutters in the document. (Can be different because the relative + // Gutter width for each region. (Can be different because the relative // component is calculated seperately for each region.) let mut gutters = vec![]; - // Sizes of all columns resulting from `region.current` and - // `region.backlog`. + + // Sizes of all columns resulting from `region.current`, + // `region.backlog` and `regions.last`. let mut sizes = vec![]; let columns = self.columns.get(); - for (current, base) in std::iter::once((regions.current, regions.base)) - .chain(regions.backlog.as_slice().iter().map(|&s| (s, s))) - .chain(regions.last.iter().map(|&s| (s, s))) + for (current, base) in regions + .iter() + .take(1 + regions.backlog.len() + if regions.last.is_some() { 1 } else { 0 }) { let gutter = self.gutter.resolve(base.x); gutters.push(gutter); @@ -68,9 +69,11 @@ impl Layout for ColumnsNode { } let first = sizes.remove(0); - let mut pod = - Regions::one(first, Size::new(first.x, regions.base.y), regions.expand); - pod.expand.x = true; + let mut pod = Regions::one( + first, + Size::new(first.x, regions.base.y), + Spec::new(true, regions.expand.y), + ); // Retrieve elements for the last region from the vectors. let last_gutter = if regions.last.is_some() { @@ -84,24 +87,18 @@ impl Layout for ColumnsNode { pod.backlog = sizes.into_iter(); - let frames = self.child.layout(ctx, &pod); + let mut frames = self.child.layout(ctx, &pod).into_iter(); let dir = ctx.styles.get(ParNode::DIR); - let to = |cursor: Length, width: Length, regions: &Regions| { - if dir.is_positive() { - cursor - } else { - regions.current.x - cursor - width - } - }; - let mut cursor = Length::zero(); - - let mut frames = frames.into_iter(); - let mut res = vec![]; + let mut finished = vec![]; let total_regions = (frames.len() as f32 / columns as f32).ceil() as usize; - for (i, (current, base)) in regions.iter().take(total_regions).enumerate() { + for ((current, base), gutter) in regions + .iter() + .take(total_regions) + .zip(gutters.into_iter().chain(last_gutter.into_iter().cycle())) + { // The height should be the parent height if the node shall expand. // Otherwise its the maximum column height for the frame. In that // case, the frame is first created with zero height and then @@ -109,6 +106,8 @@ impl Layout for ColumnsNode { let mut height = if regions.expand.y { current.y } else { Length::zero() }; let mut frame = Frame::new(Spec::new(regions.current.x, height)); + let mut cursor = Length::zero(); + for _ in 0 .. columns { let child_frame = match frames.next() { Some(frame) => frame.item, @@ -118,16 +117,19 @@ impl Layout for ColumnsNode { let width = child_frame.size.x; if !regions.expand.y { - height = height.max(child_frame.size.y); + height.set_max(child_frame.size.y); } frame.push_frame( - Point::new(to(cursor, width, ®ions), Length::zero()), + Point::with_x(if dir.is_positive() { + cursor + } else { + regions.current.x - cursor - width + }), child_frame, ); - cursor += width - + gutters.get(i).copied().unwrap_or_else(|| last_gutter.unwrap()); + cursor += width + gutter; } frame.size.y = height; @@ -135,10 +137,9 @@ impl Layout for ColumnsNode { let mut cts = Constraints::new(regions.expand); cts.base = base.map(Some); cts.exact = current.map(Some); - res.push(frame.constrain(cts)); - cursor = Length::zero(); + finished.push(frame.constrain(cts)); } - res + finished } } diff --git a/tests/typ/layout/columns.typ b/tests/typ/layout/columns.typ index 7683c55e3..bf954d930 100644 --- a/tests/typ/layout/columns.typ +++ b/tests/typ/layout/columns.typ @@ -81,7 +81,7 @@ D Arbitrary horizontal growth. --- -// Test columns in an infinitely wide frame. +// Test columns in an infinitely high frame. #set page(width: 7.05cm, columns: 2) There can be as much content as you want in the left column @@ -102,7 +102,3 @@ This is a normal page. Very normal. // Test a page with zero columns. // Error: 49-50 must be positive #set page(height: auto, width: 7.05cm, columns: 0) - -This makes less sense. - -// colbreak in auto stroke box on sized page that should be higher than box \ No newline at end of file