cjk-autospace — Changelog

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

· docs branch

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 此類邊界無法被識別)。