-
Notifications
You must be signed in to change notification settings - Fork 26
/
markdown.js
59 lines (57 loc) · 1.7 KB
/
markdown.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const markdownIt = require('markdown-it');
const markdownItPrism = require('markdown-it-prism');
const markdownItAttrs = require('markdown-it-attrs');
const markdownItAnchor = require('markdown-it-anchor');
const markdownItKatex = require('@iktakahiro/markdown-it-katex');
const markdownItClass = require('@toycode/markdown-it-class');
const markdownItTocDoneRight = require('markdown-it-toc-done-right');
const markdownItLinkAttributes = require('markdown-it-link-attributes');
const { slugifyString } = require('../utils');
const markdownLib = markdownIt({
// Use of HTML tags in Markdown
html: true,
// Conversion of \n to <br>
breaks: false,
// Automatically hyperlinking inline links
linkify: true,
// Smart quotes and other symbol replacements
typographer: true,
})
// https://github.com/11ty/eleventy/issues/2438
.disable('code')
.use(markdownItPrism, {
defaultLanguage: 'plaintext',
})
.use(markdownItAttrs)
.use(markdownItTocDoneRight, {
placeholder: `{:toc}`, // same as Jekyll
slugify: slugifyString,
containerId: 'toc',
listClass: 'toc-list',
itemClass: 'toc-item',
linkClass: 'toc-link',
listType: 'ol',
})
.use(markdownItClass, {
blockquote: 'rhythm',
})
.use(markdownItAnchor, {
slugify: slugifyString,
tabIndex: false,
permalink: markdownItAnchor.permalink.headerLink({
class: 'to-underline',
}),
})
.use(markdownItLinkAttributes, {
// Only external links (explicit protocol; internal links use relative paths)
pattern: /^https?:/,
attrs: {
target: '_blank',
rel: 'noreferrer noopener',
},
})
.use(markdownItKatex, {
strict: false,
throwOnError: true,
});
module.exports = markdownLib;