53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "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(); | ||
|  | } | ||
|  | 
 |