import { resolveLineNumbers } from './resolveLineNumbers.js'; /** * Add line numbers to code blocks in markdown-it * * 为 markdown-it 中的代码块添加行号 * * @param md - The markdown-it instance / markdown-it 实例 * @param options - Plugin options / 插件选项 * * @example * ```ts * import { lineNumbers } from '@vuepress/highlighter-helper' * * md.use(lineNumbers, { * lineNumbers: true, * removeLastLine: false * }) * ``` */ export const lineNumbers = (md, { lineNumbers: lineNumberOptions = true, removeLastLine, resolveLineNumbers: customResolveLineNumbers, } = {}) => { const rawFence = md.renderer.rules.fence; md.renderer.rules.fence = (...args) => { const [tokens, index] = args; const token = tokens[index]; // get token info const info = token.info ? md.utils.unescapeAll(token.info).trim() : ''; const rawCode = rawFence(...args); const code = rawCode.slice(rawCode.indexOf('') .join(''); const lineNumbersWrapperCode = ``; const finalCode = rawCode .replace(/<\/div>$/, `${lineNumbersWrapperCode}`) .replace(/"(language-[^"]*?)"/, '"$1 line-numbers-mode"'); return finalCode; }; };