const fs = require('fs'); const showdown = require('showdown'); const Prism = require('node-prismjs'); module.exports = (config) => { const converter = new showdown.Converter(config['showdown']); return { render: (file, cb) => { fs.readFile(file, {encoding: 'UTF-8'}, (err, data) => { if (err) return cb(err); if (config['modules']['prism']) { const codeRegex = /```([\w-]+)\n((?:(?!```)[\s\S])*)\n```/m; let match; while ((match = codeRegex.exec(data))) { const lang = match[1].trim(); const code = match[2].trim(); try { const block = Prism.highlight(code, Prism.languages[lang] || Prism.languages.autoit, lang); data = data.slice(0, match.index) + `
` + block + '' + data.slice(match.index + match[0].length);
} catch (err) {
console.error(err);
}
}
}
const html = converter.makeHtml(data);
cb(null, html);
});
}
};
};