Appearance
解析器 — API 详解
此页从 packages/markdown-parser 提取常用函数、类型与便捷工具,便于构建更高级或自定义的解析流程。
主要函数
getMarkdown(msgId?, options?)
创建配置好的 markdown-it-ts 实例。
参数:
msgId(string,可选):实例标识options(GetMarkdownOptions,可选):配置选项
选项示例:
plugin:插件数组apply:用于变更MarkdownIt实例的函数数组i18n:翻译映射或函数
parseMarkdownToStructure(content, md?, options?)
将 Markdown 字符串解析为供渲染器使用的节点树(AST)。
返回:ParsedNode[]
其他有用函数
processTokens(tokens)— 将原始 token 处理为可用于构建节点列表的结构parseInlineTokens(tokens, md)— 解析 inline tokens
配置与工具
setDefaultMathOptions(options)
设置全局 KaTeX 配置示例:
ts
setDefaultMathOptions({
commands: ['infty', 'perp'],
escapeExclamation: true
})工具函数
isMathLike(content)— 判断文本是否可能为公式findMatchingClose(src, startIdx, open, close)— 查找匹配的闭合符号parseFenceToken(token)— 将 code fence 转为CodeBlockNodenormalizeStandaloneBackslashT(content, options?)— 规范化数学内容中的特殊转义
解析钩子(高级)
传入 ParseOptions 可使用以下钩子:
preTransformTokens、postTransformTokens、postTransformNodes。
这些钩子也可通过 MarkdownRender 组件传入 parseOptions prop(仅当使用 content prop 时生效)。
ParseOptions: requireClosingStrong
requireClosingStrong(boolean,可选)控制解析器在解析 inline 内容时如何处理未闭合的 ** 加粗分隔符。默认值:true。
- true:要求存在匹配的关闭
**才会生成加粗(strong)节点。未闭合的**会被保留为普通文本。这是非交互渲染(例如静态页面或服务器端渲染)推荐的严格模式,可以避免像[**cxx](xxx)这类在链接文本中错误地解析出 dangling strong 的问题。 - false:允许中间态/未完成的
**(适用于编辑器的实时预览),解析器会在某些未闭合情况下仍生成临时的加粗节点。
示例 — 严格模式(默认):
ts
import { parseMarkdownToStructure } from 'packages/markdown-parser'
const nodes = parseMarkdownToStructure('[**cxx](xxx)', undefined, { requireClosingStrong: true })
// 文本 `[**cxx](xxx)` 将被保留,不会创建不完整的加粗节点示例 — 编辑器友好模式:
ts
const nodes = parseMarkdownToStructure('[**cxx](xxx)', undefined, { requireClosingStrong: false })
// 允许在实时预览中创建临时/中间态的加粗节点类型提示
导出的类型包含 CodeBlockNode、ParsedNode 等,可在 TS 中导入:
ts
import type { CodeBlockNode, ParsedNode } from 'stream-markdown-parser'插件与默认配置
本项目为常见解析场景提供了一些便捷插件(例如:footnote、task checkbox、sub/sup/mark 等)。注意:emoji 插件已从默认配置中移除——需要 Emoji 支持的用户请显式注册该插件。
可以通过多种方式添加自定义插件:
- 在
getMarkdown的plugin选项中传入插件数组。 - 在
getMarkdown的apply回调中直接修改返回的MarkdownIt实例。 - 在使用
MarkdownRender组件时,通过customMarkdownItprop 获取并修改该渲染器使用的MarkdownIt实例。
示例 — 在组件中启用 Emoji:
vue
<script setup lang="ts">
import type { MarkdownIt } from 'markdown-it-ts'
import { full as markdownItEmoji } from 'markdown-it-emoji'
import MarkdownRender from 'markstream-vue'
function enableEmoji(md: MarkdownIt) {
md.use(markdownItEmoji)
return md
}
</script>
<template>
<MarkdownRender :content="source" :custom-markdown-it="enableEmoji" />
</template>更多示例与完整 API 请参考仓库内的 packages/markdown-parser/README.md。