From f3e3061a7ff0307c9ad0efc06b58b3ce8a9553cd Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 8 Jun 2023 11:21:35 +0200 Subject: [PATCH] Fix a bug in footnote together-keeping logic --- library/src/layout/flow.rs | 7 +++++-- tests/ref/bugs/footnote-keep-multiple.png | Bin 0 -> 1914 bytes tests/typ/bugs/footnote-keep-multiple.typ | 10 ++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 tests/ref/bugs/footnote-keep-multiple.png create mode 100644 tests/typ/bugs/footnote-keep-multiple.typ diff --git a/library/src/layout/flow.rs b/library/src/layout/flow.rs index 627ea9886..6940b55ce 100644 --- a/library/src/layout/flow.rs +++ b/library/src/layout/flow.rs @@ -438,6 +438,7 @@ impl FlowLayouter<'_> { find_footnotes(&mut notes, frame); } + let prev_len = self.items.len(); self.items.push(item); // No new footnotes. @@ -473,10 +474,12 @@ impl FlowLayouter<'_> { if !had_footnotes { self.items.pop(); } - let item = self.items.pop(); + let moved: Vec<_> = self.items.drain(prev_len..).collect(); self.finish_region()?; - self.items.extend(item); + self.has_footnotes = + moved.iter().any(|item| matches!(item, FlowItem::Footnote(_))); self.regions.size.y -= height; + self.items.extend(moved); can_skip = false; continue 'outer; } diff --git a/tests/ref/bugs/footnote-keep-multiple.png b/tests/ref/bugs/footnote-keep-multiple.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b67a7456b6ecd3ad8d1dafc9910f7a17edc86f GIT binary patch literal 1914 zcmds1=~L4O5RIHaOwtB|1`Em&@Id7dxe5{!4Hytikpa2oCJ0JYN&=LtAz(n|RDnU{ z5+X-KQ7BMJ4TdThjsy&+5EZ!!lz@Z~j;6PNKtFZn?ac0e*qQfs_uard*+F-Hu@eLW zL2+kJJA*(ww_2b8nD=RC@%gaKcaA|4j*I$JTi_43Piwg@2^Yim_b91w^vokX@)6>%* zrsk)nrY0vR-@kwV?%g|qKrk^eF*ZImK0ZD+Ha0x^espwnctkKVGBP;)c4%m5fIt5F z^=sb1*ucO5uYa(=zn{nB^>T-~Ty9@qUw7{yr-$Fu)5GC#y1KevbaFd7I@;MBHk;kv z-u@G-lf_~^d-m)p^JgZL+1A$9`jp+;+S=UQ+|<%ev^=zkdP1`A0HD(iHnPiiHV6OCy~iy5-BD+Iyx#U>gv_2 zL?ZEWBq=g7G9n@(JUpCm=~`G=SSTTaKp=#Mh6aUP2?+@a4h{|q3JMGiyyze1@9*#H zNAS5A>g^li>+9?76X@gPlq>8Q|gJ;dXV+S=O6%F5glZE0y~W^vNO z!s57@jhUI5si~=niHY$s3nL?=qlV^&hK2?P2KxH?hYlUuf6z$pfT5nAp02Jg5{cB( z(bv}2*3#0_)YRO&cdv$q#-2TU)YQ}v2!yJtsxn+14u`9#sK8(_Fmx9b3f&1&g+L%+ zFc<&;MMXsg1qFF|c{w>bSy@>b85!x_Rzx>6fk1LMaHr8Oq~ZA?{yDgVk zf@Hr}(-}ik(e)B3E)x>*%{E%>?y;QXoQ{6AODQc&X!Z)N5!R!76#FbHpO> z^%YOOTMUk3$(PaS&sjLsEql0N_%Pqlrl(yU+l=E-E!LR@BYT!JnZ4mDf$3 z3LA~gO$ii!fz(T8Z6wEoD4n-%(o(d|_xn*SdFdkt%~o9O;1WOUgrDV8|&qR?Te1pA`?T28~dEnRrPQ@{M24F@!lVR@&&ROtxBatG*+p`}WRD zd=q&}s^M)VBxI{hJCL}QOInVn>p(P~l7ewBZml;@F7?1qD4`x3tcP)Aty04IG#c#$ zyzR4qR@cR%kF~~gsDl|##0ah2TK63#E23y;+qJp|hSLjvWjfvzS%Xn(n_$b?S4hEgo8A<^f`77%zb^E@=&)ME4-qpaKzpn*AMNI~^XEsRC?upDfTbudX1E`;+^n0kD^HIkI&>|$lito6(F2yRpTlGrgTHf0NosCa zu>)kou6V|}z6IdJ9eJDAza9pV{Cx<_EHEH0JLM>j*jNB#|gE<7`E7TKz z`yGC3pAlh TWoas0>P;XV*6DN|=3?@1LvS9r literal 0 HcmV?d00001 diff --git a/tests/typ/bugs/footnote-keep-multiple.typ b/tests/typ/bugs/footnote-keep-multiple.typ new file mode 100644 index 000000000..3aa0b9d9e --- /dev/null +++ b/tests/typ/bugs/footnote-keep-multiple.typ @@ -0,0 +1,10 @@ +// Test that the logic that keeps footnote entry together with +// their markers also works for multiple footnotes in a single +// line or frame (here, there are two lines, but they are one +// unit due to orphan prevention). + +--- +#set page(height: 100pt) +#v(30pt) +A #footnote[a] \ +B #footnote[b]