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