From 1a5f0078c6d07ffe21f94f6546d81fa87a0497ea Mon Sep 17 00:00:00 2001 From: commilitia Date: Thu, 16 Jul 2026 16:46:24 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20changelog=202026-07-16=20=E5=A1=8A?= =?UTF-8?q?=E7=B4=9A=E5=88=86=E9=A1=9E=20CSS=20=E9=89=A4=E5=AD=90=20data-j?= =?UTF-8?q?z-block-level=20=EF=BC=8B=20=E5=A2=9E=E9=87=8F=E5=A1=8A?= =?UTF-8?q?=E7=B2=92=E5=BA=A6=E5=A5=91=E7=B4=84=EF=BC=88=E4=B8=8B=E6=B8=B8?= =?UTF-8?q?=E5=BB=BA=E8=AD=B0=E4=B8=83=EF=BC=8F=E8=AA=AA=E6=98=8E=E5=85=AB?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/changelog.html | 371 ++++++++++++++++++++++++++++++++++++---- docs/changelog.src.html | 27 +++ 2 files changed, 365 insertions(+), 33 deletions(-) diff --git a/docs/changelog.html b/docs/changelog.html index 539aac0..99780d9 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -1,4 +1,4 @@ - + @@ -374,9 +374,21 @@ the stretch, so Latin words stay intact and gaps stay even. Code / mono content (`
`, ``, ``, ``) opts out
-   via the mono rule far above (text-align: revert added there).        */
+   via the mono rule far above (text-align: revert added there).
+
+   `.callout`, `.block-body` are listed by CLASS: they are block prose
+   containers that hold DIRECT text in a `
` (not `

`), so the tag + list can't reach them. The juzhen typesetter DOES treat them as + paragraphs (kinsoku / widow binding applies via `level`), so without + this they'd bind punctuation yet render ragged-right — a visible + justify/kinsoku mismatch. `.marginalia` is DELIBERATELY excluded: it + opts into `text-align: start` via the mono rule below (narrow side + notes justify badly). Any new prose container carrying direct text in + a bare `

` must wrap its text in `

`, be added here, or carry + `.justify`. */ :where(:lang(zh), :lang(ja), :lang(ko)) - :is(p, li, blockquote, td, dd, summary, figcaption, caption, .justify, .justify *) + :is(p, li, blockquote, td, dd, summary, figcaption, caption, + .callout, .block-body, .justify, .justify *) { text-align: justify; text-justify: auto; @@ -2545,6 +2557,20 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }

聚珍(Juzhen)/cjk-autospace 變更紀錄。← 回文檔

+

塊級分類 CSS 鉤子 data-jz-block-level + 增量塊粒度契約 2026-07-16

+

下游 HTML 模板消費端新一輪回饋兩項(建議七/說明八):resolved 分類之 CSS 可查鉤子(新功能、向下兼容),與增量 API 使用契約之文檔化。單元測試 140→145 全綠。

+

建議七:resolved 分類寫回 DOM(levelMark pass)

+
    +
  • 動機:消費端之段落級 CSS(首要 CJK 兩端對齊 text-align:justify)語義上應與段落級 pass(禁則/垂懸)作用於同一集合;level 判定原僅存內部快取、不寫回 DOM,消費端只能另立一份必然漂移之選擇器白名單(實例:.callout 綁了避頭尾卻仍散尾)。
  • +
  • 機制:新增 standalone pass levelMark(order 10,恆開)——render 時對每個「直接承載可處理文本」之塊級元素寫 data-jz-block-level="paragraph|text",revert 全數移除(I6 之 data-jz-* 清單涵蓋)。消費端 [data-jz-block-level="paragraph"]{ text-align: justify } 即與聚珍共用單一真相源、永不漂移。
  • +
  • 純容器不標(body/ul/table…——直接文本僅空白):否則 body 恆被判 paragraph、justify 鉤子經繼承污染全頁。標記集合恰為段落級 pass 實際作用之塊集(collectRuns 對純容器收不到 run);avoid 子樹/pill 內部文本不計,未被處理之塊一致不標。
  • +
  • 輸入/輸出分離:作者輸入 data-jz-level 只讀不寫;輸出屬性本庫絕不讀取、亦不在 C2 觀察白名單(外部改動不觸發重處理);增量路徑 revert 即清、render 即重標,分類屬性變化自動刷新。是否對齊仍由消費端 CSS 決定(窄欄邊注可 opt-out),聚珍只供分類、不介入樣式。
  • +
+

說明八:增量「塊粒度」契約(純文檔)

+
    +
  • README/ARCHITECTURE §3.1 明載:增量更新須以為粒度——換塊內容、增刪塊、改分類屬性皆與全量重繪一致;不支持對聚珍已切分文本節點之外科式 characterData 直改(charify 以 fragment 替換原節點,render 前之舊引用已脫離文檔)——後處理排版器之固有限制、非缺陷,以塊為單位替換內容即可。
  • +
+

效能第二/三層:掃描/佈局提速 + 增量恢復(Tier3) 2026-07-12

承第一層(S2+S3)。本批含掃描/佈局提速與**增量恢復**(動態頁面局部變化免全樹重掃),全程獨立複驗+4 份真人撰寫真實文檔驗收。單元測試 130→140 全綠。

掃描 / 佈局提速

@@ -2816,6 +2842,19 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }