2d42c7ecf2
從零重寫之第一垂直切片(依 ARCHITECTURE.md 契約),涵蓋並超越 v1 全部功能。 核心基座(src/core):unicode 字元表+標點子類+字形側位;locale 語言與 全角/開明政策(全域 lang.style +逐 lang policy);dom(jz-* 工廠+可還原 標記);finder 遍歷引擎(avoid/scope.include/邏輯 run/pill 鄰字/分塊閘); pass 聚合管線。 功能 pass(src/typeset): - spacing:中西間隙採 margin 模型——包裹邊界左側字、以 margin-right 留隙, 不注入空白字元(textContent 完全不變、複製緊湊、justify 不暴增、不撐框、 行首乾淨)。含跨樣式邊界、pill、原檔空格移除。 - gapTrim(lineedge):layout pass,行末去隙,修正 justify 右緣內縮。 - longword:長英文詞 <span lang> + hyphens。 - jiya:標點 charify + 全角/開明/半角(全域 + 逐 lang);半形以字型 OpenType halt 渲染(按字形正確定位、不重疊,居中字形 !? 與繁體 locl 句逗點號皆正確); 行內連續擠壓。 - jinze:行首行末避頭尾(閉類/點號綁前字、開類綁後字,以詞元為邊界、長引文 中段可斷);亦為 justify 綁定載體。 - lineedge:行端擠壓 layout pass(括號引號;ResizeObserver 重算,瀏覽器專用)。 §8 justify:jz-char inline-block 原子,句末標點單份間距。 v1 相容層(compat/v1):createCjkAutospace().apply 映射,IIFE 全域別名。 構建:esbuild → ESM/IIFE/CSS;tsc → d.ts。測試:39 個 jsdom 案例。 demo:簡繁並列+justify+強制繁體開明+標點寬度量測,載 Noto webfont 作參考 (擠壓依賴字型 halt)。間隔號 · 不觸發中西間隙;200% 等詞元不被禁則切斷。
42 lines
2.2 KiB
TypeScript
42 lines
2.2 KiB
TypeScript
/** 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;
|
|
/** 句末點號:。!?(開明式與全角式皆保持全形,不擠壓)。 */
|
|
export declare const BD_STOP = "\u3002\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;
|
|
/**
|
|
* 將單一標點字元歸入其 bd-* 子類;非標點回傳 null。
|
|
* 供 jiya 之 charify 為 jz-char 標記 class。
|
|
*/
|
|
export declare function classifyBiaodian(ch: 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;
|
|
};
|