From 04b4536772362e15de5ee3e88d05dbb066f85f37 Mon Sep 17 00:00:00 2001 From: LU Jialin Date: Mon, 25 Sep 2023 19:13:16 +0800 Subject: [PATCH] Fixing the baseline in math content (#2220) --- crates/typst-library/src/math/fragment.rs | 4 +++- tests/ref/bugs/math-shift.png | Bin 0 -> 2260 bytes tests/typ/bugs/math-shift.typ | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 tests/ref/bugs/math-shift.png create mode 100644 tests/typ/bugs/math-shift.typ diff --git a/crates/typst-library/src/math/fragment.rs b/crates/typst-library/src/math/fragment.rs index 4e174349c..5ac1f2ddd 100644 --- a/crates/typst-library/src/math/fragment.rs +++ b/crates/typst-library/src/math/fragment.rs @@ -187,6 +187,7 @@ pub struct GlyphFragment { pub font: Font, pub lang: Lang, pub fill: Paint, + pub shift: Abs, pub width: Abs, pub ascent: Abs, pub descent: Abs, @@ -225,6 +226,7 @@ impl GlyphFragment { font: ctx.font.clone(), lang: TextElem::lang_in(ctx.styles()), fill: TextElem::fill_in(ctx.styles()), + shift: TextElem::baseline_in(ctx.styles()), style: ctx.style, font_size: ctx.size, width: Abs::zero(), @@ -309,7 +311,7 @@ impl GlyphFragment { let size = Size::new(self.width, self.ascent + self.descent); let mut frame = Frame::new(size); frame.set_baseline(self.ascent); - frame.push(Point::with_y(self.ascent), FrameItem::Text(item)); + frame.push(Point::with_y(self.ascent + self.shift), FrameItem::Text(item)); frame.meta_iter(self.meta); frame } diff --git a/tests/ref/bugs/math-shift.png b/tests/ref/bugs/math-shift.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4b5f5ef7dea6c958f392aa3abbbaeaf0c468d8 GIT binary patch literal 2260 zcmV;_2rKuAP)|-Z9#K-emACS`lxZ1-sp;iXGKmVBg-)5aAIORP{$jRgOeI2Izz_4?ED>RmhM=`at_3LfwvVT> z`_Hv18V~&3OZWk8ZUbC#Sp0kN3q#5{OR_wr=Ce z`Bdg6j(QYPZf9!N6O!Ek_;e7kSuTZBqS@`7^JoYKt-XQKmW}XBw|uk;m&*QBwoy!s zjb_&f#?`yaq;P;Vxg02I)D4Vc0)U1PATxl;7L72cX91OUlDSm956uey&EP}C%OG=` zB7kri1>n#KjAC^a!USomB?$Vp-)yHw2UofqI2-5@^dtnYp2c7Wt*=BjmGzPP#$W3I z<|b|jMgyRe>i~K-eHdY+%&a8{r}~Q^YP8EyoFM&6G5_(mLk_@JyL-SO(CXZjsy2yH z@h)D#*!qJL0LYME0Ce~i3}O`kZM(xfxeXXE3;uKj4u~*n<|ERgde>s-S5*X1VjpN?=y zL{Kw7VT6mqhetX#?s@sq3eXF!`Q&zZ&40nWzErEP`21f0<$s$FTKC# zO@GQG;~QZ!E(?F#_U_-!vgy2~79d1E1;VW}>4sDT+|wJ3Mx#ClxE!05PxUf4`JV>B zSV(1;w;#>}F6j-ar^~pXlAe}Q0NHV8$udAKK!`HOO`mxaphP!qV|ERMl*JQPn6R*( z9>H&j$8=j4;Od9IzfXMa!b1pN&IgaXy>is*5gc#87+DG*j{_QgR~;cio`cf2TNGJ4 zLJ+V(WOGyuojv0}4V|hZ^l1X%DUMh>LOAf7$YiYuI-Znxw;ceY#Oh}S!COQ> zayz`$5+Gg#S~tQ$5e9gPD{K?Ps}KxuK`es-@)8g(PFgoYoLmFU5PC{l+eE?LKv*ae z;gt9lQfx*71N&js2oW8{yE_PME}RoEw6k$`>vN0WS_r2tG0vj-0@(U;zqLdA-mz|k zOZs&EHO{A|pSb~Lsj-)VwA6I{blOku2-`>~a!LVz=>xGI^ga*t-A_w^x85n{ z(ag4AQPJm3EE1s{orb`&5hYOa>YH##dp{Kdr2s{H8&3q_z1(rp;2Pq@ zC)XG`3&7L$Tv4QbGWTaS?lvh{F0Vk)J9@@`Ev*4zZrwP5jKL0$#{ihIK7Js2CtM91 zyvm!L1-8~V0ZUru!K zKs#pugYbbd@-BdeuvnO^;7kB=?ER?f)#pqAA7o8gY*$9XJ7vQheSkun{s4Exa2V5) zDuf{osYM944|^Y>MpyUEzJ%%MsvS>6D0GR0>^me(y#qLjZ~*VcDYlD%(c5;_y$L+1 z(+A+H7z$(BQib4B&s>WTwtpzrQzPG2;yCeL#JndVln;&r=ANOm^aUJbG{AL-vL+@V zvEP|q0N6VMBnj__5k`m$z<}EFv9wp{sM!*c270lS$Fx!G1z_yR(9n>8_Jw@i^*ZFe z`0^b9KAtfafcB#{0kFm9JTRu!1Nhn=t$G6?R!oE&P2^<&ENp=aS>PaC7RJDGq176) z9V2qC4SZoIT0u4$04#d`K?Uf0+fPqvbB5f-Z`jOBsD zsDrz9@7=xg7#xk#N&p@#8~FJzS)f(05-n2@6Ji>Q34`jD!*F*fetvRw1Vi1UU~2k)xs@YGU%*q|B2`X`2nl+zYjuQSF9ZB6PFOpF zHonMAHptmQ>jT#9td7vOBS4r4cvcX+#fhZc4K2ZZmlf)F7mK7!Dz?kyl%9@BaGxW{!22H#laGB0#e0%*du2GW1Xz~U_91ac0JAhc5;}JJ+C(U_NP9n#CDW} zl1~m3ZKGk4?exQ*9nWFa2no7KT{3&aB183XD{SG8JctU5)E!RLMTSKJ8G#F9O4RtG z7AS?F5EOz!PzVY^At(fepb!*-LQn__K_Msvg`f}=f