@mdit/plugin-inline-rule
统一的内联语法工厂插件,用于创建基于标点符号的自定义内联标签。
使用
import MarkdownIt from "markdown-it";
import { inlineRule } from "@mdit/plugin-inline-rule";
const mdIt = new MarkdownIt().use(inlineRule, {
marker: "=",
tag: "mark",
token: "mark",
nested: true,
double: true,
placement: "before-emphasis",
});
mdIt.render("==高亮文本==");
// <p><mark>高亮文本</mark></p>选项
marker
- 类型:
string - 必填:是
- 详情:用作标记的标点符号字符(例如
"^"、"~"、"=")。
tag
- 类型:
string - 必填:是
- 详情:渲染元素的 HTML 标签名称(例如
"sup"、"mark"、"span")。
token
- 类型:
string - 必填:是
- 详情:用于 markdown-it 令牌标识的令牌类型名称(例如
"sup"、"mark")。
nested
- 类型:
boolean - 默认值:
false - 详情:为
false时使用高性能线性扫描,内部不解析内联标签。为true时使用分隔符状态机,支持标记内嵌套粗体、斜体等。
double
- 类型:
boolean - 默认值:
false - 详情:标记是否必须成对出现(例如
++而不是+)。设为true时使用双标记。
placement
- 类型:
"before-emphasis" | "after-emphasis" - 默认值:
"after-emphasis" - 详情:相对于核心 emphasis 规则的规则位置。使用
"before-emphasis"可以覆盖相同标记字符的 emphasis 行为(例如使用_作为自定义标签)。
attrs
- 类型:
[attr: string, value: string][] - 详情:渲染元素的自定义 HTML 属性。
allowSpace
- 类型:
boolean - 默认值:
false - 详情:是否允许内容中的未转义空格。仅适用于非嵌套规则。
示例
简单标签 (sup)
md.use(inlineRule, {
marker: "^",
tag: "sup",
token: "sup",
});
// ^文本^ → <sup>文本</sup>嵌套标签与属性 (spoiler)
md.use(inlineRule, {
marker: "!",
tag: "span",
token: "spoiler",
nested: true,
double: true,
placement: "before-emphasis",
attrs: [["class", "spoiler"]],
});
// !!隐藏文本!! → <span class="spoiler">隐藏文本</span>单标记嵌套 (ins)
md.use(inlineRule, {
marker: "+",
tag: "ins",
token: "ins",
nested: true,
double: false,
placement: "before-emphasis",
});
// +插入文本+ → <ins>插入文本</ins>
// ++嵌套插入文本++ → <ins><ins>嵌套插入文本</ins></ins>
// +内部**粗体**+ → <ins>内部<strong>粗体</strong></ins>自定义语法
md.use(inlineRule, {
marker: "%",
tag: "span",
token: "help",
nested: true,
double: true,
placement: "before-emphasis",
attrs: [["class", "help-text"]],
});
// %%帮助文本%% → <span class="help-text">帮助文本</span>