EPUB 3 ebook generation engine for MoonBit: builds spec-conformant .epub files from a structured book model, with OPF package documents, navigation, XHTML content, OCF/ZIP packaging and a structure validator.
moon add 668xin/moon_epub本库的 preferred_target 为 wasm-gc,check / build / test / run 均已验证通过。如需兼容旧版工具链,可显式改用 --target js。
# 生成 EPUB 并以 Base64 输出(核心库无文件 IO,由 shell 解码落盘)
moon run src/cli --target wasm-gc -- build minimal | base64 -d > minimal.epub
# 以十六进制输出(便于在无 base64 工具的环境中使用)
moon run src/cli --target wasm-gc -- build multi-chapter --format hex
# 校验结构并输出文本诊断报告
moon run src/cli --target wasm-gc -- check multi-chapter
# 以 JSON 输出机器可读报告
moon run src/cli --target wasm-gc -- check multi-chapter --json
# 打印书籍结构树
moon run src/cli --target wasm-gc -- inspect styled
# 列出内置示例
moon run src/cli --target wasm-gc -- examples// 取一个示例书籍;也可自行构造 @model.Book,
// package_book / validate_book 会自动装配清单与阅读顺序
let book = @examples.multi_chapter()
// 打包为 EPUB 字节流
let options = @ocf.PackageOptions::new()
// 内容文档位于 OEBPS/text/,样式表位于 OEBPS/styles/
options.add_stylesheet("../styles/style.css")
// 可选:登记 Media Overlay(SMIL 文本可由 @media.render_smil 生成)
// options.add_media_overlay("text/ch1.smil", "text/ch1.xhtml", smil_text, duration_ms=1200)
let epub : Bytes = @ocf.package_book(book, options)
// 按阅读顺序生成章节内容文档的 CFI
let cfi = @cfi.chapter_cfi(book, "ch1")
// 结构校验:模型级 + 生成容器的 OCF 布局
// validate_book 会按默认 nav / NCX 自动装配;如需检查手工装配结果,
// 可改用 @validate.validate_book_raw(book)
let report = @validate.validate_book(book)
report.merge(@validate.validate_package(epub))
println(report.summary())
if report.is_ok() {
println("结构校验通过")
}| 包 | 职责 |
|---|---|
| spec | 规范常量:XML 命名空间、媒体类型、OCF 保留文件名、可访问性/SMIL 常量 |
| model | 书籍领域模型:Book / Chapter / Resource / Metadata / Manifest / Spine |
| xhtml | XHTML5 内容文档生成(块级与内联元素、脚注编号) |
| opf | OPF 包文档序列化(元数据、manifest、spine) |
| nav | nav.xhtml 导航与 toc.ncx 向后兼容目录 |
| zip | ZIP 写入器:本地文件头、中央目录、CRC32、DEFLATE |
| ocf | OCF 容器布局与端到端打包(package_book、render_documents、Media Overlays) |
| assets | 样式表合成、MIME 类型推断、资源注册 |
| cfi | EPUB CFI 定位路径构造/解析与章节 CFI |
| a11y | 可访问性元数据体系 |
| media | Media Overlays / SMIL 朗读同步(可经 PackageOptions 打包) |
| validate | 结构校验规则集与诊断报告(模型级 + 生成文档级 + 生成容器级) |
| examples | 四个可直接打包的示例书籍(minimal / multi-chapter / styled / media) |
| cli | 命令行入口 |
$ moon run src/cli --target wasm-gc -- check multi-chapter
报告:0 个错误,0 个警告,0 个提示src/
├── spec/ 规范常量层
├── model/ 书籍领域模型
├── xhtml/ XHTML5 内容文档生成
├── opf/ OPF 包文档序列化
├── nav/ nav.xhtml + toc.ncx 双轨导航
├── zip/ ZIP 写入器(本地文件头、中央目录、CRC32、DEFLATE)
├── ocf/ OCF 容器布局与打包
├── assets/ 样式与静态资源管理
├── cfi/ EPUB CFI 定位路径
├── a11y/ 可访问性元数据
├── media/ Media Overlays / SMIL
├── validate/ 结构校验器
├── examples/ 示例书籍
└── cli/ 命令行入口moon check --target wasm-gc # 类型检查
moon build --target wasm-gc # 构建
moon test --target wasm-gc # 全量单元测试
moon fmt --check # 格式检查
moon info # 生成 .mbti 接口摘要import io, zipfile
data = open("minimal.epub", "rb").read()
z = zipfile.ZipFile(io.BytesIO(data))
print(z.namelist(), z.testzip(), z.read("mimetype").decode())moon login # 登录 mooncakes.io 账号
moon publish --dry-run # 本地打包校验(仅检查,不实际上传)
moon publish # 发布当前版本(moon.mod 中的 version 字段)Install
Download zipEPUB 3 ebook generation engine for MoonBit: builds spec-conformant .epub files from a structured book model, with OPF package documents, navigation, XHTML content, OCF/ZIP packaging and a structure validator.