From c29a31b6c5b55d7416f967fede5b1db2c523a615 Mon Sep 17 00:00:00 2001 From: "Francisco J. Sanchez" Date: Wed, 25 Oct 2023 17:16:34 +0200 Subject: [PATCH] Fix pagebreak.to check (#2475) --- crates/typst-library/src/layout/page.rs | 5 ++++- tests/ref/layout/pagebreak-parity.png | Bin 3897 -> 4860 bytes tests/typ/layout/pagebreak-parity.typ | 12 ++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/typst-library/src/layout/page.rs b/crates/typst-library/src/layout/page.rs index b2efed199..495b390dc 100644 --- a/crates/typst-library/src/layout/page.rs +++ b/crates/typst-library/src/layout/page.rs @@ -378,7 +378,10 @@ impl PageElem { let mut frames = child.layout(vt, styles, regions)?.into_frames(); // Align the child to the pagebreak's parity. - if extend_to.is_some_and(|p| p.matches(page_counter.physical().get())) { + // Check for page count after adding the pending frames + if extend_to + .is_some_and(|p| !p.matches(page_counter.physical().get() + frames.len())) + { // Insert empty page after the current pages. let size = area.map(Abs::is_finite).select(area, Size::zero()); frames.push(Frame::hard(size)); diff --git a/tests/ref/layout/pagebreak-parity.png b/tests/ref/layout/pagebreak-parity.png index af08bac113f00df8290f2e9d87d79302be72ed3b..8c05dc92dc6a686bdfd61e289e88cff6fe6507e9 100644 GIT binary patch literal 4860 zcmb7|c{r4P+sCgN%UH&!D2**eq$D!g_a&6A6d{JlzJ;+yqev1ZWS1pdWF1TPonjc- z$-WI^Hw?q%^*s0c9QWP*KF9MO&p*HGysqm!u0PK6_xXO$-xaE-qt3*@&Hw-alct91 z-Qz0;0I0!q#{t0O8y*7yr%5n<5pw98ftGLvFztzZ)Zc|b&=-0%TBi}G-d)!`%lhiIVhO1`f{$9G=^gc} zAVJ=5Bq5bEFZ2mUf(MxdQf=43;!N!xas|nq5qA-k|KoCy?z{HiX}rK1h^P}-+Gs4 z_25(C=eepA_r)ab2QEU=^GGWb{V74={OmbgmBm))zVV+SXRAc~+M3eZ!DozZ)Be8Hso}^LU+&%# z%-jk7t-gO&`aea+$V-{gca4#Bzb8#f;|m8jEmz|v7mM6++X3UBO+$2&rGqd5Mdfg1 zpH>UP*EDS7Ac2!8mdqmj$xtG1d#f}%K{VRyf~$yxcqjK0Sk`7!f);j=kqE z=y31dQVH$eUc}8b%EH)(+sQ%l%e(wOr#d_ZeC|pv>1=U+bMs-DWt?THEkK}?u+DCz zrIdfyz%#}K#^V;;A~23~|CNv9hMW$S-|F6|;0#RZoi5gy925_GHk!uPMXjDHHHYkT zA7nYn+NrzSN%o5Idw^=Q;dsZqmLDD^>w^(xzBy? zdx157JflmTo_E=3?QP|i=cYaJc6Sas5QVS+=dI+O+x~A0CQAME{Z4Un(+MG5nysQ> z)IlK1p?Z{Fi%A=kRRS4ektK(J)5D7hm$RmEEq1#WXAuF4`3RvM;RWVxWk7qlH8)!6 zil9vXGpTnd9KA7>+!RBeHfJwd_6Ls)s4#Ww28u&=AOIQ92CyH3tP`8{*oV)ZJ^LU+ z9!SFI2j1{ZEc_>TcZckAiz?hMsE&~=3Y_BT{Z}rcV?5>T_{KyV7^>Ua@pyrJN*_Pa z?NO+(AD$(uIQ=5V*UQM~8Fs=h!&xFZBe0Olq3qDx1mZ_x7@TxTEZDsI2bGJr)Cb#5 z!KvncD;H%@EX#Dg|i4rbc6lwoy=2f+3_kY;@N4v}F^p4rY)Ztdo|E_<(1NRqU z{PV?^o!~#fc4q$l+xXXNA0J5hX0i0jRLc!)PKPSmPu{B=D=xNvN7ZX$&-Fa!7fsRk zf(7!!T*XNEnxY566)jLl8{zKH;Rw~UzbSdb)RIThQ-1Plo1?JGTMwQp( z;a#ksSW|Ne&G!3KkVK2fb9(k>bDi*v+2r5}!`8wcXEakI|LZqO3!8oUbgw0A*VV+t z?Ikj;_wWJw>$xe5mk<-XgP2ifM?`M}4#}Cd4l_?4VTevhIIsw&^c&eq;wB4!fQFqP zp`SwnNNutOX{(A;Vh53ZxT1by7AH1v%=n2M`I=&q|D-0~MHr+5%ZneBjVgDI&&%zDz$V?|Lo<@5BxavO=W9)h)pb)dlErx6-%$PI*1%>l}zg*<~?)sR)JU5hw=7Un})1Q7V8{GC?a#S+F&TrFpD z9r`dQc2Y*ottD|=LXX(?+(&(yVANNx)LX83E>gsS7|`K8awzHsM|eMPc@-)1w6<<) zL!~o{R$MkktWliU1PRc04}HoP&{udfl9JDqxEmt4^Vw`}%7f)h*^&vdOJ0ASq`SRI zPRC%qFTtQ8>JF?;iJ~Ko@oc{%ukN(;EH%p*cc#Hyr?6_;^obdUE=4~C>NZ2EG`v{Czp<+k>$UZ zJ9}n57gd_M8_c%XZg?>Bbn0wwl4ov|hHtgeSgGZM?0+%?Ix0vLi6C zQ>Q>ynYMNU;|#~-V4cIqQotc^4iLGKy4zQ8qI^q%W$)C-GI3I!_NH8nv5qd>oQi*H z&B_70wMquRW*Iy;dyBikgMYX5sbuVwwnyarR+avA%gg){1@FDK`5nIhTF3wGUiqE) zfB7(e_r&ieU*PT02#JD7g5-`OVduair4&mpTG#!r#~Rfd=HfC(O`MNk@MH!yL5%0~ z?w(b6Xw9kEL8YUp@^1gWFo22x8(lm!x4FVh<&B9K!&MwjctBE>_!TCkw(r8p5-=sC zy#s$t#`bQ_*RyqTTuP%&ksP3nuDD{B?rzby>cT>Ey%4DqTh%w~y|H41J*Ud&^2F#> z2yY%{ujpXToB&?%@F*-)2(;|f>dA?_%gtog>;ApjGj_dqg}!Fn6`t^@UP*BX{q>#g zVnakjpGe<=YvUV;cmKM}I}0QVNYLn$Ere<}9D#KQsJB)m@!maihV2y+V+H9PU~1?S zaDt5%eh2TX7|BIb#x3YaNylHV5>(6#j8J65h?Ej2fOHNGAjxE!Nyk&0RrVO)*budY zRzA3ZAn9gv%4I<*XkMI+6D=?X*5ZGN@DGd_K=9f(3unKR zbfPxs+txzSvG<$8v1NAMN*`(QkAW?$WWl@@Vko1XMZ)O~WXto~1BL_MtnF_tT9@9i zQ$~T=d&HcRR9XE6_f_3oSZG=D#Ldn=Vsp#!QMD(U4(8&kO^aGqg2CH1JpBqud+9&K zc>{;I!nk3MH#k6IP`d5g5c%Tbh+kRlV41GbJUkEDXwaXKhAj5u3|%vdfL&8*2dpn` zIKq8{P3gKYf-sc|(QLH7wMbF7P{_kRX73+ofUg7VGU^6mGP5O7xL%8Z@^Pz~s!{f^ zP$qHhbWbm_`^fL?r>&~;LGpDOcWmqT%jfS3q`j@G)l8u-8P`l<)v1b-RWErs(X!XH zr&@T0iN~fi@uz=P_TSDk&-iLj794x%Qg+8tR?y$(<=yk-gZ1zO%}ls+nB=IpyFceQEAi#8$$Q7i`hO&MklIiQ41dM& zU+|f3+G6JZcW7(m`+YW}4erC}+wOJ<@?L3O!sI@FBzT6Cua`hi#IBg;DP7NS|T{{ z>xN5!iPrEZ`V1Gpq#o>nA`Hq<2^A`JNY!OZZ3t3XNA4dc3cKVkVI8-pC$7!xaxPpg zhppg!cd=J&^>7FeHX z0TeaMG6O0rYz^6-yt1Zjm&AFeDk_lFYpeL%{~Fn%3?*C{t?F;vxlZZq3B4z#u4Rf4 zy)to2FrIc<#xN}39?n2!MuoWfec<)l{b%uo#hr#`Gb_4bzHRd%IgVJsN$0*vL*1))Bhc{AP62z+z6Xn{iHEf>Y6O zXueqI`5_`z3Wi3}dFP-za-gfba)r;sBkrSce=VoPq)#0xv1 z->%!Tj=I!2eeKu8XE?jO7YKCpdM^+hwZ_*IDHJOqS|=jkOSnbVF|xw%_3=NRq@2I} aV%|sPR_fYKefY<3Elo8Y)dFSn=l=sbtY1d} literal 3897 zcmds4X*d*GAD_i8qsYFcx|X_@GFe80tSRJXi>`(+5!rWUP~2z=MK}8rq0s2s_lavM zV;#G(C1z}cW*COyb>I8k_b&B*exK+4a?bgmb3UEl|F@htb2B3zE>SK30Kj8>S^xUs zTmb-pl{pR|nzfzAlALp#XuhpXJJgOPZBF4*y5*V5nT%HHA1ra)InRnX z?zhmH;9svU;Y&7~mOav^=~6x8y|=MFCJXHBbJwZ{mN@h%PgltMV~JBpTjD` z-x9lPulS;Cs4_7_T4Us6=9Gl+5`5tar?F$I{XSuqUrbyBE*iv=LRA#6!Mhe`#p|mr zvzS}^@ANOAGBH!Z8Li8Oo(1Ov?)tWUBA+><9gM!c7gvrEtxR~L;C%wN_c?BlvQq+4 z<2cOG+bqMy`^hrh9vM4h3Cn7I1sj#<|l7Sk!eOPmoeklj2HBBE~!P1%A4PPp_{%Xt`Hy!^GU3{R>FE?V7S6IQPS~& zp)+nE(e|o6xJ!D#Ke*vnH!{jIyB7sG(UCO&L9u7u1$kW0t*4+j9N^+!UI7)bbIpwr z{KvqsGd%n1@R8klzdrlN)vrtJPu5rDUnLJq{uP=-kkEQwh>*5iQ!3k<4$k-qPh&MKuj%4BGUDhCgKM{0DV!`LS) zkCTz{phA3pU2BZhiww1n1sFSu#UTeMr>2D1xgW3VC(RHTK$@-Vj{UrYnW;~)4L|n^ zaE7nF`5aMQ08WXSC8R^&p5Arj=d|#=D>2gD{;pon#O#wod?TT{&M|k4t*~1vDi#-) zZ(|)K!o4^4j(iTsR?eoJ7u6YgafUnn6Ilb!IqGaZn5%bJGBC@Xmzg%XbeR@uN7Hvm zGG@b5aTd~m4OK{NRlWF6l-m&S!)`f;SGJ(aGqpn164g{_1>VZY%c#Pum{~O zAMPxsaN;{+h4JXX2$6Puw&o~7mUDZr-TIgwY0M0h5j{oPa0yY7`{EoD;tS?Q`N zvOVY-$X1vC$UufQ$7-~V9QtGIK6j#r8tn5Tkh|MAvM1;kH@QH8RCxYZQ2bE+F`6w4c@@yncnio7HD z5E8$gtK#W?W1*z*A-3=WJ)FJdTpW(tJldLQin~${EK<##zSO{cNXQ~g^Kuu_;U3Tr zxW%gGurNhZe;~{Hb0$6np@_k^lKR3UCgF!2z@LabSU62fxS+)5y0;9Yy+=kNG{hV8 z7p#m+vtuliSTaJq5z}RShwSCH96N`zroKz+JE*xJ*4d;X@eKbEr?Tc()9-`}rE1kC zk2>ODyKj^F*q79V8@&w+yUX%R-O3&2m|O6`Nw+X;;kpoyW?RI>v}*7}CCxGGs~NO} z8=1`-K3yWeOEV2gnXj23X|U9fFgqQqd(%y$CP-s>n}7GXKad|eZFeZL*X_bM{@D2) zU<8=#By~-aWaB?c!9?Ue8v`~n;ckjcSZJ%9uIUn`uL)9x@EzXo5bXQP|?hzXCFAF_BJ6VD_yrHrH*ExKfeQI+&S& zvN1Hdn&jV2!EDO-E`8n@fdjHf^@Cyj4CYA12!h#Y&#Djxc0=xj_}T%S@lZXZi~GtHK8YO7aS8{3K)uq8N&6dSrBP#LL_$Hh6{JHY zJk^tHQtKK-{73uFjU$MH7gCd2UOx{LzDaFOv2RoRE3^NGb2N#5ySX%lP>dwE*38JP zAO!XrFqRS$ft}4jg|=C}4Mo1^Db0w~61(SFwDWF}mZL6LA`}vHRxlsv@4oza@z`y& zEl7ue(s3M`?}b@MKy?zfdUU4O!z`%niGr*)wKG0cKAi-FCJX9KajG3gae~nU+C~N* zsr7Lh0n9vk#Ndl>bdijGQk>H+$QfMNkO zj%~n~)n$kdzdI~>2)~$f0F>lm{kYQAw_D|gZ5|-x59i(lvA{_z&}(V2-2L5AS2Q7_ z)78ugETPJBICla#C^pMMTZ~5rQoC~WV8dDS%CybrfRNl_LBOTFNTW2cz?K2|Xi5+S z4$LvSX_S*N77n=nzyz3_Catr^hC8+k{T@2m<+y`B13KA>T~MnA3T!nqF}H|q{&pNV zkDK~-5q@*gE!sontr0{xPBr+!(g-MBYgj?DMmA@z=7AGvrM!^Jo-QWC5XhYC{z7@P zQzP++*o3D&qM0BJ+v1L7k8q1mmCZwSHm3dLdpq$aSjFzcJm~sgjOD_=jb-p)XQbwD zG5b((v^D=fl6I)4&E@}5(%u(&`TQ`NZLWns`O6pP?_&O+g98oM-|~3sLE-e$KNCA6 z`(-t@;Zt8h$OF1MJDhGq_g|a$-CP>pp~w_aE_}Lk(#Ae~yv}>s55oAsu41-u0ov8| z5rZ6TAdAj8tQTGF2_sMfAa(BYecj@$W~s&j54npKHN4`x10W0zoDSIB^H$TB@Sx*q z-2K=@RloZ}AFJ>PmgzS9CyYF+`BUZnC$sIZ$v#R)vZwNWz8m9BzntQ0v0US+8b2v< z+n3MFXC<>~h=;pdRsG&Rhdzth>Be8`x^B$$#v3F6RZ}iRity;OeFh>%j~n$a8slWj zUqU3VQ_HA7hLJ~Btc_l>55ANIrJJ00$YRgp0>)PR=u}M3EBg!i39EY;0?&5y$(_@S zGFoxV$)C;akoWM)>w$4*3X3?@UpuubJ>d$JpDi$L`MGJK;00GlOp2B^=H`t_z2cRP# X1Ma$;KehSoPi$;prvFyg;r_n>p$mwZ diff --git a/tests/typ/layout/pagebreak-parity.typ b/tests/typ/layout/pagebreak-parity.typ index 4d6ae9414..1cfbd450e 100644 --- a/tests/typ/layout/pagebreak-parity.typ +++ b/tests/typ/layout/pagebreak-parity.typ @@ -21,3 +21,15 @@ Seventh First #pagebreak(to: "odd") Third + +--- +#set page(height: 30pt, width: 80pt) + +// Test when content extends to more than one page +First + +Second + +#pagebreak(to: "odd") + +Third