diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-04-18 19:04:46 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-04-18 19:04:46 +0200 |
| commit | 35302d20047c58baa99065a4574eafe1920e7be6 (patch) | |
| tree | b9c7dbf3e15c24cc063da70dbc2fa3d5befa41d4 /library | |
| parent | bce83d330f0efc0f8cdd6fb01d8244cb9f01ac27 (diff) | |
Handle SVG with text
Diffstat (limited to 'library')
| -rw-r--r-- | library/src/visualize/image.rs | 21 |
1 files changed, 13 insertions, 8 deletions
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::<Spanned<EcoString>>("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<Fragment> { - 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<dyn World>, full: &str) -> StrResult<Image> { +fn load( + world: Tracked<dyn World>, + full: &str, + fallback_family: Option<&str>, +) -> StrResult<Image> { 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<dyn World>, full: &str) -> StrResult<Image> { "svg" | "svgz" => ImageFormat::Vector(VectorFormat::Svg), _ => return Err("unknown image format".into()), }; - Image::new(buffer, format) + Image::with_fonts(buffer, format, world, fallback_family) } |
