| "use strict"; |
| |
| var BOMChar = '\uFEFF'; |
| |
| exports.PrependBOM = PrependBOMWrapper |
| function PrependBOMWrapper(encoder, options) { |
| this.encoder = encoder; |
| this.addBOM = true; |
| } |
| |
| PrependBOMWrapper.prototype.write = function(str) { |
| if (this.addBOM) { |
| str = BOMChar + str; |
| this.addBOM = false; |
| } |
| |
| return this.encoder.write(str); |
| } |
| |
| PrependBOMWrapper.prototype.end = function() { |
| return this.encoder.end(); |
| } |
| |
| |
| //------------------------------------------------------------------------------ |
| |
| exports.StripBOM = StripBOMWrapper; |
| function StripBOMWrapper(decoder, options) { |
| this.decoder = decoder; |
| this.pass = false; |
| this.options = options || {}; |
| } |
| |
| StripBOMWrapper.prototype.write = function(buf) { |
| var res = this.decoder.write(buf); |
| if (this.pass || !res) |
| return res; |
| |
| if (res[0] === BOMChar) { |
| res = res.slice(1); |
| if (typeof this.options.stripBOM === 'function') |
| this.options.stripBOM(); |
| } |
| |
| this.pass = true; |
| return res; |
| } |
| |
| StripBOMWrapper.prototype.end = function() { |
| return this.decoder.end(); |
| } |
| |