- Add LZWDecoder filter using lzw crate v0.10 - Support /EarlyChange parameter (default 1, late 0) - Early change (1): Adobe/TIFF variant, code size increases BEFORE - Late change (0): GIF variant, code size increases AFTER - Full predictor support (TIFF predictor 2, PNG predictors 10-15) - Bomb limit protection with partial bytes on exceed - INV-8 maintained: partial bytes returned on decode errors - 23 tests pass (19 unit tests + 4 proptests) - Fixtures generated using lzw crate for verification Acceptance criteria: - Critical test /EarlyChange=0 byte-perfect: PASS - LZWDecode without /DecodeParms defaults: PASS - LZWDecode + /Predictor 12: PASS - Truncated stream partial bytes: PASS - Bomb limit honored: PASS - proptest no panic: PASS - INV-8 maintained: PASS Refs: Plan Phase 1.5 line 1142, PDF spec 7.4.4 Co-Authored-By: Claude Code <noreply@anthropic.com>
25 lines
693 B
TOML
25 lines
693 B
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["crates/pdftract-core", "crates/pdftract-cli", "crates/pdftract-py"]
|
|
exclude = ["tests/fixtures/generate_lzw_fixtures.rs"]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
rust-version = "1.78"
|
|
license = "MIT OR Apache-2.0"
|
|
repository = "https://github.com/jedarden/pdftract"
|
|
authors = ["Jedarden <bot@ardenone.com>"]
|
|
homepage = "https://github.com/jedarden/pdftract"
|
|
documentation = "https://docs.rs/pdftract-core"
|
|
|
|
[workspace.dependencies]
|
|
# Dependencies shared across workspace crates
|
|
anyhow = "1.0"
|
|
flate2 = "1.0"
|
|
lzw = "0.10"
|
|
memchr = "2.7"
|
|
secrecy = "0.10"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
thiserror = "1.0"
|
|
tracing = "0.1"
|