docs: 行內元素三分類(KaTeX 肢解修復)+ v1 相容層移除(changelog 2026-06-12、index)

changelog 新增 2026-06-12 條目:下游問題六(jinze 透明下潛肢解 KaTeX)三根因修復
(元素判透明/avoidsSelf 自身判定/descend 三態 blocked);三分類確立(透明/隔離
isolateSelector 新增/整體);v1 相容層移除(I8 退役)。md 孿生塊補回填 06-09/06-11
兩條(前兩輪漏更)。
index:頭注 v1 改已移除;功能表 spacing/jinze 行補三分類口徑;新增「行內元素三分類」
節(對照表+pill 建議);v1 節改移除記錄;md 孿生塊同步。
重建 changelog.html/index.html。
This commit is contained in:
2026-06-12 17:21:01 +08:00
parent 445716e34e
commit 4b4505654f
4 changed files with 232 additions and 28 deletions
+54 -2
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>變更紀錄(Changelog</title>
<meta name="generated-at" content="2026-06-09">
<meta name="generated-at" content="2026-06-12">
<meta name="source" content="cjk-autospace · 變更紀錄">
<!-- RUNTIME_CSS -->
</head>
@@ -14,7 +14,7 @@
<div class="meta">
<h1>變更紀錄(Changelog</h1>
<p class="subtitle">聚珍(Juzhen)/cjk-autospace 之版本變更紀錄。</p>
<p class="timestamp"><time>2026-06-09</time> · <span>cjk-autospace · 變更紀錄</span></p>
<p class="timestamp"><time>2026-06-12</time> · <span>cjk-autospace · 變更紀錄</span></p>
</div>
<div class="actions">
<!-- ACTIONS -->
@@ -25,6 +25,28 @@
<!-- BODY -->
<p class="lede">聚珍(Juzhen)/cjk-autospace 變更紀錄。<a href="./index.html">← 回文檔</a></p>
<h2>行內元素三分類(KaTeX 肢解修復)+ v1 相容層移除 <span class="badge accent">2026-06-12</span></h2>
<p>下游問題六(KaTeX 公式被禁則綁定肢解)修復:確立行內元素<strong>三分類</strong>口徑(透明/隔離/整體),所有遍歷原語共用同一判定。v1 相容層隨最後一批消費端遷移完成而移除。單元測試 101→112 全綠。</p>
<h3>修復(下游問題六)</h3>
<ul>
<li><strong>Bugjinze 透明下潛肢解 pill</strong>。行內公式緊鄰禁則標點(<code>…$x$</code>)時,jinze 為綁鄰字下潛 <code>.katex</code>——KaTeX 全樹皆 <code>&lt;span&gt;</code>,舊版<strong>僅憑標籤名判透明</strong>,把公式內側末字連同完整殼層逐層克隆切出(<code>splitoff</code>),上標漂移錯位;<code>pillSelector</code><code>skipAttribute</code><code>scope.avoid</code> 三層防護全被刺穿。復現另揭兩向量:相鄰兩 pill 時 <code>descend</code> 刺穿致 <code>jz-hws</code> 插入公式內部;pill 內部標點被 jiya charify。</li>
<li><strong>根因一:判透明以標籤名而非元素</strong><code>transparentInline(el)</code> 改以元素判定——先排除 pill/isolateavoid 再查標籤集;<code>core/split</code><code>canSplit</code> 諮詢 finderpillisolateavoid 一律不可切 → 退化<strong>整元素綁定</strong>——pill 即「作為原子鄰字單位整體綁入 <code>jz-jinze</code>」之期望行為)。</li>
<li><strong>根因二:avoid 僅查祖先</strong>。新增 <code>avoidsSelf(el)</code> 自身判定——元素自身命中 <code>scope.avoid</code><code>skipAttribute</code><code>data-jz-skip</code> 時即為邊界(舊版被當透明穿越,防護形同虛設)。</li>
<li><strong>根因三:descend 越界跳找</strong><code>adjacentLogicalChar</code><code>descend</code> 改三態(邊界字/無內容續找兄弟/<strong>blocked</strong> 終止)——遇 pillisolate/avoid 不可跳過續找更遠之字。</li>
<li><strong>pill 內部全面不可見</strong><code>eachTextNode</code> 過濾 <code>insidePill</code>——pill 內部不 charify、不插間隙、不做長詞包裝(舊版消費端自加之 pill 如 <code>.katex</code> 內部曾被直接變更)。</li>
</ul>
<h3>新增:行內元素三分類(§4.1</h3>
<ul>
<li><strong>透明</strong><code>styleInlines</code> <code>jz-*</code>):穿越、run 延續、禁則可克隆切分——<code>strong</code><code>em</code> 等純樣式。</li>
<li><strong>隔離</strong><code>isolateSelector</code><strong>新增選項</strong>,預設 <code>"mark"</code><code>""</code> 停用):邊界斷 run/斷相鄰/不可切分、<strong>兩端補隙</strong>(同 pill),<strong>內部照常處理</strong>(自成脈絡)——帶背景色之 <code>&lt;mark&gt;</code> 等盒樣式行內(切分背景盒有可見接縫,<code>MARK</code> 並自可切白名單移除)。</li>
<li><strong>整體</strong><code>pillSelector</code>):內部對一切 pass 不可見,禁則時整體綁入——<code>code</code><code>kbd</code>、行內公式 <code>.katex</code>、引用標 <code>.cite-ref</code> 等宜納入。</li>
<li>spacing Pass B 邊界選擇器擴為 <strong>pill isolate</strong>jiyaAdjacency 對 isolate 斷相鄰而內部自成脈絡;orphan 補 avoid 塊不綁(舊漏判)。</li>
</ul>
<h3>移除:v1 相容層</h3>
<ul>
<li>最後一批 v1 消費端遷移 v2 API 完成,<code>src/compat/v1.ts</code><code>createCjkAutospace</code>)、IIFE 全域別名、死選項 <code>autospaceClass</code>(經查從未被任何 pass 讀取)一併移除;不變量 I8 退役。v1 原始碼保存於 <code>v1-autospace</code> 分支。</li>
</ul>
<h2>行內排版透明性修復 標點懸掛移除 <span class="badge accent">2026-06-11</span></h2>
<p>修復兩個下游 Bug(同源於「行內元素對排版透明」原則在各遍歷原語口徑不一)+三項同根隱患審計;並把上一輪「停用」之標點懸掛<strong>正式移除</strong>(負 margin 程式碼/CSS/型別一併刪)。單元測試 90→101 全綠。</p>
<h3>修復</h3>
@@ -162,6 +184,36 @@
<script type="text/markdown" id="md-source">
# 變更紀錄Changelog 聚珍Juzhencjk-autospace
## 行內元素三分類KaTeX 肢解修復 v1 相容層移除2026-06-12
### 修復下游問題六
- jinze 透明下潛肢解 pill行內公式緊鄰禁則標點時KaTeX 全樹皆 span舊版僅憑標籤名判透明公式內側末字連殼層被克隆切出splitoff上標漂移pillSelectorskipAttributescope.avoid 三層防護全被刺穿另修相鄰 pill descend 刺穿致 jz-hws 插入公式內部pill 內部標點被 jiya charify
- 根因修復transparentInline 以元素判定先排除 pillisolateavoidcanSplit 諮詢 finder不可切整元素綁定pill 即整體綁入 jz-jinzeavoidsSelf 自身判定舊僅查祖先descend 三態blocked 終止不越界跳找eachTextNode 過濾 pill 內部
### 新增行內元素三分類§4.1
- 透明styleInlinesjz-*穿越run 延續可克隆切分
- 隔離isolateSelector 新增選項預設 "mark""" 停用邊界斷 run斷相鄰不可切分兩端補隙內部照常處理MARK 自可切白名單移除背景盒切分有可見接縫
- 整體pillSelector內部對一切 pass 不可見禁則時整體綁入spacing Pass B 邊界選擇器擴為 pill isolate
### 移除v1 相容層
- createCjkAutospaceIIFE 全域別名死選項 autospaceClass 一併刪消費端已全數遷移 v2 APII8 退役測試 101112 全綠
## 行內排版透明性修復 標點懸掛移除2026-06-11
### 修復
- pill 前標點誤加間隙漢字\<code\>descend 越過 jz-char 取更前字誤補 jz-hwsisTransparentInline JZ-CHARJZ-INNER
- 行內樣式元素整體掉行core/split 克隆切分splitoff禁則垂懸字只綁邊界詞元revert 延後階段併回
- 審計 T4 lineedge 攀爬集由 styleInlines 派生T5 jiyaAdjacency pill 斷相鄰T6 spacing processPills per-node 功能閘
### 移除
- 標點懸掛由停用轉正式移除寬度守恆矛盾CSS 接觸不到斷行器 margin 程式碼CSS型別一併刪hanging 選項保留為 no-op
## 功能分級 垂懸字2026-06-09
- 功能分級文本級spacingjiyavs 段落級jinzeorphanlongWorddata-jz-levellevel:{text} 標記
- 垂懸字避免 orphan方案 C斷行層無測量預設開 chars=2
- lineedge 行端半形squeeze行歸屬判定改垂直區間比較標點懸掛實作後確認不可行全面停用
## 標點挤压一致性2026-06-04
### 新增修復