47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.validateUtf8 = void 0;
|
||
|
var FIRST_BIT = 0x80;
|
||
|
var FIRST_TWO_BITS = 0xc0;
|
||
|
var FIRST_THREE_BITS = 0xe0;
|
||
|
var FIRST_FOUR_BITS = 0xf0;
|
||
|
var FIRST_FIVE_BITS = 0xf8;
|
||
|
var TWO_BIT_CHAR = 0xc0;
|
||
|
var THREE_BIT_CHAR = 0xe0;
|
||
|
var FOUR_BIT_CHAR = 0xf0;
|
||
|
var CONTINUING_CHAR = 0x80;
|
||
|
/**
|
||
|
* Determines if the passed in bytes are valid utf8
|
||
|
* @param bytes - An array of 8-bit bytes. Must be indexable and have length property
|
||
|
* @param start - The index to start validating
|
||
|
* @param end - The index to end validating
|
||
|
*/
|
||
|
function validateUtf8(bytes, start, end) {
|
||
|
var continuation = 0;
|
||
|
for (var i = start; i < end; i += 1) {
|
||
|
var byte = bytes[i];
|
||
|
if (continuation) {
|
||
|
if ((byte & FIRST_TWO_BITS) !== CONTINUING_CHAR) {
|
||
|
return false;
|
||
|
}
|
||
|
continuation -= 1;
|
||
|
}
|
||
|
else if (byte & FIRST_BIT) {
|
||
|
if ((byte & FIRST_THREE_BITS) === TWO_BIT_CHAR) {
|
||
|
continuation = 1;
|
||
|
}
|
||
|
else if ((byte & FIRST_FOUR_BITS) === THREE_BIT_CHAR) {
|
||
|
continuation = 2;
|
||
|
}
|
||
|
else if ((byte & FIRST_FIVE_BITS) === FOUR_BIT_CHAR) {
|
||
|
continuation = 3;
|
||
|
}
|
||
|
else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return !continuation;
|
||
|
}
|
||
|
exports.validateUtf8 = validateUtf8;
|
||
|
//# sourceMappingURL=validate_utf8.js.map
|