diff --git a/crates/typst-library/src/text/shift.rs b/crates/typst-library/src/text/shift.rs index 80fa8916a..05cd941c5 100644 --- a/crates/typst-library/src/text/shift.rs +++ b/crates/typst-library/src/text/shift.rs @@ -62,16 +62,14 @@ pub struct SubElem { impl Show for Packed { #[typst_macros::time(name = "sub", span = self.span())] fn show(&self, _: &mut Engine, styles: StyleChain) -> SourceResult { - let outer_text_size = TextElem::size_in(styles); - Ok(self - .body - .clone() - .styled(TextElem::set_subperscript(Some(ScriptSettings { - typographic: self.typographic(styles), - shift: self.baseline(styles).map(|l| -l.to_em(outer_text_size)), - size: self.size(styles).map(|t| t.0.to_em(outer_text_size)), - kind: ScriptKind::Sub, - })))) + show_script( + styles, + self.body.clone(), + self.typographic(styles), + self.baseline(styles), + self.size(styles), + ScriptKind::Sub, + ) } } @@ -135,19 +133,34 @@ pub struct SuperElem { impl Show for Packed { #[typst_macros::time(name = "super", span = self.span())] fn show(&self, _: &mut Engine, styles: StyleChain) -> SourceResult { - let outer_text_size = TextElem::size_in(styles); - Ok(self - .body - .clone() - .styled(TextElem::set_subperscript(Some(ScriptSettings { - typographic: self.typographic(styles), - shift: self.baseline(styles).map(|l| -l.to_em(outer_text_size)), - size: self.size(styles).map(|t| t.0.to_em(outer_text_size)), - kind: ScriptKind::Super, - })))) + show_script( + styles, + self.body.clone(), + self.typographic(styles), + self.baseline(styles), + self.size(styles), + ScriptKind::Super, + ) } } +fn show_script( + styles: StyleChain, + body: Content, + typographic: bool, + baseline: Smart, + size: Smart, + kind: ScriptKind, +) -> SourceResult { + let outer_text_size = TextElem::size_in(styles); + Ok(body.styled(TextElem::set_subperscript(Some(ScriptSettings { + typographic, + shift: baseline.map(|l| -l.to_em(outer_text_size)), + size: size.map(|t| t.0.to_em(outer_text_size)), + kind, + })))) +} + /// Configuration values for sub- or superscript text. #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] pub struct ScriptSettings {