From 35302d20047c58baa99065a4574eafe1920e7be6 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 18 Apr 2023 19:04:46 +0200 Subject: Handle SVG with text --- library/src/visualize/image.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'library/src') diff --git a/library/src/visualize/image.rs b/library/src/visualize/image.rs index 473df4c1..4b8be5c7 100644 --- a/library/src/visualize/image.rs +++ b/library/src/visualize/image.rs @@ -3,10 +3,9 @@ use std::path::Path; use typst::image::{Image, ImageFormat, RasterFormat, VectorFormat}; -use crate::{ - meta::{Figurable, LocalName}, - prelude::*, -}; +use crate::meta::{Figurable, LocalName}; +use crate::prelude::*; +use crate::text::families; /// A raster or vector graphic. /// @@ -33,7 +32,7 @@ pub struct ImageElem { let Spanned { v: path, span } = args.expect::>("path to image file")?; let path: EcoString = vm.locate(&path).at(span)?.to_string_lossy().into(); - let _ = load(vm.world(), &path).at(span)?; + let _ = load(vm.world(), &path, None).at(span)?; path )] pub path: EcoString, @@ -56,7 +55,9 @@ impl Layout for ImageElem { styles: StyleChain, regions: Regions, ) -> SourceResult { - let image = load(vt.world, &self.path()).unwrap(); + let first = families(styles).next(); + let fallback_family = first.as_ref().map(|f| f.as_str()); + let image = load(vt.world, &self.path(), fallback_family).unwrap(); let sizing = Axes::new(self.width(styles), self.height(styles)); let region = sizing .zip(regions.base()) @@ -158,7 +159,11 @@ pub enum ImageFit { /// Load an image from a path. #[comemo::memoize] -fn load(world: Tracked, full: &str) -> StrResult { +fn load( + world: Tracked, + full: &str, + fallback_family: Option<&str>, +) -> StrResult { let full = Path::new(full); let buffer = world.file(full)?; let ext = full.extension().and_then(OsStr::to_str).unwrap_or_default(); @@ -169,5 +174,5 @@ fn load(world: Tracked, full: &str) -> StrResult { "svg" | "svgz" => ImageFormat::Vector(VectorFormat::Svg), _ => return Err("unknown image format".into()), }; - Image::new(buffer, format) + Image::with_fonts(buffer, format, world, fallback_family) } -- cgit v1.2.3