diff options
Diffstat (limited to 'node_modules/vuepress/lib/markdown/index.js')
| -rw-r--r-- | node_modules/vuepress/lib/markdown/index.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/node_modules/vuepress/lib/markdown/index.js b/node_modules/vuepress/lib/markdown/index.js new file mode 100644 index 00000000..f4942f6c --- /dev/null +++ b/node_modules/vuepress/lib/markdown/index.js @@ -0,0 +1,78 @@ +const highlight = require('./highlight') +const highlightLines = require('./highlightLines') +const preWrapper = require('./preWrapper') +const lineNumbers = require('./lineNumbers') +const component = require('./component') +const hoistScriptStyle = require('./hoist') +const convertRouterLink = require('./link') +const containers = require('./containers') +const snippet = require('./snippet') +const emoji = require('markdown-it-emoji') +const anchor = require('markdown-it-anchor') +const toc = require('markdown-it-table-of-contents') +const _slugify = require('./slugify') +const { parseHeaders } = require('../util/parseHeaders') + +module.exports = ({ markdown = {}} = {}) => { + // allow user config slugify + const slugify = markdown.slugify || _slugify + + const md = require('markdown-it')({ + html: true, + highlight + }) + // custom plugins + .use(component) + .use(highlightLines) + .use(preWrapper) + .use(snippet) + .use(convertRouterLink, Object.assign({ + target: '_blank', + rel: 'noopener noreferrer' + }, markdown.externalLinks)) + .use(hoistScriptStyle) + .use(containers) + + // 3rd party plugins + .use(emoji) + .use(anchor, Object.assign({ + slugify, + permalink: true, + permalinkBefore: true, + permalinkSymbol: '#' + }, markdown.anchor)) + .use(toc, Object.assign({ + slugify, + includeLevel: [2, 3], + format: parseHeaders + }, markdown.toc)) + + // apply user config + if (markdown.config) { + markdown.config(md) + } + + if (markdown.lineNumbers) { + md.use(lineNumbers) + } + + module.exports.dataReturnable(md) + + // expose slugify + md.slugify = slugify + + return md +} + +module.exports.dataReturnable = function dataReturnable (md) { + // override render to allow custom plugins return data + const render = md.render + md.render = (...args) => { + md.__data = {} + const html = render.call(md, ...args) + return { + html, + data: md.__data + } + } +} |
