@mdit/plugin-inline-rule
统一的内联语法工厂插件,用于创建基于标点符号的自定义内联标签。
使用
import { inlineRule } from "@mdit/plugin-inline-rule";
import MarkdownIt from "markdown-it";
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")。
attrs
[attr: string, value: string][] | (() => [attr: string, value: string][])渲染元素的自定义 HTML 属性。静态数组会为每个令牌克隆一份,因此令牌之间不会共享属性数组。工厂函数会为每个令牌调用一次,且必须返回新数组;这是提供动态属性的推荐方式,并免去逐令牌克隆。
placement
"before-emphasis" | "after-emphasis"默认值
"after-emphasis"相对于核心 emphasis 规则的规则位置。使用 "before-emphasis" 可以覆盖相同标记字符的 emphasis 行为(例如使用 _ 作为自定义标签)。
double
boolean默认值
false标记是否必须成对出现(例如 ++ 而不是 +)。设为 true 时使用双标记。
nested
boolean默认值
false为 false 时使用高性能线性扫描,内部不解析内联标签。为 true 时使用分隔符状态机,支持标记内嵌套粗体、斜体等。
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>