-
Notifications
You must be signed in to change notification settings - Fork 118
/
languages.js
117 lines (103 loc) · 2.97 KB
/
languages.js
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
(function() {
var Language, exec, fs, languages, path;
exec = require('child_process').exec;
fs = require('fs');
path = require('path');
Language = (function() {
function Language(symbols, preprocessor) {
this.symbols = symbols;
this.preprocessor = preprocessor;
this.regexs = {};
if (this.symbols.single) {
this.regexs.single = new RegExp('^' + this.symbols.single);
}
this.regexs.multiStart = new RegExp('^\\' + this.symbols.multi[0].split('').join('\\'));
this.regexs.multiEnd = new RegExp('\\' + this.symbols.multi[1].split('').join('\\'));
}
Language.prototype.checkType = function(str) {
if (str.match(this.regexs.multiStart) && str.match(this.regexs.multiEnd)) {
return 'single';
} else if (str.match(this.regexs.multiStart)) {
return 'multistart';
} else if (str.match(this.regexs.multiEnd)) {
return 'multiend';
} else if ((this.regexs.single != null) && str.match(this.regexs.single)) {
return 'single';
} else {
return 'code';
}
};
Language.prototype.filter = function(str) {
var n, re, _ref;
_ref = this.regexs;
for (n in _ref) {
re = _ref[n];
str = str.replace(re, '');
}
return str;
};
Language.prototype.compile = function(filename, customPreprocessor, cb) {
var preCmd;
if ((this.preprocessor != null) || customPreprocessor) {
if ('nocompile' in this.preprocessor && !!filename.match(this.preprocessor.nocompile)) {
cb(null, '');
return;
}
if (customPreprocessor != null) {
preCmd = "" + customPreprocessor + " " + filename;
} else {
preCmd = "" + this.preprocessor.cmd + " " + (this.preprocessor.args.join(' ')) + " " + filename;
}
return exec(preCmd, function(err, stdout, stderr) {
return cb(err, stdout);
});
} else {
return fs.readFile(filename, 'utf-8', function(err, data) {
return cb(err, data);
});
}
};
return Language;
})();
languages = {
'.css': new Language({
multi: ["/*", "*/"]
}),
'.scss': new Language({
single: '//',
multi: ["/*", "*/"]
}, {
cmd: 'scss',
args: ['-t', 'compressed'],
nocompile: /(?:\/|^)_/
}),
'.sass': new Language({
single: '//',
multi: ["/*", "*/"]
}, {
cmd: 'sass',
args: ['-t', 'compressed'],
nocompile: /(?:\/|^)_/
}),
'.less': new Language({
single: '//',
multi: ["/*", "*/"]
}, {
cmd: 'lessc',
args: ['-x']
}),
'.styl': new Language({
single: '//',
multi: ["/*", "*/"]
}, {
cmd: 'stylus',
args: ['-c', '<']
})
};
exports.isSupported = function(filename) {
return path.extname(filename) in languages;
};
exports.getLanguage = function(filename) {
return languages[path.extname(filename)];
};
}).call(this);