UNPKG

books-cli

Version:

由于本人经常性的写一些文档,然后现有的很多插件版本各方面存在问题,甚至还有一些作者已经放弃维护了,所以决定自己写一个综合性的插件用来满足个人需求。

64 lines (60 loc) 2.47 kB
/** * plant uml 绘图处理 */ const childProcess = require('child_process'); const fs = require('fs'); const path = require('path'); const crypto = require('crypto'); var os = require('os'); var pumlPath = ""; var isWin = /^win/.test(process.platform); if (isWin) { var pumlPath = path.join(__dirname, '../node_modules/.bin/puml.cmd'); } else { var pumlPath = path.join(__dirname, '../node_modules/.bin/puml'); } function string2svgAsync(body) { const filename = 'puml' + crypto.randomBytes(4).readUInt32LE(0) + 'bar'; const tmpFile = path.join(os.tmpdir(), filename); const config = `skinparam defaultFontSize 18 skinparam defaultFontName PingFang SC,Verdana,Helvetica Neue,Microsoft Yahei,Hiragino Sans GB,Microsoft Sans Serif,WenQuanYi Micro Hei,sans-serif`; return new Promise((resolve, reject) => { fs.writeFile(tmpFile, config + body, function (err) { if (err) { return console.error(err); } childProcess.execFile(pumlPath, ['generate', '-C', 'utf-8', '-s', '-o', tmpFile + '.svg', tmpFile], function (err, stdout, stderr) { if (err || stderr) { console.error("err="); console.error(err || stderr); fs.unlinkSync(tmpFile); reject(err || stderr); } else { const text = fs.readFileSync(tmpFile + '.svg', 'utf8'); fs.unlinkSync(tmpFile); fs.unlinkSync(tmpFile + '.svg'); var trim = text.trim(); resolve("\n<!--puml-->\n<div style='text-align: center;'>\n" + trim + "\n</div>\n<!--endpuml-->\n\n"); } console.debug(stdout); }); }); }); } function processPumlBlockList(page) { var mermaidRegex = /^(\s*)```puml((.*[\r\n]+)+?)?(\s*)```$/im; var match; while ((match = mermaidRegex.exec(page.content))) { var rawBlock = match[0]; var mermaidContent_1 = match[1]; var mermaidContent_2 = match[2]; var mermaidContent_4 = match[4]; const processed = mermaidContent_1 + "{% puml %}\n" + mermaidContent_2 + mermaidContent_4 + "{% endpuml %}"; page.content = page.content.replace(rawBlock, processed); } return page; } module.exports = { string2svgAsync, processPumlBlockList };