From f90fcd664bd64e4c7fd996e8d0825e7031625763 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 30 May 2023 14:36:34 +0200 Subject: [PATCH] Fix pagebreak before `place` Fixes #1368 --- library/src/layout/flow.rs | 8 +++----- tests/ref/bugs/place-pagebreak.png | Bin 0 -> 978 bytes tests/typ/bugs/place-pagebreak.typ | 7 +++++++ 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 tests/ref/bugs/place-pagebreak.png create mode 100644 tests/typ/bugs/place-pagebreak.typ diff --git a/library/src/layout/flow.rs b/library/src/layout/flow.rs index 698073204..cd713c681 100644 --- a/library/src/layout/flow.rs +++ b/library/src/layout/flow.rs @@ -243,11 +243,6 @@ impl<'a> FlowLayouter<'a> { block: &Content, styles: StyleChain, ) -> SourceResult<()> { - // Skip directly if region is already full. - if self.regions.is_full() { - self.finish_region()?; - } - // Placed elements that are out of flow produce placed items which // aren't aligned later. if let Some(placed) = block.to::() { @@ -256,6 +251,9 @@ impl<'a> FlowLayouter<'a> { self.layout_item(vt, FlowItem::Placed(frame))?; return Ok(()); } + } else if self.regions.is_full() { + // Skip directly if region is already full. + self.finish_region()?; } // How to align the block. diff --git a/tests/ref/bugs/place-pagebreak.png b/tests/ref/bugs/place-pagebreak.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa3d6b00a869435336c4552fd73589de0f3a31e GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0y~yU}OQZQ#gPGgX;r93kC+}nVv3=Ar-gY-pKceEtNU` zQQ!V6Tl8sn!{^N_UjEvA>2K#Y(Y(!WFOsA~mT8>r`m{@LdX~ww&nGAC)Hs!@Ew;|S zd1G(y3W;8^(|Z;xu1sd$n$&2px^>0r63fq3?`_}9-C2G4m7^UeU+ujD%l)4p|2fwz z{`~yY8JbI{1bJzG)qh++O`t`AMUlgi!%3it9OmX%1seOCx8?HhF?&7L_n@_&ntOb% z?vD%N9LL|Cj4Jrex8TXNH>|C)!Joy=Zbq`b%K5(L{EeNr{!Wqkn!EjbZISAoti231 zS^d8A>#pxwcw8#2{?PPX1=C;0_`lCY-72lBZQ7+jKE4Y0aC#e%U^(8ra8=-*W$N8=Z(29j zimvCsZf7^gNg`k4{)Z{`0!B&`Jye7&6Sg`$&z%@?`RiI^fq8XH>Qka0WPJK?u}Zts z&*av#!hab%c251sK3`r^<7`gqo3#g)o$7K(7fMX{c<;sf*MFNQi1D=_eps;cs#DEP zK84*yR)>yf{ynhj%>5wlPoEq1JU#F(`NOL}8b>x2HCpQ)@_1FIq04mc$LBJO-0ahG zcO@b$WfN=74%~isXRf}49E-A_Mcmo2x~$i~D> zHu0fRgK*v_$;#BY3Hn*jav!G1x?J{VyjL>+;3U&v4#8|Dt2y?9cNXs7EBomgbIn^m zzjYjGacd=3oZA!iiMyhhi@~lS*H|EGQg~CoKv(d8;azLl{Gto9s`i&UuHVb(ST1KV z>D%8YUB!9Ng-dqLGHUp}UYhCEvwwU)S2Ny7{Tovx-5_@TiExX}Yvu<_a@pQ(uIlHm zPMB`$ygRqu+k8#;WDTC!=uL;tIW(FwZ&_;3oNU?a5T?hFc%7Ah`TRxeFNl`?WPCW8 zX|rpoL+Z3tk@@K>R0!HY*v{JhVt zTB|K(d+U8^-qYs+X2->3Qwm~_eflJCWVY`ydrO7RPvuz$W`AhN@MoIgA<%y`No5g( zvTdj2>NZBT_?bN4m@0(lnNMuUXo`^8VZ&kny1L136^``&aKA%<7btJMlK&+fCQ+2~ THA?F=D6@LH`njxgN@xNA87IP7 literal 0 HcmV?d00001 diff --git a/tests/typ/bugs/place-pagebreak.typ b/tests/typ/bugs/place-pagebreak.typ new file mode 100644 index 000000000..bc04af1a3 --- /dev/null +++ b/tests/typ/bugs/place-pagebreak.typ @@ -0,0 +1,7 @@ +// Test placing on an already full page. +// It shouldn't result in a page break. + +--- +#set page(height: 40pt) +#block(height: 100%) +#place(bottom + right)[Hello world]