element-plus/docs/.vitepress/plugins/api-table.ts

41 lines
1.1 KiB
TypeScript
Raw Normal View History

import markdown from 'markdown-it'
import type MarkdownIt from 'markdown-it'
const ApiMd = new markdown()
export const ApiTableContainer = (md: MarkdownIt) => {
const fence = md.renderer.rules.fence!
ApiMd.renderer.rules = md.renderer.rules
md.renderer.rules.fence = (...args) => {
const [tokens, idx, ...rest] = args
const [options, env] = rest
const token = tokens[idx]
if (token.info === 'api') {
const newTokens = md.parse(token.content, env)
let result = ''
const { rules } = md.renderer
newTokens.forEach((newToken, idx) => {
const { type } = newToken
if (type === 'inline') {
result += md.renderer.renderInline(newToken.children!, options, env)
} else if (typeof rules[type] !== 'undefined') {
result += rules[newToken.type]!(
newTokens,
idx,
options,
env,
md.renderer
)
} else {
result += md.renderer.renderToken(newTokens, idx, options)
}
})
return result
}
return fence.call(md, ...args)
}
}