| var minus = "-".charCodeAt(0); | 
| var plus = "+".charCodeAt(0); | 
| var dot = ".".charCodeAt(0); | 
| var exp = "e".charCodeAt(0); | 
| var EXP = "E".charCodeAt(0); | 
|   | 
| // Check if three code points would start a number | 
| // https://www.w3.org/TR/css-syntax-3/#starts-with-a-number | 
| function likeNumber(value) { | 
|   var code = value.charCodeAt(0); | 
|   var nextCode; | 
|   | 
|   if (code === plus || code === minus) { | 
|     nextCode = value.charCodeAt(1); | 
|   | 
|     if (nextCode >= 48 && nextCode <= 57) { | 
|       return true; | 
|     } | 
|   | 
|     var nextNextCode = value.charCodeAt(2); | 
|   | 
|     if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) { | 
|       return true; | 
|     } | 
|   | 
|     return false; | 
|   } | 
|   | 
|   if (code === dot) { | 
|     nextCode = value.charCodeAt(1); | 
|   | 
|     if (nextCode >= 48 && nextCode <= 57) { | 
|       return true; | 
|     } | 
|   | 
|     return false; | 
|   } | 
|   | 
|   if (code >= 48 && code <= 57) { | 
|     return true; | 
|   } | 
|   | 
|   return false; | 
| } | 
|   | 
| // Consume a number | 
| // https://www.w3.org/TR/css-syntax-3/#consume-number | 
| module.exports = function(value) { | 
|   var pos = 0; | 
|   var length = value.length; | 
|   var code; | 
|   var nextCode; | 
|   var nextNextCode; | 
|   | 
|   if (length === 0 || !likeNumber(value)) { | 
|     return false; | 
|   } | 
|   | 
|   code = value.charCodeAt(pos); | 
|   | 
|   if (code === plus || code === minus) { | 
|     pos++; | 
|   } | 
|   | 
|   while (pos < length) { | 
|     code = value.charCodeAt(pos); | 
|   | 
|     if (code < 48 || code > 57) { | 
|       break; | 
|     } | 
|   | 
|     pos += 1; | 
|   } | 
|   | 
|   code = value.charCodeAt(pos); | 
|   nextCode = value.charCodeAt(pos + 1); | 
|   | 
|   if (code === dot && nextCode >= 48 && nextCode <= 57) { | 
|     pos += 2; | 
|   | 
|     while (pos < length) { | 
|       code = value.charCodeAt(pos); | 
|   | 
|       if (code < 48 || code > 57) { | 
|         break; | 
|       } | 
|   | 
|       pos += 1; | 
|     } | 
|   } | 
|   | 
|   code = value.charCodeAt(pos); | 
|   nextCode = value.charCodeAt(pos + 1); | 
|   nextNextCode = value.charCodeAt(pos + 2); | 
|   | 
|   if ( | 
|     (code === exp || code === EXP) && | 
|     ((nextCode >= 48 && nextCode <= 57) || | 
|       ((nextCode === plus || nextCode === minus) && | 
|         nextNextCode >= 48 && | 
|         nextNextCode <= 57)) | 
|   ) { | 
|     pos += nextCode === plus || nextCode === minus ? 3 : 2; | 
|   | 
|     while (pos < length) { | 
|       code = value.charCodeAt(pos); | 
|   | 
|       if (code < 48 || code > 57) { | 
|         break; | 
|       } | 
|   | 
|       pos += 1; | 
|     } | 
|   } | 
|   | 
|   return { | 
|     number: value.slice(0, pos), | 
|     unit: value.slice(pos) | 
|   }; | 
| }; |