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.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							2.2 KiB
						
					
					
				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)
 | 
						|
  };
 | 
						|
};
 |