ccc-tnt-psd2ui/npm-packages/win32-v3.4.+/ag-psd/dist/utf8.js
2023-07-24 10:36:46 +08:00

154 lines
18 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeString = exports.encodeString = exports.encodeStringTo = exports.stringLengthInBytes = void 0;
function charLengthInBytes(code) {
if ((code & 0xffffff80) === 0) {
return 1;
}
else if ((code & 0xfffff800) === 0) {
return 2;
}
else if ((code & 0xffff0000) === 0) {
return 3;
}
else {
return 4;
}
}
function stringLengthInBytes(value) {
var result = 0;
for (var i = 0; i < value.length; i++) {
var code = value.charCodeAt(i);
// high surrogate
if (code >= 0xd800 && code <= 0xdbff) {
if ((i + 1) < value.length) {
var extra = value.charCodeAt(i + 1);
// low surrogate
if ((extra & 0xfc00) === 0xdc00) {
i++;
result += charLengthInBytes(((code & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);
}
}
}
else {
result += charLengthInBytes(code);
}
}
return result;
}
exports.stringLengthInBytes = stringLengthInBytes;
function writeCharacter(buffer, offset, code) {
var length = charLengthInBytes(code);
switch (length) {
case 1:
buffer[offset] = code;
break;
case 2:
buffer[offset] = ((code >> 6) & 0x1f) | 0xc0;
buffer[offset + 1] = (code & 0x3f) | 0x80;
break;
case 3:
buffer[offset] = ((code >> 12) & 0x0f) | 0xe0;
buffer[offset + 1] = ((code >> 6) & 0x3f) | 0x80;
buffer[offset + 2] = (code & 0x3f) | 0x80;
break;
default:
buffer[offset] = ((code >> 18) & 0x07) | 0xf0;
buffer[offset + 1] = ((code >> 12) & 0x3f) | 0x80;
buffer[offset + 2] = ((code >> 6) & 0x3f) | 0x80;
buffer[offset + 3] = (code & 0x3f) | 0x80;
break;
}
return length;
}
function encodeStringTo(buffer, offset, value) {
for (var i = 0; i < value.length; i++) {
var code = value.charCodeAt(i);
// high surrogate
if (code >= 0xd800 && code <= 0xdbff) {
if ((i + 1) < value.length) {
var extra = value.charCodeAt(i + 1);
// low surrogate
if ((extra & 0xfc00) === 0xdc00) {
i++;
var fullCode = ((code & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;
offset += writeCharacter(buffer, offset, fullCode);
}
}
}
else {
offset += writeCharacter(buffer, offset, code);
}
}
return offset;
}
exports.encodeStringTo = encodeStringTo;
function encodeString(value) {
var buffer = new Uint8Array(stringLengthInBytes(value));
encodeStringTo(buffer, 0, value);
return buffer;
}
exports.encodeString = encodeString;
function continuationByte(buffer, index) {
if (index >= buffer.length) {
throw Error('Invalid byte index');
}
var continuationByte = buffer[index];
if ((continuationByte & 0xC0) === 0x80) {
return continuationByte & 0x3F;
}
else {
throw Error('Invalid continuation byte');
}
}
function decodeString(value) {
var result = '';
for (var i = 0; i < value.length;) {
var byte1 = value[i++];
var code = void 0;
if ((byte1 & 0x80) === 0) {
code = byte1;
}
else if ((byte1 & 0xe0) === 0xc0) {
var byte2 = continuationByte(value, i++);
code = ((byte1 & 0x1f) << 6) | byte2;
if (code < 0x80) {
throw Error('Invalid continuation byte');
}
}
else if ((byte1 & 0xf0) === 0xe0) {
var byte2 = continuationByte(value, i++);
var byte3 = continuationByte(value, i++);
code = ((byte1 & 0x0f) << 12) | (byte2 << 6) | byte3;
if (code < 0x0800) {
throw Error('Invalid continuation byte');
}
if (code >= 0xd800 && code <= 0xdfff) {
throw Error("Lone surrogate U+".concat(code.toString(16).toUpperCase(), " is not a scalar value"));
}
}
else if ((byte1 & 0xf8) === 0xf0) {
var byte2 = continuationByte(value, i++);
var byte3 = continuationByte(value, i++);
var byte4 = continuationByte(value, i++);
code = ((byte1 & 0x0f) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;
if (code < 0x010000 || code > 0x10ffff) {
throw Error('Invalid continuation byte');
}
}
else {
throw Error('Invalid UTF-8 detected');
}
if (code > 0xffff) {
code -= 0x10000;
result += String.fromCharCode(code >>> 10 & 0x3ff | 0xd800);
code = 0xdc00 | code & 0x3ff;
}
result += String.fromCharCode(code);
}
return result;
}
exports.decodeString = decodeString;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQzthQUN6RjtTQUNEO2FBQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkMsSUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBRTVFLElBQUksSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLEdBQUcsUUFBUSxFQUFFO2dCQUN2QyxNQUFNLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Q7YUFBTTtZQUNOLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDdEM7UUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxJQUFJLE9BQU8sQ0FBQztZQUNoQixNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM1RCxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7U0FDN0I7UUFFRCxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQW5ERCxvQ0FtREMiLCJmaWxlIjoidXRmOC5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNoYXJMZW5ndGhJbkJ5dGVzKGNvZGU6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKChjb2RlICYgMHhmZmZmZmY4MCkgPT09IDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoKGNvZGUgJiAweGZmZmZmODAwKSA9PT0gMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmICgoY29kZSAmIDB4ZmZmZjAwMDApID09PSAwKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTGVuZ3RoSW5CeXRlcyh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRsZXQgcmVzdWx0ID0gMDtcclxuXHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcblxyXG5cdFx0Ly8gaGlnaCBzdXJyb2dhdGVcclxuXHRcdGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZikge1xyXG5cdFx0XHRpZiAoKGkgKyAxKSA8IHZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdGNvbnN0IGV4dHJhID0gdmFsdWUuY2hhckNvZGVBdChpICsgMSk7XHJcblxyXG5cdFx0XHRcdC8vIGxvdyBzdXJyb2dhdGVcclxuXHRcdFx0XHRpZiAoKGV4dHJhICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XHJcblx0XHRcdFx0XHRpKys7XHJcblx0XHRcdFx0XHRyZXN1bHQgKz0gY2hhckxlbmd0aEluQnl0ZXMoKChjb2RlICYgMHgzZmYpIDw8IDEwKSArIChleHRyYSAmIDB4M2ZmKSArIDB4MTAwMDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0ICs9IGNoYXJMZW5ndGhJbkJ5dGVzKGNvZGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gd3JpdGVDaGFyYWN0ZXIoYnVmZmVyOiBVaW50OEFycmF5IHwgQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgY29kZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBsZW5ndGggPSBjaGFyTGVuZ3RoSW5CeXRlcyhjb2RlKTtcclxuXHJcblx0c3dpdGNoIChsZW5ndGgpIHtcclxuXHRcdGNhc2UgMTpcclxuXHRcdFx0YnVmZmVyW29mZnNldF0gPSBjb2RlO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgMjpcclxuXHRcdFx0YnVmZmVyW29mZnNldF0gPSAoKGNvZGUgPj4gNikgJiAweDFmKSB8IDB4YzA7XHJcblx0XHRcdGJ1ZmZlcltvZmZzZXQgKyAxXSA9IChjb2RlICYgMHgzZikgfCAweDgwO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgMzpcclxuXHRcdFx0YnVmZmVyW29mZnNldF0gPSAoKGNvZGUgPj4gMTIpICYgMHgwZikgfCAweGUwO1xyXG5cdFx0XHRidWZmZXJbb2Zmc2V0ICsgMV0gPSAoKGNvZGUgPj4gNikgJiAweDNmKSB8IDB4ODA7XHJcblx0XHRcdGJ1ZmZlcltvZmZzZXQgKyAyXSA9IChjb2RlICYgMHgzZikgfCAweDgwO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdGJ1ZmZlcltvZmZzZXRdID0gKChjb2RlID4+IDE4KSAmIDB4MDcpIHwgMHhmMDtcclxuXHRcdFx0YnVmZmVyW29mZnNldCArIDFdID0gKChjb2RlID4+IDEyKSAmIDB4M2YpIHwgMHg4MDtcclxuXHRcdFx0YnVmZmVyW29mZnNldCArIDJdID0gKChjb2RlID4+IDYpICYgMHgzZikgfCAweDgwO1xyXG5cdFx0XHRidWZmZXJbb2Zmc2V0ICsgM10gPSAoY29kZSAmIDB4M2YpIHwgMHg4MDtcclxuXHRcdFx0YnJlYWs7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU3RyaW5nVG8oYnVmZmVyOiBVaW50OEFycmF5IHwgQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IG51bWJlciB7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcblxyXG5cdFx0Ly8gaGlnaCBzdXJyb2dhdGVcclxuXHRcdGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZikge1xyXG5cdFx0XHRpZiAoKGkgKyAxKSA8IHZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdGNvbnN0IGV4dHJhID0gdmFsdWUuY2hhckNvZGVBdChpICsgMSk7XHJcblxyXG5cdFx0XHRcdC8vIGxvdyBzdXJyb2dhdGVcclxuXHRcdFx0XHRpZiAoKGV4dHJhICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XHJcblx0XHRcdFx0XHRpKys7XHJcblx0XHRcdFx0XHRjb25zdCBmdWxsQ29kZSA9ICgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNmZikgKyAweDEwMDAwO1xyXG5cdFx0XHRcdFx0b2Zmc2V0ICs9IHdyaXRlQ2hhcmFjdGVyKGJ1ZmZlciwgb2Zmc2V0LCBmdWxsQ29kZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvZmZzZXQgKz0gd3JpdGVDaGFyYWN0ZXIoYnVmZmVyLCBvZmZzZXQsIGNvZGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVN0cmluZyh2YWx1ZTogc3RyaW5nKTogVWludDhBcnJheSB7XHJcblx0Y29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoc3RyaW5nTGVuZ3RoSW5CeXRlcyh2YWx1ZSkpO1xyXG5cdGVuY29kZVN0cmluZ1RvKGJ1ZmZlciwgMCwgdmFsdWUpO1xyXG5cdHJldHVybiBidWZmZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnRpbnVhdGlvbkJ5dGUoYnVmZmVyOiBVaW50OEFycmF5LCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoaW5kZXggPj0gYnVmZmVyLmxlbmd0aCkge1xyXG5cdFx0dGhyb3cgRXJyb3IoJ0ludmFsaWQgYnl0ZSBpbmRleCcpO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgY29udGludWF0aW9uQnl0ZSA9IGJ1ZmZlcltpbmRleF07XHJcblxyXG5cdGlmICgoY29udGludWF0aW9uQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XHJcblx0XHRyZXR1cm4gY29udGludWF0aW9uQnl0ZSAmIDB4M0Y7XHJcblx0fSBlbHNlIHtcclxuXHRcdHRocm93IEVycm9yKCdJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlJyk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlOiBVaW50OEFycmF5KTogc3RyaW5nIHtcclxuXHRsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOykge1xyXG5cdFx0Y29uc3QgYnl0ZTEgPSB2YWx1ZVtpKytdO1xyXG5cdFx0bGV0IGNvZGU6IG51bWJlcjtcclxuXHJcblx0XHRpZiAoKGJ5dGUxICYgMHg4MCkgPT09IDApIHtcclxuXHRcdFx0Y29kZSA9IGJ5dGUxO1xyXG5cdFx0fSBlbHNlIGlmICgoYnl0ZTEgJiAweGUwKSA9PT0gMHhjMCkge1xyXG5cdFx0XHRjb25zdCBieXRlMiA9IGNvbnRpbnVhdGlvbkJ5dGUodmFsdWUsIGkrKyk7XHJcblx0XHRcdGNvZGUgPSAoKGJ5dGUxICYgMHgxZikgPDwgNikgfCBieXRlMjtcclxuXHJcblx0XHRcdGlmIChjb2RlIDwgMHg4MCkge1xyXG5cdFx0XHRcdHRocm93IEVycm9yKCdJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlJyk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoKGJ5dGUxICYgMHhmMCkgPT09IDB4ZTApIHtcclxuXHRcdFx0Y29uc3QgYnl0ZTIgPSBjb250aW51YXRpb25CeXRlKHZhbHVlLCBpKyspO1xyXG5cdFx0XHRjb25zdCBieXRlMyA9IGNvbnRpbnVhdGlvbkJ5dGUodmFsdWUsIGkrKyk7XHJcblx0XHRcdGNvZGUgPSAoKGJ5dGUxICYgMHgwZikgPDwgMTIpIHwgKGJ5dGUyIDw8IDYpIHwgYnl0ZTM7XHJcblxyXG5cdFx0XHRpZiAoY29kZSA8IDB4MDgwMCkge1xyXG5cdFx0XHRcdHRocm93IEVycm9yKCdJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGZmZikge1xyXG5cdFx0XHRcdHRocm93IEVycm9yKGBMb25lIHN1cnJvZ2F0ZSBVKyR7Y29kZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0gaXMgbm90IGEgc2NhbGFyIHZhbHVlYCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoKGJ5dGUxICYgMHhmOCkgPT09IDB4ZjApIHtcclxuXHRcdFx0Y29uc3QgYnl0ZTIgPSBjb250aW51YXRpb25CeXRlKHZhbHVlLCBpKyspO1xyXG5cdFx0XHRjb25zdCBieXRlMyA9IGNvbnRpbnVhdGlvbkJ5dGUodmFsdWUsIGkrKyk7XHJcblx0XHRcdGNvbnN0IGJ5dGU0ID0gY29udGludWF0aW9uQnl0ZSh2YWx1ZSwgaSsrKTtcclxuXHRcdFx0Y29kZSA9ICgoYnl0ZTEgJiAweDBmKSA8PCAweDEyKSB8IChieXRlMiA8PCAweDBjKSB8IChieXRlMyA8PCAweDA2KSB8IGJ5dGU0O1xyXG5cclxuXHRcdFx0aWYgKGNvZGUgPCAweDAxMDAwMCB8fCBjb2RlID4gMHgxMGZmZmYpIHtcclxuXHRcdFx0XHR0aHJvdyBFcnJvcignSW52YWxpZCBjb250aW51YXRpb24gYnl0ZScpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aHJvdyBFcnJvcignSW52YWxpZCBVVEYtOCBkZXRlY3RlZCcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb2RlID4gMHhmZmZmKSB7XHJcblx0XHRcdGNvZGUgLT0gMHgxMDAwMDtcclxuXHRcdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSA+Pj4gMTAgJiAweDNmZiB8IDB4ZDgwMCk7XHJcblx0XHRcdGNvZGUgPSAweGRjMDAgfCBjb2RlICYgMHgzZmY7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiQzpcXFByb2plY3RzXFxnaXRodWJcXGFnLXBzZFxcc3JjIn0=