test: 三分類優先序契約——pill 行為覆蓋 isolate(兩端補隙同口徑、雙命中 pill 勝出)
實證後鎖定契約:pill 與 isolate 之邊界口徑完全相同(同一段 processPills 邊界處理, 兩端補隙/斷 run/斷相鄰/不可切分),差異僅在內部(pill 不可見、isolate 照常); 同一元素同時命中兩選擇器時 pill 語義勝出(collectRuns/jiyaAdjacency 均 pill 先判)。 新增契約測試(113 全綠);README 三分類要點+types.ts 選項註記補優先序說明。
This commit is contained in:
@@ -123,6 +123,8 @@ createJuzhen({
|
||||
|
||||
- **判定以元素為準、非標籤名**:KaTeX 全樹皆 `<span>`,但 `.katex` 命中 `pillSelector`
|
||||
即為整體邊界——舊版按標籤名判透明曾整棵下潛、把公式內側末字連同殼層克隆切出(肢解)。
|
||||
- **pill 行為覆蓋 isolate**:兩者邊界口徑完全相同(兩端補隙、斷 run/斷相鄰、不可切分,
|
||||
同一段邊界處理代碼),差異僅在內部;同一元素同時命中兩選擇器時 **pill 勝出**(內部不可見)。
|
||||
- **禁則之整體綁定**:pill 緊鄰禁則標點時(`…$公式$,`),整個 pill 作為原子鄰字單位
|
||||
綁入 `jz-jinze`(公式本不可斷,無額外代價);隔離元素同樣整綁(切分背景盒有可見接縫)。
|
||||
- **`scope.avoid`/`skipAttribute`/`data-jz-skip` 以自身判定**:命中元素自身即邊界、
|
||||
|
||||
Vendored
+2
-1
@@ -78,7 +78,8 @@ export interface JuzhenOptions {
|
||||
styleInlines?: string[];
|
||||
blockTags?: string[];
|
||||
skipTags?: string[];
|
||||
/** 整體(pill)元素選擇器(預設 "code, kbd")。 */
|
||||
/** 整體(pill)元素選擇器(預設 "code, kbd")。pill 之邊界口徑與 isolate 完全
|
||||
* 相同(行為覆蓋),差異僅在內部不可見;同元素雙選擇器命中時 pill 勝出。 */
|
||||
pillSelector?: string;
|
||||
/** 內外隔離元素選擇器(預設 "mark")。傳 "" 停用(mark 回歸透明)。 */
|
||||
isolateSelector?: string;
|
||||
|
||||
+2
-1
@@ -107,7 +107,8 @@ export interface JuzhenOptions
|
||||
styleInlines?: string[];
|
||||
blockTags?: string[];
|
||||
skipTags?: string[];
|
||||
/** 整體(pill)元素選擇器(預設 "code, kbd")。 */
|
||||
/** 整體(pill)元素選擇器(預設 "code, kbd")。pill 之邊界口徑與 isolate 完全
|
||||
* 相同(行為覆蓋),差異僅在內部不可見;同元素雙選擇器命中時 pill 勝出。 */
|
||||
pillSelector?: string;
|
||||
/** 內外隔離元素選擇器(預設 "mark")。傳 "" 停用(mark 回歸透明)。 */
|
||||
isolateSelector?: string;
|
||||
|
||||
@@ -1093,6 +1093,17 @@ test("isolate revert:mark 整綁+邊界間隙還原——DOM 回原樣", ()
|
||||
assert.equal(document.querySelector("p").innerHTML, before, "render→revert 還原一致(I6)");
|
||||
});
|
||||
|
||||
test("三分類優先序:pill 行為覆蓋 isolate——兩端補隙同口徑,雙選擇器同命中時 pill 勝出", () =>
|
||||
{
|
||||
// pill 之邊界口徑=isolate(兩端補隙),差異僅在內部;同一元素同時命中
|
||||
// pillSelector 與 isolateSelector 時,pill 語義(內部不可見)勝出。
|
||||
const { document } = setupDom('<p lang="zh-Hans">前文<mark class="x">內,文</mark>後文</p>');
|
||||
createJuzhen({ pillSelector: ".x", isolateSelector: "mark", jinze: false })
|
||||
.render(document.body);
|
||||
assert.equal(countTag(document.body, "jz-hws"), 2, "兩端各一間隙(同 isolate 口徑)");
|
||||
assert.equal(countTag(document.body, "mark jz-char"), 0, "內部不可見(pill 勝出,標點不 charify)");
|
||||
});
|
||||
|
||||
// ----- v1 相容層移除 -----
|
||||
|
||||
test("v1 相容層已移除:createCjkAutospace 不再導出(消費端已全數遷移 v2 API)", async () =>
|
||||
|
||||
Reference in New Issue
Block a user