import marked from 'marked' import Prism from 'prismjs' import genToc from './gen-toc' const cornerTpl = ` ` const toc = [] const renderer = new marked.Renderer() /** * render anchor tag * @link https://github.com/chjj/marked#overriding-renderer-methods */ renderer.heading = function (text, level) { const slug = text.toLowerCase().replace(/[\s\n\t]+/g, '-') toc.push({ level, slug, title: text }) return `${text}` } // highlight code renderer.code = function (code, lang) { const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup) return `
${hl}
` } marked.setOptions({ renderer }) export default function (content, opts = {}) { let corner = '' if (opts.repo) { const repo = /\/\//.test(opts.repo) ? opts.repo : ('https://github.com/' + opts.repo) corner = cornerTpl.replace(/{{repo}}/g, repo) } const section = `
${marked(content)}
` const sidebar = `` return `${corner}
${sidebar}${section}
` }