-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcclix.js
More file actions
executable file
·123 lines (110 loc) · 2.63 KB
/
cclix.js
File metadata and controls
executable file
·123 lines (110 loc) · 2.63 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/usr/local/bin/node
var fs = require('fs');
function parseOptions(cbs)
{
if (process.argv.length == 3) {
cbs.run(process.argv[2]);
return
} else if (process.argv.length > 3) {
if (process.argv[2] == 'run') {
cbs.run(process.argv[3]);
return
} else if (process.argv[2] == 'm' || process.argv[2] == 'module') {
cbs.module(process.argv[3]);
return
} else if (process.argv[2] == 'js') {
cbs.js(process.argv[3]);
return
}
}
console.log('Command Not Support Yet!')
console.log(process.argv)
process.exit(-1);
}
function checkInputFile(filename)
{
var extension = filename.substr(-4);
if (extension != '.lix') {
console.log(filename + ' is not a lix file');
process.exit(-1);
}
}
function getLixContent(filename)
{
return require('fs').readFileSync(filename, 'utf-8');
}
function cachedFn(fn, cache)
{
cache = cache || {}
return function (id) {
if (cache[id] === undefined) {
cache[id] = fn(id);
}
return cache[id];
}
}
var mkdirCache = {}
function mkdirP(inputName)
{
var func = cachedFn(function (inputName) {
var dirname = require('path').dirname(__filename) + '/';
dirname += inputName.substr(0, inputName.length - 4) + '-lix';
require('mkdirp').sync(dirname);
return dirname;
}, mkdirCache);
return func(inputName);
}
function saveJsCode(inputName, jsCode)
{
var outputDir = mkdirP(inputName);
var outputFileName = outputDir + '/index.js';
require('fs').writeFileSync(outputFileName, jsCode);
return outputFileName;
}
function compile(lixContent, filename) {
var parser = require('./grammer.js');
var lib = require('./cclib.lix.js');
return lib.compile(parser.parse(lixContent));
}
function saveLixCode(inputFileName)
{
fs.readFile(inputFileName, function (err, data) {
if (err) {
return ;
}
var dir = mkdirP(inputFileName);
fs.writeFileSync(dir + '/index.lix', data);
});
}
var lix = require('lix2js');
function compileAndSave(inputFileName)
{
checkInputFile(inputFileName);
var content = getLixContent(inputFileName);
var jsCode = compile(content, inputFileName);
var outputFileName = saveJsCode(inputFileName, jsCode);
saveLixCode(inputFileName);
return outputFileName
}
function exec(jsFileName) {
require('child_process').exec(
'node ' + jsFileName,
function (err, stdout, stderr) {
console.log(stdout.trim());
}
);
}
parseOptions({
run: function (filename) {
var jsFileName = compileAndSave(filename);
console.log(jsFileName);
// exec(jsFileName);
},
module: function (filename) {
compileAndSave(filename);
},
js: function (filename) {
var jsFileName = compileAndSave(filename);
console.log(require('fs').readFileSync(jsFileName, 'utf-8'));
}
})