summaryrefslogtreecommitdiff
path: root/library/src
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-04-18 19:04:46 +0200
committerLaurenz <laurmaedje@gmail.com>2023-04-18 19:04:46 +0200
commit35302d20047c58baa99065a4574eafe1920e7be6 (patch)
treeb9c7dbf3e15c24cc063da70dbc2fa3d5befa41d4 /library/src
parentbce83d330f0efc0f8cdd6fb01d8244cb9f01ac27 (diff)
Handle SVG with text
Diffstat (limited to 'library/src')
-rw-r--r--library/src/visualize/image.rs21
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)
}