aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vuepress/lib/markdown/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vuepress/lib/markdown/index.js')
-rw-r--r--node_modules/vuepress/lib/markdown/index.js78
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
+ }
+ }
+}