c1fbabf5b0
整體計劃 §6.5 之前置基礎設施。把已實作功能切為兩級:
- 文本級(spacing 中西間隙、jiya 標點擠壓/鄰接):任意文本片段皆適用。
- 段落級(jinze 禁則、longWord 斷詞、lineEdge 行端、gapTrim):需行/段布局。
標記 API:
- 預設塊級元素 → 段落級(全功能)。
- 元素屬性 data-jz-level="text"|"paragraph"(最近祖先勝)。
- 選項 level:{ text: "選擇器" }(如標題/按鈕一鍵降為文本級)。
實作:
- 每個 pass 加 level 元數據;Finder.levelFor/levelAllows(含快取)。
- charify 段落級 pass(longWord)於共享走訪受閘;standalone 段落級 pass
(jinze/lineEdge/gapTrim)逐元素受閘。文本級不受限。
- spacing 補單元素 root 支援:root 為行內/單一非塊元素時亦處理(標題等
之中西間隙、標點半形生效)。
6 項新單元測試(text-level 跳段落級、選擇器標記、巢狀最近勝、單元素 spacing、
預設段落級回歸)。共 76 測試全綠。
89 lines
4.9 KiB
TypeScript
89 lines
4.9 KiB
TypeScript
import type { LangClass } from "./locale.js";
|
||
/** CJK 表意文字/假名/注音等範圍(沿用並擴充 v1 之 PANGU_CJK)。 */
|
||
export declare const CJK: string;
|
||
/** 西文字母與數字。 */
|
||
export declare const ALNUM = "A-Za-z0-9";
|
||
/** 西文字母。 */
|
||
export declare const ALPHA = "A-Za-z";
|
||
/** 任一 CJK 字元測試。 */
|
||
export declare const ANY_CJK: RegExp;
|
||
/** CJK 之後可接間隙之西文集(含 @)。 */
|
||
export declare const ANS_AFTER_CJK: string;
|
||
/** CJK 之前可接間隙之西文集(去 @)。 */
|
||
export declare const ANS_BEFORE_CJK: string;
|
||
/** 句末點號:。.!?(開明式與全角式皆保持全形,不擠壓;banjiao 擠半)。
|
||
* 含全角句點 .(U+FF0E,異於表意句號 。U+3002)——實測 Noto CJK SC/TC 皆有 halt、
|
||
* 挤壓收 0.5em,故與 。!? 同列為句末點號(下游回饋)。 */
|
||
export declare const BD_STOP = "\u3002\uFF0E\uFF01\uFF1F";
|
||
/** 句內點號:,、;:(開明式擠成半形;全角式保持全形)。 */
|
||
export declare const BD_PAUSE = "\uFF0C\u3001\uFF1B\uFF1A";
|
||
/** 開始括號/引號:「『(《〈【〖〔[{“‘。 */
|
||
export declare const BD_OPEN = "\u300C\u300E\uFF08\u300A\u3008\u3010\u3016\u3014\uFF3B\uFF5B\u201C\u2018";
|
||
/** 結束括號/引號:」』)》〉】〗〕]}”’。 */
|
||
export declare const BD_CLOSE = "\u300D\u300F\uFF09\u300B\u3009\u3011\u3017\u3015\uFF3D\uFF5D\u201D\u2019";
|
||
/** 間隔/分隔號:·・‧。 */
|
||
export declare const BD_MIDDLE = "\u00B7\u30FB\u2027";
|
||
/** 連續省略/破折:…—。 */
|
||
export declare const BD_LIGA = "\u2026\u2014";
|
||
/** 全體標點字元(供 charify 走訪偵測)。 */
|
||
export declare const BD_ALL: string;
|
||
/** 全寬標點之六子類鍵。 */
|
||
export type BdSubclass = "stop" | "pause" | "open" | "close" | "middle" | "liga";
|
||
/**
|
||
* 字符分類規則集(§4.2):把「中文/西文/全寬標點各子類」各表為 regex 字元類片段。
|
||
* 各 pass(spacing 之 CJK/ANS 正則、jiya 之 classifyBiaodian、jinze 之 anyCjk)皆由此
|
||
* 取分類,不再各自硬編碼。內置默認見 DEFAULT_RULESET;消費端經 options.charClass 擴充
|
||
* (resolveRuleset)。
|
||
*/
|
||
export interface Ruleset {
|
||
/** 中文(CJK 表意/假名/注音等)——中西間隙之「中」側、禁則/justify 原子。 */
|
||
cjk: string;
|
||
/** 西文,CJK 之後可接隙者(含 @)。 */
|
||
ansAfter: string;
|
||
/** 西文,CJK 之前可接隙者(去 @)。 */
|
||
ansBefore: string;
|
||
/** 全寬標點,按子類——jiya charify/擠壓、禁則避頭尾、行端。 */
|
||
biaodian: Record<BdSubclass, string>;
|
||
}
|
||
/** 消費端字符分類覆寫(追加語義;見 README「自定義字符分類」)。 */
|
||
export interface CharClassOverride {
|
||
/** 追加為中文(CJK)。 */
|
||
cjk?: string;
|
||
/** 追加為西文(半寬標點亦歸此,按西文處理間隙);併入 ansAfter/ansBefore。 */
|
||
western?: string;
|
||
/** 追加為全寬標點,按子類。 */
|
||
biaodian?: Partial<Record<BdSubclass, string>>;
|
||
}
|
||
/** 內置默認規則集(即現狀硬編碼值)。 */
|
||
export declare const DEFAULT_RULESET: Ruleset;
|
||
/**
|
||
* 合併消費端覆寫,回傳最終規則集。v1 為**追加**語義:把 override 字元併入內置對應類
|
||
* (未分類字符→歸類、新符號→納入)。不傳則回傳 DEFAULT_RULESET(零行為變更)。
|
||
*/
|
||
export declare function resolveRuleset(override?: CharClassOverride): Ruleset;
|
||
/**
|
||
* 將單一標點字元歸入其 bd-* 子類;非標點回傳 null。供 jiya charify 標記 class。
|
||
* biaodian 取自規則集(預設 DEFAULT_RULESET.biaodian,向下兼容無參數呼叫)。
|
||
*/
|
||
export declare function classifyBiaodian(ch: string, biaodian?: Record<BdSubclass, string>): string | null;
|
||
/** 全體 bd-* 子類名(DOM 端讀取 jz-char 之 bd class 用)。 */
|
||
export declare const BD_CLASS_NAMES: readonly ["bd-stop", "bd-pause", "bd-open", "bd-close", "bd-middle", "bd-liga"];
|
||
/**
|
||
* 標點之「可壓縮空白」側(橫排)。字面偏左者空白在右(句內/句末/閉類),
|
||
* 開類字面偏右、空白在左。間隔號/連接號不壓縮。擠壓即收掉對應側之半形空白。
|
||
*/
|
||
export declare function blankSides(bdClass: string | null): {
|
||
left: boolean;
|
||
right: boolean;
|
||
};
|
||
/** 字形墨色偏側。 */
|
||
export type Bias = "left" | "center" | "right" | "full";
|
||
/** 逐 lang 逐字之偏側覆寫表(消費端傳入,覆寫參考預設)。 */
|
||
export type BiasTable = Partial<Record<LangClass, Record<string, Bias>>>;
|
||
/**
|
||
* 解析標點字元在某語言下之墨色偏側(margin 後備模式用)。
|
||
* 優先序:消費端 overrides[langClass][ch] > 括號表 > 內建點號參考表。
|
||
* 非可壓縮標點(間隔/連接號等)回傳 null(margin 模式不收)。
|
||
*/
|
||
export declare function inkBias(ch: string, langClass: LangClass, overrides?: BiasTable): Bias | null;
|