28 lines
		
	
	
		
			942 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			942 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
var from         = require("es5-ext/array/from")
 | 
						|
  , ensureString = require("type/string/ensure")
 | 
						|
  , primitiveSet = require("es5-ext/object/primitive-set")
 | 
						|
  , esniff       = require("./");
 | 
						|
 | 
						|
var allowedSeparators = primitiveSet.apply(null, from(".+-*/,&|;"));
 | 
						|
 | 
						|
module.exports = function (code, sep/*, limit*/) {
 | 
						|
	var expressions, fromIndex, limit = arguments[2] || Infinity;
 | 
						|
	code = ensureString(code);
 | 
						|
	sep = ensureString(sep);
 | 
						|
	if (!allowedSeparators[sep]) throw new Error(sep + " is not supported separator");
 | 
						|
	expressions = [];
 | 
						|
	fromIndex = 0;
 | 
						|
	esniff(code, function (emitter) {
 | 
						|
		emitter.on("trigger:" + sep, function (accessor) {
 | 
						|
			if (accessor.scopeDepth !== 0) return;
 | 
						|
			var index = accessor.index;
 | 
						|
			if (expressions.push(code.slice(fromIndex, index)) === limit) accessor.stop();
 | 
						|
			fromIndex = index + 1;
 | 
						|
		});
 | 
						|
	});
 | 
						|
	if (expressions.length < limit) expressions.push(code.slice(fromIndex));
 | 
						|
	return expressions;
 | 
						|
};
 |