const fs = require('fs'); const path = require('path'); const showdown = require('showdown'); module.exports = (config) => { const converter = new showdown.Converter(config['showdown']); const renderShowDown = (data, cb) => { const html = converter.makeHtml(data); cb(html); }; let Prism; if (config['modules']['prism']) Prism = require('node-prismjs'); const renderPrism = (data, cb) => { if (!config['modules']['prism']) return cb(data); const codeRegex = /```([\w-]+)\r?\n((?:(?!```)[\s\S])*)\r?\n```/m; let match; while ((match = codeRegex.exec(data))) { const lang = match[1].trim(); const code = match[2].trim(); 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);
}
cb(data);
};
if (config['modules']['plantuml']) {
require('./script_loader')(path.join(__dirname, 'lib', 'plantuml_synchro.js'));
}
const renderPlantUML = (data, cb) => {
if (!config['modules']['plantuml'])
return cb(data);
const umlRegex = /@startuml\r?\n((?:(?!@enduml)[\s\S])*)\r?\n@enduml/m;
let match;
while ((match = umlRegex.exec(data))) {
const code = match[1].trim();
const s = unescape(encodeURIComponent(code)); // jshint ignore:line
const compressed = global['zip_deflate'](s);
const url = `http://www.plantuml.com/plantuml/${config['plantuml']['output_format']}/${encode64(compressed)}`;// jshint ignore:line
data = data.slice(0, match.index) + `