pdftract/Cargo.toml
jedarden 1959ff2446 feat(pdftract-3uu6v): implement LZWDecode with /EarlyChange parameter
- 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>
2026-05-22 22:38:31 -04:00

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"