KimEJ/OpenJTD
GitHub: KimEJ/OpenJTD
OpenJTD 是一个开源的 JTD 渲染引擎和编辑器项目,致力于通过 Rust 工具链实现一太郎专有文档格式的解析、文本提取与多格式导出,解决封闭格式长期可读性与互操作性问题。
Stars: 5 | Forks: 1
# OpenJTD
用于 Ichitaro 文档(`.jtd`、`.jtt` 和 `.jttc`)的开源 JTD 渲染引擎和编辑器项目。
OpenJTD 的目标是成为一个开源的 JTD 渲染引擎和编辑器。当前阶段专注于 `rjtd`,这是一个 Rust 工具集,用于构建实现该目标所需的各种组件:容器检查、文本提取、文档建模、导出和查看器集成。长远的技术里程碑是打造一个能够支持忠实排版渲染和编辑的实用 JTD 引擎。
## 当前 rjtd 组件
- 针对 `.jtd`、`.jtt` 和 `.jttc` 文件的 CFB/OLE 容器清单,包括对格式错误文件的宽松回退处理。
- 从观察到的 `/DocumentText` 流中提取文本。
- 观察到的 `.jttc` `JustCompressedDocument` 和 `-lh5-` payload 支持。
- 为没有指定 `/DocumentText` 流的文件恢复嵌入的 `SsmgV.01` / `TextV.01` 片段。
- 输出最小文档模型,支持纯文本、Markdown、JSON 和面向文本的 PDF 格式。
- 用于 `/DocumentTextPositionTables`、`/LineMark`、`/PageMark`、`/PaperMark` 的诊断解析器,以及对象/控制标记研究。
- 支持早期查看器集成实验中使用的 WASM 封装。
## OpenJTD 的意义
Ichitaro 专有的 JTD、JTT 和 JTTC 格式包含的文档可能需要在创建它们的软件之外依然保持可读性。OpenJTD 将 Apache-2.0 Rust 实现(`rjtd`)与公开的规范说明结合起来,使格式研究和兼容性工作在数字保存、无障碍访问和互操作性方面具有可检查性和可重用性。
该项目对不受信任的文档采取了刻意的保守态度:`rjtd` 将观察到/解码出的行为与实验性研究分开,尽可能保留未知结构,并将解析器崩溃、挂起、输出格式错误和资源过度使用视为安全问题。它目前还不是一个完整的渲染器或编辑器;有关当前的限制,请参阅[项目状态](#project-status)和[路线图](docs/ROADMAP.md)。
## 维护者自动化
如果能获得 API 额度,维护者计划将其用于以下重点且可审计的辅助工作:
- 根据分层架构、公开规范以及保守的解码/实验边界进行 PR 审查。
- 进行回归分类和语料库最小化,且不将私有的、专有的或限制分发的文档移至公共服务中。
- 英语/日语规范同步检查。
- 对不受信任的文档进行安全和资源限制审查。
- 面向发布就绪的自动化,涵盖测试、CI、文档和发布元数据。
该计划并不假定会被选中参与任何支持计划或收到额度;维护者保留最终的审查和合并决定权。
## rjtd 快速入门
```
cd rjtd
cargo test --workspace
cargo run -p rjtd-cli -- info path/to/document.jtd
cargo run -p rjtd-cli -- cat path/to/document.jtd
cargo run -p rjtd-cli -- export path/to/document.jtd --format md
cargo run -p rjtd-cli -- export path/to/document.jtd --format json
cargo run -p rjtd-cli -- export path/to/document.jtd --format pdf -o output.pdf
```
要刷新用于视觉回归检查的本地示例 PDF 产物,请在仓库根目录下运行此命令:
```
scripts/regenerate-pdf-output.sh
```
## 仓库布局
- [`rjtd/`](rjtd/) - 用于当前 OpenJTD 组件的 Rust 工具集和工作区:核心引擎、CLI、导出器、WASM 封装和测试辅助工具。
- [`openjtd-spec/`](openjtd-spec/) - 公开的规范说明和 RFC 记录。
- [`docs/`](docs/) - 章程、架构、路线图和研究政策。
- [`openjtd-samples/`](openjtd-samples/) - 可重新分发的示例/输出产物。
- [`rjtd-testdata/`](rjtd-testdata/) - 测试夹具。
- [`openjtd.github.io/`](openjtd.github.io/) - 未来的项目站点。
## 文档
- [`rjtd/README.md`](rjtd/README.md) 描述了 `rjtd` Rust 工作区、CLI、导出器和诊断命令接口。
- [`openjtd-spec/README.md`](openjtd-spec/README.md) 索引了规范工作和 RFC 流程。
- [`docs/CHARTER.md`](docs/CHARTER.md)、[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) 和 [`docs/ROADMAP.md`](docs/ROADMAP.md) 说明了项目方向。
## 设计参考
OpenJTD 的仓库布局和引擎边界受到 `rhwp` 项目结构的启发,并针对 JTD 进行了调整。
## 项目状态
OpenJTD 处于逆向工程和组件构建阶段。它目前还不是完整的 JTD 渲染引擎或编辑器,`rjtd` 的 API、数据模型和诊断命令可能仍会发生变化。
文本提取适用于已观察到的文件,但完整的段落语义、排版保真度、样式、表格、ruby 注释、图像和原生编辑行为尚未完善。PDF 和 SVG 输出应被视为面向文本的回退输出,而非原生排版复刻。
## 翻译
英语是默认的文档语言。日语翻译使用 `*.ja.md`。
## 许可证
OpenJTD 编写的源代码和文档使用 [Apache License, Version 2.0](LICENSE) 授权。
捆绑的示例和测试输入文档以及其他第三方材料可能受单独的权利或条款约束。本许可声明不授予这些材料的权利。
只有当输入材料中的权利允许时,才能分发生成的输出;Apache-2.0 不授予该输出所代表的输入内容的权利。“Ichitaro”、“一太郎”、“JustSystems”和其他第三方名称仅用于描述性地识别文档格式或兼容性目标,并不意味着与其各自的所有者有关联或获得其认可。有关本地参考材料的界限,请参阅 [THIRD_PARTY.md](THIRD_PARTY.md)。
标签:Rust, 可视化界面, 数字保存, 文件格式, 文本提取, 文档渲染, 文档结构分析, 文档解析, 网络流量审计, 通知系统