diff --git a/crates/typst-layout/src/math/fragment.rs b/crates/typst-layout/src/math/fragment.rs index 1b508a349..6dfb8d1af 100644 --- a/crates/typst-layout/src/math/fragment.rs +++ b/crates/typst-layout/src/math/fragment.rs @@ -11,7 +11,7 @@ use typst_library::layout::{ }; use typst_library::math::{EquationElem, MathSize}; use typst_library::text::{Font, Glyph, Lang, Region, TextElem, TextItem}; -use typst_library::visualize::Paint; +use typst_library::visualize::{FixedStroke, Paint}; use typst_syntax::Span; use typst_utils::default_math_class; use unicode_math_class::MathClass; @@ -227,14 +227,51 @@ impl From for MathFragment { } } +/// A single glyph in math. #[derive(Clone)] pub struct GlyphFragment { + /// The id of the glyph in the font. pub id: GlyphId, + + /// The base character. pub c: char, + + /// A single OpenType font for this glyph. + /// + /// A show rule must be used to affect this. + /// + /// ```example + /// #show math.equation: set text(font: "Fira Math") + /// $ f i r a m a t h $ + /// ``` pub font: Font, + + /// An [ISO 639-1/2/3 language code.](https://en.wikipedia.org/wiki/ISO_639) + /// + /// See [TextElem] pub lang: Lang, + + /// An [ISO 3166-1 alpha-2 region code.](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) + /// + /// See [TextElem] pub region: Option, + + /// The glyph fill paint. + /// + /// ```example + /// #show math.equation: set text(fill: red) + /// $ r e d $ + /// ``` pub fill: Paint, + + /// How to stroke the text. + /// + /// ```example + /// #show math.equation: set text(stroke: red + 0.5pt) + /// $ r e d a g a i n $ + /// ``` + pub stroke: Option, + pub shift: Abs, pub width: Abs, pub ascent: Abs, @@ -286,6 +323,7 @@ impl GlyphFragment { lang: TextElem::lang_in(styles), region: TextElem::region_in(styles), fill: TextElem::fill_in(styles).as_decoration(), + stroke: TextElem::stroke_in(styles).map(|s| s.unwrap_or_default()), shift: TextElem::baseline_in(styles), font_size: TextElem::size_in(styles), math_size: EquationElem::size_in(styles), @@ -368,10 +406,10 @@ impl GlyphFragment { font: self.font.clone(), size: self.font_size, fill: self.fill, + stroke: self.stroke, lang: self.lang, region: self.region, text: self.c.into(), - stroke: None, glyphs: vec![Glyph { id: self.id.0, x_advance: Em::from_length(self.width, self.font_size), diff --git a/crates/typst-library/src/text/item.rs b/crates/typst-library/src/text/item.rs index ed559aec8..5a5346ce0 100644 --- a/crates/typst-library/src/text/item.rs +++ b/crates/typst-library/src/text/item.rs @@ -39,7 +39,7 @@ impl TextItem { impl Debug for TextItem { fn fmt(&self, f: &mut Formatter) -> fmt::Result { - f.write_str("Text(")?; + f.write_str("TextItem(")?; self.text.fmt(f)?; f.write_str(")") } diff --git a/crates/typst-library/src/text/mod.rs b/crates/typst-library/src/text/mod.rs index 462d16060..dc4be7b7d 100644 --- a/crates/typst-library/src/text/mod.rs +++ b/crates/typst-library/src/text/mod.rs @@ -763,7 +763,7 @@ impl TextElem { impl Debug for TextElem { fn fmt(&self, f: &mut Formatter) -> fmt::Result { - write!(f, "Text({})", self.text) + write!(f, "TextElem({})", self.text) } } diff --git a/tests/ref/issue-6170-equation-stroke.png b/tests/ref/issue-6170-equation-stroke.png new file mode 100644 index 000000000..a375931b5 Binary files /dev/null and b/tests/ref/issue-6170-equation-stroke.png differ diff --git a/tests/suite/math/equation.typ b/tests/suite/math/equation.typ index 148a49d02..189f6e6db 100644 --- a/tests/suite/math/equation.typ +++ b/tests/suite/math/equation.typ @@ -297,3 +297,10 @@ Looks at the @quadratic formula. #set page(width: 150pt) #set text(lang: "he") תהא סדרה $a_n$: $[a_n: 1, 1/2, 1/3, dots]$ + +--- issue-6170-equation-stroke --- +// In this bug stroke settings did not apply to math content. +// We expect all of these to have a green stroke. +#set text(stroke: green + 0.5pt) + +A $B^2$ $ grave(C)' $