55 lines
No EOL
1.5 KiB
JavaScript
55 lines
No EOL
1.5 KiB
JavaScript
import hljs from 'highlight.js'
|
|
import { marked } from 'marked'
|
|
import { markedHighlight } from 'marked-highlight'
|
|
import matter from 'gray-matter'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
marked.use(markedHighlight({
|
|
langPrefix: 'hljs language-',
|
|
highlight: function(code, lang) {
|
|
const language = hljs.getLanguage(lang) ? lang : 'plaintext';
|
|
return hljs.highlight(code, { language }).value;
|
|
}
|
|
}))
|
|
|
|
export 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
|
|
}
|
|
|
|
|
|
export 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 });
|
|
}
|
|
}
|
|
} |