feat: add local OneNote and ONEPKG reader
This commit is contained in:
57
docs/FORMAT_SUPPORT.md
Normal file
57
docs/FORMAT_SUPPORT.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Format support
|
||||
|
||||
## Version 0.1.0 support matrix
|
||||
|
||||
| Input or feature | Status | Tested evidence and boundary |
|
||||
| ---------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| Desktop revision-store `.one` | Supported subset | Real 34,904-byte Joplin golden; three pages |
|
||||
| FSSHTTP-packaged `.one` | Unsupported | Header is detected and rejected with a controlled diagnostic |
|
||||
| Unknown/legacy `.one` variants | Unsupported | File type and format GUIDs are validated before traversal |
|
||||
| `.onepkg`, single CAB, LZX | Supported subset | Real Joplin package: LZX `0x1203`, three CFDATA blocks, seven entries, five sections, seven pages |
|
||||
| CAB LZX `0x1303` | Supported extraction | Byte-for-byte rust-cab MIT unit fixture, two text entries |
|
||||
| CAB without compression | Supported extraction | Byte-for-byte rust-cab MIT unit fixture |
|
||||
| CAB MSZIP | Unsupported | Metadata is recognized; extraction fails with `cab-compression-unsupported` |
|
||||
| CAB Quantum | Unsupported | Metadata is recognized; extraction fails with `cab-compression-unsupported` |
|
||||
| Multi-cabinet CAB / spanning files | Unsupported | Header flags and spanning folder indexes are rejected |
|
||||
| `.onetoc2` package entries | Listed only | Files are identified, but notebook hierarchy and section order are not interpreted |
|
||||
| Standalone `.onetoc2` | Unsupported in the app | The picker accepts only `.one` and `.onepkg` |
|
||||
|
||||
“Supported subset” is intentionally narrower than “all files with this
|
||||
extension.” A successful open requires the tested desktop OneStore structures
|
||||
and content graph nodes. Malformed offsets, counts, references, CAB checksums,
|
||||
paths, compressed data, and unsupported variants produce bounded diagnostics or
|
||||
a controlled failure.
|
||||
|
||||
The default LZX limit accepts CAB window sizes through 8 MiB, but compatibility
|
||||
claims are fixture-backed only for window bits 18 (`0x1203`) and 19 (`0x1303`).
|
||||
Trailing CAB data is ignored with a warning. Reserved CAB areas are bounded and
|
||||
skipped. CAB names are decoded as strict UTF-8; unmarked valid UTF-8 receives a
|
||||
warning, while invalid non-ASCII legacy-code-page names are rejected rather
|
||||
than guessed.
|
||||
|
||||
## Extracted OneNote data
|
||||
|
||||
The desktop section path currently returns:
|
||||
|
||||
- section display name;
|
||||
- page ID, title, created/updated timestamp when available, and page level;
|
||||
- visible Unicode/extended-ASCII rich text as plain text and a text preview;
|
||||
- diagnostics tied to an offset, structure, or page where available.
|
||||
|
||||
It does not preserve visual position, rich-text formatting, list formatting,
|
||||
tables, images, ink, equations, embedded files, audio/video, active links,
|
||||
page versions/conflicts, or exports. Unsupported content objects remain visible
|
||||
as diagnostics instead of being silently presented as parsed.
|
||||
|
||||
Within a supported `.onepkg`, each `.one` entry is parsed independently.
|
||||
Malformed or unsupported sections are marked failed/unsupported while other
|
||||
sections remain available. Package navigation is temporary normalized-path
|
||||
order until `.onetoc2` interpretation is implemented.
|
||||
|
||||
## Test fixtures
|
||||
|
||||
The exact hashes, source revisions, licences, expected page names, and CAB
|
||||
structures are recorded in
|
||||
[`tests/fixtures/README.md`](../tests/fixtures/README.md). Tests use no private
|
||||
notebooks and do not treat a synthetic archive as proof of Microsoft OneNote
|
||||
export compatibility.
|
||||
Reference in New Issue
Block a user