mirror of
https://github.com/purocean/yn.git
synced 2026-10-12 23:31:39 +08:00
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { Plugin } from '@fe/context/plugin'
|
|
import Renderer from 'markdown-it/lib/renderer'
|
|
|
|
const buildFunction = (className: string): Renderer.RenderRule => {
|
|
return (tokens, idx, options, _, slf) => {
|
|
if (tokens[idx].map) {
|
|
const lineStart = tokens[idx].map![0]
|
|
const lineEnd = tokens[idx].map![1]
|
|
tokens[idx].attrJoin('class', className)
|
|
tokens[idx].attrSet('data-source-line', String(lineStart + 1))
|
|
tokens[idx].attrSet('data-source-line-end', String(lineEnd + 1))
|
|
}
|
|
return slf.renderToken(tokens, idx, options)
|
|
}
|
|
}
|
|
|
|
export const injectLineNumbers = buildFunction('source-line')
|
|
|
|
export default {
|
|
name: 'markdown-source-line',
|
|
register: ctx => {
|
|
ctx.markdown.registerPlugin(md => {
|
|
md.renderer.rules.paragraph_open = injectLineNumbers
|
|
md.renderer.rules.heading_open = injectLineNumbers
|
|
md.renderer.rules.list_item_open = injectLineNumbers
|
|
md.renderer.rules.table_open = injectLineNumbers
|
|
md.renderer.rules.td_open = buildFunction('yank-table-cell')
|
|
md.renderer.rules.th_open = buildFunction('yank-table-cell')
|
|
})
|
|
}
|
|
} as Plugin
|