1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- "use strict";
- 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)
- };
- };
|