Spaces:
Sleeping
Sleeping
| 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), | |
| } | |
| } | |