#!/usr/bin/env node var PACKAGES = ['ams', 'cancel', 'color', 'euro', 'teubner', 'mathoid']; var program = require('commander'); var util = require('util'); var json = require('../package.json'); program .version(json.version) .usage('[options] ') .option('--rebuild', 'Rebuild PEGjs grammar before parsing') .option('-v, --verbose', 'Show verbose error information') .option('--usemathrm', 'Use \\mathrm instead of \\mbox to escape some text literals') .option('--usemhchem', 'Allow commands from the mhchem package') .option('-D, --debug', 'Show stack trace on failure'); PACKAGES.forEach(function(pkg) { var msg = 'Fail validation if input requires the '; if (pkg === 'ams') { msg += 'ams* packages'; } else { msg += pkg + ' package'; } program.option('--no-'+pkg, msg); }); program.parse(process.argv); var input = program.args.join(' '); if (program.rebuild) { require('../lib/build-parser'); } var texvcjs = require('../'); var result = texvcjs.check(input, { debug: program.debug, usemathrm:program.usemathrm, usemhchem: program.usemhchem }); // check required packages PACKAGES.forEach(function(pkg) { if (result[pkg+'_required'] && !program[pkg]) { result.status = 'F'; result.details = result[pkg+'_required']; }; }); // output result if (result.status === '+') { util.print(result.status + (result.output || '')); } else if (result.status === 'F' || program.verbose) { util.print(result.status + (result.details || '')); } else { util.print(result.status); } process.exit(result.status === '+' ? 0 : 1);