diff --git a/Cargo.lock b/Cargo.lock index 0374aed..1b75f74 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,10 +29,19 @@ dependencies = [ ] [[package]] -name = "allocator-api2" -version = "0.2.21" +name = "alloc-no-stdlib" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] [[package]] name = "arrayvec" @@ -79,12 +88,6 @@ version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.13.2" @@ -118,6 +121,27 @@ dependencies = [ "generic-array", ] +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + [[package]] name = "bumpalo" version = "3.20.3" @@ -453,9 +477,9 @@ checksum = "c6e8948ce679d00a02a94739ea185595dca7118ed04feb991127e443bd3d761f" [[package]] name = "fast_image_resize" -version = "5.5.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc7fe45cf92b43817ff62a3723e862b85bd1d06288f63007f7645d1d2f7a060" +checksum = "e9c50201dc184ba6553da1695aac20a042efffbe2d84542cee31917c86c3ab1e" dependencies = [ "cfg-if", "document-features", @@ -486,12 +510,9 @@ dependencies = [ [[package]] name = "fearless_simd" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb2907d1f08b2b316b9223ced5b0e89d87028ba8deae9764741dba8ff7f3903" -dependencies = [ - "bytemuck", -] +checksum = "b97b65636e5b9ef369943878ac74335ba1c55c1cb6adbf1e2c293c624248d693" [[package]] name = "filetime" @@ -522,18 +543,9 @@ dependencies = [ [[package]] name = "foldhash" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "font-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" -dependencies = [ - "bytemuck", -] +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" @@ -613,6 +625,15 @@ dependencies = [ "weezl", ] +[[package]] +name = "guillotiere" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b17e70c989c36bad147b27a58d148c0741c51448aa5653436547323e524d0ab" +dependencies = [ + "euclid 0.22.14", +] + [[package]] name = "half" version = "2.7.1" @@ -626,12 +647,10 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ - "allocator-api2", - "equivalent", "foldhash", ] @@ -643,9 +662,9 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hayro" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ec16ea18d2ab01c94ab300f9415f8900cd056085c6926f70a7c3e7391192769" +checksum = "4b38770cae4e1217b6ea7d7d217f25db8fece792a05e477ef951ddf3f82be42d" dependencies = [ "bytemuck", "fast_image_resize", @@ -657,70 +676,75 @@ dependencies = [ [[package]] name = "hayro-ccitt" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2db6494c3070f0e3cd9de52ee1a562ba3b2f832cd17b5537180c28294ca088eb" +checksum = "9f4d0e94ddd48749f06bbe4e5389fb9799a0c45bcaf00495042076ef05e3241a" [[package]] -name = "hayro-font" -version = "0.4.0" +name = "hayro-cmap" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d688da07ebfa1f0508697bdcc739a80a840706e2cfba39360820003a9bc49ed2" +checksum = "24d285dc30731c8485de5fa732fbdf2b3affdf01e4da7c2135022ca6fa664bf6" dependencies = [ - "log", - "phf", + "brotli", + "hayro-postscript", ] [[package]] name = "hayro-interpret" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298f36b94e75fa4055b4a71db9c641085d6197b214a4e13f3c4aedebb5cea234" +checksum = "0750546426b301ab32fcde4889b0839573e3cd62aff8dd347bb46200c8e13f04" dependencies = [ - "bitflags 2.13.2", - "hayro-font", + "bitflags", + "hayro-cmap", "hayro-syntax", "kurbo", - "log", - "moxcms 0.7.11", + "moxcms", "phf", "rustc-hash", "siphasher", - "skrifa 0.40.0", + "skrifa 0.42.1", "smallvec", "yoke", ] [[package]] name = "hayro-jbig2" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d7d4358462d3e5aeeb4dcfdea5467821d6551f6cb4607cc037ac99131bc1e32" +checksum = "69374b3668dd45aeb3d3145cda68f2c7b4f223aaa2511e67d076f1c7d741388d" dependencies = [ + "fearless_simd", "hayro-ccitt", ] [[package]] name = "hayro-jpeg2000" -version = "0.2.0" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d8a5e080cc7429956acf933caf1ef8d4880ae70cbb26eeaec3ae228c7c5f61" +checksum = "c75ab947623ef4ccaa7acf0579edf7cbb5a73838e3839a7be73335e522f433a1" dependencies = [ "fearless_simd", - "log", ] +[[package]] +name = "hayro-postscript" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "885c5ef0654933139a9b9546fc2c69e18d37f38aa2520f079092b1be18f1fcaa" + [[package]] name = "hayro-syntax" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08efad1aa85ea1e19ae3bb46832779222c32887fae7b30d53a07b1d1c0ba553" +checksum = "1099009c2a8e3ab8b65b19e74b37e870251e508e4b528ea549ee19a925f081a9" dependencies = [ "flate2", "hayro-ccitt", "hayro-jbig2", "hayro-jpeg2000", - "log", + "memchr", "rustc-hash", "smallvec", "zune-jpeg", @@ -850,9 +874,9 @@ dependencies = [ "byteorder-lite", "color_quant", "gif", - "moxcms 0.8.1", + "moxcms", "num-traits", - "png 0.18.1", + "png", "tiff", "zune-core", "zune-jpeg", @@ -897,12 +921,13 @@ dependencies = [ [[package]] name = "kurbo" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32" +checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2" dependencies = [ "arrayvec", "euclid 0.22.14", + "polycool", "smallvec", ] @@ -949,7 +974,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25aab26d99567469098e64a02f42679f8965c6401263eefa31d8f2dcc37a221c" dependencies = [ "aes", - "bitflags 2.13.2", + "bitflags", "cbc", "ecb", "encoding_rs", @@ -1005,16 +1030,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "moxcms" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" -dependencies = [ - "num-traits", - "pxfm", -] - [[package]] name = "moxcms" version = "0.8.1" @@ -1037,7 +1052,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.2", + "bitflags", "cfg-if", "cfg_aliases", "libc", @@ -1086,9 +1101,9 @@ dependencies = [ [[package]] name = "peniko" -version = "0.5.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3c76095c9a636173600478e0373218c7b955335048c2bcd12dc6a79657649d8" +checksum = "839c8299360d2e998bdb106dc0a6cd71dcc5f4df51df1b620361bf50e283cca6" dependencies = [ "bytemuck", "color", @@ -1111,7 +1126,6 @@ checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ "phf_macros", "phf_shared", - "serde", ] [[package]] @@ -1154,11 +1168,11 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "png" -version = "0.17.16" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 1.3.2", + "bitflags", "crc32fast", "fdeflate", "flate2", @@ -1166,16 +1180,12 @@ dependencies = [ ] [[package]] -name = "png" -version = "0.18.1" +name = "polycool" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6" dependencies = [ - "bitflags 2.13.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide 0.8.9", + "arrayvec", ] [[package]] @@ -1299,22 +1309,22 @@ checksum = "ac9999039f74cd73c03158cddfe4362991703c74efe5ce5c8073026f80a5e48c" [[package]] name = "read-fonts" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" dependencies = [ "bytemuck", - "font-types 0.10.1", + "font-types", ] [[package]] name = "read-fonts" -version = "0.37.0" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" +checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ "bytemuck", - "font-types 0.11.3", + "font-types", ] [[package]] @@ -1343,7 +1353,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ - "bitflags 2.13.2", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -1497,22 +1507,22 @@ checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" [[package]] name = "skrifa" -version = "0.37.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" +checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" dependencies = [ "bytemuck", - "read-fonts 0.35.0", + "read-fonts 0.37.0", ] [[package]] name = "skrifa" -version = "0.40.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" +checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts 0.37.0", + "read-fonts 0.39.2", ] [[package]] @@ -1693,7 +1703,7 @@ dependencies = [ "docx-rs", "hayro", "pdf-extract", - "png 0.18.1", + "png", "ppt-rs", "quick-xml 0.42.0", "serde_json", @@ -1972,30 +1982,43 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "vello_api" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5088cd0113bc5332c753f24503825e3bc93e26c7883c9dc3ad9637bb62c4634" +dependencies = [ + "bytemuck", + "peniko", +] + [[package]] name = "vello_common" -version = "0.0.5" +version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc01cc9e1e2511e5e77024e8d4c2287b9272cafc05ba669ed1056579219dd73" +checksum = "986dc49a501a683477614bf07b8e7b6c79ae4828efce3bf22e51850f4a0a8a4c" dependencies = [ "bytemuck", "fearless_simd", - "hashbrown 0.15.5", + "guillotiere", + "hashbrown 0.16.1", "log", "peniko", - "png 0.17.16", - "skrifa 0.37.0", + "png", + "skrifa 0.40.0", "smallvec", + "thiserror", ] [[package]] name = "vello_cpu" -version = "0.0.5" +version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9228d8ed0f1f030de9a09b66b4750012194c0f171030ec74214ba1ca3b9eed23" +checksum = "a678f91c7524a3a9ac9a19df9f83552866ec70b2ca26441b916a6b219b6aa2de" dependencies = [ "bytemuck", - "hashbrown 0.15.5", + "hashbrown 0.16.1", + "vello_api", "vello_common", ] diff --git a/Cargo.toml b/Cargo.toml index a2aa61e..ba9c73a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "tinydocs" version.workspace = true edition = "2024" -rust-version = "1.88" +rust-version = "1.92" license = "GPL-3.0-only" description = "Agent-friendly document synthesis and text extraction (DOCX, PPTX, PDF) in Rust." repository = "https://github.com/tinyhumansai/tinydocs" @@ -54,7 +54,7 @@ quick-xml = { version = "0.42", optional = true } # Workbook row conversion for document-memory Markdown; implementation only. calamine = { version = "0.38", optional = true } # Pure Rust PDF rasterization, isolated from the default extraction build. -hayro = { version = "0.5", optional = true } +hayro = { version = "0.6", optional = true } [dev-dependencies] # Decode raster fixtures to assert scanned-page pixels survive rendering. diff --git a/crates/tinydocs-module/Cargo.toml b/crates/tinydocs-module/Cargo.toml index da1d09b..85b13aa 100644 --- a/crates/tinydocs-module/Cargo.toml +++ b/crates/tinydocs-module/Cargo.toml @@ -2,7 +2,7 @@ name = "tinydocs-module" version.workspace = true edition = "2024" -rust-version = "1.88" +rust-version = "1.92" license = "GPL-3.0-only" description = "Trusted TinyBus module adapter for TinyDocs." repository = "https://github.com/tinyhumansai/tinydocs" diff --git a/docs/plans/document-intake-render.md b/docs/plans/document-intake-render.md index 7d0ba34..28b7d86 100644 --- a/docs/plans/document-intake-render.md +++ b/docs/plans/document-intake-render.md @@ -41,7 +41,7 @@ Run from the TinyDocs repository root: cargo fmt --all -- --check cargo test --workspace --all-features cargo clippy --workspace --all-targets --all-features -- -D warnings -cargo +1.88.0 check --workspace --all-features +cargo +1.92.0 check --workspace --all-features cargo deny --all-features check all ``` diff --git a/docs/specs/document-intake-render.md b/docs/specs/document-intake-render.md index fee3a2a..6ccc24c 100644 --- a/docs/specs/document-intake-render.md +++ b/docs/specs/document-intake-render.md @@ -55,7 +55,7 @@ Fixture tests verify ordered Office sections, shared/inline/cached worksheet values, mixed text/scanned PDFs, raster pixels and PNG dimensions, truncation, malformed XML, hostile ZIP metadata, and all documented budget rejections. Bus tests verify schema validation, streamed input, held output reads/releases, -and rollback when a rendering output cannot be retained. MSRV is Rust 1.88. +and rollback when a rendering output cannot be retained. MSRV is Rust 1.92 (hayro 0.6 needs it). ## Open questions diff --git a/scripts/test-distro.sh b/scripts/test-distro.sh index e3d3406..e108737 100755 --- a/scripts/test-distro.sh +++ b/scripts/test-distro.sh @@ -70,7 +70,7 @@ docker run --rm \ exit 1 } chmod +x "$installer" - "$installer" -y --profile minimal --default-toolchain 1.88.0 --no-modify-path + "$installer" -y --profile minimal --default-toolchain 1.92.0 --no-modify-path rm -f "$installer" source "$HOME/.cargo/env" actual_target="$(rustc -vV | sed -n "s/^host: //p")" diff --git a/src/pdf_render/README.md b/src/pdf_render/README.md index cdcc55e..ba0152c 100644 --- a/src/pdf_render/README.md +++ b/src/pdf_render/README.md @@ -23,5 +23,5 @@ or renderer resources. A blocking-pool timeout is not cancellation. The host owns execution deadlines and any stronger process isolation. No network OCR or remote inference happens here. -Hayro 0.5 and the resolved extraction/render dependency graph compile and test -on the declared Rust 1.88 MSRV. +Hayro 0.6 and the resolved extraction/render dependency graph compile and test +on the declared Rust 1.92 MSRV; hayro 0.6's vello 0.0.7 needs 1.92. diff --git a/src/pdf_render/mod.rs b/src/pdf_render/mod.rs index 4317600..bc0bb43 100644 --- a/src/pdf_render/mod.rs +++ b/src/pdf_render/mod.rs @@ -86,6 +86,8 @@ pub fn render(bytes: &[u8], spec: &RenderPdfSpec) -> Result { pages: Vec::new(), }; let mut total_bytes = 0u64; + // One cache per document, reused across its pages, as hayro recommends. + let cache = hayro::RenderCache::new(); for (number, width, height, scale) in plans { let page = &pdf.pages()[(number - 1) as usize]; let settings = hayro::RenderSettings { @@ -95,7 +97,7 @@ pub fn render(bytes: &[u8], spec: &RenderPdfSpec) -> Result { y_scale: scale, bg_color: WHITE, }; - let pixmap = hayro::render(page, &InterpreterSettings::default(), &settings); + let pixmap = hayro::render(page, &cache, &InterpreterSettings::default(), &settings); let bytes = pixmap.into_png().map_err(failed)?; total_bytes = total_bytes .checked_add(bytes.len() as u64)