From 49d6a2c022e7b8c9da5307c7ef258998ab60004d Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 28 Feb 2025 23:47:43 +0100 Subject: [PATCH] Load unifont fonts into typst --- Cargo.lock | 1 + showbits-typst/Cargo.toml | 1 + showbits-typst/src/lib.rs | 30 +++++++++++++++++++++--------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 618793d..69a7bec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2527,6 +2527,7 @@ dependencies = [ "image", "serde", "serde_json", + "showbits-assets", "typst", "typst-assets", "typst-render", diff --git a/showbits-typst/Cargo.toml b/showbits-typst/Cargo.toml index 6536790..4da783e 100644 --- a/showbits-typst/Cargo.toml +++ b/showbits-typst/Cargo.toml @@ -8,6 +8,7 @@ anyhow = { workspace = true } image = { workspace = true } serde = { workspace = true } serde_json = "1.0.139" +showbits-assets = { workspace = true } typst = { workspace = true } typst-assets = { workspace = true } typst-render = { workspace = true } diff --git a/showbits-typst/src/lib.rs b/showbits-typst/src/lib.rs index d4723ea..f14c1f4 100644 --- a/showbits-typst/src/lib.rs +++ b/showbits-typst/src/lib.rs @@ -53,20 +53,31 @@ impl FontLoader { } } + fn load_font_file(&mut self, data: &'static [u8]) { + // https://github.com/typst/typst/blob/be12762d942e978ddf2e0ac5c34125264ab483b7/crates/typst-cli/src/fonts.rs#L107-L121 + let font_data = Bytes::new(data); + for (i, font) in Font::iter(font_data).enumerate() { + self.book.push(font.info().clone()); + self.fonts.push(FontSlot { + path: PathBuf::new(), + index: i as u32, + font: OnceLock::from(Some(font)), + }); + } + } + fn load_embedded_fonts(&mut self) { // https://github.com/typst/typst/blob/be12762d942e978ddf2e0ac5c34125264ab483b7/crates/typst-cli/src/fonts.rs#L107-L121 for font_file in typst_assets::fonts() { - let font_data = Bytes::new(font_file); - for (i, font) in Font::iter(font_data).enumerate() { - self.book.push(font.info().clone()); - self.fonts.push(FontSlot { - path: PathBuf::new(), - index: i as u32, - font: OnceLock::from(Some(font)), - }); - } + self.load_font_file(font_file); } } + + fn load_unifonts(&mut self) { + self.load_font_file(showbits_assets::UNIFONT); + self.load_font_file(showbits_assets::UNIFONT_JP); + self.load_font_file(showbits_assets::UNIFONT_UPPER); + } } pub struct Typst { @@ -82,6 +93,7 @@ impl Typst { pub fn new() -> Self { let mut loader = FontLoader::new(); loader.load_embedded_fonts(); + loader.load_unifonts(); Self { library: LazyHash::new(Library::default()),