You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.1 KiB
52 lines
1.1 KiB
"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(); |
|
} |
|
|
|
|