You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.6 KiB

#!/usr/bin/nodejs
var opts = require(__dirname + '/../lib/ext/opts');
var ronn = require(__dirname + '/../lib/ronn');
var util = require("util");
var options = [
{ short : 'V'
, description : 'Show version and exit'
, callback : function () { util.puts('0.1'); process.exit(1); }
},
{ short : 'b'
, long : 'build'
, description : 'Output to files with appropriate extension'
},
{ short : 'm'
, long : 'man'
, description : 'Convert to roff and open with man'
},
{ short : 'r'
, long : 'roff'
, description : 'Convert to roff format'
},
{ short : '5'
, long : 'html'
, description : 'Convert to html format'
},
{ short : 'f'
, long : 'fragment'
, description : 'Convert to html fragment format'
},
{ long : 'manual'
, description : 'Set "manual" attribute'
, value : true
},
{ long : 'version'
, description : 'Set "version" attribute'
, value : true
},
{ long : 'date'
, description : 'Set "date" attribute'
, value : true
}
];
var arguments = [
{ name : 'file'
, required : true
, description: 'A ronn file'
}
];
opts.parse(options, arguments, true);
var fs = require('fs');
var path = require('path');
var fPath = opts.arg('file');
var fBase = path.join(path.dirname(fPath), path.basename(fPath, path.extname(fPath)));
var fTxt = fs.readFileSync(fPath, 'utf8');
var ronn = new ronn.Ronn(fTxt, opts.get("version"), opts.get("manual"), opts.get("date"));
if (opts.get("man") && !opts.get("build")) {
var spawn = require('child_process').spawn;
var man = spawn('man', ['--warnings', '-E UTF-8', '-l', '-'], {"LANG":"C"});
man.stdout.addListener('data', function (data) {
util.puts(data);
});
man.stderr.addListener('data', function (data) {
util.puts(data);
});
man.addListener('exit', function() {
process.exit(0);
});
man.stdin.write(ronn.roff(), 'utf8');
man.stdin.end();
} else {
var fRoff = null;
var fHtml = null;
var fFrag = null;
if (!opts.get("html") && !opts.get("fragment")) fRoff = ronn.roff();
else {
if (opts.get("roff")) fRoff = ronn.roff();
if (opts.get("html")) fHtml = ronn.html();
if (opts.get("fragment")) {
if (opts.get("html")) {
util.debug("Can't use both --fragment and --html");
process.exit(-1);
}
fFrag = ronn.fragment();
}
}
if (opts.get("build")) {
if (fRoff) fs.writeFileSync(fBase + ".roff", fRoff, 'utf8');
if (fHtml) fs.writeFileSync(fBase + ".html", fHtml, 'utf8');
if (fFrag) fs.writeFileSync(fBase + ".fragment", fFrag, 'utf8');
} else {
if (fRoff) util.puts(fRoff);
if (fHtml) util.puts(fHtml);
if (fFrag) util.puts(fFrag);
}
}