pptx-react-viewer 1.0.12 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PowerPointViewer-DtLlYf0r.d.mts → PowerPointViewer-CX0a7wz_.d.mts} +2 -0
- package/dist/{PowerPointViewer-DtLlYf0r.d.ts → PowerPointViewer-CX0a7wz_.d.ts} +2 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +373 -64
- package/dist/index.mjs +373 -64
- package/dist/pptx-viewer.css +1 -1
- package/dist/viewer/index.d.mts +11 -3
- package/dist/viewer/index.d.ts +11 -3
- package/dist/viewer/index.js +373 -64
- package/dist/viewer/index.mjs +373 -64
- package/node_modules/emf-converter/package.json +1 -1
- package/node_modules/mtx-decompressor/dist/index.d.mts +2 -1
- package/node_modules/mtx-decompressor/dist/index.d.ts +2 -1
- package/node_modules/mtx-decompressor/dist/index.js +85 -93
- package/node_modules/mtx-decompressor/dist/index.mjs +85 -93
- package/node_modules/mtx-decompressor/package.json +1 -1
- package/node_modules/pptx-viewer-core/dist/{SvgExporter-CPr1npgo.d.ts → SvgExporter--H1PDfAY.d.ts} +1 -1
- package/node_modules/pptx-viewer-core/dist/{SvgExporter-B4-1_Hjp.d.mts → SvgExporter-Dq_2eV_r.d.mts} +1 -1
- package/node_modules/pptx-viewer-core/dist/cli/index.d.mts +2 -2
- package/node_modules/pptx-viewer-core/dist/cli/index.d.ts +2 -2
- package/node_modules/pptx-viewer-core/dist/cli/index.js +339 -235
- package/node_modules/pptx-viewer-core/dist/cli/index.mjs +339 -235
- package/node_modules/pptx-viewer-core/dist/converter/index.d.mts +3 -3
- package/node_modules/pptx-viewer-core/dist/converter/index.d.ts +3 -3
- package/node_modules/pptx-viewer-core/dist/index.d.mts +297 -6
- package/node_modules/pptx-viewer-core/dist/index.d.ts +297 -6
- package/node_modules/pptx-viewer-core/dist/index.js +1309 -235
- package/node_modules/pptx-viewer-core/dist/index.mjs +1285 -236
- package/node_modules/pptx-viewer-core/dist/{presentation-DgkIYhXo.d.mts → presentation-BozkirFp.d.mts} +17 -1
- package/node_modules/pptx-viewer-core/dist/{presentation-DgkIYhXo.d.ts → presentation-BozkirFp.d.ts} +17 -1
- package/node_modules/pptx-viewer-core/dist/{text-operations-dYKZp3zE.d.mts → text-operations-B2JbPA5H.d.mts} +1 -1
- package/node_modules/pptx-viewer-core/dist/{text-operations-B6U6XxWt.d.ts → text-operations-zwF6i4eH.d.ts} +1 -1
- package/node_modules/pptx-viewer-core/package.json +1 -1
- package/package.json +4 -4
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
* The data following the header is split into three contiguous
|
|
18
18
|
* compressed blocks whose boundaries are determined by the offsets.
|
|
19
19
|
*
|
|
20
|
-
* @param data Raw (
|
|
20
|
+
* @param data Raw MTX data (BSGP header must already be stripped and
|
|
21
|
+
* offsets adjusted before calling this function).
|
|
21
22
|
* @param size Total byte length of `data`.
|
|
22
23
|
* @returns An object containing the three decompressed byte arrays and
|
|
23
24
|
* their respective sizes.
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
* The data following the header is split into three contiguous
|
|
18
18
|
* compressed blocks whose boundaries are determined by the offsets.
|
|
19
19
|
*
|
|
20
|
-
* @param data Raw (
|
|
20
|
+
* @param data Raw MTX data (BSGP header must already be stripped and
|
|
21
|
+
* offsets adjusted before calling this function).
|
|
21
22
|
* @param size Total byte length of `data`.
|
|
22
23
|
* @returns An object containing the three decompressed byte arrays and
|
|
23
24
|
* their respective sizes.
|
|
@@ -320,7 +320,7 @@ var TRIPLET_ENCODINGS = [
|
|
|
320
320
|
{ byteCount: 2, xBits: 4, yBits: 4, deltaX: 49, deltaY: 49, xSign: 1, ySign: -1 },
|
|
321
321
|
{ byteCount: 2, xBits: 4, yBits: 4, deltaX: 49, deltaY: 49, xSign: -1, ySign: 1 },
|
|
322
322
|
{ byteCount: 2, xBits: 4, yBits: 4, deltaX: 49, deltaY: 49, xSign: 1, ySign: 1 },
|
|
323
|
-
// Indices 84-
|
|
323
|
+
// Indices 84-119: 8-bit X + 8-bit Y (3 bytes total)
|
|
324
324
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 1, deltaY: 1, xSign: -1, ySign: -1 },
|
|
325
325
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 1, deltaY: 1, xSign: 1, ySign: -1 },
|
|
326
326
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 1, deltaY: 1, xSign: -1, ySign: 1 },
|
|
@@ -357,12 +357,12 @@ var TRIPLET_ENCODINGS = [
|
|
|
357
357
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 513, deltaY: 513, xSign: 1, ySign: -1 },
|
|
358
358
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 513, deltaY: 513, xSign: -1, ySign: 1 },
|
|
359
359
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 513, deltaY: 513, xSign: 1, ySign: 1 },
|
|
360
|
-
// Indices
|
|
360
|
+
// Indices 120-123: 12-bit X + 12-bit Y (4 bytes total)
|
|
361
361
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: -1, ySign: -1 },
|
|
362
362
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: 1, ySign: -1 },
|
|
363
363
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: -1, ySign: 1 },
|
|
364
364
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: 1, ySign: 1 },
|
|
365
|
-
// Indices
|
|
365
|
+
// Indices 124-127: 16-bit X + 16-bit Y (5 bytes total)
|
|
366
366
|
{ byteCount: 5, xBits: 16, yBits: 16, deltaX: 0, deltaY: 0, xSign: -1, ySign: -1 },
|
|
367
367
|
{ byteCount: 5, xBits: 16, yBits: 16, deltaX: 0, deltaY: 0, xSign: 1, ySign: -1 },
|
|
368
368
|
{ byteCount: 5, xBits: 16, yBits: 16, deltaX: 0, deltaY: 0, xSign: -1, ySign: 1 },
|
|
@@ -453,14 +453,15 @@ function decodePushInstructions(sIn, sOut, pushCount) {
|
|
|
453
453
|
if (pushCount === 0) {
|
|
454
454
|
return;
|
|
455
455
|
}
|
|
456
|
-
const
|
|
457
|
-
let isShort = false;
|
|
456
|
+
const data = [];
|
|
458
457
|
let remaining = pushCount;
|
|
458
|
+
let isShort = false;
|
|
459
|
+
const runValues = [];
|
|
459
460
|
function flush() {
|
|
460
|
-
if (
|
|
461
|
+
if (runValues.length === 0) {
|
|
461
462
|
return;
|
|
462
463
|
}
|
|
463
|
-
const count =
|
|
464
|
+
const count = runValues.length;
|
|
464
465
|
if (isShort) {
|
|
465
466
|
if (count < 8) {
|
|
466
467
|
sOut.writeU8(PUSHW + (count - 1));
|
|
@@ -468,7 +469,7 @@ function decodePushInstructions(sIn, sOut, pushCount) {
|
|
|
468
469
|
sOut.writeU8(NPUSHW);
|
|
469
470
|
sOut.writeU8(count);
|
|
470
471
|
}
|
|
471
|
-
for (const v of
|
|
472
|
+
for (const v of runValues) {
|
|
472
473
|
sOut.writeS16(v);
|
|
473
474
|
}
|
|
474
475
|
} else {
|
|
@@ -478,54 +479,50 @@ function decodePushInstructions(sIn, sOut, pushCount) {
|
|
|
478
479
|
sOut.writeU8(NPUSHB);
|
|
479
480
|
sOut.writeU8(count);
|
|
480
481
|
}
|
|
481
|
-
for (const v of
|
|
482
|
+
for (const v of runValues) {
|
|
482
483
|
sOut.writeU8(v & 255);
|
|
483
484
|
}
|
|
484
485
|
}
|
|
485
|
-
|
|
486
|
+
runValues.length = 0;
|
|
486
487
|
}
|
|
487
|
-
function
|
|
488
|
+
function put(v) {
|
|
489
|
+
data.push(v);
|
|
488
490
|
const needsShort = v < 0 || v > 255;
|
|
489
|
-
if (
|
|
491
|
+
if (runValues.length > 0 && needsShort !== isShort) {
|
|
490
492
|
flush();
|
|
491
493
|
}
|
|
492
|
-
if (
|
|
494
|
+
if (runValues.length === 0) {
|
|
493
495
|
isShort = needsShort;
|
|
494
496
|
}
|
|
495
|
-
|
|
496
|
-
if (
|
|
497
|
+
runValues.push(v);
|
|
498
|
+
if (runValues.length >= 255) {
|
|
497
499
|
flush();
|
|
498
500
|
}
|
|
499
501
|
}
|
|
500
502
|
while (remaining > 0) {
|
|
501
|
-
const code = sIn.
|
|
502
|
-
if (code === 251 && remaining >=
|
|
503
|
-
|
|
504
|
-
const
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
const b = read255Short(sIn);
|
|
503
|
+
const code = sIn.peekU8();
|
|
504
|
+
if (code === 251 && remaining >= 3 && data.length >= 2) {
|
|
505
|
+
sIn.readU8();
|
|
506
|
+
const prev = data[data.length - 2];
|
|
507
|
+
put(prev);
|
|
508
|
+
const val = read255Short(sIn);
|
|
509
|
+
put(val);
|
|
510
|
+
put(prev);
|
|
511
|
+
remaining -= 3;
|
|
512
|
+
} else if (code === 252 && remaining >= 5 && data.length >= 2) {
|
|
513
|
+
sIn.readU8();
|
|
514
|
+
const prev = data[data.length - 2];
|
|
515
|
+
put(prev);
|
|
515
516
|
const c = read255Short(sIn);
|
|
517
|
+
put(c);
|
|
518
|
+
put(prev);
|
|
516
519
|
const d = read255Short(sIn);
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
addValue(c);
|
|
521
|
-
addValue(a);
|
|
522
|
-
addValue(d);
|
|
523
|
-
addValue(a);
|
|
524
|
-
remaining -= 7;
|
|
520
|
+
put(d);
|
|
521
|
+
put(prev);
|
|
522
|
+
remaining -= 5;
|
|
525
523
|
} else {
|
|
526
|
-
sIn.seekRelative(-1);
|
|
527
524
|
const v = read255Short(sIn);
|
|
528
|
-
|
|
525
|
+
put(v);
|
|
529
526
|
remaining -= 1;
|
|
530
527
|
}
|
|
531
528
|
}
|
|
@@ -553,6 +550,9 @@ function makeGlyphFlags(x, y, onCurve, firstTime) {
|
|
|
553
550
|
return flags;
|
|
554
551
|
}
|
|
555
552
|
function decodeSimpleGlyph(numContours, streams, out, calcBBox, minX, minY, maxX, maxY) {
|
|
553
|
+
if (numContours === 0) {
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
556
|
const sGlyph = streams[0];
|
|
557
557
|
out.writeS16(numContours);
|
|
558
558
|
const bboxPos = out.pos;
|
|
@@ -573,13 +573,12 @@ function decodeSimpleGlyph(numContours, streams, out, calcBBox, minX, minY, maxX
|
|
|
573
573
|
}
|
|
574
574
|
let totalPoints = 0;
|
|
575
575
|
for (let c = 0; c < numContours; c++) {
|
|
576
|
-
const pointsInContour = read255UShort(sGlyph);
|
|
577
|
-
totalPoints += pointsInContour;
|
|
578
576
|
if (c === 0) {
|
|
579
|
-
|
|
580
|
-
} else {
|
|
581
|
-
out.writeU16(totalPoints - 1);
|
|
577
|
+
totalPoints = 1;
|
|
582
578
|
}
|
|
579
|
+
const pointsInContour = read255UShort(sGlyph);
|
|
580
|
+
totalPoints += pointsInContour;
|
|
581
|
+
out.writeU16(totalPoints - 1);
|
|
583
582
|
}
|
|
584
583
|
const flagBytes = new Uint8Array(totalPoints);
|
|
585
584
|
for (let i = 0; i < totalPoints; i++) {
|
|
@@ -592,7 +591,7 @@ function decodeSimpleGlyph(numContours, streams, out, calcBBox, minX, minY, maxX
|
|
|
592
591
|
let cumulativeY = 0;
|
|
593
592
|
for (let i = 0; i < totalPoints; i++) {
|
|
594
593
|
const flag = flagBytes[i];
|
|
595
|
-
onCurve[i] = flag
|
|
594
|
+
onCurve[i] = flag & 128 ? 0 : 1;
|
|
596
595
|
const enc = TRIPLET_ENCODINGS[flag & 127];
|
|
597
596
|
const extraBytes = enc.byteCount - 1;
|
|
598
597
|
const subBuf = new Uint8Array(extraBytes);
|
|
@@ -933,7 +932,10 @@ var AHuff = class _AHuff {
|
|
|
933
932
|
this.bio = bio;
|
|
934
933
|
this.range = range;
|
|
935
934
|
this.bitCount = bitsUsed(range - 1);
|
|
936
|
-
this.bitCount2 =
|
|
935
|
+
this.bitCount2 = 0;
|
|
936
|
+
if (range > 256 && range < 512) {
|
|
937
|
+
this.bitCount2 = bitsUsed(range - 256 - 1) + 1;
|
|
938
|
+
}
|
|
937
939
|
const treeSize = 2 * range;
|
|
938
940
|
this.tree = Array.from({ length: treeSize });
|
|
939
941
|
for (let i = 0; i < treeSize; i++) {
|
|
@@ -941,6 +943,7 @@ var AHuff = class _AHuff {
|
|
|
941
943
|
}
|
|
942
944
|
for (let i = 2; i < treeSize; i++) {
|
|
943
945
|
this.tree[i].up = i >> 1;
|
|
946
|
+
this.tree[i].weight = 1;
|
|
944
947
|
}
|
|
945
948
|
for (let i = 1; i < range; i++) {
|
|
946
949
|
this.tree[i].left = 2 * i;
|
|
@@ -950,7 +953,8 @@ var AHuff = class _AHuff {
|
|
|
950
953
|
for (let i = 0; i < range; i++) {
|
|
951
954
|
const leafIdx = range + i;
|
|
952
955
|
this.tree[leafIdx].code = i;
|
|
953
|
-
this.tree[leafIdx].
|
|
956
|
+
this.tree[leafIdx].left = -1;
|
|
957
|
+
this.tree[leafIdx].right = -1;
|
|
954
958
|
}
|
|
955
959
|
this.symbolIndex = Array.from({ length: range });
|
|
956
960
|
for (let i = 0; i < range; i++) {
|
|
@@ -990,15 +994,13 @@ var AHuff = class _AHuff {
|
|
|
990
994
|
*/
|
|
991
995
|
readSymbol() {
|
|
992
996
|
let a = _AHuff.ROOT;
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
}
|
|
999
|
-
}
|
|
997
|
+
let symbol;
|
|
998
|
+
do {
|
|
999
|
+
a = this.bio.inputBit() ? this.tree[a].right : this.tree[a].left;
|
|
1000
|
+
symbol = this.tree[a].code;
|
|
1001
|
+
} while (symbol < 0);
|
|
1000
1002
|
this.updateWeight(a);
|
|
1001
|
-
return
|
|
1003
|
+
return symbol;
|
|
1002
1004
|
}
|
|
1003
1005
|
// --------------------------------------------------------------------
|
|
1004
1006
|
// Private helpers
|
|
@@ -1022,17 +1024,19 @@ var AHuff = class _AHuff {
|
|
|
1022
1024
|
updateWeight(a) {
|
|
1023
1025
|
const tree = this.tree;
|
|
1024
1026
|
for (; a !== _AHuff.ROOT; a = tree[a].up) {
|
|
1027
|
+
const weightA = tree[a].weight;
|
|
1025
1028
|
let b = a - 1;
|
|
1026
|
-
if (
|
|
1027
|
-
|
|
1029
|
+
if (tree[b].weight === weightA) {
|
|
1030
|
+
do {
|
|
1028
1031
|
b--;
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1032
|
+
} while (tree[b].weight === weightA);
|
|
1033
|
+
b++;
|
|
1034
|
+
if (b > _AHuff.ROOT) {
|
|
1031
1035
|
this.swapNodes(a, b);
|
|
1032
1036
|
a = b;
|
|
1033
1037
|
}
|
|
1034
1038
|
}
|
|
1035
|
-
tree[a].weight
|
|
1039
|
+
tree[a].weight = weightA + 1;
|
|
1036
1040
|
}
|
|
1037
1041
|
tree[_AHuff.ROOT].weight++;
|
|
1038
1042
|
}
|
|
@@ -1052,38 +1056,26 @@ var AHuff = class _AHuff {
|
|
|
1052
1056
|
*/
|
|
1053
1057
|
swapNodes(a, b) {
|
|
1054
1058
|
const tree = this.tree;
|
|
1055
|
-
const
|
|
1056
|
-
const
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
na.weight = nb.weight;
|
|
1069
|
-
nb.weight = tmp;
|
|
1070
|
-
if (na.left) {
|
|
1071
|
-
tree[na.left].up = a;
|
|
1072
|
-
}
|
|
1073
|
-
if (na.right) {
|
|
1074
|
-
tree[na.right].up = a;
|
|
1075
|
-
}
|
|
1076
|
-
if (nb.left) {
|
|
1077
|
-
tree[nb.left].up = b;
|
|
1078
|
-
}
|
|
1079
|
-
if (nb.right) {
|
|
1080
|
-
tree[nb.right].up = b;
|
|
1081
|
-
}
|
|
1082
|
-
if (na.code >= 0) {
|
|
1083
|
-
this.symbolIndex[na.code] = a;
|
|
1059
|
+
const upa = tree[a].up;
|
|
1060
|
+
const upb = tree[b].up;
|
|
1061
|
+
const tmp = tree[a];
|
|
1062
|
+
tree[a] = tree[b];
|
|
1063
|
+
tree[b] = tmp;
|
|
1064
|
+
tree[a].up = upa;
|
|
1065
|
+
tree[b].up = upb;
|
|
1066
|
+
let code = tree[a].code;
|
|
1067
|
+
if (code < 0) {
|
|
1068
|
+
tree[tree[a].left].up = a;
|
|
1069
|
+
tree[tree[a].right].up = a;
|
|
1070
|
+
} else {
|
|
1071
|
+
this.symbolIndex[code] = a;
|
|
1084
1072
|
}
|
|
1085
|
-
|
|
1086
|
-
|
|
1073
|
+
code = tree[b].code;
|
|
1074
|
+
if (code < 0) {
|
|
1075
|
+
tree[tree[b].left].up = b;
|
|
1076
|
+
tree[tree[b].right].up = b;
|
|
1077
|
+
} else {
|
|
1078
|
+
this.symbolIndex[code] = b;
|
|
1087
1079
|
}
|
|
1088
1080
|
}
|
|
1089
1081
|
/**
|
|
@@ -1470,12 +1462,12 @@ function unpackMtx(data, size) {
|
|
|
1470
1462
|
const offset2 = data[4] << 16 | data[5] << 8 | data[6];
|
|
1471
1463
|
const offset3 = data[7] << 16 | data[8] << 8 | data[9];
|
|
1472
1464
|
const offsets = [10, offset2, offset3];
|
|
1473
|
-
const
|
|
1465
|
+
const blockSizes = [offset2 - 10, offset3 - offset2, size - offset3];
|
|
1474
1466
|
const streams = [];
|
|
1475
1467
|
const decompressedSizes = [];
|
|
1476
1468
|
for (let i = 0; i < 3; i++) {
|
|
1477
1469
|
const block = data.subarray(offsets[i]);
|
|
1478
|
-
const decompressed = lzcompDecompress(block,
|
|
1470
|
+
const decompressed = lzcompDecompress(block, blockSizes[i], versionMagic);
|
|
1479
1471
|
streams.push(decompressed);
|
|
1480
1472
|
decompressedSizes.push(decompressed.length);
|
|
1481
1473
|
}
|
|
@@ -318,7 +318,7 @@ var TRIPLET_ENCODINGS = [
|
|
|
318
318
|
{ byteCount: 2, xBits: 4, yBits: 4, deltaX: 49, deltaY: 49, xSign: 1, ySign: -1 },
|
|
319
319
|
{ byteCount: 2, xBits: 4, yBits: 4, deltaX: 49, deltaY: 49, xSign: -1, ySign: 1 },
|
|
320
320
|
{ byteCount: 2, xBits: 4, yBits: 4, deltaX: 49, deltaY: 49, xSign: 1, ySign: 1 },
|
|
321
|
-
// Indices 84-
|
|
321
|
+
// Indices 84-119: 8-bit X + 8-bit Y (3 bytes total)
|
|
322
322
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 1, deltaY: 1, xSign: -1, ySign: -1 },
|
|
323
323
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 1, deltaY: 1, xSign: 1, ySign: -1 },
|
|
324
324
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 1, deltaY: 1, xSign: -1, ySign: 1 },
|
|
@@ -355,12 +355,12 @@ var TRIPLET_ENCODINGS = [
|
|
|
355
355
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 513, deltaY: 513, xSign: 1, ySign: -1 },
|
|
356
356
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 513, deltaY: 513, xSign: -1, ySign: 1 },
|
|
357
357
|
{ byteCount: 3, xBits: 8, yBits: 8, deltaX: 513, deltaY: 513, xSign: 1, ySign: 1 },
|
|
358
|
-
// Indices
|
|
358
|
+
// Indices 120-123: 12-bit X + 12-bit Y (4 bytes total)
|
|
359
359
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: -1, ySign: -1 },
|
|
360
360
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: 1, ySign: -1 },
|
|
361
361
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: -1, ySign: 1 },
|
|
362
362
|
{ byteCount: 4, xBits: 12, yBits: 12, deltaX: 0, deltaY: 0, xSign: 1, ySign: 1 },
|
|
363
|
-
// Indices
|
|
363
|
+
// Indices 124-127: 16-bit X + 16-bit Y (5 bytes total)
|
|
364
364
|
{ byteCount: 5, xBits: 16, yBits: 16, deltaX: 0, deltaY: 0, xSign: -1, ySign: -1 },
|
|
365
365
|
{ byteCount: 5, xBits: 16, yBits: 16, deltaX: 0, deltaY: 0, xSign: 1, ySign: -1 },
|
|
366
366
|
{ byteCount: 5, xBits: 16, yBits: 16, deltaX: 0, deltaY: 0, xSign: -1, ySign: 1 },
|
|
@@ -451,14 +451,15 @@ function decodePushInstructions(sIn, sOut, pushCount) {
|
|
|
451
451
|
if (pushCount === 0) {
|
|
452
452
|
return;
|
|
453
453
|
}
|
|
454
|
-
const
|
|
455
|
-
let isShort = false;
|
|
454
|
+
const data = [];
|
|
456
455
|
let remaining = pushCount;
|
|
456
|
+
let isShort = false;
|
|
457
|
+
const runValues = [];
|
|
457
458
|
function flush() {
|
|
458
|
-
if (
|
|
459
|
+
if (runValues.length === 0) {
|
|
459
460
|
return;
|
|
460
461
|
}
|
|
461
|
-
const count =
|
|
462
|
+
const count = runValues.length;
|
|
462
463
|
if (isShort) {
|
|
463
464
|
if (count < 8) {
|
|
464
465
|
sOut.writeU8(PUSHW + (count - 1));
|
|
@@ -466,7 +467,7 @@ function decodePushInstructions(sIn, sOut, pushCount) {
|
|
|
466
467
|
sOut.writeU8(NPUSHW);
|
|
467
468
|
sOut.writeU8(count);
|
|
468
469
|
}
|
|
469
|
-
for (const v of
|
|
470
|
+
for (const v of runValues) {
|
|
470
471
|
sOut.writeS16(v);
|
|
471
472
|
}
|
|
472
473
|
} else {
|
|
@@ -476,54 +477,50 @@ function decodePushInstructions(sIn, sOut, pushCount) {
|
|
|
476
477
|
sOut.writeU8(NPUSHB);
|
|
477
478
|
sOut.writeU8(count);
|
|
478
479
|
}
|
|
479
|
-
for (const v of
|
|
480
|
+
for (const v of runValues) {
|
|
480
481
|
sOut.writeU8(v & 255);
|
|
481
482
|
}
|
|
482
483
|
}
|
|
483
|
-
|
|
484
|
+
runValues.length = 0;
|
|
484
485
|
}
|
|
485
|
-
function
|
|
486
|
+
function put(v) {
|
|
487
|
+
data.push(v);
|
|
486
488
|
const needsShort = v < 0 || v > 255;
|
|
487
|
-
if (
|
|
489
|
+
if (runValues.length > 0 && needsShort !== isShort) {
|
|
488
490
|
flush();
|
|
489
491
|
}
|
|
490
|
-
if (
|
|
492
|
+
if (runValues.length === 0) {
|
|
491
493
|
isShort = needsShort;
|
|
492
494
|
}
|
|
493
|
-
|
|
494
|
-
if (
|
|
495
|
+
runValues.push(v);
|
|
496
|
+
if (runValues.length >= 255) {
|
|
495
497
|
flush();
|
|
496
498
|
}
|
|
497
499
|
}
|
|
498
500
|
while (remaining > 0) {
|
|
499
|
-
const code = sIn.
|
|
500
|
-
if (code === 251 && remaining >=
|
|
501
|
-
|
|
502
|
-
const
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
const b = read255Short(sIn);
|
|
501
|
+
const code = sIn.peekU8();
|
|
502
|
+
if (code === 251 && remaining >= 3 && data.length >= 2) {
|
|
503
|
+
sIn.readU8();
|
|
504
|
+
const prev = data[data.length - 2];
|
|
505
|
+
put(prev);
|
|
506
|
+
const val = read255Short(sIn);
|
|
507
|
+
put(val);
|
|
508
|
+
put(prev);
|
|
509
|
+
remaining -= 3;
|
|
510
|
+
} else if (code === 252 && remaining >= 5 && data.length >= 2) {
|
|
511
|
+
sIn.readU8();
|
|
512
|
+
const prev = data[data.length - 2];
|
|
513
|
+
put(prev);
|
|
513
514
|
const c = read255Short(sIn);
|
|
515
|
+
put(c);
|
|
516
|
+
put(prev);
|
|
514
517
|
const d = read255Short(sIn);
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
addValue(c);
|
|
519
|
-
addValue(a);
|
|
520
|
-
addValue(d);
|
|
521
|
-
addValue(a);
|
|
522
|
-
remaining -= 7;
|
|
518
|
+
put(d);
|
|
519
|
+
put(prev);
|
|
520
|
+
remaining -= 5;
|
|
523
521
|
} else {
|
|
524
|
-
sIn.seekRelative(-1);
|
|
525
522
|
const v = read255Short(sIn);
|
|
526
|
-
|
|
523
|
+
put(v);
|
|
527
524
|
remaining -= 1;
|
|
528
525
|
}
|
|
529
526
|
}
|
|
@@ -551,6 +548,9 @@ function makeGlyphFlags(x, y, onCurve, firstTime) {
|
|
|
551
548
|
return flags;
|
|
552
549
|
}
|
|
553
550
|
function decodeSimpleGlyph(numContours, streams, out, calcBBox, minX, minY, maxX, maxY) {
|
|
551
|
+
if (numContours === 0) {
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
554
|
const sGlyph = streams[0];
|
|
555
555
|
out.writeS16(numContours);
|
|
556
556
|
const bboxPos = out.pos;
|
|
@@ -571,13 +571,12 @@ function decodeSimpleGlyph(numContours, streams, out, calcBBox, minX, minY, maxX
|
|
|
571
571
|
}
|
|
572
572
|
let totalPoints = 0;
|
|
573
573
|
for (let c = 0; c < numContours; c++) {
|
|
574
|
-
const pointsInContour = read255UShort(sGlyph);
|
|
575
|
-
totalPoints += pointsInContour;
|
|
576
574
|
if (c === 0) {
|
|
577
|
-
|
|
578
|
-
} else {
|
|
579
|
-
out.writeU16(totalPoints - 1);
|
|
575
|
+
totalPoints = 1;
|
|
580
576
|
}
|
|
577
|
+
const pointsInContour = read255UShort(sGlyph);
|
|
578
|
+
totalPoints += pointsInContour;
|
|
579
|
+
out.writeU16(totalPoints - 1);
|
|
581
580
|
}
|
|
582
581
|
const flagBytes = new Uint8Array(totalPoints);
|
|
583
582
|
for (let i = 0; i < totalPoints; i++) {
|
|
@@ -590,7 +589,7 @@ function decodeSimpleGlyph(numContours, streams, out, calcBBox, minX, minY, maxX
|
|
|
590
589
|
let cumulativeY = 0;
|
|
591
590
|
for (let i = 0; i < totalPoints; i++) {
|
|
592
591
|
const flag = flagBytes[i];
|
|
593
|
-
onCurve[i] = flag
|
|
592
|
+
onCurve[i] = flag & 128 ? 0 : 1;
|
|
594
593
|
const enc = TRIPLET_ENCODINGS[flag & 127];
|
|
595
594
|
const extraBytes = enc.byteCount - 1;
|
|
596
595
|
const subBuf = new Uint8Array(extraBytes);
|
|
@@ -931,7 +930,10 @@ var AHuff = class _AHuff {
|
|
|
931
930
|
this.bio = bio;
|
|
932
931
|
this.range = range;
|
|
933
932
|
this.bitCount = bitsUsed(range - 1);
|
|
934
|
-
this.bitCount2 =
|
|
933
|
+
this.bitCount2 = 0;
|
|
934
|
+
if (range > 256 && range < 512) {
|
|
935
|
+
this.bitCount2 = bitsUsed(range - 256 - 1) + 1;
|
|
936
|
+
}
|
|
935
937
|
const treeSize = 2 * range;
|
|
936
938
|
this.tree = Array.from({ length: treeSize });
|
|
937
939
|
for (let i = 0; i < treeSize; i++) {
|
|
@@ -939,6 +941,7 @@ var AHuff = class _AHuff {
|
|
|
939
941
|
}
|
|
940
942
|
for (let i = 2; i < treeSize; i++) {
|
|
941
943
|
this.tree[i].up = i >> 1;
|
|
944
|
+
this.tree[i].weight = 1;
|
|
942
945
|
}
|
|
943
946
|
for (let i = 1; i < range; i++) {
|
|
944
947
|
this.tree[i].left = 2 * i;
|
|
@@ -948,7 +951,8 @@ var AHuff = class _AHuff {
|
|
|
948
951
|
for (let i = 0; i < range; i++) {
|
|
949
952
|
const leafIdx = range + i;
|
|
950
953
|
this.tree[leafIdx].code = i;
|
|
951
|
-
this.tree[leafIdx].
|
|
954
|
+
this.tree[leafIdx].left = -1;
|
|
955
|
+
this.tree[leafIdx].right = -1;
|
|
952
956
|
}
|
|
953
957
|
this.symbolIndex = Array.from({ length: range });
|
|
954
958
|
for (let i = 0; i < range; i++) {
|
|
@@ -988,15 +992,13 @@ var AHuff = class _AHuff {
|
|
|
988
992
|
*/
|
|
989
993
|
readSymbol() {
|
|
990
994
|
let a = _AHuff.ROOT;
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
}
|
|
997
|
-
}
|
|
995
|
+
let symbol;
|
|
996
|
+
do {
|
|
997
|
+
a = this.bio.inputBit() ? this.tree[a].right : this.tree[a].left;
|
|
998
|
+
symbol = this.tree[a].code;
|
|
999
|
+
} while (symbol < 0);
|
|
998
1000
|
this.updateWeight(a);
|
|
999
|
-
return
|
|
1001
|
+
return symbol;
|
|
1000
1002
|
}
|
|
1001
1003
|
// --------------------------------------------------------------------
|
|
1002
1004
|
// Private helpers
|
|
@@ -1020,17 +1022,19 @@ var AHuff = class _AHuff {
|
|
|
1020
1022
|
updateWeight(a) {
|
|
1021
1023
|
const tree = this.tree;
|
|
1022
1024
|
for (; a !== _AHuff.ROOT; a = tree[a].up) {
|
|
1025
|
+
const weightA = tree[a].weight;
|
|
1023
1026
|
let b = a - 1;
|
|
1024
|
-
if (
|
|
1025
|
-
|
|
1027
|
+
if (tree[b].weight === weightA) {
|
|
1028
|
+
do {
|
|
1026
1029
|
b--;
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1030
|
+
} while (tree[b].weight === weightA);
|
|
1031
|
+
b++;
|
|
1032
|
+
if (b > _AHuff.ROOT) {
|
|
1029
1033
|
this.swapNodes(a, b);
|
|
1030
1034
|
a = b;
|
|
1031
1035
|
}
|
|
1032
1036
|
}
|
|
1033
|
-
tree[a].weight
|
|
1037
|
+
tree[a].weight = weightA + 1;
|
|
1034
1038
|
}
|
|
1035
1039
|
tree[_AHuff.ROOT].weight++;
|
|
1036
1040
|
}
|
|
@@ -1050,38 +1054,26 @@ var AHuff = class _AHuff {
|
|
|
1050
1054
|
*/
|
|
1051
1055
|
swapNodes(a, b) {
|
|
1052
1056
|
const tree = this.tree;
|
|
1053
|
-
const
|
|
1054
|
-
const
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
na.weight = nb.weight;
|
|
1067
|
-
nb.weight = tmp;
|
|
1068
|
-
if (na.left) {
|
|
1069
|
-
tree[na.left].up = a;
|
|
1070
|
-
}
|
|
1071
|
-
if (na.right) {
|
|
1072
|
-
tree[na.right].up = a;
|
|
1073
|
-
}
|
|
1074
|
-
if (nb.left) {
|
|
1075
|
-
tree[nb.left].up = b;
|
|
1076
|
-
}
|
|
1077
|
-
if (nb.right) {
|
|
1078
|
-
tree[nb.right].up = b;
|
|
1079
|
-
}
|
|
1080
|
-
if (na.code >= 0) {
|
|
1081
|
-
this.symbolIndex[na.code] = a;
|
|
1057
|
+
const upa = tree[a].up;
|
|
1058
|
+
const upb = tree[b].up;
|
|
1059
|
+
const tmp = tree[a];
|
|
1060
|
+
tree[a] = tree[b];
|
|
1061
|
+
tree[b] = tmp;
|
|
1062
|
+
tree[a].up = upa;
|
|
1063
|
+
tree[b].up = upb;
|
|
1064
|
+
let code = tree[a].code;
|
|
1065
|
+
if (code < 0) {
|
|
1066
|
+
tree[tree[a].left].up = a;
|
|
1067
|
+
tree[tree[a].right].up = a;
|
|
1068
|
+
} else {
|
|
1069
|
+
this.symbolIndex[code] = a;
|
|
1082
1070
|
}
|
|
1083
|
-
|
|
1084
|
-
|
|
1071
|
+
code = tree[b].code;
|
|
1072
|
+
if (code < 0) {
|
|
1073
|
+
tree[tree[b].left].up = b;
|
|
1074
|
+
tree[tree[b].right].up = b;
|
|
1075
|
+
} else {
|
|
1076
|
+
this.symbolIndex[code] = b;
|
|
1085
1077
|
}
|
|
1086
1078
|
}
|
|
1087
1079
|
/**
|
|
@@ -1468,12 +1460,12 @@ function unpackMtx(data, size) {
|
|
|
1468
1460
|
const offset2 = data[4] << 16 | data[5] << 8 | data[6];
|
|
1469
1461
|
const offset3 = data[7] << 16 | data[8] << 8 | data[9];
|
|
1470
1462
|
const offsets = [10, offset2, offset3];
|
|
1471
|
-
const
|
|
1463
|
+
const blockSizes = [offset2 - 10, offset3 - offset2, size - offset3];
|
|
1472
1464
|
const streams = [];
|
|
1473
1465
|
const decompressedSizes = [];
|
|
1474
1466
|
for (let i = 0; i < 3; i++) {
|
|
1475
1467
|
const block = data.subarray(offsets[i]);
|
|
1476
|
-
const decompressed = lzcompDecompress(block,
|
|
1468
|
+
const decompressed = lzcompDecompress(block, blockSizes[i], versionMagic);
|
|
1477
1469
|
streams.push(decompressed);
|
|
1478
1470
|
decompressedSizes.push(decompressed.length);
|
|
1479
1471
|
}
|