Skip to content

API ​

ts
type WritingMode = 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';

interface VerticalWritingOptions {
  mode?: WritingMode;
  lineLength?: number;
}

verticalWriting(options) ​

向 Milkdown 註冊 layout plugin。它回傳 Milkdown plugin array,因此可直接傳給 editor.use。

ts
editor.use(verticalWriting({
  mode: 'vertical-rl',
  lineLength: 40,
}));
OptionTypeDefault說明
modeWritingModehorizontal-tb初始 CSS writing mode。
lineLength正整數不限制每行最大推進量,以全形字元為單位。

lineLength 是實際渲染推進量,不是字數計數器。禁則處理可能讓標點落在名義邊界的前後;半形 Latin text 或 inline node 也不會各自算成一個全形字元。省略時代表不限制。

CSS 必須顯式 import:

ts
import '@illusions-lab/milkdown-plugin-vertical-writing/style.css';

changeWritingMode(mode) ​

回傳一個不重新建立 editor 即可切換 writing mode 的 action:

ts
editor.action(changeWritingMode('horizontal-tb'));
editor.action(changeWritingMode('vertical-rl'));
editor.action(changeWritingMode('vertical-lr'));

文件、選取與 undo history 會保留,plugin 會將邏輯捲動進度轉移至新的 layout。

changeLineLength(number | null) ​

回傳更新行長上限的 action。傳入正整數設定限制,傳入 null 移除限制:

ts
editor.action(changeLineLength(40));
editor.action(changeLineLength(null));

開啟行長限制時,圖片只受 max-inline-size 限制。不會被強制縮放,intrinsic aspect ratio 也會保留。

WritingMode ​

匯出的 WritingMode 只有三個合法值:

值Layout
horizontal-tb橫排,行從上往下。
vertical-rl直排,欄從右往左。
vertical-lr直排,欄從左往右。

不合法的 mode、非正數或非整數的 line length,會在建立 plugin 或 action 時拋出 TypeError。

Live demo ​

可用 controls 試用上面說明的 writing mode 與 line length 行為。

Released under the MIT License.