diff --git a/docs/changelog.html b/docs/changelog.html index c92b319..bcafbf1 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -1,4 +1,4 @@ - +
@@ -2531,27 +2531,25 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }聚珍(Juzhen)/cjk-autospace 變更紀錄。← 回文檔
-ARCHITECTURE §6.5 整體計劃落地(功能分級前置 → 垂懸字 → 行端模式重構 → 標點懸掛),共 87 單元測試全綠,懸掛經 headless Chrome 校準。
+ARCHITECTURE §6.5:功能分級、垂懸字(方案 C)落地工作良好;原計劃之標點懸掛經實測確認不可行、全面停用。共 90 單元測試全綠(含懸掛防逃逸覆蓋)。
spacing、標點擠壓 jiya,任意文本片段適用)與段落級(禁則 jinze、垂懸字 orphan、標點懸掛 hanging、長詞 longWord,需行/段布局)。塊級元素預設全功能;data-jz-level="text" 子樹(最近祖先勝)或選項 level:{text:"選擇器"} 標記之元素(標題/按鈕/UI)僅跑文本級。實作為 Finder.levelFor/levelAllows + 各 pass level 元數據;段落級 pass(含 charify 之 longWord)逐元素受閘。spacing 補單元素 root 支援(行內/非塊 root 亦處理)。spacing、標點擠壓 jiya,任意文本片段適用)與段落級(禁則 jinze、垂懸字 orphan、長詞 longWord,需行/段布局)。塊級元素預設全功能;data-jz-level="text" 子樹(最近祖先勝)或選項 level:{text:"選擇器"} 標記之元素(標題/按鈕/UI)僅跑文本級。實作為 Finder.levelFor/levelAllows + 各 pass level 元數據;段落級 pass(含 charify 之 longWord)逐元素受閘。spacing 補單元素 root 支援(行內/非塊 root 亦處理)。orphan(方案 C,斷行層無測量,order 70):段末行 CJK 實義字 ≥ N(預設 2;標點/符號不計)。把段末「第 N 個實義字起至段末」(含尾隨標點)包入 jz-orphan(white-space:nowrap),整體不可斷 → 末行恒含之 ⇒ 末行實義字 ≥ N,任意寬度/字型成立、無需量測。邊界字落於行內元素內時綁定整個塊級直接子(跨 jz-jinze 攀爬、不切割)。預設開 chars=2(orphan:false 關);段落級,data-jz-level="text" 跳過。hanging(渲染層 layout,§6.5.2):行尾點號/閉類右凸、行首開類左凸出版心,令正文格線齊邊(自管負 margin)。凸出量按類校準(headless 實測,Noto Sans CJK SC):點號近全形 --jz-hang-stop(1em)、括號半形 --jz-hang-bracket(0.5em),CSS 變數可逐字型調。逐 lang 閘:繁體橫排預設不懸掛(降回 squeeze,clreq)。預設關;已 baseline 半形之標點不懸掛。lineedge 行端處理升級為可配模式 squeeze|hang|none(抽出共用偵測碼,squeeze 行為不變)。squeeze/hang/none),現有行端半形=squeeze、保留並改善。修「行歸屬判定」bug:jz-char 為 inline-block,其行盒 top 與相鄰純文本字形 top 因基線差約 5px、遠小於行高卻超舊容差(EPS=4px),致同行誤判為下一行;改判「垂直區間」(下一行=b.top ≥ a.bottom、上一行=b.bottom ≤ a.top,容 2px)。原計劃之標點懸掛(行端標點凸出版心)經 headless + 真實瀏覽器實測確認純負 margin 機制不可行,已全面停用(hanging 選項仍被接受但無任何效果)。
top 差 > EPS=4px」判同/異行,但 jz-char 為 inline-block,其行盒 top 與相鄰純文本字形 top 因基線差約 5px、遠小於行高卻超舊容差,致同行誤判為下一行(懸掛句末標點過度觸發之根因)。改判「垂直區間」:下一行=b.top ≥ a.bottom、上一行=b.bottom ≤ a.top(容 2px)。relayout 改兩階段——先清全部行端效果、於自然佈局量測全部標點、再一次性套用(仿 gapTrim 教訓),終態穩定。justifyAtoms:true(jz-char inline-block)下,懸掛之負 margin 被 justify 重分配吸收、標點不凸出;欲懸掛須設 justifyAtoms:false(jz-char 改 inline)。容器宜留左右 padding ≥1em 容納凸出標點。inline-block 對齊原子互斥(justifyAtoms:true 下負 margin 被 justify 吸收);④ ResizeObserver 重排時兩階段標記錯亂。index 鎖 lineEnd:"squeeze"(忽略 hanging 選項);② modeForChar 無條件降 squeeze;③ applyEdge 之 HANG_ENABLED=false 總開關。縱使下游以 hanging/data-juzhen/blocks 任何方式要求亦不啟用(單元測試覆蓋各路徑皆不產生 jz-hang-*)。hanging-punctuation 為正解,待 Chrome 支援(現僅 Safari)並解決與 inline-block 原子衝突。hang 之程式碼、CSS、型別保留休眠。詳見 ARCHITECTURE §6.5.6。demo/resize-check.html 增垂懸字(jz-orphan 描框 + 關閉對照)與標點懸掛(獨立實例、句號密集文本、版心虛線)兩檢查區,工具列增對應顯示開關。demo/showcase.html(新增):定寬文本框並排對照,逐場景演示功能分級與垂懸字(關閉/開啟孤字、chars=3、標點不計入 N)。demo/resize-check.html:增垂懸字(jz-orphan 描框 + 關閉對照)拖曳檢查區。兩頁均不含懸掛(已停用)。聚珍(Juzhen)/cjk-autospace 變更紀錄。← 回文檔
-ARCHITECTURE §6.5 整體計劃落地(功能分級前置 → 垂懸字 → 行端模式重構 → 標點懸掛),共 87 單元測試全綠,懸掛經 headless Chrome 校準。
+ARCHITECTURE §6.5:功能分級、垂懸字(方案 C)落地工作良好;原計劃之標點懸掛經實測確認不可行、全面停用。共 90 單元測試全綠(含懸掛防逃逸覆蓋)。
spacing、標點擠壓 jiya,任意文本片段適用)與段落級(禁則 jinze、垂懸字 orphan、標點懸掛 hanging、長詞 longWord,需行/段布局)。塊級元素預設全功能;data-jz-level="text" 子樹(最近祖先勝)或選項 level:{text:"選擇器"} 標記之元素(標題/按鈕/UI)僅跑文本級。實作為 Finder.levelFor/levelAllows + 各 pass level 元數據;段落級 pass(含 charify 之 longWord)逐元素受閘。spacing 補單元素 root 支援(行內/非塊 root 亦處理)。spacing、標點擠壓 jiya,任意文本片段適用)與段落級(禁則 jinze、垂懸字 orphan、長詞 longWord,需行/段布局)。塊級元素預設全功能;data-jz-level="text" 子樹(最近祖先勝)或選項 level:{text:"選擇器"} 標記之元素(標題/按鈕/UI)僅跑文本級。實作為 Finder.levelFor/levelAllows + 各 pass level 元數據;段落級 pass(含 charify 之 longWord)逐元素受閘。spacing 補單元素 root 支援(行內/非塊 root 亦處理)。orphan(方案 C,斷行層無測量,order 70):段末行 CJK 實義字 ≥ N(預設 2;標點/符號不計)。把段末「第 N 個實義字起至段末」(含尾隨標點)包入 jz-orphan(white-space:nowrap),整體不可斷 → 末行恒含之 ⇒ 末行實義字 ≥ N,任意寬度/字型成立、無需量測。邊界字落於行內元素內時綁定整個塊級直接子(跨 jz-jinze 攀爬、不切割)。預設開 chars=2(orphan:false 關);段落級,data-jz-level="text" 跳過。hanging(渲染層 layout,§6.5.2):行尾點號/閉類右凸、行首開類左凸出版心,令正文格線齊邊(自管負 margin)。凸出量按類校準(headless 實測,Noto Sans CJK SC):點號近全形 --jz-hang-stop(1em)、括號半形 --jz-hang-bracket(0.5em),CSS 變數可逐字型調。逐 lang 閘:繁體橫排預設不懸掛(降回 squeeze,clreq)。預設關;已 baseline 半形之標點不懸掛。lineedge 行端處理升級為可配模式 squeeze|hang|none(抽出共用偵測碼,squeeze 行為不變)。squeeze/hang/none),現有行端半形=squeeze、保留並改善。修「行歸屬判定」bug:jz-char 為 inline-block,其行盒 top 與相鄰純文本字形 top 因基線差約 5px、遠小於行高卻超舊容差(EPS=4px),致同行誤判為下一行;改判「垂直區間」(下一行=b.top ≥ a.bottom、上一行=b.bottom ≤ a.top,容 2px)。原計劃之標點懸掛(行端標點凸出版心)經 headless + 真實瀏覽器實測確認純負 margin 機制不可行,已全面停用(hanging 選項仍被接受但無任何效果)。
top 差 > EPS=4px」判同/異行,但 jz-char 為 inline-block,其行盒 top 與相鄰純文本字形 top 因基線差約 5px、遠小於行高卻超舊容差,致同行誤判為下一行(懸掛句末標點過度觸發之根因)。改判「垂直區間」:下一行=b.top ≥ a.bottom、上一行=b.bottom ≤ a.top(容 2px)。relayout 改兩階段——先清全部行端效果、於自然佈局量測全部標點、再一次性套用(仿 gapTrim 教訓),終態穩定。justifyAtoms:true(jz-char inline-block)下,懸掛之負 margin 被 justify 重分配吸收、標點不凸出;欲懸掛須設 justifyAtoms:false(jz-char 改 inline)。容器宜留左右 padding ≥1em 容納凸出標點。inline-block 對齊原子互斥(justifyAtoms:true 下負 margin 被 justify 吸收);④ ResizeObserver 重排時兩階段標記錯亂。index 鎖 lineEnd:"squeeze"(忽略 hanging 選項);② modeForChar 無條件降 squeeze;③ applyEdge 之 HANG_ENABLED=false 總開關。縱使下游以 hanging/data-juzhen/blocks 任何方式要求亦不啟用(單元測試覆蓋各路徑皆不產生 jz-hang-*)。hanging-punctuation 為正解,待 Chrome 支援(現僅 Safari)並解決與 inline-block 原子衝突。hang 之程式碼、CSS、型別保留休眠。詳見 ARCHITECTURE §6.5.6。demo/resize-check.html 增垂懸字(jz-orphan 描框 + 關閉對照)與標點懸掛(獨立實例、句號密集文本、版心虛線)兩檢查區,工具列增對應顯示開關。demo/showcase.html(新增):定寬文本框並排對照,逐場景演示功能分級與垂懸字(關閉/開啟孤字、chars=3、標點不計入 N)。demo/resize-check.html:增垂懸字(jz-orphan 描框 + 關閉對照)拖曳檢查區。兩頁均不含懸掛(已停用)。jiyajz-char + bd-* class。三機制:baseline 政策(全角式不擠/開明式擠句內點號+括號引號/半角式全擠)+行內連續擠壓+行端擠壓。半形預設以字型 OpenType halt 渲染;缺 halt 字型可切 margin 後備模式(見下)。jinzejustify 綁定載體。orphanjz-orphan(white-space:nowrap),整體不可斷 → 末行恒含之 ⇒ 末行 ≥ N。預設開;段落級。hangingjustifyAtoms:false(與 inline-block 對齊原子互斥)。段落級。leveldata-jz-level="text" 子樹或 level:{text:"選擇器"}(標題/按鈕)僅跑文本級。hanginghanging-punctuation 為正解但 Chrome 不支援。選項仍被接受但無效果、程式碼休眠。詳見 ARCHITECTURE §6.5.6。leveldata-jz-level="text" 子樹或 level:{text:"選擇器"}(標題/按鈕)僅跑文本級。jz-char 為 inline-block 原子,句末標點只貢獻一份對齊伸縮量。擠壓政策優先序:逐 lang policy > 全域 style > 內建預設(繁→全角、簡→開明)。
jiyajz-char + bd-* class。三機制:baseline 政策(全角式不擠/開明式擠句內點號+括號引號/半角式全擠)+行內連續擠壓+行端擠壓。半形預設以字型 OpenType halt 渲染;缺 halt 字型可切 margin 後備模式(見下)。jinzejustify 綁定載體。orphanjz-orphan(white-space:nowrap),整體不可斷 → 末行恒含之 ⇒ 末行 ≥ N。預設開;段落級。hangingjustifyAtoms:false(與 inline-block 對齊原子互斥)。段落級。leveldata-jz-level="text" 子樹或 level:{text:"選擇器"}(標題/按鈕)僅跑文本級。hanginghanging-punctuation 為正解但 Chrome 不支援。選項仍被接受但無效果、程式碼休眠。詳見 ARCHITECTURE §6.5.6。leveldata-jz-level="text" 子樹或 level:{text:"選擇器"}(標題/按鈕)僅跑文本級。jz-char 為 inline-block 原子,句末標點只貢獻一份對齊伸縮量。擠壓政策優先序:逐 lang policy > 全域 style > 內建預設(繁→全角、簡→開明)。