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.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							70 lines
						
					
					
						
							1.7 KiB
						
					
					
				'use strict'; | 
						|
var singleComment = 1; | 
						|
var multiComment = 2; | 
						|
 | 
						|
function stripWithoutWhitespace() { | 
						|
	return ''; | 
						|
} | 
						|
 | 
						|
function stripWithWhitespace(str, start, end) { | 
						|
	return str.slice(start, end).replace(/\S/g, ' '); | 
						|
} | 
						|
 | 
						|
module.exports = function (str, opts) { | 
						|
	opts = opts || {}; | 
						|
 | 
						|
	var currentChar; | 
						|
	var nextChar; | 
						|
	var insideString = false; | 
						|
	var insideComment = false; | 
						|
	var offset = 0; | 
						|
	var ret = ''; | 
						|
	var strip = opts.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; | 
						|
 | 
						|
	for (var i = 0; i < str.length; i++) { | 
						|
		currentChar = str[i]; | 
						|
		nextChar = str[i + 1]; | 
						|
 | 
						|
		if (!insideComment && currentChar === '"') { | 
						|
			var escaped = str[i - 1] === '\\' && str[i - 2] !== '\\'; | 
						|
			if (!escaped) { | 
						|
				insideString = !insideString; | 
						|
			} | 
						|
		} | 
						|
 | 
						|
		if (insideString) { | 
						|
			continue; | 
						|
		} | 
						|
 | 
						|
		if (!insideComment && currentChar + nextChar === '//') { | 
						|
			ret += str.slice(offset, i); | 
						|
			offset = i; | 
						|
			insideComment = singleComment; | 
						|
			i++; | 
						|
		} else if (insideComment === singleComment && currentChar + nextChar === '\r\n') { | 
						|
			i++; | 
						|
			insideComment = false; | 
						|
			ret += strip(str, offset, i); | 
						|
			offset = i; | 
						|
			continue; | 
						|
		} else if (insideComment === singleComment && currentChar === '\n') { | 
						|
			insideComment = false; | 
						|
			ret += strip(str, offset, i); | 
						|
			offset = i; | 
						|
		} else if (!insideComment && currentChar + nextChar === '/*') { | 
						|
			ret += str.slice(offset, i); | 
						|
			offset = i; | 
						|
			insideComment = multiComment; | 
						|
			i++; | 
						|
			continue; | 
						|
		} else if (insideComment === multiComment && currentChar + nextChar === '*/') { | 
						|
			i++; | 
						|
			insideComment = false; | 
						|
			ret += strip(str, offset, i + 1); | 
						|
			offset = i + 1; | 
						|
			continue; | 
						|
		} | 
						|
	} | 
						|
 | 
						|
	return ret + (insideComment ? strip(str.substr(offset)) : str.substr(offset)); | 
						|
};
 | 
						|
 |