From 93a5b712b1919859fa526e989477db2e7256689f Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 27 Sep 2024 08:34:38 +0000 Subject: [PATCH] Fix `math.lr` size argument not being applied to enclosed `math.mid` (#5050) --- crates/typst/src/math/lr.rs | 27 ++++++++------ .../ref/math-lr-mid-size-nested-equation.png | Bin 0 -> 900 bytes tests/ref/math-lr-mid-size.png | Bin 0 -> 2210 bytes tests/ref/math-lr-nested.png | Bin 0 -> 126 bytes tests/suite/math/delimited.typ | 35 ++++++++++++++++++ 5 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 tests/ref/math-lr-mid-size-nested-equation.png create mode 100644 tests/ref/math-lr-mid-size.png create mode 100644 tests/ref/math-lr-nested.png diff --git a/crates/typst/src/math/lr.rs b/crates/typst/src/math/lr.rs index 80ce55eb3..ccaf2959b 100644 --- a/crates/typst/src/math/lr.rs +++ b/crates/typst/src/math/lr.rs @@ -3,7 +3,9 @@ use unicode_math_class::MathClass; use crate::diag::SourceResult; use crate::foundations::{elem, func, Content, NativeElement, Packed, Smart, StyleChain}; use crate::layout::{Abs, Axis, Em, Length, Rel}; -use crate::math::{stretch_fragment, LayoutMath, MathContext, MathFragment, Scaled}; +use crate::math::{ + stretch_fragment, EquationElem, LayoutMath, MathContext, MathFragment, Scaled, +}; use crate::text::TextElem; /// How much less high scaled delimiters can be than what they wrap. @@ -21,13 +23,9 @@ pub struct LrElem { /// The delimited content, including the delimiters. #[required] #[parse( - let mut body = Content::empty(); - for (i, arg) in args.all::()?.into_iter().enumerate() { - if i > 0 { - body += TextElem::packed(','); - } - body += arg; - } + let mut arguments = args.all::()?.into_iter(); + let mut body = arguments.next().unwrap_or_default(); + arguments.for_each(|arg| body += TextElem::packed(',') + arg); body )] pub body: Content, @@ -37,9 +35,16 @@ impl LayoutMath for Packed { #[typst_macros::time(name = "math.lr", span = self.span())] fn layout_math(&self, ctx: &mut MathContext, styles: StyleChain) -> SourceResult<()> { let mut body = self.body(); - if let Some(elem) = body.to_packed::() { - if elem.size(styles).is_auto() { - body = elem.body(); + + // Extract from an EquationElem. + if let Some(equation) = body.to_packed::() { + body = equation.body(); + } + + // Extract implicit LrElem. + if let Some(lr) = body.to_packed::() { + if lr.size(styles).is_auto() { + body = lr.body(); } } diff --git a/tests/ref/math-lr-mid-size-nested-equation.png b/tests/ref/math-lr-mid-size-nested-equation.png new file mode 100644 index 0000000000000000000000000000000000000000..df0106689f081bd938addaf1acf938687152625f GIT binary patch literal 900 zcmV-~1AF|5P)3sg0009^NklMqt)O4GkU-17QcK*}<-2X^W59j;x+singof~Wh{>Nr$Dov%S zG?k|Mi>mf|DCL07T>Gz7v5_NCN`}3n*N_rItPtys9^&;rF-@(~1p{1F-3@;mkP;4| zOrb$N5H6q~Wonggu@lwlT5@?kAk=j|#QT20)fL?Q)`@DV1OVL&A(U4i#M32ASJko= zDpZ5Zz^gJ1N*~4`ceETpu3;Lghv8~e#Ye#DWgwU`1|heIe2Tjxpc9asRzc8!zCbh9uj%N#TLQXpTI=D=v1HFnkjlD;$hJgbTc0PW-9 zA+T+szX7}6Gpe+0WQKjgHnhP)j-i7`KclkDY6oeX$%)EWPj~oSde|XWwdXeE8a!>V zCmqiQfU>LU-uaB`Yy{oJFevq}Fp|wmN?&YbR5kNJ>-B8rt1Lk!WFJ`3;LWNQm4Q}& zsBhA_vZMpisf=oE4w>IO!S-X54M2AuaIlO~Wo!b?rwx1+2G#+vMeP8R7Q9nbKW7et z=HEE!zG~dAL)RX^9=l4K+swVME|dZlE6ZW@3K~^ZA(3>y`N5eA>uN!h07X@{9JF7Y zXHZF2HMs%&XOQ<6-Ix#g8C3gjPd)?i-&dzUPgXtMO}8XQL^ZExx~jk|XR6UWGwe0e ziH;}JRyZc0>U0OKMYU>mD__NLUpcrHp5dtU$3RO;QmL{nfg06PEBKY(hfIzd(Y%w#tQjlf05ye|+=$~8bpg{C?vWrEFAsr`4>RGLatX(~-M a?fw802}+pvYLNT@00008KBqz literal 0 HcmV?d00001 diff --git a/tests/ref/math-lr-mid-size.png b/tests/ref/math-lr-mid-size.png new file mode 100644 index 0000000000000000000000000000000000000000..12b4c0868d133a99f8973511888564a83dafb329 GIT binary patch literal 2210 zcmV;T2wnGyP)|+tn{Cr>x-Gk1*X}l1H)^t^yU|)TsO!B}MX}XVHLkZ6uL>0p1S_Z@g&u>7 z24qAIp%qb(Dj-V1N>xljF1h4Tkh8$xAlEQ6?{Aamo$x-x`;7Cvu!%OE?;rC_qW<#9 z9B+IHFW`CX1)IvIvZ-t;o9h3ldRPppSkN`(Ju8*3M-QZqpug1bA$;Z92fnT+gTIz< z>z=Mse*!R7g?`R@Ab1zJs@vhx4DQw@1wUQ2AkBhma~^qnM}ezD$>6X4Lu>Eg%pWYM z>;(X5`U|*nXa|4luLi5CoDBu4C;tSi+hLH(HNe!$ECBH-gHT26Qld&*0Y+Cgfa>%U zm>NNz`5)&{83i-dx@fjapWGmxyc)vjR&o%IwwIal{gk+A5^kbHL35`P^vq_z*6l>C&$gg zH_TLHlE_iJ$dbyiH3g*P+L%vimCss;kKZXJ zXS6DObSb5}YX`BGu@!8U&Ly3kr}|JbjaH4wgjn&icG+vC3kUXxP^!tXA8sB$n?pFz~Rxm$T z?is+%aakyJaOss)t{xyga)KolrsP3P03=oB7>IQ+zJpRGRrxT0{T*aoMWc}p-Ns2F_lW8O8*ZiQQ7x_UB*dB-O-c7Hxi`y3s9)a`B;gn(Gd!AsskNc z<#?5$@=t-Onvt+tlp6f$W`jd@Vuwt%l zQ}x+{Q*~hv%xlZ<0F|--$!GxO#Y0iuT*|9*i-&pl_9cTV6sGPj1dy=kH%oQNTYmTW_B{Zo{K%^6 zi`_$3Ij6EzJv|th?hOF|j2%{0s}hE+vhR?o*yTAvR{b$E)iIF9wvgkewS!h^CWBLT zG6=FNlbS)*B|g3jQu@_Ft1kQUs#ceSukXD;r(AWfcUu*o>LwODoRg0Yv^BfGQQRV;CvCNPLzQZblGfl!Vi3^_jIC1*Z3$?B{t#lD0*Oe1WUCJ zKtmERyFgMIUMZKU>Iwf_Egp`iN5>>`ssaN6Abe&ouD)`c8n7#7sWt+4CKaP%`~gG1 zs@M)Pm0>m@9G_>zxj*Jgqq>*sIaTM$Yu(xcXxg;WzymvhrMggoj@DjuwYH#N6+2(9 z!hZm?v;eJbPo&YjzkyR#w1{~Xy*Ljn71Z+Qdk!&FhZ-28k;{2iJ?}78z6aSV%_H=e z57PW=0HF1*2UYVi#^}zYyedrUW2u&=GgRzGbbwJrvwZZu9B$Q-M3(C99$r^Em83Q_AMH@>TEE#$}I<+g`QEMYT7?gbu52l z2d8RV+dA;&U$M4VfeM!s2dHx6b0OBHU5Tfb_Duu$x)omxB`Rbk literal 0 HcmV?d00001 diff --git a/tests/ref/math-lr-nested.png b/tests/ref/math-lr-nested.png new file mode 100644 index 0000000000000000000000000000000000000000..eb172009e68509da07ab3172e5a4e7f940d5c626 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^6+o=O0VEjyTzWhONV$5tIEGZ*dV9@~k3m4d<>KD@ zqr5WSk3?LwzbuYFIRDZ1^|G_u(+