UNPKG

academia

Version:

Tools for analyzing academic text

101 lines (100 loc) 3.44 kB
"use strict"; var fs_1 = require('fs'); var chalk = require('chalk'); var optimist = require('optimist'); var acl_1 = require('./styles/acl'); function stderr(line) { process.stderr.write(chalk.magenta(line) + '\n'); } function highlight(filename) { stderr("highlighting " + filename); var paper_json = fs_1.readFileSync(filename, { encoding: 'utf8' }); var paper = JSON.parse(paper_json); return paper.sections .map(function (section) { return ("# " + section.title + "\n" + section.paragraphs.join('\n')); }) .join('\n') .replace(/# References?/g, function (group0) { return chalk.blue(group0).toString(); }) .replace(acl_1.citeRegExp, function (group0) { return chalk.green(group0).toString(); }); } function link(filename) { var paper_json = fs_1.readFileSync(filename, { encoding: 'utf8' }); var original_paper = JSON.parse(paper_json); // extract body and references from Paper object var paper = acl_1.linkPaper(original_paper); var linked_cites = paper.cites.filter(function (cite) { return cite.references.length > 0; }); // report var report = { filename: filename, references: paper.references.length, cites: paper.cites.length, linked: linked_cites.length, linking_success: (100 * linked_cites.length / paper.cites.length).toFixed(0) + '%' }; // report stderr(JSON.stringify(report)); // output analysis return paper; } function main() { var argvparser = optimist .usage([ 'Usage: academia <command> <file>', '', 'Commands:', ' highlight: highlight references in paper, e.g.:', ' academia highlight P14-1148.pdf.json -- Print the Paper specified in P14-1148.pdf.json as plaintext with the references highlighted', ' link: detect references, citations, and link citations to references as possible, e.g.:', ' academia link P14-1148.pdf.json -- Detect cites and references, link them, and print the full enhanced Paper object', ].join('\n')) .describe({ output: 'output file (- for STDOUT)', help: 'print this help message', verbose: 'print debug messages', version: 'print version', }) .alias({ o: 'output', h: 'help', v: 'verbose', }) .boolean([ 'help', 'verbose', ]) .default({ output: '-', }); var argv = argvparser.argv; if (argv.help) { argvparser.showHelp(); } else if (argv.version) { console.log(require('../package').version); } else { argv = argvparser.demand(2).argv; // pull off positional arguments var command = argv._[0]; var input_filename = argv._[1]; // apply command to input var output = void 0; if (command === 'highlight') { output = highlight(input_filename); } else if (command === 'link') { var paper = link(input_filename); output = JSON.stringify(paper); } else { stderr("Unrecognized command: \"" + command + "\""); process.exit(1); } var outputStream = (argv.output == '-') ? process.stdout : fs_1.createWriteStream(argv.output, { encoding: 'utf8' }); outputStream.write(output + '\n'); } } exports.main = main;