From 55536e218dd2e3705f4f924298adc3ca52bfd743 Mon Sep 17 00:00:00 2001 From: Eric Biedert Date: Thu, 4 Jan 2024 16:14:26 +0100 Subject: [PATCH] Improve positioning of multiple accents and attachments (#3059) --- crates/typst/src/math/accent.rs | 41 ++++++++---------------- crates/typst/src/math/attach.rs | 29 +++-------------- crates/typst/src/math/cancel.rs | 14 ++++++-- crates/typst/src/math/ctx.rs | 3 +- crates/typst/src/math/fragment.rs | 51 +++++++++++++++++++++++++++++- crates/typst/src/math/op.rs | 7 ++++ crates/typst/src/math/stretch.rs | 3 ++ tests/ref/math/accent.png | Bin 8869 -> 8862 bytes tests/ref/math/attach-p1.png | Bin 14112 -> 14206 bytes tests/ref/math/frac.png | Bin 30974 -> 30979 bytes 10 files changed, 92 insertions(+), 56 deletions(-) diff --git a/crates/typst/src/math/accent.rs b/crates/typst/src/math/accent.rs index 06fd6babd..8f88c5b85 100644 --- a/crates/typst/src/math/accent.rs +++ b/crates/typst/src/math/accent.rs @@ -1,9 +1,8 @@ -use ttf_parser::GlyphId; use unicode_math_class::MathClass; use crate::diag::{bail, SourceResult}; use crate::foundations::{cast, elem, Content, NativeElement, Resolve, Smart, Value}; -use crate::layout::{Abs, Em, Frame, Length, Point, Rel, Size}; +use crate::layout::{Em, Frame, Length, Point, Rel, Size}; use crate::math::{ FrameFragment, GlyphFragment, LayoutMath, MathContext, MathFragment, Scaled, }; @@ -72,12 +71,7 @@ impl LayoutMath for AccentElem { // Preserve class to preserve automatic spacing. let base_class = base.class().unwrap_or(MathClass::Normal); - let base_attach = match &base { - MathFragment::Glyph(base) => { - attachment(ctx, base.id, base.italics_correction) - } - _ => (base.width() + base.italics_correction()) / 2.0, - }; + let base_attach = base.accent_attach(); let width = self .size(ctx.styles()) @@ -92,10 +86,7 @@ impl LayoutMath for AccentElem { let short_fall = ACCENT_SHORT_FALL.scaled(ctx); let variant = glyph.stretch_horizontal(ctx, width, short_fall); let accent = variant.frame; - let accent_attach = match variant.id { - Some(id) => attachment(ctx, id, variant.italics_correction), - None => accent.width() / 2.0, - }; + let accent_attach = variant.accent_attach; // Descent is negative because the accent's ink bottom is above the // baseline. Therefore, the default gap is the accent's negated descent @@ -106,8 +97,14 @@ impl LayoutMath for AccentElem { let size = Size::new(base.width(), accent.height() + gap + base.height()); let accent_pos = Point::with_x(base_attach - accent_attach); let base_pos = Point::with_y(accent.height() + gap); - let base_ascent = base.ascent(); let baseline = base_pos.y + base.ascent(); + let base_italics_correction = base.italics_correction(); + let base_text_like = base.is_text_like(); + + let base_ascent = match &base { + MathFragment::Frame(frame) => frame.base_ascent, + _ => base.ascent(), + }; let mut frame = Frame::soft(size); frame.set_baseline(baseline); @@ -116,26 +113,16 @@ impl LayoutMath for AccentElem { ctx.push( FrameFragment::new(ctx, frame) .with_class(base_class) - .with_base_ascent(base_ascent), + .with_base_ascent(base_ascent) + .with_italics_correction(base_italics_correction) + .with_accent_attach(base_attach) + .with_text_like(base_text_like), ); Ok(()) } } -/// The horizontal attachment position for the given glyph. -fn attachment(ctx: &MathContext, id: GlyphId, italics_correction: Abs) -> Abs { - ctx.table - .glyph_info - .and_then(|info| info.top_accent_attachments) - .and_then(|attachments| attachments.get(id)) - .map(|record| record.value.scaled(ctx)) - .unwrap_or_else(|| { - let advance = ctx.ttf.glyph_hor_advance(id).unwrap_or_default(); - (advance.scaled(ctx) + italics_correction) / 2.0 - }) -} - /// An accent character. #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Hash)] pub struct Accent(char); diff --git a/crates/typst/src/math/attach.rs b/crates/typst/src/math/attach.rs index 67f77001c..a6f92afb8 100644 --- a/crates/typst/src/math/attach.rs +++ b/crates/typst/src/math/attach.rs @@ -2,7 +2,7 @@ use unicode_math_class::MathClass; use crate::diag::SourceResult; use crate::foundations::{elem, Content, StyleChain}; -use crate::layout::{Abs, Frame, FrameItem, Point, Size}; +use crate::layout::{Abs, Frame, Point, Size}; use crate::math::{ FrameFragment, LayoutMath, MathContext, MathFragment, MathSize, Scaled, }; @@ -382,7 +382,7 @@ fn compute_shifts_up_and_down( let mut shift_up = Abs::zero(); let mut shift_down = Abs::zero(); - let is_char_box = is_character_box(base); + let is_text_like = base.is_text_like(); if tl.is_some() || tr.is_some() { let ascent = match &base { @@ -391,7 +391,7 @@ fn compute_shifts_up_and_down( }; shift_up = shift_up .max(sup_shift_up) - .max(if is_char_box { Abs::zero() } else { ascent - sup_drop_max }) + .max(if is_text_like { Abs::zero() } else { ascent - sup_drop_max }) .max(sup_bottom_min + measure!(tl, descent)) .max(sup_bottom_min + measure!(tr, descent)); } @@ -399,7 +399,7 @@ fn compute_shifts_up_and_down( if bl.is_some() || br.is_some() { shift_down = shift_down .max(sub_shift_down) - .max(if is_char_box { Abs::zero() } else { base.descent() + sub_drop_min }) + .max(if is_text_like { Abs::zero() } else { base.descent() + sub_drop_min }) .max(measure!(bl, ascent) - sub_top_max) .max(measure!(br, ascent) - sub_top_max); } @@ -429,24 +429,3 @@ fn compute_shifts_up_and_down( fn is_integral_char(c: char) -> bool { ('∫'..='∳').contains(&c) || ('⨋'..='⨜').contains(&c) } - -/// Whether the fragment consists of a single character or atomic piece of text. -fn is_character_box(fragment: &MathFragment) -> bool { - match fragment { - MathFragment::Glyph(_) | MathFragment::Variant(_) => { - fragment.class() != Some(MathClass::Large) - } - MathFragment::Frame(fragment) => is_atomic_text_frame(&fragment.frame), - _ => false, - } -} - -/// Handles e.g. "sin", "log", "exp", "CustomOperator". -fn is_atomic_text_frame(frame: &Frame) -> bool { - // Meta information isn't visible or renderable, so we exclude it. - let mut iter = frame - .items() - .map(|(_, item)| item) - .filter(|item| !matches!(item, FrameItem::Meta(_, _))); - matches!(iter.next(), Some(FrameItem::Text(_))) && iter.next().is_none() -} diff --git a/crates/typst/src/math/cancel.rs b/crates/typst/src/math/cancel.rs index bf1e6d758..5fa34d7dc 100644 --- a/crates/typst/src/math/cancel.rs +++ b/crates/typst/src/math/cancel.rs @@ -109,8 +109,12 @@ impl LayoutMath for CancelElem { #[typst_macros::time(name = "math.cancel", span = self.span())] fn layout_math(&self, ctx: &mut MathContext) -> SourceResult<()> { let body = ctx.layout_fragment(self.body())?; - // Use the same math class as the body, in order to preserve automatic spacing around it. + // Preserve properties of body. let body_class = body.class().unwrap_or(MathClass::Special); + let body_italics = body.italics_correction(); + let body_attach = body.accent_attach(); + let body_text_like = body.is_text_like(); + let mut body = body.into_frame(); let styles = ctx.styles(); @@ -150,7 +154,13 @@ impl LayoutMath for CancelElem { body.push_frame(center, second_line); } - ctx.push(FrameFragment::new(ctx, body).with_class(body_class)); + ctx.push( + FrameFragment::new(ctx, body) + .with_class(body_class) + .with_italics_correction(body_italics) + .with_accent_attach(body_attach) + .with_text_like(body_text_like), + ); Ok(()) } diff --git a/crates/typst/src/math/ctx.rs b/crates/typst/src/math/ctx.rs index 73cb87071..b93d7cc29 100644 --- a/crates/typst/src/math/ctx.rs +++ b/crates/typst/src/math/ctx.rs @@ -226,7 +226,7 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { fragments.push(GlyphFragment::new(self, c, span).into()); } let frame = MathRow::new(fragments).into_frame(self); - FrameFragment::new(self, frame).into() + FrameFragment::new(self, frame).with_text_like(true).into() } else { // Anything else is handled by Typst's standard text layout. let mut style = self.style; @@ -286,6 +286,7 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { Ok(FrameFragment::new(self, frame) .with_class(MathClass::Alphabetic) + .with_text_like(true) .with_spaced(spaced)) } diff --git a/crates/typst/src/math/fragment.rs b/crates/typst/src/math/fragment.rs index 6131f663d..cad79c67b 100644 --- a/crates/typst/src/math/fragment.rs +++ b/crates/typst/src/math/fragment.rs @@ -142,14 +142,32 @@ impl MathFragment { } } + pub fn is_text_like(&self) -> bool { + match self { + Self::Glyph(_) | Self::Variant(_) => self.class() != Some(MathClass::Large), + MathFragment::Frame(frame) => frame.text_like, + _ => false, + } + } + pub fn italics_correction(&self) -> Abs { match self { Self::Glyph(glyph) => glyph.italics_correction, Self::Variant(variant) => variant.italics_correction, + Self::Frame(fragment) => fragment.italics_correction, _ => Abs::zero(), } } + pub fn accent_attach(&self) -> Abs { + match self { + Self::Glyph(glyph) => glyph.accent_attach, + Self::Variant(variant) => variant.accent_attach, + Self::Frame(fragment) => fragment.accent_attach, + _ => self.width() / 2.0, + } + } + pub fn into_frame(self) -> Frame { match self { Self::Glyph(glyph) => glyph.into_frame(), @@ -199,6 +217,7 @@ pub struct GlyphFragment { pub ascent: Abs, pub descent: Abs, pub italics_correction: Abs, + pub accent_attach: Abs, pub style: MathStyle, pub font_size: Abs, pub class: Option, @@ -241,6 +260,7 @@ impl GlyphFragment { descent: Abs::zero(), limits: Limits::for_char(c), italics_correction: Abs::zero(), + accent_attach: Abs::zero(), class, span, meta: MetaElem::data_in(ctx.styles()), @@ -271,6 +291,8 @@ impl GlyphFragment { }); let mut width = advance.scaled(ctx); + let accent_attach = accent_attach(ctx, id).unwrap_or((width + italics) / 2.0); + if !is_extended_shape(ctx, id) { width += italics; } @@ -280,6 +302,7 @@ impl GlyphFragment { self.ascent = bbox.y_max.scaled(ctx); self.descent = -bbox.y_min.scaled(ctx); self.italics_correction = italics; + self.accent_attach = accent_attach; } pub fn height(&self) -> Abs { @@ -293,6 +316,7 @@ impl GlyphFragment { style: self.style, font_size: self.font_size, italics_correction: self.italics_correction, + accent_attach: self.accent_attach, class: self.class, span: self.span, limits: self.limits, @@ -356,6 +380,7 @@ pub struct VariantFragment { pub c: char, pub id: Option, pub italics_correction: Abs, + pub accent_attach: Abs, pub frame: Frame, pub style: MathStyle, pub font_size: Abs, @@ -389,11 +414,15 @@ pub struct FrameFragment { pub limits: Limits, pub spaced: bool, pub base_ascent: Abs, + pub italics_correction: Abs, + pub accent_attach: Abs, + pub text_like: bool, } impl FrameFragment { pub fn new(ctx: &MathContext, mut frame: Frame) -> Self { let base_ascent = frame.ascent(); + let accent_attach = frame.width() / 2.0; frame.meta(ctx.styles(), false); Self { frame, @@ -403,6 +432,9 @@ impl FrameFragment { limits: Limits::Never, spaced: false, base_ascent, + italics_correction: Abs::zero(), + accent_attach, + text_like: false, } } @@ -421,6 +453,18 @@ impl FrameFragment { pub fn with_base_ascent(self, base_ascent: Abs) -> Self { Self { base_ascent, ..self } } + + pub fn with_italics_correction(self, italics_correction: Abs) -> Self { + Self { italics_correction, ..self } + } + + pub fn with_accent_attach(self, accent_attach: Abs) -> Self { + Self { accent_attach, ..self } + } + + pub fn with_text_like(self, text_like: bool) -> Self { + Self { text_like, ..self } + } } /// Look up the italics correction for a glyph. @@ -428,6 +472,11 @@ fn italics_correction(ctx: &MathContext, id: GlyphId) -> Option { Some(ctx.table.glyph_info?.italic_corrections?.get(id)?.scaled(ctx)) } +/// Loop up the top accent attachment position for a glyph. +fn accent_attach(ctx: &MathContext, id: GlyphId) -> Option { + Some(ctx.table.glyph_info?.top_accent_attachments?.get(id)?.scaled(ctx)) +} + /// Look up the script/scriptscript alternates for a glyph fn script_alternatives<'a>( ctx: &MathContext<'a, '_, '_>, @@ -438,7 +487,7 @@ fn script_alternatives<'a>( }) } -/// Look up the italics correction for a glyph. +/// Look up whether a glyph is an extended shape. fn is_extended_shape(ctx: &MathContext, id: GlyphId) -> bool { ctx.table .glyph_info diff --git a/crates/typst/src/math/op.rs b/crates/typst/src/math/op.rs index bf455903f..e1ac2b726 100644 --- a/crates/typst/src/math/op.rs +++ b/crates/typst/src/math/op.rs @@ -37,9 +37,16 @@ impl LayoutMath for OpElem { #[typst_macros::time(name = "math.op", span = self.span())] fn layout_math(&self, ctx: &mut MathContext) -> SourceResult<()> { let fragment = ctx.layout_fragment(self.text())?; + let italics = fragment.italics_correction(); + let accent_attach = fragment.accent_attach(); + let text_like = fragment.is_text_like(); + ctx.push( FrameFragment::new(ctx, fragment.into_frame()) .with_class(MathClass::Large) + .with_italics_correction(italics) + .with_accent_attach(accent_attach) + .with_text_like(text_like) .with_limits(if self.limits(ctx.styles()) { Limits::Display } else { diff --git a/crates/typst/src/math/stretch.rs b/crates/typst/src/math/stretch.rs index bfeb80efc..90ed03b75 100644 --- a/crates/typst/src/math/stretch.rs +++ b/crates/typst/src/math/stretch.rs @@ -177,6 +177,8 @@ fn assemble( offset += advance; } + let accent_attach = if horizontal { frame.width() / 2.0 } else { base.accent_attach }; + VariantFragment { c: base.c, id: None, @@ -184,6 +186,7 @@ fn assemble( style: base.style, font_size: base.font_size, italics_correction: Abs::zero(), + accent_attach, class: base.class, span: base.span, limits: base.limits, diff --git a/tests/ref/math/accent.png b/tests/ref/math/accent.png index b955b5adbedab9f64edf29ef468fb9ea419bec9e..72fa420a4a889af6eb6da5af076ceb3176e620cf 100644 GIT binary patch delta 3395 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 IQL~Nt7Z%}4)c^nh delta 3402 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 T1GaMOfIo2!X@RJOyCwVw*|2e` diff --git a/tests/ref/math/attach-p1.png b/tests/ref/math/attach-p1.png index fa610729288c94eb01e98719913fc2c5ed859e52..45c465ce57f733f95b3ce00e10a695466104bec4 100644 GIT binary patch literal 14206 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 delta 11125 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 T#dpvV3Gq@@(o(E_VHNpbiuJeh