53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
![]() |
const hljs = require('highlight.js')
|
||
|
const { marked } = require('marked')
|
||
|
const { markedHighlight } = require('marked-highlight')
|
||
|
const matter = require('gray-matter')
|
||
|
|
||
|
marked.use(markedHighlight({
|
||
|
langPrefix: 'hljs language-',
|
||
|
highlight: function(code, lang) {
|
||
|
const language = hljs.getLanguage(lang) ? lang : 'plaintext';
|
||
|
return hljs.highlight(code, { language }).value;
|
||
|
}
|
||
|
}))
|
||
|
|
||
|
function parseMD(file) {
|
||
|
|
||
|
const fileContents = fs.readFileSync(path.join("./", file), 'utf8')
|
||
|
|
||
|
const { data: metadata, content: markdownContent } = matter(fileContents)
|
||
|
|
||
|
const htmlContent = marked(markdownContent)
|
||
|
|
||
|
return {
|
||
|
meta: metadata,
|
||
|
content: htmlContent
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const renderer = new marked.Renderer();
|
||
|
renderer.paragraph = (text) => {
|
||
|
return text.text
|
||
|
}
|
||
|
|
||
|
|
||
|
function parseMarkdown(obj) {
|
||
|
for (let key in obj) {
|
||
|
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
||
|
if (Array.isArray(obj[key])) {
|
||
|
for (let i = 0; i < obj[key].length; i++) {
|
||
|
if (typeof obj[key][i] === 'object' && obj[key][i] !== null) {
|
||
|
parseMarkdown(obj[key][i]);
|
||
|
}
|
||
|
else if (typeof obj[key][i] === 'string') {
|
||
|
obj[key][i] = marked(obj[key][i], { renderer });
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
parseMarkdown(obj[key]);
|
||
|
}
|
||
|
} else if (typeof obj[key] === 'string') {
|
||
|
obj[key] = marked(obj[key], { renderer });
|
||
|
}
|
||
|
}
|
||
|
}
|