| "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(); | |
| } | |
| 
 |