| 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 | 
|         ]; | 
|     } | 
| } |