| 3359 | } |
| 3360 | } |
| 3361 | _unescape(token, size) { |
| 3362 | const length = token.length; |
| 3363 | const a = new Uint8Array(length); |
| 3364 | if (size && size === length) { |
| 3365 | for (let p = 0; p < size; p++) { |
| 3366 | a[p] = token.charCodeAt(p); |
| 3367 | } |
| 3368 | return a; |
| 3369 | } |
| 3370 | let i = 0; |
| 3371 | let o = 0; |
| 3372 | while (i < length) { |
| 3373 | let c = token.charCodeAt(i++); |
| 3374 | if (c !== 0x5C || i >= length) { |
| 3375 | a[o++] = c; |
| 3376 | } else { |
| 3377 | c = token.charCodeAt(i++); |
| 3378 | switch (c) { |
| 3379 | case 0x27: a[o++] = 0x27; break; // ' |
| 3380 | case 0x5C: a[o++] = 0x5C; break; // \\ |
| 3381 | case 0x22: a[o++] = 0x22; break; // " |
| 3382 | case 0x72: a[o++] = 0x0D; break; // \r |
| 3383 | case 0x6E: a[o++] = 0x0A; break; // \n |
| 3384 | case 0x74: a[o++] = 0x09; break; // \t |
| 3385 | case 0x62: a[o++] = 0x08; break; // \b |
| 3386 | case 0x58: // x |
| 3387 | case 0x78: { // X |
| 3388 | const xsi = i - 1; |
| 3389 | const xso = o; |
| 3390 | for (let xi = 0; xi < 2; xi++) { |
| 3391 | if (i >= length) { |
| 3392 | i = xsi; |
| 3393 | o = xso; |
| 3394 | a[o] = 0x5c; |
| 3395 | break; |
| 3396 | } |
| 3397 | let c = token.charCodeAt(i++); |
| 3398 | if (c >= 65 && c <= 70) { |
| 3399 | c -= 55; |
| 3400 | } else if (c >= 97 && c <= 102) { |
| 3401 | c -= 87; |
| 3402 | } else if (c >= 48 && c <= 57) { |
| 3403 | c -= 48; |
| 3404 | } else { |
| 3405 | c = -1; |
| 3406 | } |
| 3407 | if (c === -1) { |
| 3408 | i = xsi; |
| 3409 | o = xso; |
| 3410 | a[o] = 0x5c; |
| 3411 | break; |
| 3412 | } |
| 3413 | a[o] = a[o] << 4 | c; |
| 3414 | } |
| 3415 | o++; |
| 3416 | break; |
| 3417 | } |
| 3418 | default: |