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.
|
|
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) }; };
|