diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 851c76c..ed9dea9 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -195,6 +195,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -555,6 +561,30 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + [[package]] name = "crossbeam-utils" version = "0.8.16" @@ -564,6 +594,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -785,6 +821,12 @@ dependencies = [ "serde", ] +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + [[package]] name = "elsa" version = "1.8.1" @@ -907,6 +949,22 @@ dependencies = [ "str-buf", ] +[[package]] +name = "exr" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1e481eb11a482815d3e9d618db8c42a93207134662873809335a92327440c18" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fancy-regex" version = "0.7.1" @@ -973,6 +1031,19 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1077,6 +1148,12 @@ dependencies = [ "syn 2.0.26", ] +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + [[package]] name = "futures-task" version = "0.3.28" @@ -1243,8 +1320,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1423,6 +1502,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -1522,9 +1610,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hypher" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0cf92443ef10ecfc1b8b4b65a93e31d983f020a355699d83874b12a7c797ac3" +checksum = "927f74d31cdbfd8de201340c0bc474c52c9145193ccd8885fcede14005591aad" [[package]] name = "iana-time-zone" @@ -1719,11 +1807,13 @@ dependencies = [ "bytemuck", "byteorder", "color_quant", + "exr", "gif", "jpeg-decoder", "num-rational", "num-traits", "png", + "qoi", "tiff", ] @@ -1883,6 +1973,9 @@ name = "jpeg-decoder" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +dependencies = [ + "rayon", +] [[package]] name = "js-sys" @@ -1952,6 +2045,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "libc" version = "0.2.147" @@ -2146,6 +2245,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.10", +] + [[package]] name = "ndk" version = "0.6.0" @@ -2353,6 +2461,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "oklab" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467e40ada50d13bab19019e3707862b5076ca15841f31ee1474c40397c1b9f11" +dependencies = [ + "rgb", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -2427,9 +2544,9 @@ checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pdf-writer" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30900f178ea696fc5d9637171f98aaa93d5aae54f0726726df68fc3e32810db6" +checksum = "86af2eb3faa4614bc7fda8bd578c25e76a17ff3b1577be034b81e0c20527e204" dependencies = [ "bitflags 1.3.2", "itoa 1.0.9", @@ -2564,6 +2681,26 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.26", +] + [[package]] name = "pin-project-lite" version = "0.2.10" @@ -2698,6 +2835,15 @@ dependencies = [ "cc", ] +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + [[package]] name = "quick-xml" version = "0.29.0" @@ -2803,6 +2949,28 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + [[package]] name = "rctree" version = "0.5.0" @@ -2888,8 +3056,11 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "142e83d8ae8c8c639f304698a5567b229ba65caba867bf4387bbc0ae158827cf" dependencies = [ + "gif", + "jpeg-decoder", "log", "pico-args", + "png", "rgb", "svgtypes", "tiny-skia", @@ -3293,6 +3464,15 @@ dependencies = [ "system-deps 5.0.0", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -3398,8 +3578,9 @@ checksum = "09eab8a83bff89ba2200bd4c59be45c7c787f988431b936099a5a266c957f2f9" [[package]] name = "svg2pdf" -version = "0.5.0" -source = "git+https://github.com/typst/svg2pdf#39daf9fc2ee84b62b0e3b174ff8c9017f655af6b" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c966e59fd4afd959edcc226687f751a7d05c94d0477cca1a4c2b15a7220f2b24" dependencies = [ "image", "miniz_oxide", @@ -3464,12 +3645,14 @@ dependencies = [ "fnv", "lazy_static", "once_cell", + "plist", "regex-syntax 0.6.29", "serde", "serde_derive", "serde_json", "thiserror", "walkdir", + "yaml-rust", ] [[package]] @@ -4085,8 +4268,8 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "typst" -version = "0.6.0" -source = "git+https://github.com/typst/typst?tag=v0.6.0#2dfd44fedd99ab9414c17f358179e1c37e953f30" +version = "0.7.0" +source = "git+https://github.com/typst/typst?tag=v0.7.0#da8367e189b02918a8fe1a98fd3059fd11a82cd9" dependencies = [ "bitflags 2.3.3", "bytemuck", @@ -4099,6 +4282,7 @@ dependencies = [ "indexmap 1.9.3", "log", "miniz_oxide", + "oklab", "once_cell", "pdf-writer", "pixglyph", @@ -4117,6 +4301,7 @@ dependencies = [ "tracing", "ttf-parser", "typst-macros", + "typst-syntax", "unicode-general-category", "unicode-ident", "unicode-math-class", @@ -4128,8 +4313,8 @@ dependencies = [ [[package]] name = "typst-library" -version = "0.6.0" -source = "git+https://github.com/typst/typst?tag=v0.6.0#2dfd44fedd99ab9414c17f358179e1c37e953f30" +version = "0.7.0" +source = "git+https://github.com/typst/typst?tag=v0.7.0#da8367e189b02918a8fe1a98fd3059fd11a82cd9" dependencies = [ "az", "chinese-number", @@ -4167,8 +4352,8 @@ dependencies = [ [[package]] name = "typst-macros" -version = "0.6.0" -source = "git+https://github.com/typst/typst?tag=v0.6.0#2dfd44fedd99ab9414c17f358179e1c37e953f30" +version = "0.7.0" +source = "git+https://github.com/typst/typst?tag=v0.7.0#da8367e189b02918a8fe1a98fd3059fd11a82cd9" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -4176,6 +4361,22 @@ dependencies = [ "syn 2.0.26", ] +[[package]] +name = "typst-syntax" +version = "0.7.0" +source = "git+https://github.com/typst/typst?tag=v0.7.0#da8367e189b02918a8fe1a98fd3059fd11a82cd9" +dependencies = [ + "comemo", + "ecow", + "once_cell", + "serde", + "tracing", + "unicode-ident", + "unicode-math-class", + "unicode-segmentation", + "unscanny", +] + [[package]] name = "typstudio" version = "0.1.0" @@ -5143,3 +5344,12 @@ dependencies = [ "syn 1.0.109", "synstructure", ] + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e2fe310..abc33e3 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -38,8 +38,8 @@ dirs = "5.0" walkdir = "2.3" memmap2 = "0.7" -typst = { git = "https://github.com/typst/typst", tag = "v0.6.0" } -typst-library = { git = "https://github.com/typst/typst", tag = "v0.6.0" } +typst = { git = "https://github.com/typst/typst", tag = "v0.7.0" } +typst-library = { git = "https://github.com/typst/typst", tag = "v0.7.0" } comemo = "0.3" [features] diff --git a/src-tauri/src/engine/font.rs b/src-tauri/src/engine/font.rs index 7c52b6d..0d6a199 100644 --- a/src-tauri/src/engine/font.rs +++ b/src-tauri/src/engine/font.rs @@ -4,7 +4,6 @@ use once_cell::sync::OnceCell; use std::fs::File; use std::path::{Path, PathBuf}; use typst::font::{Font, FontBook, FontInfo}; -use typst::util::Bytes; use walkdir::WalkDir; // Taken from typst-cli @@ -47,6 +46,8 @@ impl FontSearcher { /// Add fonts that are embedded in the binary. #[cfg(feature = "embed-fonts")] fn search_embedded(&mut self) { + use typst::eval::Bytes; + let mut search = |bytes: &'static [u8]| { for (i, font) in Font::iter(Bytes::from_static(bytes)).enumerate() { self.book.push(font.info().clone()); diff --git a/src-tauri/src/ipc/commands/typst.rs b/src-tauri/src/ipc/commands/typst.rs index 4bc8ee3..0be17f2 100644 --- a/src-tauri/src/ipc/commands/typst.rs +++ b/src-tauri/src/ipc/commands/typst.rs @@ -13,6 +13,7 @@ use std::path::PathBuf; use std::sync::Arc; use std::time::Instant; use tauri::Runtime; +use typst::eval::Tracer; use typst::geom::Color; use typst::ide::{Completion, CompletionKind}; use typst::World; @@ -82,7 +83,8 @@ pub async fn typst_compile( debug!("compiling {:?}: {:?}", path, project); let now = Instant::now(); - match typst::compile(&*world) { + let mut tracer = Tracer::new(None); + match typst::compile(&*world, &mut tracer) { Ok(doc) => { let elapsed = now.elapsed(); debug!( diff --git a/src-tauri/src/project/world.rs b/src-tauri/src/project/world.rs index f0ae6b0..b2efd67 100644 --- a/src-tauri/src/project/world.rs +++ b/src-tauri/src/project/world.rs @@ -8,11 +8,10 @@ use std::fs; use std::path::{Path, PathBuf}; use std::sync::Arc; use typst::diag::{FileError, FileResult}; -use typst::eval::{Datetime, Library}; -use typst::file::FileId; +use typst::eval::{Bytes, Datetime, Library}; use typst::font::{Font, FontBook}; -use typst::syntax::Source; -use typst::util::{Bytes, PathExt}; +use typst::syntax::{FileId, Source}; +use typst::util::PathExt; use typst::World; pub struct ProjectWorld {