mirror of
https://github.com/storytold/wordcraft.git
synced 2026-10-27 20:07:19 -06:00
The hinting breaker stays wall-clock: skrifa's interpreter budget is fixed, counts instructions rather than the points each one moves, and reports no work count, so there is nothing deterministic to bound. The comment now says the result can depend on the machine by design, and that only faces needing the interpreter for their contours are hinted at all. Cargo.toml notes that brotli-decompressor is the crate and version wuff already uses: pure Rust, forbid(unsafe_code) by default, wasm-ready, BSD-3-Clause/MIT. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CX1hMKX28764Lrx5moxs1o
139 lines
6.4 KiB
TOML
139 lines
6.4 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
default-members = ["crates/*", "apps/wordcraft", "apps/wordcraft-cli", "xtask"]
|
|
|
|
[workspace.package]
|
|
version = "0.11.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.95"
|
|
repository = "https://github.com/storytold/wordcraft"
|
|
|
|
[workspace.dependencies]
|
|
# internal
|
|
wordcraft-geom = { path = "crates/geom" }
|
|
wordcraft-doc = { path = "crates/doc" }
|
|
wordcraft-fonts = { path = "crates/fonts" }
|
|
wordcraft-layout = { path = "crates/layout" }
|
|
wordcraft-docx = { path = "crates/docx" }
|
|
wordcraft-docbin = { path = "crates/docbin" }
|
|
wordcraft-formats = { path = "crates/formats" }
|
|
wordcraft-render = { path = "crates/render" }
|
|
wordcraft-pdf = { path = "crates/pdf" }
|
|
wordcraft-proof = { path = "crates/proof" }
|
|
wordcraft-engine = { path = "crates/engine" }
|
|
wordcraft-mcp = { path = "crates/mcp" }
|
|
wordcraft-zotero = { path = "crates/zotero" }
|
|
wordcraft-control-key = { path = "crates/control-key" }
|
|
wordcraft-ui-egui = { path = "crates/ui-egui" }
|
|
wordcraft-metafile = { path = "crates/metafile" }
|
|
|
|
# foundation
|
|
kurbo = { version = "0.13", features = ["serde"] }
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive", "rc"] }
|
|
serde_json = { version = "1", features = ["float_roundtrip"] }
|
|
log = "0.4"
|
|
# All date/time conversion goes through chrono (no hand-rolled calendar code beyond the 400-year range extension; AGENTS.md).
|
|
chrono = { version = "0.4.45", default-features = false, features = ["std"] }
|
|
proptest = "1"
|
|
rayon = "1"
|
|
unicode-bidi = "0.3"
|
|
unicode-segmentation = "1"
|
|
unicode-linebreak = "0.1"
|
|
unicode-script = "0.5"
|
|
regex = { version = "1", default-features = false, features = ["std", "unicode", "perf"] }
|
|
regex-automata = { version = "0.4", default-features = false, features = ["std", "syntax", "meta", "nfa-pikevm", "unicode"] }
|
|
|
|
# text / rendering / formats
|
|
skrifa = "0.47"
|
|
harfrust = "0.13"
|
|
# WOFF / WOFF2 web fonts added by the user (#582): pure Rust (MIT); its brotli and zlib decoders
|
|
# (brotli-decompressor, flate2) are already in the tree.
|
|
wuff = "0.2.9"
|
|
# WOFF2's brotli stream, decoded ahead of wuff so its glyph point counts are checked first (#3703).
|
|
# The same crate and version wuff already decodes it with (no new code in the build): pure Rust,
|
|
# `forbid(unsafe_code)` in its default build, no_std-capable (builds for wasm), BSD-3-Clause/MIT.
|
|
brotli-decompressor = "5"
|
|
vello_cpu = "0.2"
|
|
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "bmp", "tiff"] }
|
|
craft-pdf = { git = "https://github.com/storytold/craft-libs", rev = "17744430be327d0257496a6a31c8d38fe20a6756", version = "=0.1.0", default-features = false, features = ["write"] }
|
|
craft-update = { git = "https://github.com/storytold/craft-libs", version = "=0.1.0", rev = "495e5971bc024aa96e6ed318cb6e7cd3a0103184", features = ["egui"] }
|
|
quick-xml = "0.41"
|
|
zip = { version = "3", default-features = false, features = ["deflate"] }
|
|
# zlib streams (compressed metafile pictures in `.doc` drawings); already in the lock as a dependency of other crates.
|
|
miniz_oxide = "0.9"
|
|
cfb = "0.15"
|
|
# Legacy text encodings (GBK/GB18030, Big5, Shift_JIS, EUC-KR, single-byte code pages) for plain
|
|
# text and CSV recipient lists (#778): encoding_rs ((Apache-2.0 OR MIT) AND BSD-3-Clause) and its
|
|
# detector chardetng (Apache-2.0 OR MIT), both pure Rust (Firefox's).
|
|
encoding_rs = "0.8"
|
|
chardetng = "1"
|
|
# Password-protected (agile-encrypted) Word documents: pure-Rust RustCrypto primitives.
|
|
aes = "0.9"
|
|
sha1 = "0.11"
|
|
sha2 = "0.11"
|
|
hmac = "0.13"
|
|
base64 = "0.23"
|
|
getrandom = "0.3"
|
|
zeroize = "1"
|
|
# Unix open flags (O_NONBLOCK for the engine's checked file reads, #3666); already in the lock as a
|
|
# dependency of other crates.
|
|
libc = "0.2"
|
|
|
|
# ui
|
|
egui = "0.37"
|
|
egui_extras = { version = "0.37", default-features = false }
|
|
eframe = { version = "0.37", default-features = false }
|
|
egui_kittest = "0.37"
|
|
# A monotonic clock that works on native and in the browser (`performance.now()`).
|
|
web-time = "1.1"
|
|
rfd = "0.17"
|
|
arboard = { version = "3.7", default-features = false, features = ["wayland-data-control"] }
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
type_complexity = "allow"
|
|
|
|
# Line tables keep file and line in panics and backtraces; full debug info
|
|
# for every test binary and dependency would multiply the target dir size.
|
|
# The test profile inherits both settings.
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
debug = false
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
debug = "line-tables-only"
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
lto = "thin"
|
|
codegen-units = 16
|
|
debug = 0
|
|
|
|
# Required by craft-pdf: the backend rejects writers that failed during unwinding.
|
|
[patch.crates-io]
|
|
krilla = { git = "https://github.com/storytold/craft-libs", rev = "17744430be327d0257496a6a31c8d38fe20a6756" }
|
|
ecolor = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
emath = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
epaint = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
epaint_default_fonts = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui-winit = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui-wgpu = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_glow = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_extras = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_kittest = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_system_font_provider = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
eframe = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_demo_lib = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
egui_inspection = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
|
winit = { git = "https://github.com/storytold/winit.git", rev = "a517b3846ee8457d84ee4975110bfda6797c44dc" }
|