Files
cjk-autospace/rules/README.md
T

62 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 聚珍共享規則
本目錄是聚珍跨平台排版語義的機讀權威來源。Web/CSS 實作與未來其他 adapter
都應以 [`juzhen-rules.json`](./juzhen-rules.json) 為準;程式內常數不得另立一套未經
驗證的規則。`golden-vectors.json` 則固定跨 adapter 必須得到的語義結果,向量只描述
字符分類、間距、禁斷與段末保字等結果,不指定 DOM 結構或 CSS 技巧。
## 檔案
- `juzhen-rules.json`:版本化的共享規則資料。
- `juzhen-rules.schema.json`:JSON Schema 2020-12,約束共享規則格式。
- `golden-vectors.json`:跨平台黃金向量。
- `golden-vectors.schema.json`:JSON Schema 2020-12,約束向量格式。
套件公開子路徑分別為 `cjk-autospace/rules`、`cjk-autospace/rules/schema`、
`cjk-autospace/rules/vectors` 與 `cjk-autospace/rules/vectors-schema`。
## 版本
`schemaVersion` 是整數格式版本;讀取器遇到不認識的值必須拒絕,不得猜測。
`rulesetVersion` 採語義化版本:
- patch:澄清文字或新增不改變既有結果的向量;
- minor:向後相容地擴充字符或新增可選語義;
- major:既有輸入的分類、間距、禁斷、預設政策或 adapter 義務改變。
Unicode profile 另行記錄。更新 Unicode 範圍時,即使 JSON 結構不變,也必須同步提升
`rulesetVersion`、補向量並驗證所有 adapter。
## 變更協議
任何規則變更須在同一變更集中完成以下事項:
1. 更新 canonical JSON 及必要的 schema;
2. 新增或修訂能暴露行為差異的黃金向量,不以刪除反例來換取通過;
3. 更新 Web adapter 的對照測試;未來其他 adapter 亦須執行同一批語義向量;
4. 說明版本提升級別、相容性與 Unicode 依據;
5. 通過 Ajv 2020 strict schema 驗證、內部常數漂移檢查與全部 adapter 測試後方可發佈。
字符覆寫固定為追加語義:不得經 override 移除或重分類內置字符。若未來需要破壞此
規則,屬 major 變更,須先作產品政策決策,不能由單一 adapter 私自實作。
## Adapter 邊界
字符集合一律以大寫十六進位 Unicode code point 的閉區間/單點表示;陣列須按起點
遞增、彼此不重疊。adapter 可序列化成自身所需的 regex、查表或其他等價結構,但該
序列化不是 canonical 格式。
共享層只定義平台中立結果:Unicode 字符類、base+至多一枚 VS 的邏輯 atom、locale
分類與政策、標點半形語義、中西間距與作者空格處置、禁斷關係、段末保字數、功能級別
及語義依賴。
adapter 的節點表示、ownership/revert 帳務、渲染原語、生成式斷行提示、重跑生命
週期、layout 量測與平台 workaround 均不屬共享規則。例如 Web 目前可使用 `jz-*` DOM、
CSS margin/OpenType `halt` 與 MutationObserver;未來 TeX 類 adapter 也可能選擇 node、
glue、penalty 或 macro。這些都只是**非規範示例**,adapter 可採任何能通過黃金向量的
機制,不得把示例反寫為 canonical 要求。
Web 目前保留的 `hanging`/`biaodian`/`emphasis`/`ruby` 相容 no-op 亦屬
**非規範 adapter 相容性資訊**,不列入 canonical 規則,也不代表其他 adapter 必須公開
同名選項或未來功能介面已定案。