Skip to content

Instantly share code, notes, and snippets.

@K4zuki
Last active August 28, 2022 07:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save K4zuki/53e6083b2170a0dc55f5c9d7b820d08c to your computer and use it in GitHub Desktop.
Save K4zuki/53e6083b2170a0dc55f5c9d7b820d08c to your computer and use it in GitHub Desktop.
wavedrom-cli.js stdin trial
#!/usr/bin/env node
'use strict';
var fs = require('fs-extra');
var json5 = require('json5');
var yargs = require('yargs');
var onml = require('onml');
var wavedrom = require('wavedrom');
var def = require('wavedrom/skins/default.js');
var narrow = require('wavedrom/skins/narrow.js');
var lowkey = require('wavedrom/skins/lowkey.js');
var skins = Object.assign({}, def, narrow, lowkey);
var argv = yargs
.option('input', {describe: 'path to the source', alias: 'i'})
.option('svg', {describe: 'path to the generated SVG', alias: 's'})
.option('png', {describe: 'path to the generated PNG', alias: 'p'})
.version()
.demandOption(['input'])
.help()
.argv;
var fileName;
if (argv.input === "-") {
var tmp = require('tmp'); // new requirement
var tmpFileName = tmp.tmpNameSync();
var dest = fs.createWriteStream(tmpFileName, 'utf8');
process.stdin.pipe(dest);
fileName = tmpFileName;
} else {
fileName = argv.input;
}
fs.readFile(fileName, "utf-8", function (err, body) {
var source = json5.parse(body);
var res = wavedrom.renderAny(0, source, skins);
var svg = onml.s(res);
if (argv.svg) {
fs.outputFile(argv.svg, svg, function (err) {
if (err) {
throw new Error(err);
}
});
}
if (argv.png) {
var svg2img = require('svg2img');
svg2img(svg, function (err, buf) {
fs.outputFile(argv.png, buf);
});
}
if (!(argv.svg || argv.png)) {
console.log(svg);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment