forked from omegaup/karel.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkareljs
executable file
·57 lines (49 loc) · 1.59 KB
/
kareljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env node
var program = require('commander');
var fs = require('fs');
var version = require('../package.json').version;
var karel = require('../js/karel.js');
program
.version(version);
program
.command('compile <sourcefile>')
.description('Compiles source file')
.option('-o, --output [outputfile]', 'Specifies the output file (default sourcefile.kx)')
.action(function(sourcefile, options){
var path = require('path');
if (!options.output) {
options.output = path.parse(sourcefile).name + '.kx';
}
var file = fs.readFileSync(sourcefile, {encoding: 'utf-8'});
var compiled = karel.compile(file);
fs.writeFileSync(options.output, JSON.stringify(compiled));
});
program
.command('run <filename>')
.option('--debug','enables debug output')
.description('runs file')
.action(function(filename, options){
var file = fs.readFileSync(filename, {encoding: 'utf-8'});
var compiled = null;
if (filename.endsWith('.kx')) {
compiled = JSON.parse(file);
} else {
compiled = karel.compile(file);
}
var DOMParser = require('xmldom').DOMParser;
var worldXml = new DOMParser().parseFromString(
fs.readFileSync(process.stdin.fd, {encoding: 'utf-8'}), 'text/xml');
var world = new karel.World(100, 100);
world.load(worldXml);
if (options.debug) {
world.runtime.debug = true;
world.runtime.addEventListener('debug', function(ev) {
console.log(ev.debugType, ev.message);
});
}
world.runtime.load(compiled);
while (world.runtime.step());
console.log(world.output());
});
program.parse(process.argv);
// vim: set expandtab:ts=2:sw=2