From 24e26b8c771f09965422cf7b0acde3d694811f7e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 29 Mar 2023 19:21:01 +0200 Subject: [PATCH] Fix styling of text operators --- library/src/math/ctx.rs | 24 +++++++++++------------- library/src/math/mod.rs | 3 ++- library/src/math/op.rs | 5 +++-- macros/src/element.rs | 5 +++++ tests/ref/math/op.png | Bin 6228 -> 6817 bytes tests/typ/math/op.typ | 4 ++++ 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/library/src/math/ctx.rs b/library/src/math/ctx.rs index aed826b53..904c43331 100644 --- a/library/src/math/ctx.rs +++ b/library/src/math/ctx.rs @@ -124,11 +124,11 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { .into_frame()) } - pub fn layout_text(&mut self, elem: &TextElem) -> SourceResult<()> { + pub fn layout_text(&mut self, elem: &TextElem) -> SourceResult { let text = elem.text(); let span = elem.span(); let mut chars = text.chars(); - if let Some(glyph) = chars + let fragment = if let Some(glyph) = chars .next() .filter(|_| chars.next().is_none()) .map(|c| self.style.styled_char(c)) @@ -139,9 +139,9 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { && glyph.class == Some(MathClass::Large) { let height = scaled!(self, display_operator_min_height); - self.push(glyph.stretch_vertical(self, height, Abs::zero())); + glyph.stretch_vertical(self, height, Abs::zero()).into() } else { - self.push(glyph); + glyph.into() } } else if text.chars().all(|c| c.is_ascii_digit()) { // Numbers aren't that difficult. @@ -151,7 +151,7 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { fragments.push(GlyphFragment::new(self, c, span).into()); } let frame = MathRow::new(fragments).to_frame(self); - self.push(FrameFragment::new(self, frame)); + FrameFragment::new(self, frame).into() } else { // Anything else is handled by Typst's standard text layout. let spaced = text.graphemes(true).count() > 1; @@ -161,14 +161,12 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { } let text: EcoString = text.chars().map(|c| style.styled_char(c)).collect(); let frame = self.layout_content(&TextElem::packed(text).spanned(span))?; - self.push( - FrameFragment::new(self, frame) - .with_class(MathClass::Alphabetic) - .with_spaced(spaced), - ); - } - - Ok(()) + FrameFragment::new(self, frame) + .with_class(MathClass::Alphabetic) + .with_spaced(spaced) + .into() + }; + Ok(fragment) } pub fn styles(&self) -> StyleChain { diff --git a/library/src/math/mod.rs b/library/src/math/mod.rs index b4a5b1567..286d189a6 100644 --- a/library/src/math/mod.rs +++ b/library/src/math/mod.rs @@ -331,7 +331,8 @@ impl LayoutMath for Content { } if let Some(elem) = self.to::() { - ctx.layout_text(elem)?; + let fragment = ctx.layout_text(elem)?; + ctx.push(fragment); return Ok(()); } diff --git a/library/src/math/op.rs b/library/src/math/op.rs index e8db0c5db..2d8266cc1 100644 --- a/library/src/math/op.rs +++ b/library/src/math/op.rs @@ -35,9 +35,10 @@ pub struct OpElem { impl LayoutMath for OpElem { fn layout_math(&self, ctx: &mut MathContext) -> SourceResult<()> { - let frame = ctx.layout_content(&TextElem::packed(self.text()))?; + let fragment = + ctx.layout_text(&TextElem::new(self.text()).spanned(self.span()))?; ctx.push( - FrameFragment::new(ctx, frame) + FrameFragment::new(ctx, fragment.to_frame()) .with_class(MathClass::Large) .with_limits(self.limits(ctx.styles())), ); diff --git a/macros/src/element.rs b/macros/src/element.rs index dd837754b..37ca19eb7 100644 --- a/macros/src/element.rs +++ b/macros/src/element.rs @@ -204,6 +204,11 @@ fn create(element: &Elem) -> TokenStream { pub fn span(&self) -> ::typst::syntax::Span { self.0.span() } + + /// Set the element's span. + pub fn spanned(self, span: ::typst::syntax::Span) -> Self { + Self(self.0.spanned(span)) + } } #element_impl diff --git a/tests/ref/math/op.png b/tests/ref/math/op.png index b4878438c5f3d0b829c8d6828af5535360010532..08d8b93ba39a1580321aa89fef141141ccf18e49 100644 GIT binary patch literal 6817 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 Ka+NTPu>S!>sE5-4 diff --git a/tests/typ/math/op.typ b/tests/typ/math/op.typ index 2a1c20444..08395de0b 100644 --- a/tests/typ/math/op.typ +++ b/tests/typ/math/op.typ @@ -19,3 +19,7 @@ $ lim_(n->infinity) 1/n = 0 $ // Test custom operator. $ op("myop", limits: #false)_(x:=1) x \ op("myop", limits: #true)_(x:=1) x $ + +--- +// Test styled operator. +$ bold(op("bold", limits: #true))_x y $