cjk-autospace — Changelog

時間倒序。架構細節見同分支 index.html

· docs branch

2026-05-26 — 補 ESM export(四種消費形式並存)

下游 Vite / Rollup / TypeScript 之靜態 ESM 解析需要真正之 export 關鍵字;原 UMD-ish(module.exports + globalThis)對 ESM 消費端仍須走「副作用導入 + 從 global 取 factory」之 workaround。檔尾在既有 CJS / globalThis 兩塊後加 export { createCjkAutospace },順序刻意如此 —— 讓 IIFE 串接端(Claude 模板 build.sh / Nvim peek build hook)只需以 sed '/^export {/d' 剝最後一行。

四種消費形式並存:ESM import / CommonJS require / browser globalThis / IIFE 串接(後者需剝 export 行)。

2026-05-26 — Pass C:長英文段 lang 包裝(預設啟用)

解決 CJK 兩端對齊正文中行末長英文詞之斷行問題。原模板於 runtime 端用 <wbr> 每 6 字元亂插斷詞機會,產生兩個觀感問題:(1)位置與音節邊界無關,斷在怪位;(2)<wbr> 為 zero-width,斷處不顯連字符,讀者無法辨認「上行末是被斷開的詞」。

Pass C 走另一條路:把 [A-Za-z]{N,}(預設 N=6)之長英文段包進 <span lang="en">,配合消費端 CSS:

[lang|="en"] {
    hyphens:                     auto;
    -webkit-hyphens:             auto;
    hyphenate-limit-chars:       6 3 3;
    hyphenate-character:         "-";    /* 強制 U+002D 而非預設 U+2010 */
    -webkit-hyphenate-character: "-";
}

字型陷阱:U+2010 之全形 CJK 設計

瀏覽器 hyphens: auto 預設在斷處插 U+2010 HYPHEN。Noto Serif CJK SC 等 CJK serif 字型把 U+2010 設計為 全形 1 em(與一個漢字同寬),以服務 CJK 範圍表達(1月—3月);而 U+002D HYPHEN-MINUS 在同字型內為窄拉丁(約 0.35 em)。直接吃預設會看到「全形連字符」突兀地接在英文詞末。

解法是消費端 CSS 加 hyphenate-character: "-",強制使用 U+002D;仍為純視覺渲染,DOM 與剪貼簿不受影響。lib 不涉入字型決策,僅在文檔中提示。

2026-05-22 — 初始發布

設計來源 雙 pass 架構是原創設計,解決 Pangu.js 原版「text-node walker 看不到跨元素邊界」之問題(典型癥狀:<strong>是</strong> Neovim 此類邊界無法被識別)。