diff options
| author | Max <me@mkor.je> | 2024-08-09 07:40:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-09 07:40:29 +0000 |
| commit | a6a8cdaa28abe22c3a40e7a96d15e5e02e8a445e (patch) | |
| tree | 9ecd7fa6f443b1f46a1e407453aec55ac51042a5 /crates | |
| parent | a88899ed750047a4871f92940be415e447aef7a3 (diff) | |
Make under/overlines behave the same as accents in attach base (#4695)
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/typst/src/math/underover.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/crates/typst/src/math/underover.rs b/crates/typst/src/math/underover.rs index 68a39983..f1789b7a 100644 --- a/crates/typst/src/math/underover.rs +++ b/crates/typst/src/math/underover.rs @@ -67,7 +67,7 @@ fn layout_underoverline( span: Span, position: Position, ) -> SourceResult<()> { - let (extra_height, content, line_pos, content_pos, baseline, bar_height); + let (extra_height, content, line_pos, content_pos, baseline, bar_height, line_adjust); match position { Position::Under => { let sep = scaled!(ctx, styles, underbar_extra_descender); @@ -79,7 +79,8 @@ fn layout_underoverline( line_pos = Point::with_y(content.height() + gap + bar_height / 2.0); content_pos = Point::zero(); - baseline = content.ascent() + baseline = content.ascent(); + line_adjust = -content.italics_correction(); } Position::Over => { let sep = scaled!(ctx, styles, overbar_extra_ascender); @@ -93,21 +94,25 @@ fn layout_underoverline( line_pos = Point::with_y(sep + bar_height / 2.0); content_pos = Point::with_y(extra_height); baseline = content.ascent() + extra_height; + line_adjust = Abs::zero(); } } let width = content.width(); let height = content.height() + extra_height; let size = Size::new(width, height); + let line_width = width + line_adjust; let content_class = content.class(); + let content_is_text_like = content.is_text_like(); + let content_italics_correction = content.italics_correction(); let mut frame = Frame::soft(size); frame.set_baseline(baseline); frame.push_frame(content_pos, content.into_frame()); frame.push( line_pos, FrameItem::Shape( - Geometry::Line(Point::with_x(width)).stroked(FixedStroke { + Geometry::Line(Point::with_x(line_width)).stroked(FixedStroke { paint: TextElem::fill_in(styles).as_decoration(), thickness: bar_height, ..FixedStroke::default() @@ -116,7 +121,12 @@ fn layout_underoverline( ), ); - ctx.push(FrameFragment::new(ctx, styles, frame).with_class(content_class)); + ctx.push( + FrameFragment::new(ctx, styles, frame) + .with_class(content_class) + .with_text_like(content_is_text_like) + .with_italics_correction(content_italics_correction), + ); Ok(()) } |
