From a741bd6b83d1e374c8218b5439e26522499cc4ae Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 16 May 2022 17:56:23 +0200 Subject: [PATCH] Absolute paths --- src/eval/func.rs | 21 +++++++++--- src/eval/mod.rs | 8 +++-- src/image.rs | 3 +- src/lib.rs | 44 ++++++++++++++++---------- src/library/graphics/image.rs | 12 ++++--- src/main.rs | 19 ++++++++--- src/source.rs | 3 +- tests/ref/style/set.png | Bin 14415 -> 20833 bytes tests/ref/style/show-text.png | Bin 39399 -> 43671 bytes tests/typ/code/import.typ | 4 +-- tests/typ/code/include.typ | 4 +-- tests/typ/coma.typ | 2 +- tests/typ/graphics/image.typ | 24 +++++++------- tests/typ/graphics/transform.typ | 4 +-- tests/typ/layout/grid-3.typ | 2 +- tests/typ/layout/pad.typ | 2 +- tests/typ/layout/place-background.typ | 2 +- tests/typ/layout/place.typ | 2 +- tests/typ/style/set.typ | 12 +++++++ tests/typ/style/show-text.typ | 7 ++++ tests/typ/text/bidi.typ | 2 +- tests/typ/text/indent.typ | 4 +-- tests/typ/text/link.typ | 2 +- 23 files changed, 123 insertions(+), 60 deletions(-) diff --git a/src/eval/func.rs b/src/eval/func.rs index 4c5761ab..f15b0241 100644 --- a/src/eval/func.rs +++ b/src/eval/func.rs @@ -5,6 +5,7 @@ use std::sync::Arc; use super::{Args, Eval, Flow, Scope, Scopes, Value}; use crate::diag::{StrResult, TypResult}; use crate::model::{Content, NodeId, StyleMap}; +use crate::source::SourceId; use crate::syntax::ast::Expr; use crate::util::EcoString; use crate::Context; @@ -174,6 +175,8 @@ pub trait Node: 'static { /// A user-defined closure. #[derive(Hash)] pub struct Closure { + /// The location where the closure was defined. + pub location: Option, /// The name of the closure. pub name: Option, /// Captured values from outer scopes. @@ -212,18 +215,28 @@ impl Closure { // Backup the old control flow state. let prev_flow = ctx.flow.take(); + let detached = ctx.route.is_empty(); + if detached { + ctx.route = self.location.into_iter().collect(); + } // Evaluate the body. - let mut value = self.body.eval(ctx, &mut scp)?; + let result = self.body.eval(ctx, &mut scp); + + // Restore the old control flow state. + let flow = std::mem::replace(&mut ctx.flow, prev_flow); + if detached { + ctx.route.clear(); + } // Handle control flow. - match std::mem::replace(&mut ctx.flow, prev_flow) { - Some(Flow::Return(_, Some(explicit))) => value = explicit, + match flow { + Some(Flow::Return(_, Some(explicit))) => return Ok(explicit), Some(Flow::Return(_, None)) => {} Some(flow) => return Err(flow.forbidden())?, None => {} } - Ok(value) + result } } diff --git a/src/eval/mod.rs b/src/eval/mod.rs index b35cf1ef..79060137 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -707,6 +707,7 @@ impl Eval for ClosureExpr { // Define the actual function. Ok(Value::Func(Func::from_closure(Closure { + location: ctx.route.last().copied(), name, captured, params, @@ -765,6 +766,7 @@ impl Eval for ShowExpr { let body = self.body(); let span = body.span(); let func = Func::from_closure(Closure { + location: ctx.route.last().copied(), name: None, captured, params, @@ -945,9 +947,11 @@ impl Eval for IncludeExpr { /// Process an import of a module relative to the current location. fn import(ctx: &mut Context, path: &str, span: Span) -> TypResult { // Load the source file. - let full = ctx.complete_path(path); + let full = ctx.locate(&path).at(span)?; let id = ctx.sources.load(&full).map_err(|err| match err.kind() { - std::io::ErrorKind::NotFound => error!(span, "file not found"), + std::io::ErrorKind::NotFound => { + error!(span, "file not found (searched at {})", full.display()) + } _ => error!(span, "failed to load source file ({})", err), })?; diff --git a/src/image.rs b/src/image.rs index 24a0deec..87c093d3 100644 --- a/src/image.rs +++ b/src/image.rs @@ -48,7 +48,8 @@ impl ImageStore { } } - /// Load and decode an image file from a path. + /// Load and decode an image file from a path relative to the compilation + /// environment's root. pub fn load(&mut self, path: &Path) -> io::Result { let hash = self.loader.resolve(path)?; Ok(*match self.files.entry(hash) { diff --git a/src/lib.rs b/src/lib.rs index efddc239..eb6e8f72 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -57,7 +57,7 @@ use std::hash::Hash; use std::path::PathBuf; use std::sync::Arc; -use crate::diag::TypResult; +use crate::diag::{StrResult, TypResult}; use crate::eval::{Eval, Flow, Module, Scope, Scopes}; use crate::font::FontStore; use crate::frame::Frame; @@ -65,6 +65,7 @@ use crate::image::ImageStore; use crate::loading::Loader; use crate::model::StyleMap; use crate::source::{SourceId, SourceStore}; +use crate::util::PathExt; /// The core context which holds the loader, configuration and cached artifacts. pub struct Context { @@ -76,6 +77,8 @@ pub struct Context { pub fonts: FontStore, /// Stores decoded images. pub images: ImageStore, + /// The compilation root. + root: PathBuf, /// The standard library scope. std: Arc, /// The default styles. @@ -172,51 +175,64 @@ impl Context { self.evaluate(id)?.content.layout(self) } - /// Resolve a user-entered path (relative to the current evaluation - /// location) to be relative to the compilation environment's root. - pub fn complete_path(&self, path: &str) -> PathBuf { + /// Resolve a user-entered path to be relative to the compilation + /// environment's root. + pub fn locate(&self, path: &str) -> StrResult { if let Some(&id) = self.route.last() { + if let Some(path) = path.strip_prefix('/') { + return Ok(self.root.join(path).normalize()); + } + if let Some(dir) = self.sources.get(id).path().parent() { - return dir.join(path); + return Ok(dir.join(path).normalize()); } } - path.into() + return Err("cannot access file system from here".into()); } } /// A builder for a [`Context`]. /// /// This struct is created by [`Context::builder`]. +#[derive(Default)] pub struct ContextBuilder { + root: PathBuf, std: Option>, styles: Option>, } impl ContextBuilder { + /// The compilation root, relative to which absolute paths are. + pub fn root(&mut self, root: impl Into) -> &mut Self { + self.root = root.into(); + self + } + /// The scope containing definitions that are available everywhere /// (the standard library). - pub fn std(mut self, std: impl Into>) -> Self { + pub fn std(&mut self, std: impl Into>) -> &mut Self { self.std = Some(std.into()); self } /// The default properties for page size, font selection and so on. - pub fn styles(mut self, styles: impl Into>) -> Self { + pub fn styles(&mut self, styles: impl Into>) -> &mut Self { self.styles = Some(styles.into()); self } /// Finish building the context by providing the `loader` used to load /// fonts, images, source files and other resources. - pub fn build(self, loader: Arc) -> Context { + pub fn build(&self, loader: Arc) -> Context { Context { sources: SourceStore::new(Arc::clone(&loader)), fonts: FontStore::new(Arc::clone(&loader)), images: ImageStore::new(Arc::clone(&loader)), loader, - std: self.std.unwrap_or_else(|| Arc::new(library::new())), - styles: self.styles.unwrap_or_default(), + root: self.root.clone(), + std: self.std.clone().unwrap_or_else(|| Arc::new(library::new())), + styles: self.styles.clone().unwrap_or_default(), modules: HashMap::new(), cache: HashMap::new(), route: vec![], @@ -226,12 +242,6 @@ impl ContextBuilder { } } -impl Default for ContextBuilder { - fn default() -> Self { - Self { std: None, styles: None } - } -} - /// An entry in the query cache. struct CacheEntry { /// The query's results. diff --git a/src/library/graphics/image.rs b/src/library/graphics/image.rs index ee854130..6fd465cb 100644 --- a/src/library/graphics/image.rs +++ b/src/library/graphics/image.rs @@ -12,11 +12,15 @@ impl ImageNode { pub const FIT: ImageFit = ImageFit::Cover; fn construct(ctx: &mut Context, args: &mut Args) -> TypResult { - let path = args.expect::>("path to image file")?; - let full = ctx.complete_path(&path.v); + let Spanned { v: path, span } = + args.expect::>("path to image file")?; + + let full = ctx.locate(&path).at(span)?; let id = ctx.images.load(&full).map_err(|err| match err.kind() { - std::io::ErrorKind::NotFound => error!(path.span, "file not found"), - _ => error!(path.span, "failed to load image ({})", err), + std::io::ErrorKind::NotFound => { + error!(span, "file not found (searched at {})", full.display()) + } + _ => error!(span, "failed to load image ({})", err), })?; let width = args.named("width")?; diff --git a/src/main.rs b/src/main.rs index daeff033..59ad5a71 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,9 +22,10 @@ USAGE: OPTIONS: -h, --help Print this help + --root Configure the root for absolute paths ARGS: - Path input Typst file + Path to input Typst file [output.pdf] Path to output PDF "; @@ -44,9 +45,17 @@ fn main() { fn try_main(args: Args) -> Result<(), String> { // Create a loader for fonts and files. let mut loader = FsLoader::new(); + let mut builder = Context::builder(); + if let Some(root) = &args.root { + builder.root(root); + } // Search for fonts in the project directory. if let Some(dir) = args.input.parent() { + if args.root.is_none() { + builder.root(dir); + } + if dir.as_os_str().is_empty() { // Just a filename, so directory is current directory. loader.search_path("."); @@ -60,7 +69,7 @@ fn try_main(args: Args) -> Result<(), String> { // Create the context which holds loaded source files, fonts, images and // cached artifacts. - let mut ctx = Context::new(loader.wrap()); + let mut ctx = builder.build(loader.wrap()); // Ensure that the source file is not overwritten. if is_same_file(&args.input, &args.output).unwrap_or(false) { @@ -94,6 +103,7 @@ fn try_main(args: Args) -> Result<(), String> { struct Args { input: PathBuf, output: PathBuf, + root: Option, } /// Parse command line arguments. @@ -104,7 +114,8 @@ fn parse_args() -> Result { std::process::exit(0); } - let input = args.free_from_str::().map_err(|_| "missing input file")?; + let root = args.opt_value_from_str("--root").map_err(|_| "malformed root")?; + let input: PathBuf = args.free_from_str().map_err(|_| "missing input file")?; let output = match args.opt_free_from_str().ok().flatten() { Some(output) => output, None => { @@ -118,7 +129,7 @@ fn parse_args() -> Result { Err("too many arguments")?; } - Ok(Args { input, output }) + Ok(Args { input, output, root }) } /// Print an application-level error (independent from a source file). diff --git a/src/source.rs b/src/source.rs index a7c95255..780e12a8 100644 --- a/src/source.rs +++ b/src/source.rs @@ -54,7 +54,8 @@ impl SourceStore { } } - /// Load a source file from a path using the `loader`. + /// Load a source file from a path relative to the compilation environment's + /// root. /// /// If there already exists a source file for this path, it is /// [replaced](SourceFile::replace). diff --git a/tests/ref/style/set.png b/tests/ref/style/set.png index c63ddb7c983ef1f0249603e0d7c301c41c73b195..52512b8555dc92d1dd7083a4ff43d28a2bca2f31 100644 GIT binary patch literal 20833 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 diff --git a/tests/ref/style/show-text.png b/tests/ref/style/show-text.png index 53c9d13216c9685ddf217413f06134d5f4735967..ae5230f166ff353a0691bb5c99cf7dc3e5ab361c 100644 GIT binary patch delta 22984 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 diff --git a/tests/typ/code/import.typ b/tests/typ/code/import.typ index dab91dae..aef5e9c4 100644 --- a/tests/typ/code/import.typ +++ b/tests/typ/code/import.typ @@ -38,11 +38,11 @@ #import a, c, from "target.typ" --- -// Error: 19-21 file not found +// Error: 19-21 file not found (searched at typ/code) #import name from "" --- -// Error: 16-27 file not found +// Error: 16-27 file not found (searched at typ/code/lib/0.2.1) #import * from "lib/0.2.1" --- diff --git a/tests/typ/code/include.typ b/tests/typ/code/include.typ index 3510cb06..cd3328a2 100644 --- a/tests/typ/code/include.typ +++ b/tests/typ/code/include.typ @@ -6,7 +6,7 @@ = Document // Include a file -#include "importable/chap1.typ" +#include "/typ/code/importable/chap1.typ" // Expression as a file name. #let chap2 = include "import" + "able/chap" + "2.typ" @@ -16,7 +16,7 @@ --- { - // Error: 19-41 file not found + // Error: 19-41 file not found (searched at typ/code/importable/chap3.typ) let x = include "importable/chap3.typ" } diff --git a/tests/typ/coma.typ b/tests/typ/coma.typ index 0e228d14..e312fc78 100644 --- a/tests/typ/coma.typ +++ b/tests/typ/coma.typ @@ -21,4 +21,4 @@ Die Tiefe eines Knotens _v_ ist die Länge des eindeutigen Weges von der Wurzel zu _v_, und die Höhe von _v_ ist die Länge eines längsten (absteigenden) Weges von _v_ zu einem Blatt. Die Höhe des Baumes ist die Höhe der Wurzel. -#align(center, image("../res/graph.png", width: 75%)) +#align(center, image("/res/graph.png", width: 75%)) diff --git a/tests/typ/graphics/image.typ b/tests/typ/graphics/image.typ index 8817713f..e64b6c45 100644 --- a/tests/typ/graphics/image.typ +++ b/tests/typ/graphics/image.typ @@ -4,7 +4,7 @@ // Test loading different image formats. // Load an RGBA PNG image. -#image("../../res/rhino.png") +#image("/res/rhino.png") // Load an RGB JPEG image. #set page(height: 60pt) @@ -14,14 +14,14 @@ // Test configuring the size and fitting behaviour of images. // Set width and height explicitly. -#image("../../res/rhino.png", width: 30pt) -#image("../../res/rhino.png", height: 30pt) +#image("/res/rhino.png", width: 30pt) +#image("/res/rhino.png", height: 30pt) // Set width and height explicitly and force stretching. -#image("../../res/monkey.svg", width: 100%, height: 20pt, fit: "stretch") +#image("/res/monkey.svg", width: 100%, height: 20pt, fit: "stretch") // Make sure the bounding-box of the image is correct. -#align(bottom + right, image("../../res/tiger.jpg", width: 40pt)) +#align(bottom + right, image("/res/tiger.jpg", width: 40pt)) --- // Test all three fit modes. @@ -30,9 +30,9 @@ columns: (1fr, 1fr, 1fr), rows: 100%, gutter: 3pt, - image("../../res/tiger.jpg", width: 100%, height: 100%, fit: "contain"), - image("../../res/tiger.jpg", width: 100%, height: 100%, fit: "cover"), - image("../../res/monkey.svg", width: 100%, height: 100%, fit: "stretch"), + image("/res/tiger.jpg", width: 100%, height: 100%, fit: "contain"), + image("/res/tiger.jpg", width: 100%, height: 100%, fit: "cover"), + image("/res/monkey.svg", width: 100%, height: 100%, fit: "stretch"), ) --- @@ -40,18 +40,18 @@ #set page(height: 60pt) Stuff \ Stuff -#image("../../res/rhino.png") +#image("/res/rhino.png") --- // Test baseline. -A #image("../../res/tiger.jpg", height: 1cm, width: 80%) B +A #image("/res/tiger.jpg", height: 1cm, width: 80%) B --- // Test advanced SVG features. -#image("../../res/pattern.svg") +#image("/res/pattern.svg") --- -// Error: 8-29 file not found +// Error: 8-29 file not found (searched at typ/graphics/path/does/not/exist) #image("path/does/not/exist") --- diff --git a/tests/typ/graphics/transform.typ b/tests/typ/graphics/transform.typ index e0679306..5d2a1729 100644 --- a/tests/typ/graphics/transform.typ +++ b/tests/typ/graphics/transform.typ @@ -31,13 +31,13 @@ nor #xetex! // Test combination of scaling and rotation. #set page(height: 80pt) #align(center + horizon, - rotate(20deg, scale(70%, image("../../res/tiger.jpg"))) + rotate(20deg, scale(70%, image("/res/tiger.jpg"))) ) --- // Test setting rotation origin. #rotate(10deg, origin: top + left, - image("../../res/tiger.jpg", width: 50%) + image("/res/tiger.jpg", width: 50%) ) --- diff --git a/tests/typ/layout/grid-3.typ b/tests/typ/layout/grid-3.typ index 8d04722e..6b7dc47f 100644 --- a/tests/typ/layout/grid-3.typ +++ b/tests/typ/layout/grid-3.typ @@ -23,7 +23,7 @@ columns: 4 * (1fr,), row-gutter: 10pt, column-gutter: (0pt, 10%), - align(top, image("../../res/rhino.png")), + align(top, image("/res/rhino.png")), align(top, rect(fill: eastern, align(right)[LoL])), [rofl], [\ A] * 3, diff --git a/tests/typ/layout/pad.typ b/tests/typ/layout/pad.typ index 502137ec..9791eae4 100644 --- a/tests/typ/layout/pad.typ +++ b/tests/typ/layout/pad.typ @@ -21,7 +21,7 @@ Hi #box(pad(left: 10pt)[A]) there // Test that the pad node doesn't consume the whole region. #set page(height: 6cm) #align(left)[Before] -#pad(10pt, image("../../res/tiger.jpg")) +#pad(10pt, image("/res/tiger.jpg")) #align(right)[After] --- diff --git a/tests/typ/layout/place-background.typ b/tests/typ/layout/place-background.typ index f64bf0ee..fafedec1 100644 --- a/tests/typ/layout/place-background.typ +++ b/tests/typ/layout/place-background.typ @@ -7,7 +7,7 @@ dx: -10pt, dy: -10pt, image( - "../../res/tiger.jpg", + "/res/tiger.jpg", fit: "cover", width: 100% + 20pt, height: 100% + 20pt, diff --git a/tests/typ/layout/place.typ b/tests/typ/layout/place.typ index 95049bdc..58f9d06d 100644 --- a/tests/typ/layout/place.typ +++ b/tests/typ/layout/place.typ @@ -5,7 +5,7 @@ #place(bottom + center)[© Typst] = Placement -#place(right, image("../../res/tiger.jpg", width: 1.8cm)) +#place(right, image("/res/tiger.jpg", width: 1.8cm)) Hi there. This is \ a placed node. \ Unfortunately, \ diff --git a/tests/typ/style/set.typ b/tests/typ/style/set.typ index 2c12d3e9..830c6661 100644 --- a/tests/typ/style/set.typ +++ b/tests/typ/style/set.typ @@ -36,6 +36,18 @@ Hello *{x}* [Not blue] } +--- +// Test relative path resolving in layout phase. +#let choice = ("monkey.svg", "rhino.png", "tiger.jpg") +#set enum(label: n => { + let path = "../../res/" + choice(n - 1) + move(dy: -0.15em, image(path, width: 1em, height: 1em)) +}) + +. Monkey +. Rhino +. Tiger + --- // Error: 11-25 set is only allowed directly in code and content blocks { let x = set text(blue) } diff --git a/tests/typ/style/show-text.typ b/tests/typ/style/show-text.typ index f4ecb7e1..283a2887 100644 --- a/tests/typ/style/show-text.typ +++ b/tests/typ/style/show-text.typ @@ -56,3 +56,10 @@ Rust is memory-safe and blazingly fast. Let's rewrite everything in rust. World - World + +--- +// Test absolute path in layout phase. + +#show "GRAPH" as image("/res/graph.png") + +The GRAPH has nodes. diff --git a/tests/typ/text/bidi.typ b/tests/typ/text/bidi.typ index 7058638a..11c0cafa 100644 --- a/tests/typ/text/bidi.typ +++ b/tests/typ/text/bidi.typ @@ -43,7 +43,7 @@ Lריווח #h(1cm) R --- // Test inline object. #set text(lang: "he", "IBM Plex Serif") -קרנפיםRh#image("../../res/rhino.png", height: 11pt)inoחיים +קרנפיםRh#image("/res/rhino.png", height: 11pt)inoחיים --- // Test whether L1 whitespace resetting destroys stuff. diff --git a/tests/typ/text/indent.typ b/tests/typ/text/indent.typ index 897e360c..92b12180 100644 --- a/tests/typ/text/indent.typ +++ b/tests/typ/text/indent.typ @@ -8,10 +8,10 @@ The first paragraph has no indent. But the second one does. -#image("../../res/tiger.jpg", height: 6pt) +#image("/res/tiger.jpg", height: 6pt) starts a paragraph without indent. -#align(center, image("../../res/rhino.png", width: 1cm)) +#align(center, image("/res/rhino.png", width: 1cm)) = Headings - And lists. diff --git a/tests/typ/text/link.typ b/tests/typ/text/link.typ index ad538187..64697bff 100644 --- a/tests/typ/text/link.typ +++ b/tests/typ/text/link.typ @@ -31,5 +31,5 @@ My cool #move(dx: 0.7cm, dy: 0.7cm, rotate(10deg, scale(200%, mylink))) // Link containing a block. #link("https://example.com/", underline: false, block[ My cool rhino - #move(dx: 10pt, image("../../res/rhino.png", width: 1cm)) + #move(dx: 10pt, image("/res/rhino.png", width: 1cm)) ])