 c177363a19
			
		
	
	c177363a19
	
	
	
		
			
			🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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)
 | |
|     };
 | |
| };
 |