Skip to content

规范概览 ​

当前状态 ​

项目状态
规范版本v1.0.0(formatVersion = 1),字段与约束已冻结
兼容性判定依据formatVersion(主版本号),不是 mfpVersion
JSON Schemadraft 2020-12,可被各语言实现直接引用
文档完整性协议规范 + 实现指南 + Schema + 示例 + 变更记录 + 贡献指南
客户端实现见 仓库镜像 中的最新进展

规范文档的构成 ​

文件层次内容
SPEC.md协议层权威定义:字节布局、字段语义、兼容规则、校验流程
IMPLEMENTATION.md实现层客户端实现指南:模块划分、接口签名、伪代码、验收清单
schema/manifest.schema.json数据层manifest 的 JSON Schema(draft 2020-12)
schema/template.schema.json数据层预览模板的 JSON Schema
examples/示例最小与完整 manifest、默认预览模板、字节级布局示意
CHANGELOG.md记录各版本变更
CONTRIBUTING.md协作贡献指南,含"本仓库管什么、不管什么"的边界

关键定义 ​

兼容性以 formatVersion 为准 ​

.mfp 同时存在两个版本概念,容易混淆:

字段含义是否影响兼容性
formatVersion格式本身的版本(主版本号)是,这是唯一判据
mfpVersion产包工具 / 客户端的版本否

读取端应根据 formatVersion 决定能否处理,遇到无法识别的主版本号时明确拒绝, 而不是尝试按已知版本解析。

必须遵守的约束 ​

约束内容
偏移修正前置 32 字节 Header 后,必须同步修正 ZIP 结构中所有偏移字段
中央目录位置必须位于数据区之后、EOCD 之前
Footer 位置Footer Descriptor 必须紧跟 ZIP EOCD
字节序Header 与 Footer 中所有多字节整数必须小端序
条目命名字体条目以内容 SHA-256 命名

详情见 容器结构。

校验流程 ​

读取一个 .mfp 时建议按下面的顺序校验,任一步失败都应给出明确的原因, 而不是笼统地报"文件损坏":

  1. 识别 —— 检查偏移 0 的 magic 是否为 MFP\x01
  2. 版本 —— 读取 formatVersion,确认当前实现能处理
  3. 定位索引 —— 按 manifestOffset 取出 manifest.json 并解析
  4. 结构校验 —— 校验 ZIP 中央目录完整性
  5. 内容校验 —— 逐条目比对 SHA-256 与 checksum 结构
  6. 签名(可选) —— 存在签名条目时验证签名
  7. 降级处理 —— 可选字段缺失时按规范既定规则降级,不拒绝读取

打包侧的自检建议 ​

打包流程末尾应当加一步独立自检:用独立于写入路径的 ZIP 库打开产物、 列出条目并实际解压一个条目,验证偏移修正正确。

这是唯一能可靠发现"偏移漏改"的方法 —— 因为多数工具对未修正的偏移存在宽容行为, 问题可能在很久以后才在某个特定条目上暴露。

详见 通用工具兼容性 中关于宽容度的实测与分析。

许可 ​

规范文本本身以 MIT 发布。规范允许你实现该格式, 但不授予你对包内字体文件的任何权利 —— 字体的再分发受其自身许可证约束。

本仓库是协议层规范仓库,规范文本以 MIT 发布;包内字体的再分发受其自身许可证约束。