Files
Dylan M. Taylor ee78a9bd46 craft-psd: Photoshop PSD/PSB reader and writer, moved from PhotoCraft (#875)
PhotoCraft's `photocraft-psd` crate (crates/psd at storytold/photocraft
63b641b55e54bf8f5c83efd977fdb16a2c255431) as `craft-psd`: the lossless
PSD/PSB model, reader, writer and builder, descriptors, the Photoshop
resource files that share its primitives (.abr, .asl, .aco, .act, .ase,
.grd, .pat, .atn, .csh, .shc) and the Photoshop blocks of a layered TIFF.
The crate had no dependency on any other PhotoCraft crate.

Code is unchanged apart from the crate name, craft-libs' rustfmt width,
comments that named other PhotoCraft crates, issue references (now
`photocraft#N`), and the corpus tests' directory (`CRAFT_PSD_CORPUS` or
`corpus/` at the workspace root). Tests, proptests, fuzz targets and
fixtures move with it.

Part of #778, #786.
2026-11-11 17:00:33 -05:00
..

Synthetic ATN parser fixtures

These seven tiny files are original synthetic test data. The four version-16 files were independently encoded field by field from the version-16 layout documented in src/atn.rs, without calling this crate's writer; the three version-12 files (v12-*.atn) encode the version-12 layout documented there (photocraft#10743). They are licensed MIT OR Apache-2.0 under the repository's licenses. They contain no user artwork, Photoshop program code or proprietary assets. They are not Photoshop-authored interoperability oracles.

File Bytes Purpose SHA-256
empty.atn 13 Empty set and explicit big-endian version 6fd936f91296a13b0e7456a38b139a100fd17407d1c582d4502ce76413d01539
metadata.atn 214 UTF-16 surrogate pairs/unpaired units, action order, function key, modifiers, panel flags, disabled step, unknown string event, dialog options cec2ff5a25e003aa29e790ea6b110f06ba848f0afd7901f3f8ad4740f782ede2
descriptors.atn 859 Every descriptor value variant and every reference form currently represented by the parser 6c76502822c1f36c8060a71adb227c4540663518785bbab1b70951dac0ef58ad
float-bits.atn 428 NaN payload, negative zero, infinities, and floats inside lists, objects and arrays 0aa6278a569c777f249b305e889896132c2a87e44a24cb1a55d1d3fc0928fd0c
v12-stop.atn 113 Version 12: Stop with Unicode text and a Boolean 293462a7d5cf0043fdc5135630524699f545679088c54bad83f4a86e15160271
v12-values.atn 562 Version 12: named plug-in event, every legacy value and reference form, bare warp/list/time codes, an object array with three objects and two columns, unpaired UTF-16, opaque path/alias/data bytes, and a descriptorless step 23d3f377996435988367365ee5c2a15462c0ed42ce506dc4a15039387ac6a853
v12-commands.atn 404 Version 12: Gaussian Blur, Levels, Select All and Make Layer 451958b686da9aab45e65ae902c86333b7149d72021c21904e3aae8e39eb77cb

tests/it/atn_contract.rs checks the independently encoded version-16 bytes and expected public structures; tests/it/atn_v12.rs checks the version-12 files. The version-12 files follow the version 12 layout in src/atn.rs, assembled from the measured grammar in photocraft#10603. Their Idnt reference follows the inferred index-like layout; no real version 12 identifier reference was available. Saving them produces version 16, so keep them out of the version-16 byte-identical corpus oracle.

The files also seed the atn fuzz target: cargo fuzz run atn crates/psd/tests/fixtures/atn (from crates/psd: cargo fuzz run atn tests/fixtures/atn).

A fixture change should explain the changed wire fields and update this table; do not regenerate expectations merely to make a failing parser pass.