3a4fa1c932
保留逐字 margin/jiya.bias 字体后备方案;补齐 demo 重排、量测边界说明及共享规则 1.0.1 反例向量。 验证:完整构建通过,Node 376 项、WKWebView 64 项及原生 demo 9 项通过;Firefox 仍暂缓。
71 lines
3.9 KiB
Markdown
71 lines
3.9 KiB
Markdown
# 聚珍共享規則
|
||
|
||
本目錄是聚珍跨平台排版語義的機讀權威來源。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 私自實作。
|
||
|
||
## 1.0.1 語言契約澄清
|
||
|
||
`zh-explicit-script` 及 `zh-traditional-region` 指 [BCP 47 的 script/region 位置](https://www.rfc-editor.org/rfc/rfc5646.html#section-2.1),
|
||
不能從 extension/private-use 內容搜尋同名字串。Web 曾把 `zh-Hans-x-hant` 誤判成
|
||
繁體,現修正為簡體;空語言標籤歸 `other`。新增七個反例向量,既有 55 個向量結果、
|
||
字符集合、預設政策、schema 與 adapter 義務均未改,故依上述 patch 規則升為 1.0.1。
|
||
HTML 如何繼承 `lang` 是 Web adapter 契約,不寫入共享規則。未來 adapter 仍須通過
|
||
全部 62 個向量;本次未驗收其他 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 必須公開
|
||
同名選項或未來功能介面已定案。
|