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.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							839 B
						
					
					
				
			
		
		
	
	
							40 lines
						
					
					
						
							839 B
						
					
					
				module.exports = parse; | 
						|
 | 
						|
//following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo | 
						|
 | 
						|
//[ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? | 
						|
var re_nthElement = /^([+\-]?\d*n)?\s*(?:([+\-]?)\s*(\d+))?$/; | 
						|
 | 
						|
/* | 
						|
	parses a nth-check formula, returns an array of two numbers | 
						|
*/ | 
						|
function parse(formula){ | 
						|
	formula = formula.trim().toLowerCase(); | 
						|
 | 
						|
	if(formula === "even"){ | 
						|
		return [2, 0]; | 
						|
	} else if(formula === "odd"){ | 
						|
		return [2, 1]; | 
						|
	} else { | 
						|
		var parsed = formula.match(re_nthElement); | 
						|
 | 
						|
		if(!parsed){ | 
						|
			throw new SyntaxError("n-th rule couldn't be parsed ('" + formula + "')"); | 
						|
		} | 
						|
 | 
						|
		var a; | 
						|
 | 
						|
		if(parsed[1]){ | 
						|
			a = parseInt(parsed[1], 10); | 
						|
			if(isNaN(a)){ | 
						|
				if(parsed[1].charAt(0) === "-") a = -1; | 
						|
				else a = 1; | 
						|
			} | 
						|
		} else a = 0; | 
						|
 | 
						|
		return [ | 
						|
			a, | 
						|
			parsed[3] ? parseInt((parsed[2] || "") + parsed[3], 10) : 0 | 
						|
		]; | 
						|
	} | 
						|
}
 | 
						|
 |