pandoc-plantuml
Version:
Pandoc filter to convert diagrams in PlantUml syntax blocks to inline images in markdown files
45 lines (32 loc) • 1.23 kB
JavaScript
const pandoc = require('pandoc-filter');
const plantumlEncoder = require('plantuml-encoder');
const fs = require('fs');
const path = require('path');
const currentDir = process.cwd();
let defaultSkinparam = fs.readFileSync(path.normalize(`${__dirname}/.skinparam.iuml`), 'utf8');
if (fs.existsSync(path.normalize(`${currentDir}/.skinparam.iuml`))) {
let skinparamConfig = fs.readFileSync(path.normalize(`${currentDir}/.skinparam.iuml`), 'utf8');
defaultSkinparam += `\n${skinparamConfig}`;
}
function getPath(contents) {
contents = `${contents.substr(0, 9)}\n${defaultSkinparam}\n${contents.substr(9)}`;
let encoded = plantumlEncoder.encode(contents);
return `http://www.plantuml.com/plantuml/png/${encoded}`;
}
function action(key, value, format, meta) {
if (key !== 'CodeBlock') {
return null;
}
let attrs = value[0];
let contents = value[1];
let id = attrs[0];
let classes = attrs[1];
if (classes.indexOf('plantuml') < 0) {
return null;
}
let newPath = getPath(contents);
let image = pandoc.Image([id, [], []], [], [newPath, '']);
return pandoc.Para([pandoc.Link([id, [], [['target', '_blank']]], [image], [newPath, ''])]);
}
pandoc.toJSONFilter(action);