Xteink-X4-crosspoint-reader/lib/Epub/Epub
Pavel Liashkov 0332e1103a
Add EPUB 3 nav.xhtml TOC support (#197)
## Summary

* **What is the goal of this PR?** Add EPUB 3 support by implementing
native navigation document (nav.xhtml) parsing with NCX fallback,
addressing issue Fixes: #143.

  * **What changes are included?**
- New `TocNavParser` for parsing EPUB 3 HTML5 navigation documents
(`<nav epub:type="toc">`)
- Detection of nav documents via `properties="nav"` attribute in OPF
manifest
- Fallback logic: try EPUB 3 nav first, fall back to NCX (EPUB 2) if
unavailable
- Graceful degradation: books without any TOC now load with a warning
instead of failing

  ## Additional Context

* The implementation follows the existing streaming XML parser pattern
using Expat to minimize RAM usage on the ESP32-C3
* EPUB 3 books that include both nav.xhtml and toc.ncx will prefer the
nav document (per EPUB 3 spec recommendation)
* No breaking changes - existing EPUB 2 books continue to work as before
* Tested on examples from
https://idpf.github.io/epub3-samples/30/samples.html
2026-01-03 19:10:35 +11:00
..
blocks Use sane smaller data types for data in section.bin (#188) 2025-12-31 13:11:36 +11:00
parsers Add EPUB 3 nav.xhtml TOC support (#197) 2026-01-03 19:10:35 +11:00
BookMetadataCache.cpp Feature: go to text/start reference in epub guide section at first start (#156) 2025-12-30 23:02:46 +11:00
BookMetadataCache.h Feature: go to text/start reference in epub guide section at first start (#156) 2025-12-30 23:02:46 +11:00
htmlEntities.cpp Public release 2025-12-03 22:06:45 +11:00
htmlEntities.h Public release 2025-12-03 22:06:45 +11:00
Page.cpp Use sane smaller data types for data in section.bin (#188) 2025-12-31 13:11:36 +11:00
Page.h Add exFAT support (#150) 2025-12-30 16:09:30 +11:00
ParsedText.cpp Use sane smaller data types for data in section.bin (#188) 2025-12-31 13:11:36 +11:00
ParsedText.h Use sane smaller data types for data in section.bin (#188) 2025-12-31 13:11:36 +11:00
Section.cpp Add paragraph alignment setting (justify/left/center/right) (#191) 2026-01-02 18:21:48 +11:00
Section.h Add paragraph alignment setting (justify/left/center/right) (#191) 2026-01-02 18:21:48 +11:00