|
1 |
| -var sprintf = require('sprintf-js').sprintf; |
| 1 | +var sprintf = require('sprintf-js').sprintf, |
| 2 | + _ = require('underscore'), |
| 3 | + fs = require('fs'); |
2 | 4 |
|
3 |
| -var core = require('../core'); |
| 5 | +var core = require('../core'), |
| 6 | + config = require('../config'), |
| 7 | + h = require('../helper'); |
4 | 8 |
|
5 | 9 | var cmd = {
|
6 |
| - command: 'show <keyword>', |
| 10 | + command: 'show <keyword> [--gen|-g] [--lang|-l]', |
7 | 11 | desc: 'Show problem details.',
|
8 | 12 | builder: {
|
9 | 13 | keyword: {
|
10 | 14 | describe: 'Problem keyword, e.g. name, index, or URI path.'
|
| 15 | + }, |
| 16 | + gen: { |
| 17 | + alias: 'g', |
| 18 | + type: 'boolean', |
| 19 | + describe: 'Generate template source file.' |
| 20 | + }, |
| 21 | + lang: { |
| 22 | + alias: 'l', |
| 23 | + type: 'string', |
| 24 | + default: config.LANG, |
| 25 | + describe: 'Language to use, used with -g.' |
11 | 26 | }
|
12 | 27 | }
|
13 | 28 | };
|
14 | 29 |
|
15 | 30 | cmd.handler = function(argv) {
|
| 31 | + |
16 | 32 | core.getProblem(argv.keyword, function(e, problem){
|
17 | 33 | if (e) return console.log('ERROR:', e);
|
18 | 34 |
|
19 |
| - console.log(sprintf('[%d] %s\n', problem.id, problem.name)); |
| 35 | + var msg = ''; |
| 36 | + if (argv.gen) { |
| 37 | + var template = _.find(problem.templates, function(x){ |
| 38 | + return x.value == argv.lang; |
| 39 | + }); |
| 40 | + if (!template) |
| 41 | + return console.log('Failed to generate source file: unknown language', argv.lang); |
| 42 | + |
| 43 | + var f = problem.key + h.fileExt(argv.lang); |
| 44 | + fs.writeFileSync(f, template.defaultCode); |
| 45 | + msg = sprintf('(File: %s)', f); |
| 46 | + } |
| 47 | + |
| 48 | + console.log(sprintf('[%d] %s\t%s\n', problem.id, problem.name, msg)); |
20 | 49 | console.log(sprintf('%s\n', problem.link));
|
21 | 50 | console.log(sprintf('* %s (%s)', problem.level, problem.percent));
|
22 | 51 | console.log(sprintf('* Total Accepted: %d', problem.total_ac));
|
23 |
| - console.log(sprintf('* Total Submissions: %d', problem.total_submit)); |
24 |
| - console.log(); |
| 52 | + console.log(sprintf('* Total Submissions: %d\n', problem.total_submit)); |
25 | 53 | console.log(problem.desc);
|
26 | 54 | });
|
27 | 55 | }
|
|
0 commit comments