From c641044380652e097ffc85d3e66873b0364ee070 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 19 Nov 2023 18:55:36 +0100 Subject: [PATCH] Workaround for show set propagation on citations Fixes #2531 --- crates/typst-library/src/layout/mod.rs | 15 +++++++++------ tests/ref/bugs/cite-show-set.png | Bin 0 -> 2193 bytes tests/typ/bugs/cite-show-set.typ | 9 +++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 tests/ref/bugs/cite-show-set.png create mode 100644 tests/typ/bugs/cite-show-set.typ diff --git a/crates/typst-library/src/layout/mod.rs b/crates/typst-library/src/layout/mod.rs index 77e62dd31..bcbe3b2b6 100644 --- a/crates/typst-library/src/layout/mod.rs +++ b/crates/typst-library/src/layout/mod.rs @@ -750,8 +750,10 @@ impl Default for ListBuilder<'_> { /// Accepts citations. #[derive(Default)] struct CiteGroupBuilder<'a> { + /// The styles. + styles: StyleChain<'a>, /// The citations. - items: StyleVecBuilder<'a, CiteElem>, + items: Vec, /// Trailing content for which it is unclear whether it is part of the list. staged: Vec<(&'a Content, StyleChain<'a>)>, } @@ -766,8 +768,11 @@ impl<'a> CiteGroupBuilder<'a> { } if let Some(citation) = content.to::() { + if self.items.is_empty() { + self.styles = styles; + } self.staged.retain(|(elem, _)| !elem.is::()); - self.items.push(citation.clone(), styles); + self.items.push(citation.clone()); return true; } @@ -775,9 +780,7 @@ impl<'a> CiteGroupBuilder<'a> { } fn finish(self) -> (Content, StyleChain<'a>) { - let (items, styles) = self.items.finish(); - let items = items.into_items(); - let span = items.first().map(|cite| cite.span()).unwrap_or(Span::detached()); - (CiteGroup::new(items).pack().spanned(span), styles) + let span = self.items.first().map(|cite| cite.span()).unwrap_or(Span::detached()); + (CiteGroup::new(self.items).pack().spanned(span), self.styles) } } diff --git a/tests/ref/bugs/cite-show-set.png b/tests/ref/bugs/cite-show-set.png new file mode 100644 index 0000000000000000000000000000000000000000..566186a4cfb3c43eca99ba1f7e77da60c95f6227 GIT binary patch literal 2193 zcmai#SvcE?8pfj>wEmV-G?pr(sI`r?_1Idiq$;f-Y3o!}ZO2kZTNBaN+7Mf0BGkTw z+NQ*kQA;ch6(UH(F-nS}*4mlII?nT)tGPJmyZD}OyLi9%=7+xvw-Z05a0&zhiNm0_ z2oOj>=(vW7o;c3VV*{=rkmx;_t&KD0^Y?7@T_@DJZo?4~rETS~kT*n;myX?0v^qm; ztw8xl2PkfRDl|@;)FmvY^Po%E_w~Q!w2`Q^g@AI8h4c?<4|v*oG2HXB1nU!{>N8SB z_4AQl@;G{;dQL9a^W@2lRI!e?%@YGTk3v@XyiLt3`QxOgjnXHNW&ADH&J=+5B?Z8s zNC0Fl3_33eN)-SxK_E{M2m%8AⓈs&7GTG_-7MtyGRLRu$-tRUyco>G^5?iD;d?h z$`Z&nU1FkW8Z+rhZ4w2MlCkG-7e6S_UYhnvRx4R7k4s_H)8684n))`3JKwKC$L$CpgdttBe( zJ>PnFNtTVbJ&Jm^tMSk0OF8R&%^h_y4J+y-!wxzjc-kSSxxL?SNP0>? zWOWnVkeduAHY#-pg}>J5E|c1U{ylI^g9!EW_dg&{P2YKKmAzQ0K3CShu21m=TUM`E z6|V^QSoW#IV5(t3B)3Gn^51!Pz*;3_GFck0e(_>YW?)bdy6x3Lx}K}h%eB;w7ijlq z^w<|`s{E}4YEh9V=J3j@LZ1oZMV3++sZ5eM;~Bz#x*F-!b?iqyjdt-&0?mJ9Wwfpv z4Q{dgaj4QGPqS?#IAqk1#Fi%B16NdIhwg?aGd-&s%M6L%$9k4B&k4Na9kSeO?x{<| zyuH8m5qEd7cw2;v3oQ~ju)-QunAT-xrM4$nHtJqlt0i>xq^3?jyuR}Yfmm#9|M-#G zfDN^VUGx+^TV7tyX0!ch*x6n(g+fUrc6dIv`@A*NMW3M^u+$hT5O2$n^x8vcaZLb` zss#=($<6@0>+Y)&)5v5zX=+D#V_0v)%R;B33}^uYu_k-0qvhV6t(t)T(@d%^1dx;r z;x&;G6~lg4QgjRq&`E&dg7t1l&+$WgB=6eA>+1UHXWvErT3AuxH(cRDIA#K-cQo^v=H8|@g>t#LR+LLZws zlV(%ytdM;39Wwk|UuJxKe0qBN>j-PH-oe@c26t~{1;}5a`C$P>a@M9hOvoB)%`jRUEKf-#tiC( zDUENblKZ1S8W32Ba@HR9HA44!FmU3ErcVGju)>NI-@dr~Mgg=KQ0iu*w zI7urHjeEkcMI^xKUs`UJ^s-o+c`LEON*QD_4GP{-xu*}_@;0e#ZJM=2JWCi~x}O6G z3JN~;^7ZwdG^;8oa3?myST!_1We=+iC&c)k_l!uWpaewdF7DWi;Y!q>+uLltgrp=u zTwGaE(KQKxfL%Z8YQ@m%YatdEys2Po;kH3vqp7JWrS6{Djkj;#j^dQeLv@Xe(x%@tnaqTQQ>P*SgsZIbX4ko z9UEIVy!he6HQEDu*ygvH8P9CC#uL->466BH$Q7N>H8CydYfZ_mo=hm^lNPp`jRrq4 zt;wQ)>a#FY1$%gSn5D=liF!&M(k6?Wo5OvXF9UPmyqRBK9$MNKj>S^y>$Z%fie*4xU>9WJUqtm1lz(UL#y|u$sB>qP zXIG)mX6;`P#BS$vHU^#TxJKa?{ zE++34L1Jq_F@m1*?%dvOwJZz-X2?}#7-+{BC0KlQ3eL$&787dA9>~Lm?SNNxVkC1Q zP>SzoovmD%t=55AgMqraIOp;J1&e=xzvdT?f&<`tHz#fw+s(7gM=#b@1Fem2-Cy&M z^w^GEF%>}Ada^JZ~LMVO+|6JE4#{}yGKHKQNsV1w*O^wBsvcG f8^Vv<$ozeg!O51xsoH$o|7>A5;I>uQ+@t>j(d{Dr literal 0 HcmV?d00001 diff --git a/tests/typ/bugs/cite-show-set.typ b/tests/typ/bugs/cite-show-set.typ new file mode 100644 index 000000000..a4111c9a3 --- /dev/null +++ b/tests/typ/bugs/cite-show-set.typ @@ -0,0 +1,9 @@ +// Test show set rules on citations. + +--- +#show cite: set text(red) +A @netwok @arrgh. +B #cite() #cite(). + +#show bibliography: none +#bibliography("/files/works.bib")