| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
							
- 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));
 
- };
 
 
  |