diff options
Diffstat (limited to 'crates/typst-library/src/text/mod.rs')
| -rw-r--r-- | crates/typst-library/src/text/mod.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/crates/typst-library/src/text/mod.rs b/crates/typst-library/src/text/mod.rs index 23edc9e9..1c0696d1 100644 --- a/crates/typst-library/src/text/mod.rs +++ b/crates/typst-library/src/text/mod.rs @@ -30,6 +30,7 @@ pub use self::space::*; use std::fmt::{self, Debug, Formatter}; use std::hash::Hash; +use std::str::FromStr; use std::sync::LazyLock; use ecow::{eco_format, EcoString}; @@ -1283,6 +1284,12 @@ pub fn features(styles: StyleChain) -> Vec<Feature> { feat(b"frac", 1); } + match EquationElem::size_in(styles) { + MathSize::Script => feat(b"ssty", 1), + MathSize::ScriptScript => feat(b"ssty", 2), + _ => {} + } + for (tag, value) in TextElem::features_in(styles).0 { tags.push(Feature::new(tag, value, ..)) } @@ -1290,6 +1297,17 @@ pub fn features(styles: StyleChain) -> Vec<Feature> { tags } +/// Process the language and region of a style chain into a +/// rustybuzz-compatible BCP 47 language. +pub fn language(styles: StyleChain) -> rustybuzz::Language { + let mut bcp: EcoString = TextElem::lang_in(styles).as_str().into(); + if let Some(region) = TextElem::region_in(styles) { + bcp.push('-'); + bcp.push_str(region.as_str()); + } + rustybuzz::Language::from_str(&bcp).unwrap() +} + /// A toggle that turns on and off alternatingly if folded. #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] pub struct ItalicToggle(pub bool); |
