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.
		
		
		
		
		
			
		
			
				
					77 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					77 lines
				
				2.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								exports = module.exports = function(bytes)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    var i = 0;
							 | 
						||
| 
								 | 
							
								    while(i < bytes.length)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if(     (// ASCII
							 | 
						||
| 
								 | 
							
								                    bytes[i] == 0x09 ||
							 | 
						||
| 
								 | 
							
								                    bytes[i] == 0x0A ||
							 | 
						||
| 
								 | 
							
								                    bytes[i] == 0x0D ||
							 | 
						||
| 
								 | 
							
								                    (0x20 <= bytes[i] && bytes[i] <= 0x7E)
							 | 
						||
| 
								 | 
							
								                )
							 | 
						||
| 
								 | 
							
								          ) {
							 | 
						||
| 
								 | 
							
								              i += 1;
							 | 
						||
| 
								 | 
							
								              continue;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if(     (// non-overlong 2-byte
							 | 
						||
| 
								 | 
							
								                    (0xC2 <= bytes[i] && bytes[i] <= 0xDF) &&
							 | 
						||
| 
								 | 
							
								                    (0x80 <= bytes[i+1] && bytes[i+1] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                )
							 | 
						||
| 
								 | 
							
								          ) {
							 | 
						||
| 
								 | 
							
								              i += 2;
							 | 
						||
| 
								 | 
							
								              continue;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if(     (// excluding overlongs
							 | 
						||
| 
								 | 
							
								                    bytes[i] == 0xE0 &&
							 | 
						||
| 
								 | 
							
								                    (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                    (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                ) ||
							 | 
						||
| 
								 | 
							
								                (// straight 3-byte
							 | 
						||
| 
								 | 
							
								                 ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) ||
							 | 
						||
| 
								 | 
							
								                  bytes[i] == 0xEE ||
							 | 
						||
| 
								 | 
							
								                  bytes[i] == 0xEF) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 1] && bytes[i+1] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                ) ||
							 | 
						||
| 
								 | 
							
								                (// excluding surrogates
							 | 
						||
| 
								 | 
							
								                 bytes[i] == 0xED &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i+1] && bytes[i+1] <= 0x9F) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                )
							 | 
						||
| 
								 | 
							
								          ) {
							 | 
						||
| 
								 | 
							
								              i += 3;
							 | 
						||
| 
								 | 
							
								              continue;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if(     (// planes 1-3
							 | 
						||
| 
								 | 
							
								                    bytes[i] == 0xF0 &&
							 | 
						||
| 
								 | 
							
								                    (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                    (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                    (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                ) ||
							 | 
						||
| 
								 | 
							
								                (// planes 4-15
							 | 
						||
| 
								 | 
							
								                 (0xF1 <= bytes[i] && bytes[i] <= 0xF3) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                ) ||
							 | 
						||
| 
								 | 
							
								                (// plane 16
							 | 
						||
| 
								 | 
							
								                 bytes[i] == 0xF4 &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
							 | 
						||
| 
								 | 
							
								                 (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
							 | 
						||
| 
								 | 
							
								                )
							 | 
						||
| 
								 | 
							
								          ) {
							 | 
						||
| 
								 | 
							
								              i += 4;
							 | 
						||
| 
								 | 
							
								              continue;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return true;
							 | 
						||
| 
								 | 
							
								}
							 |