# apple-encodings Bidirectional, emulator-grade conversion between classic Mac OS text encodings and Unicode — without linking ICU. The crate owns the canonical Apple tables, so it stays small, self-contained, and cross-compiles cleanly. ```rust use apple_encodings::{AppleEncoding, MacRomanRevision}; let enc = AppleEncoding::default(); // Mac OS Roman, post-8.5 assert_eq!(enc.decode(b"Caf\x8e"), "Café"); assert_eq!(enc.encode("Café").unwrap(), b"Caf\x8e"); // Pick by the Finder Info `fdScript` byte: let enc = AppleEncoding::from_script_code(apple_encodings::SCRIPT_ROMAN).unwrap(); // Revision matters for exactly one byte (0xDB): let classic = AppleEncoding::MacRoman(MacRomanRevision::Classic); assert_eq!(classic.decode(&[0xDB]), "¤"); // pre-8.5 currency sign, not € ``` ## Status - **Mac OS Roman** — implemented, both pre- and post-8.5 revisions, decode + encode. - **Regional single-byte** (Cyrillic, Greek, Turkish, …) and **CJK double-byte** (Japanese, Big5, GB, Korean) — planned, to be codegen'd from the Unicode Consortium `VENDORS/APPLE/*.TXT` tables. The double-byte tables will be feature-gated. ## Scope Text-encoding conversion only. Unicode normalization concerns (e.g. HFS+'s NFD-ish decomposition) are deliberately **out of scope** and left to consumers. ## Consumers Designed to be shared by `ad-decoder`/`adx` and `fsinspect` via path (and later git) dependency. ## License MIT