istextorbinary.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Generated by CoffeeScript 1.8.0
  2. (function() {
  3. var binaryExtensions, isTextOrBinary, pathUtil, textExtensions,
  4. __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
  5. pathUtil = require('path');
  6. textExtensions = require('textextensions');
  7. binaryExtensions = require('binaryextensions');
  8. isTextOrBinary = {
  9. isTextSync: function(filename, buffer) {
  10. var extension, isText, _i, _len;
  11. isText = null;
  12. if (filename) {
  13. filename = pathUtil.basename(filename).split('.');
  14. for (_i = 0, _len = filename.length; _i < _len; _i++) {
  15. extension = filename[_i];
  16. if (__indexOf.call(textExtensions, extension) >= 0) {
  17. isText = true;
  18. break;
  19. }
  20. if (__indexOf.call(binaryExtensions, extension) >= 0) {
  21. isText = false;
  22. break;
  23. }
  24. }
  25. }
  26. if (buffer && isText === null) {
  27. isText = isTextOrBinary.getEncodingSync(buffer) === 'utf8';
  28. }
  29. return isText;
  30. },
  31. isText: function(filename, buffer, next) {
  32. var result;
  33. result = isTextOrBinary.isTextSync(filename, buffer);
  34. if (result instanceof Error) {
  35. next(err);
  36. } else {
  37. next(null, result);
  38. }
  39. return this;
  40. },
  41. isBinarySync: function(filename, buffer, next) {
  42. var result;
  43. result = isTextOrBinary.isTextSync(filename, buffer);
  44. if (result instanceof Error) {
  45. return result;
  46. } else {
  47. return !result;
  48. }
  49. return this;
  50. },
  51. isBinary: function(filename, buffer, next) {
  52. isTextOrBinary.isText(filename, buffer, function(err, result) {
  53. if (err) {
  54. return next(err);
  55. }
  56. return next(null, !result);
  57. });
  58. return this;
  59. },
  60. getEncodingSync: function(buffer, opts) {
  61. var binaryEncoding, charCode, chunkBegin, chunkEnd, chunkLength, contentChunkUTF8, encoding, i, textEncoding, _i, _ref;
  62. textEncoding = 'utf8';
  63. binaryEncoding = 'binary';
  64. if (opts == null) {
  65. chunkLength = 24;
  66. encoding = isTextOrBinary.getEncodingSync(buffer, {
  67. chunkLength: chunkLength,
  68. chunkBegin: chunkBegin
  69. });
  70. if (encoding === textEncoding) {
  71. chunkBegin = Math.max(0, Math.floor(buffer.length / 2) - chunkLength);
  72. encoding = isTextOrBinary.getEncodingSync(buffer, {
  73. chunkLength: chunkLength,
  74. chunkBegin: chunkBegin
  75. });
  76. if (encoding === textEncoding) {
  77. chunkBegin = Math.max(0, buffer.length - chunkLength);
  78. encoding = isTextOrBinary.getEncodingSync(buffer, {
  79. chunkLength: chunkLength,
  80. chunkBegin: chunkBegin
  81. });
  82. }
  83. }
  84. } else {
  85. chunkLength = opts.chunkLength, chunkBegin = opts.chunkBegin;
  86. if (chunkLength == null) {
  87. chunkLength = 24;
  88. }
  89. if (chunkBegin == null) {
  90. chunkBegin = 0;
  91. }
  92. chunkEnd = Math.min(buffer.length, chunkBegin + chunkLength);
  93. contentChunkUTF8 = buffer.toString(textEncoding, chunkBegin, chunkEnd);
  94. encoding = textEncoding;
  95. for (i = _i = 0, _ref = contentChunkUTF8.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  96. charCode = contentChunkUTF8.charCodeAt(i);
  97. if (charCode === 65533 || charCode <= 8) {
  98. encoding = binaryEncoding;
  99. break;
  100. }
  101. }
  102. }
  103. return encoding;
  104. },
  105. getEncoding: function(buffer, opts, next) {
  106. var result;
  107. result = isTextOrBinary.getEncodingSync(buffer, opts);
  108. if (result instanceof Error) {
  109. next(err);
  110. } else {
  111. next(null, result);
  112. }
  113. return this;
  114. }
  115. };
  116. module.exports = isTextOrBinary;
  117. }).call(this);