summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/node_modules/chardet/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/node_modules/chardet/index.js')
-rw-r--r--tools/node_modules/eslint/node_modules/chardet/index.js117
1 files changed, 117 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/node_modules/chardet/index.js b/tools/node_modules/eslint/node_modules/chardet/index.js
new file mode 100644
index 0000000000..e5bceddd6c
--- /dev/null
+++ b/tools/node_modules/eslint/node_modules/chardet/index.js
@@ -0,0 +1,117 @@
+
+var fs = require('fs');
+
+var utf8 = require('./encoding/utf8'),
+ unicode = require('./encoding/unicode'),
+ mbcs = require('./encoding/mbcs'),
+ sbcs = require('./encoding/sbcs'),
+ iso2022 = require('./encoding/iso2022');
+
+var self = this;
+
+var recognisers = [
+ new utf8,
+ new unicode.UTF_16BE,
+ new unicode.UTF_16LE,
+ new unicode.UTF_32BE,
+ new unicode.UTF_32LE,
+ new mbcs.sjis,
+ new mbcs.big5,
+ new mbcs.euc_jp,
+ new mbcs.euc_kr,
+ new mbcs.gb_18030,
+ new iso2022.ISO_2022_JP,
+ new iso2022.ISO_2022_KR,
+ new iso2022.ISO_2022_CN,
+ new sbcs.ISO_8859_1,
+ new sbcs.ISO_8859_2,
+ new sbcs.ISO_8859_5,
+ new sbcs.ISO_8859_6,
+ new sbcs.ISO_8859_7,
+ new sbcs.ISO_8859_8,
+ new sbcs.ISO_8859_9,
+ new sbcs.windows_1251,
+ new sbcs.windows_1256,
+ new sbcs.KOI8_R
+];
+
+module.exports.detect = function(buffer) {
+
+ // Tally up the byte occurence statistics.
+ var fByteStats = [];
+ for (var i = 0; i < 256; i++)
+ fByteStats[i] = 0;
+
+ for (var i = buffer.length - 1; i >= 0; i--)
+ fByteStats[buffer[i] & 0x00ff]++;
+
+ var fC1Bytes = false;
+ for (var i = 0x80; i <= 0x9F; i += 1) {
+ if (fByteStats[i] != 0) {
+ fC1Bytes = true;
+ break;
+ }
+ }
+
+ var context = {
+ fByteStats: fByteStats,
+ fC1Bytes: fC1Bytes,
+ fRawInput: buffer,
+ fRawLength: buffer.length,
+ fInputBytes: buffer,
+ fInputLen: buffer.length
+ };
+
+ var match = recognisers.map(function(rec) {
+ return rec.match(context);
+ }).filter(function(match) {
+ return !!match;
+ }).sort(function(a, b) {
+ return a.confidence - b.confidence;
+ }).pop();
+
+ return match ? match.name : null;
+};
+
+module.exports.detectFile = function(filepath, opts, cb) {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = undefined;
+ }
+
+ var fd;
+
+ var handler = function(err, buffer) {
+ if (fd) {
+ fs.closeSync(fd);
+ }
+
+ if (err) return cb(err, null);
+ cb(null, self.detect(buffer));
+ };
+
+ if (opts && opts.sampleSize) {
+ fd = fs.openSync(filepath, 'r'),
+ sample = new Buffer(opts.sampleSize);
+
+ fs.read(fd, sample, 0, opts.sampleSize, null, function(err) {
+ handler(err, sample);
+ });
+ return;
+ }
+
+ fs.readFile(filepath, handler);
+};
+
+module.exports.detectFileSync = function(filepath, opts) {
+ if (opts && opts.sampleSize) {
+ var fd = fs.openSync(filepath, 'r'),
+ sample = new Buffer(opts.sampleSize);
+
+ fs.readSync(fd, sample, 0, opts.sampleSize);
+ fs.closeSync(fd);
+ return self.detect(sample);
+ }
+
+ return self.detect(fs.readFileSync(filepath));
+};