pptx-react-viewer 1.1.1 → 1.1.3

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.
Files changed (35) hide show
  1. package/dist/{PowerPointViewer-DtLlYf0r.d.mts → PowerPointViewer-CX0a7wz_.d.mts} +2 -0
  2. package/dist/{PowerPointViewer-DtLlYf0r.d.ts → PowerPointViewer-CX0a7wz_.d.ts} +2 -0
  3. package/dist/index.d.mts +2 -2
  4. package/dist/index.d.ts +2 -2
  5. package/dist/index.js +373 -64
  6. package/dist/index.mjs +373 -64
  7. package/dist/pptx-viewer.css +1 -1
  8. package/dist/viewer/index.d.mts +11 -3
  9. package/dist/viewer/index.d.ts +11 -3
  10. package/dist/viewer/index.js +373 -64
  11. package/dist/viewer/index.mjs +373 -64
  12. package/node_modules/emf-converter/package.json +1 -1
  13. package/node_modules/mtx-decompressor/dist/index.d.mts +2 -1
  14. package/node_modules/mtx-decompressor/dist/index.d.ts +2 -1
  15. package/node_modules/mtx-decompressor/dist/index.js +85 -93
  16. package/node_modules/mtx-decompressor/dist/index.mjs +85 -93
  17. package/node_modules/mtx-decompressor/package.json +1 -1
  18. package/node_modules/pptx-viewer-core/dist/{SvgExporter-CPr1npgo.d.ts → SvgExporter-BMjoxMDV.d.ts} +1 -1
  19. package/node_modules/pptx-viewer-core/dist/{SvgExporter-B4-1_Hjp.d.mts → SvgExporter-z6AbXRQg.d.mts} +1 -1
  20. package/node_modules/pptx-viewer-core/dist/cli/index.d.mts +2 -2
  21. package/node_modules/pptx-viewer-core/dist/cli/index.d.ts +2 -2
  22. package/node_modules/pptx-viewer-core/dist/cli/index.js +504 -253
  23. package/node_modules/pptx-viewer-core/dist/cli/index.mjs +504 -253
  24. package/node_modules/pptx-viewer-core/dist/converter/index.d.mts +3 -3
  25. package/node_modules/pptx-viewer-core/dist/converter/index.d.ts +3 -3
  26. package/node_modules/pptx-viewer-core/dist/index.d.mts +318 -6
  27. package/node_modules/pptx-viewer-core/dist/index.d.ts +318 -6
  28. package/node_modules/pptx-viewer-core/dist/index.js +1474 -253
  29. package/node_modules/pptx-viewer-core/dist/index.mjs +1450 -254
  30. package/node_modules/pptx-viewer-core/dist/{presentation-DgkIYhXo.d.mts → presentation-CchuDGfU.d.mts} +17 -1
  31. package/node_modules/pptx-viewer-core/dist/{presentation-DgkIYhXo.d.ts → presentation-CchuDGfU.d.ts} +17 -1
  32. package/node_modules/pptx-viewer-core/dist/{text-operations-dYKZp3zE.d.mts → text-operations-CeukUztU.d.mts} +1 -1
  33. package/node_modules/pptx-viewer-core/dist/{text-operations-B6U6XxWt.d.ts → text-operations-e7JxgI5l.d.ts} +1 -1
  34. package/node_modules/pptx-viewer-core/package.json +1 -1
  35. package/package.json +4 -4
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emf-converter",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Convert EMF/WMF metafile binaries to PNG data URLs using Canvas",
5
5
  "keywords": [
6
6
  "canvas",
@@ -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 (possibly decrypted) MTX data.
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 (possibly decrypted) MTX data.
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-107: 8-bit X + 8-bit Y (3 bytes total)
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 108-111: 12-bit X + 12-bit Y (4 bytes total)
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 112-115: 16-bit X + 16-bit Y (5 bytes total)
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 values = [];
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 (values.length === 0) {
461
+ if (runValues.length === 0) {
461
462
  return;
462
463
  }
463
- const count = values.length;
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 values) {
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 values) {
482
+ for (const v of runValues) {
482
483
  sOut.writeU8(v & 255);
483
484
  }
484
485
  }
485
- values.length = 0;
486
+ runValues.length = 0;
486
487
  }
487
- function addValue(v) {
488
+ function put(v) {
489
+ data.push(v);
488
490
  const needsShort = v < 0 || v > 255;
489
- if (values.length > 0 && needsShort !== isShort) {
491
+ if (runValues.length > 0 && needsShort !== isShort) {
490
492
  flush();
491
493
  }
492
- if (values.length === 0) {
494
+ if (runValues.length === 0) {
493
495
  isShort = needsShort;
494
496
  }
495
- values.push(v);
496
- if (values.length >= 255) {
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.readU8();
502
- if (code === 251 && remaining >= 4) {
503
- const a = read255Short(sIn);
504
- const b = read255Short(sIn);
505
- const c = read255Short(sIn);
506
- addValue(a);
507
- addValue(b);
508
- addValue(a);
509
- addValue(c);
510
- addValue(a);
511
- remaining -= 5;
512
- } else if (code === 252 && remaining >= 6) {
513
- const a = read255Short(sIn);
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
- addValue(a);
518
- addValue(b);
519
- addValue(a);
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
- addValue(v);
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
- out.writeU16(pointsInContour - 1);
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 >> 7;
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 = this.bitCount > 8 ? this.bitCount - 8 : 0;
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].weight = 1;
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
- while (this.tree[a].code < 0) {
994
- if (this.bio.inputBit()) {
995
- a = this.tree[a].right;
996
- } else {
997
- a = this.tree[a].left;
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 this.tree[a].code;
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 (b > 0 && tree[b].weight === tree[a].weight) {
1027
- while (b > _AHuff.ROOT && tree[b - 1].weight === tree[a].weight) {
1029
+ if (tree[b].weight === weightA) {
1030
+ do {
1028
1031
  b--;
1029
- }
1030
- if (b > _AHuff.ROOT && b !== a) {
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 na = tree[a];
1056
- const nb = tree[b];
1057
- let tmp;
1058
- tmp = na.left;
1059
- na.left = nb.left;
1060
- nb.left = tmp;
1061
- tmp = na.right;
1062
- na.right = nb.right;
1063
- nb.right = tmp;
1064
- tmp = na.code;
1065
- na.code = nb.code;
1066
- nb.code = tmp;
1067
- tmp = na.weight;
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
- if (nb.code >= 0) {
1086
- this.symbolIndex[nb.code] = b;
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 sizes = [offset2 - 10, offset3 - offset2, size - offset3];
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, sizes[i], versionMagic);
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-107: 8-bit X + 8-bit Y (3 bytes total)
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 108-111: 12-bit X + 12-bit Y (4 bytes total)
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 112-115: 16-bit X + 16-bit Y (5 bytes total)
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 values = [];
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 (values.length === 0) {
459
+ if (runValues.length === 0) {
459
460
  return;
460
461
  }
461
- const count = values.length;
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 values) {
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 values) {
480
+ for (const v of runValues) {
480
481
  sOut.writeU8(v & 255);
481
482
  }
482
483
  }
483
- values.length = 0;
484
+ runValues.length = 0;
484
485
  }
485
- function addValue(v) {
486
+ function put(v) {
487
+ data.push(v);
486
488
  const needsShort = v < 0 || v > 255;
487
- if (values.length > 0 && needsShort !== isShort) {
489
+ if (runValues.length > 0 && needsShort !== isShort) {
488
490
  flush();
489
491
  }
490
- if (values.length === 0) {
492
+ if (runValues.length === 0) {
491
493
  isShort = needsShort;
492
494
  }
493
- values.push(v);
494
- if (values.length >= 255) {
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.readU8();
500
- if (code === 251 && remaining >= 4) {
501
- const a = read255Short(sIn);
502
- const b = read255Short(sIn);
503
- const c = read255Short(sIn);
504
- addValue(a);
505
- addValue(b);
506
- addValue(a);
507
- addValue(c);
508
- addValue(a);
509
- remaining -= 5;
510
- } else if (code === 252 && remaining >= 6) {
511
- const a = read255Short(sIn);
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
- addValue(a);
516
- addValue(b);
517
- addValue(a);
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
- addValue(v);
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
- out.writeU16(pointsInContour - 1);
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 >> 7;
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 = this.bitCount > 8 ? this.bitCount - 8 : 0;
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].weight = 1;
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
- while (this.tree[a].code < 0) {
992
- if (this.bio.inputBit()) {
993
- a = this.tree[a].right;
994
- } else {
995
- a = this.tree[a].left;
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 this.tree[a].code;
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 (b > 0 && tree[b].weight === tree[a].weight) {
1025
- while (b > _AHuff.ROOT && tree[b - 1].weight === tree[a].weight) {
1027
+ if (tree[b].weight === weightA) {
1028
+ do {
1026
1029
  b--;
1027
- }
1028
- if (b > _AHuff.ROOT && b !== a) {
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 na = tree[a];
1054
- const nb = tree[b];
1055
- let tmp;
1056
- tmp = na.left;
1057
- na.left = nb.left;
1058
- nb.left = tmp;
1059
- tmp = na.right;
1060
- na.right = nb.right;
1061
- nb.right = tmp;
1062
- tmp = na.code;
1063
- na.code = nb.code;
1064
- nb.code = tmp;
1065
- tmp = na.weight;
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
- if (nb.code >= 0) {
1084
- this.symbolIndex[nb.code] = b;
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 sizes = [offset2 - 10, offset3 - offset2, size - offset3];
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, sizes[i], versionMagic);
1468
+ const decompressed = lzcompDecompress(block, blockSizes[i], versionMagic);
1477
1469
  streams.push(decompressed);
1478
1470
  decompressedSizes.push(decompressed.length);
1479
1471
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mtx-decompressor",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "MicroType Express (MTX) font decompressor — extracts TTF/OTF from compressed EOT containers.",
5
5
  "homepage": "https://github.com/ChristopherVR/pptx-viewer",
6
6
  "bugs": {