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.
		
		
		
		
		
			
		
			
				
					53 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					53 lines
				
				1.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"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();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |