@cantoo/fontkit 2.0.5 → 2.0.7

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 (153) hide show
  1. package/dist/browser-module.d.ts +239 -0
  2. package/dist/browser-module.mjs +4423 -1117
  3. package/dist/browser-module.mjs.map +1 -1
  4. package/dist/browser.cjs +4424 -1117
  5. package/dist/browser.cjs.map +1 -1
  6. package/dist/browser.d.ts +239 -0
  7. package/dist/fontkit.umd.d.ts +239 -0
  8. package/dist/fontkit.umd.js +22076 -0
  9. package/dist/fontkit.umd.js.map +7 -0
  10. package/dist/index.d.ts +239 -0
  11. package/dist/main.cjs +4424 -1117
  12. package/dist/main.cjs.map +1 -1
  13. package/dist/main.d.ts +239 -0
  14. package/dist/module.d.ts +239 -0
  15. package/dist/module.mjs +4423 -1117
  16. package/dist/module.mjs.map +1 -1
  17. package/package.json +22 -5
  18. package/src/CmapProcessor.js +59 -20
  19. package/src/DFont.js +114 -14
  20. package/src/TTFFont.js +259 -57
  21. package/src/TrueTypeCollection.js +54 -10
  22. package/src/WOFF2Font.js +128 -16
  23. package/src/WOFFFont.js +45 -8
  24. package/src/aat/AATFeatureMap.js +62 -18
  25. package/src/aat/AATLayoutEngine.js +33 -1
  26. package/src/aat/AATLookupTable.js +22 -4
  27. package/src/aat/AATMorxProcessor.js +189 -52
  28. package/src/aat/AATStateMachine.js +32 -0
  29. package/src/base.js +19 -0
  30. package/src/cff/CFFCharsets.js +3 -0
  31. package/src/cff/CFFDict.js +79 -9
  32. package/src/cff/CFFEncodings.js +2 -0
  33. package/src/cff/CFFFont.js +119 -23
  34. package/src/cff/CFFIndex.js +62 -5
  35. package/src/cff/CFFOperand.js +52 -17
  36. package/src/cff/CFFPointer.js +41 -2
  37. package/src/cff/CFFPrivateDict.js +14 -4
  38. package/src/cff/CFFStandardStrings.js +1 -0
  39. package/src/cff/CFFTop.js +103 -10
  40. package/src/decorators.js +32 -13
  41. package/src/encodings.js +22 -5
  42. package/src/fs.js +10 -0
  43. package/src/glyph/BBox.js +14 -0
  44. package/src/glyph/CFFGlyph.js +290 -148
  45. package/src/glyph/COLRGlyph.js +38 -3
  46. package/src/glyph/Glyph.js +68 -9
  47. package/src/glyph/GlyphVariationProcessor.js +135 -34
  48. package/src/glyph/Path.js +107 -20
  49. package/src/glyph/SBIXGlyph.js +57 -8
  50. package/src/glyph/StandardNames.js +1 -0
  51. package/src/glyph/TTFGlyph.js +176 -29
  52. package/src/glyph/TTFGlyphEncoder.js +32 -0
  53. package/src/glyph/WOFF2Glyph.js +23 -4
  54. package/src/layout/GlyphPosition.js +6 -0
  55. package/src/layout/GlyphRun.js +25 -7
  56. package/src/layout/KernProcessor.js +62 -3
  57. package/src/layout/LayoutEngine.js +86 -12
  58. package/src/layout/Script.js +27 -1
  59. package/src/layout/UnicodeLayoutEngine.js +29 -4
  60. package/src/opentype/GPOSProcessor.js +156 -45
  61. package/src/opentype/GSUBProcessor.js +92 -33
  62. package/src/opentype/GlyphInfo.js +52 -4
  63. package/src/opentype/GlyphIterator.js +51 -2
  64. package/src/opentype/OTLayoutEngine.js +66 -8
  65. package/src/opentype/OTProcessor.js +283 -70
  66. package/src/opentype/ShapingPlan.js +51 -3
  67. package/src/opentype/shapers/ArabicShaper.js +19 -0
  68. package/src/opentype/shapers/DefaultShaper.js +51 -7
  69. package/src/opentype/shapers/HangulShaper.js +85 -7
  70. package/src/opentype/shapers/HebrewShaper.js +45 -11
  71. package/src/opentype/shapers/IndicShaper.js +141 -26
  72. package/src/opentype/shapers/ThaiShaper.js +35 -4
  73. package/src/opentype/shapers/UniversalShaper.js +83 -17
  74. package/src/opentype/shapers/index.js +15 -2
  75. package/src/packages/unicode-properties/data-trie.js +1 -0
  76. package/src/packages/unicode-properties/data.js +12 -0
  77. package/src/packages/unicode-properties/dist/index.cjs +22 -9
  78. package/src/packages/unicode-properties/dist/index.cjs.map +2 -2
  79. package/src/packages/unicode-properties/dist/index.mjs +21 -9
  80. package/src/packages/unicode-properties/dist/index.mjs.map +2 -2
  81. package/src/packages/unicode-properties/index.js +65 -0
  82. package/src/packages/unicode-properties/package.json +1 -1
  83. package/src/packages/unicode-trie/builder.js +128 -7
  84. package/src/packages/unicode-trie/dist/builder.cjs +129 -16
  85. package/src/packages/unicode-trie/dist/builder.cjs.map +2 -2
  86. package/src/packages/unicode-trie/dist/builder.mjs +128 -16
  87. package/src/packages/unicode-trie/dist/builder.mjs.map +2 -2
  88. package/src/packages/unicode-trie/dist/index.cjs +22 -9
  89. package/src/packages/unicode-trie/dist/index.cjs.map +2 -2
  90. package/src/packages/unicode-trie/dist/index.mjs +21 -9
  91. package/src/packages/unicode-trie/dist/index.mjs.map +2 -2
  92. package/src/packages/unicode-trie/index.js +62 -10
  93. package/src/packages/unicode-trie/package.json +1 -1
  94. package/src/packages/unicode-trie/swap.js +13 -0
  95. package/src/subset/CFFSubset.js +112 -22
  96. package/src/subset/Subset.js +21 -1
  97. package/src/subset/TTFSubset.js +79 -36
  98. package/src/tables/BASE.js +1 -0
  99. package/src/tables/COLR.js +1 -0
  100. package/src/tables/CPAL.js +1 -0
  101. package/src/tables/DSIG.js +1 -0
  102. package/src/tables/EBDT.js +10 -3
  103. package/src/tables/EBLC.js +67 -7
  104. package/src/tables/GDEF.js +1 -0
  105. package/src/tables/GPOS.js +79 -16
  106. package/src/tables/GSUB.js +14 -3
  107. package/src/tables/HVAR.js +51 -5
  108. package/src/tables/JSTF.js +3 -2
  109. package/src/tables/LTSH.js +1 -0
  110. package/src/tables/OS2.js +1 -0
  111. package/src/tables/PCLT.js +1 -0
  112. package/src/tables/STAT.js +46 -6
  113. package/src/tables/VDMX.js +1 -0
  114. package/src/tables/VORG.js +1 -0
  115. package/src/tables/WOFF2Directory.js +56 -8
  116. package/src/tables/WOFFDirectory.js +14 -2
  117. package/src/tables/aat.js +160 -35
  118. package/src/tables/avar.js +1 -0
  119. package/src/tables/bsln.js +3 -2
  120. package/src/tables/cmap.js +26 -6
  121. package/src/tables/cvt.js +1 -0
  122. package/src/tables/directory.js +44 -16
  123. package/src/tables/feat.js +24 -2
  124. package/src/tables/fpgm.js +1 -0
  125. package/src/tables/fvar.js +32 -4
  126. package/src/tables/gasp.js +1 -0
  127. package/src/tables/glyf.js +1 -0
  128. package/src/tables/gvar.js +29 -2
  129. package/src/tables/hdmx.js +12 -1
  130. package/src/tables/head.js +1 -0
  131. package/src/tables/hhea.js +1 -0
  132. package/src/tables/hmtx.js +18 -2
  133. package/src/tables/index.js +1 -0
  134. package/src/tables/just.js +15 -4
  135. package/src/tables/kern.js +43 -6
  136. package/src/tables/loca.js +21 -8
  137. package/src/tables/maxp.js +1 -0
  138. package/src/tables/morx.js +14 -7
  139. package/src/tables/name.js +104 -23
  140. package/src/tables/opbd.js +2 -1
  141. package/src/tables/opentype.js +39 -4
  142. package/src/tables/post.js +8 -1
  143. package/src/tables/prep.js +1 -0
  144. package/src/tables/sbix.js +12 -1
  145. package/src/tables/variations.js +23 -3
  146. package/src/tables/vhea.js +1 -0
  147. package/src/tables/vmtx.js +18 -2
  148. package/src/utils.js +15 -0
  149. package/types/assets.d.ts +13 -0
  150. package/types/deps.d.ts +83 -0
  151. package/types/fontkit.d.ts +1324 -0
  152. package/types/index.d.ts +239 -0
  153. package/types/restructure.d.ts +354 -0
@@ -139,6 +139,13 @@ const INDEX_2_START_OFFSET = INDEX_2_NULL_OFFSET + INDEX_2_BLOCK_LENGTH;
139
139
  // (0x110000>>SHIFT_2)+UTF8_2B_INDEX_2_LENGTH+MAX_INDEX_1_LENGTH.)
140
140
  const MAX_INDEX_LENGTH = 0xffff;
141
141
 
142
+ /**
143
+ * @param {ArrayLike<number>} a
144
+ * @param {number} s
145
+ * @param {number} t
146
+ * @param {number} length
147
+ * @returns {boolean}
148
+ */
142
149
  const equal_int = (a, s, t, length) => {
143
150
  for (let i = 0; i < length; i++) {
144
151
  if (a[s + i] !== a[t + i]) {
@@ -150,24 +157,37 @@ const equal_int = (a, s, t, length) => {
150
157
  };
151
158
 
152
159
  class UnicodeTrieBuilder {
160
+ /**
161
+ * @param {number} [initialValue=0]
162
+ * @param {number} [errorValue=0]
163
+ */
153
164
  constructor(initialValue, errorValue) {
154
165
  let i, j;
155
166
  if (initialValue == null) {
156
167
  initialValue = 0;
157
168
  }
169
+ /** @type {number} */
158
170
  this.initialValue = initialValue;
159
171
  if (errorValue == null) {
160
172
  errorValue = 0;
161
173
  }
174
+ /** @type {number} */
162
175
  this.errorValue = errorValue;
176
+ /** @type {Int32Array} */
163
177
  this.index1 = new Int32Array(INDEX_1_LENGTH);
178
+ /** @type {Int32Array} */
164
179
  this.index2 = new Int32Array(MAX_INDEX_2_LENGTH);
180
+ /** @type {number} */
165
181
  this.highStart = 0x110000;
166
182
 
183
+ /** @type {Uint32Array} */
167
184
  this.data = new Uint32Array(INITIAL_DATA_LENGTH);
185
+ /** @type {number} */
168
186
  this.dataCapacity = INITIAL_DATA_LENGTH;
169
187
 
188
+ /** @type {number} */
170
189
  this.firstFreeBlock = 0;
190
+ /** @type {boolean} */
171
191
  this.isCompacted = false;
172
192
 
173
193
  // Multi-purpose per-data-block table.
@@ -183,6 +203,7 @@ class UnicodeTrieBuilder {
183
203
  //
184
204
  // Map of adjusted indexes, used in compactData() and compactIndex2().
185
205
  // Maps from original indexes to new ones.
206
+ /** @type {Int32Array} */
186
207
  this.map = new Int32Array(MAX_DATA_LENGTH_BUILDTIME >> SHIFT_2);
187
208
 
188
209
  for (i = 0; i < 0x80; i++) {
@@ -197,7 +218,9 @@ class UnicodeTrieBuilder {
197
218
  this.data[i] = this.initialValue;
198
219
  }
199
220
 
221
+ /** @type {number} */
200
222
  this.dataNullOffset = DATA_NULL_OFFSET;
223
+ /** @type {number} */
201
224
  this.dataLength = NEW_DATA_START_OFFSET;
202
225
 
203
226
  // set the index-2 indexes for the 2=0x80>>SHIFT_2 ASCII data blocks
@@ -239,7 +262,9 @@ class UnicodeTrieBuilder {
239
262
  this.index2[INDEX_2_NULL_OFFSET + i] = DATA_NULL_OFFSET;
240
263
  }
241
264
 
265
+ /** @type {number} */
242
266
  this.index2NullOffset = INDEX_2_NULL_OFFSET;
267
+ /** @type {number} */
243
268
  this.index2Length = INDEX_2_START_OFFSET;
244
269
 
245
270
  // set the index-1 indexes for the linear index-2 block
@@ -262,6 +287,11 @@ class UnicodeTrieBuilder {
262
287
  }
263
288
  }
264
289
 
290
+ /**
291
+ * @param {number} codePoint
292
+ * @param {number} value
293
+ * @returns {this}
294
+ */
265
295
  set(codePoint, value) {
266
296
  if ((codePoint < 0) || (codePoint > 0x10ffff)) {
267
297
  throw new Error('Invalid code point');
@@ -276,6 +306,13 @@ class UnicodeTrieBuilder {
276
306
  return this;
277
307
  }
278
308
 
309
+ /**
310
+ * @param {number} start
311
+ * @param {number} end
312
+ * @param {number} value
313
+ * @param {boolean} [overwrite=true]
314
+ * @returns {this}
315
+ */
279
316
  setRange(start, end, value, overwrite) {
280
317
  let block, repeatBlock;
281
318
  if (overwrite == null) {
@@ -385,6 +422,11 @@ class UnicodeTrieBuilder {
385
422
  return this;
386
423
  }
387
424
 
425
+ /**
426
+ * @param {number} c
427
+ * @param {boolean} [fromLSCP=true]
428
+ * @returns {number}
429
+ */
388
430
  get(c, fromLSCP) {
389
431
  let i2;
390
432
  if (fromLSCP == null) {
@@ -408,6 +450,11 @@ class UnicodeTrieBuilder {
408
450
  return this.data[block + (c & DATA_MASK)];
409
451
  }
410
452
 
453
+ /**
454
+ * @param {number} c
455
+ * @param {boolean} forLSCP
456
+ * @returns {boolean}
457
+ */
411
458
  _isInNullBlock(c, forLSCP) {
412
459
  let i2;
413
460
  if (((c & 0xfffffc00) === 0xd800) && forLSCP) {
@@ -420,6 +467,9 @@ class UnicodeTrieBuilder {
420
467
  return block === this.dataNullOffset;
421
468
  }
422
469
 
470
+ /**
471
+ * @returns {number}
472
+ */
423
473
  _allocIndex2Block() {
424
474
  const newBlock = this.index2Length;
425
475
  const newTop = newBlock + INDEX_2_BLOCK_LENGTH;
@@ -436,6 +486,11 @@ class UnicodeTrieBuilder {
436
486
  return newBlock;
437
487
  }
438
488
 
489
+ /**
490
+ * @param {number} c
491
+ * @param {boolean} forLSCP
492
+ * @returns {number}
493
+ */
439
494
  _getIndex2Block(c, forLSCP) {
440
495
  if ((c >= 0xd800) && (c < 0xdc00) && forLSCP) {
441
496
  return LSCP_INDEX_2_OFFSET;
@@ -451,10 +506,18 @@ class UnicodeTrieBuilder {
451
506
  return i2;
452
507
  }
453
508
 
509
+ /**
510
+ * @param {number} block
511
+ * @returns {boolean}
512
+ */
454
513
  _isWritableBlock(block) {
455
514
  return (block !== this.dataNullOffset) && (this.map[block >> SHIFT_2] === 1);
456
515
  }
457
516
 
517
+ /**
518
+ * @param {number} copyBlock
519
+ * @returns {number}
520
+ */
458
521
  _allocDataBlock(copyBlock) {
459
522
  let newBlock;
460
523
  if (this.firstFreeBlock !== 0) {
@@ -493,12 +556,21 @@ class UnicodeTrieBuilder {
493
556
  return newBlock;
494
557
  }
495
558
 
559
+ /**
560
+ * @param {number} block
561
+ * @returns {void}
562
+ */
496
563
  _releaseDataBlock(block) {
497
564
  // put this block at the front of the free-block chain
498
565
  this.map[block >> SHIFT_2] = -this.firstFreeBlock;
499
566
  this.firstFreeBlock = block;
500
567
  }
501
568
 
569
+ /**
570
+ * @param {number} i2
571
+ * @param {number} block
572
+ * @returns {void}
573
+ */
502
574
  _setIndex2Entry(i2, block) {
503
575
  ++this.map[block >> SHIFT_2]; // increment first, in case block == oldBlock!
504
576
  const oldBlock = this.index2[i2];
@@ -509,6 +581,11 @@ class UnicodeTrieBuilder {
509
581
  this.index2[i2] = block;
510
582
  }
511
583
 
584
+ /**
585
+ * @param {number} c
586
+ * @param {boolean} forLSCP
587
+ * @returns {number}
588
+ */
512
589
  _getDataBlock(c, forLSCP) {
513
590
  let i2 = this._getIndex2Block(c, forLSCP);
514
591
  i2 += (c >> SHIFT_2) & INDEX_2_MASK;
@@ -524,6 +601,15 @@ class UnicodeTrieBuilder {
524
601
  return newBlock;
525
602
  }
526
603
 
604
+ /**
605
+ * @param {number} block
606
+ * @param {number} start
607
+ * @param {number} limit
608
+ * @param {number} value
609
+ * @param {number} initialValue
610
+ * @param {boolean} overwrite
611
+ * @returns {void}
612
+ */
527
613
  _fillBlock(block, start, limit, value, initialValue, overwrite) {
528
614
  let i;
529
615
  if (overwrite) {
@@ -539,6 +625,11 @@ class UnicodeTrieBuilder {
539
625
  }
540
626
  }
541
627
 
628
+ /**
629
+ * @param {number} block
630
+ * @param {number} value
631
+ * @returns {void}
632
+ */
542
633
  _writeBlock(block, value) {
543
634
  const limit = block + DATA_BLOCK_LENGTH;
544
635
  while (block < limit) {
@@ -546,6 +637,10 @@ class UnicodeTrieBuilder {
546
637
  }
547
638
  }
548
639
 
640
+ /**
641
+ * @param {number} highValue
642
+ * @returns {number}
643
+ */
549
644
  _findHighStart(highValue) {
550
645
  let prevBlock, prevI2Block;
551
646
  const data32 = this.data;
@@ -618,6 +713,12 @@ class UnicodeTrieBuilder {
618
713
  return 0;
619
714
  }
620
715
 
716
+ /**
717
+ * @param {number} dataLength
718
+ * @param {number} otherBlock
719
+ * @param {number} blockLength
720
+ * @returns {number}
721
+ */
621
722
  _findSameDataBlock(dataLength, otherBlock, blockLength) {
622
723
  // ensure that we do not even partially get past dataLength
623
724
  dataLength -= blockLength;
@@ -632,6 +733,11 @@ class UnicodeTrieBuilder {
632
733
  return -1;
633
734
  }
634
735
 
736
+ /**
737
+ * @param {number} index2Length
738
+ * @param {number} otherBlock
739
+ * @returns {number}
740
+ */
635
741
  _findSameIndex2Block(index2Length, otherBlock) {
636
742
  // ensure that we do not even partially get past index2Length
637
743
  index2Length -= INDEX_2_BLOCK_LENGTH;
@@ -644,6 +750,9 @@ class UnicodeTrieBuilder {
644
750
  return -1;
645
751
  }
646
752
 
753
+ /**
754
+ * @returns {void}
755
+ */
647
756
  _compactData() {
648
757
  // do not compact linear-ASCII data
649
758
  let newStart = DATA_START_OFFSET;
@@ -748,6 +857,9 @@ class UnicodeTrieBuilder {
748
857
  this.dataLength = newStart;
749
858
  }
750
859
 
860
+ /**
861
+ * @returns {void}
862
+ */
751
863
  _compactIndex2() {
752
864
  // do not compact linear-BMP index-2 blocks
753
865
  let newStart = INDEX_2_BMP_LENGTH;
@@ -823,6 +935,9 @@ class UnicodeTrieBuilder {
823
935
  this.index2Length = newStart;
824
936
  }
825
937
 
938
+ /**
939
+ * @returns {void}
940
+ */
826
941
  _compact() {
827
942
  // find highStart and round it up
828
943
  let highValue = this.get(0x10ffff);
@@ -857,6 +972,9 @@ class UnicodeTrieBuilder {
857
972
  this.isCompacted = true;
858
973
  }
859
974
 
975
+ /**
976
+ * @returns {import('./index.js').default}
977
+ */
860
978
  freeze() {
861
979
  let allIndexesLength, i;
862
980
  if (!this.isCompacted) {
@@ -928,13 +1046,16 @@ class UnicodeTrieBuilder {
928
1046
  return dest;
929
1047
  }
930
1048
 
931
- // Generates a Buffer containing the serialized and compressed trie.
932
- // Trie data is compressed once with raw deflate (a second pass does not help).
933
- // Format:
934
- // uint32_t highStart;
935
- // uint32_t errorValue;
936
- // uint32_t uncompressedDataLength;
937
- // uint8_t trieData[dataLength];
1049
+ /**
1050
+ * Generates a Buffer containing the serialized and compressed trie.
1051
+ * Trie data is compressed once with raw deflate (a second pass does not help).
1052
+ * Format:
1053
+ * uint32_t highStart;
1054
+ * uint32_t errorValue;
1055
+ * uint32_t uncompressedDataLength;
1056
+ * uint8_t trieData[dataLength];
1057
+ * @returns {Buffer}
1058
+ */
938
1059
  toBuffer() {
939
1060
  const trie = this.freeze();
940
1061
 
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -48,6 +49,9 @@ var swap32LE = (array) => {
48
49
  };
49
50
 
50
51
  // index.js
52
+ function isNodeBuffer(value) {
53
+ return typeof value === "object" && value !== null && "readUInt32BE" in value && "readUInt32LE" in value && "slice" in value && typeof value.readUInt32BE === "function" && typeof value.readUInt32LE === "function" && typeof value.slice === "function";
54
+ }
51
55
  var SHIFT_1 = 6 + 5;
52
56
  var SHIFT_2 = 5;
53
57
  var SHIFT_1_2 = SHIFT_1 - SHIFT_2;
@@ -65,29 +69,38 @@ var UTF8_2B_INDEX_2_LENGTH = 2048 >> 6;
65
69
  var INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
66
70
  var DATA_GRANULARITY = 1 << INDEX_SHIFT;
67
71
  var UnicodeTrie = class {
72
+ /**
73
+ * @param {Uint8Array | Buffer | UnicodeTrieInit} data
74
+ */
68
75
  constructor(data) {
69
- const isBuffer = typeof data.readUInt32BE === "function" && typeof data.slice === "function";
70
- if (isBuffer || data instanceof Uint8Array) {
76
+ if (isNodeBuffer(data) || data instanceof Uint8Array) {
77
+ let bytes;
71
78
  let uncompressedLength;
72
- if (isBuffer) {
79
+ if (isNodeBuffer(data)) {
73
80
  this.highStart = data.readUInt32LE(0);
74
81
  this.errorValue = data.readUInt32LE(4);
75
82
  uncompressedLength = data.readUInt32LE(8);
76
- data = data.slice(12);
83
+ bytes = new Uint8Array(data.buffer, data.byteOffset + 12, data.byteLength - 12);
77
84
  } else {
78
85
  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
79
86
  this.highStart = view.getUint32(0, true);
80
87
  this.errorValue = view.getUint32(4, true);
81
88
  uncompressedLength = view.getUint32(8, true);
82
- data = data.subarray(12);
89
+ bytes = data.subarray(12);
83
90
  }
84
- data = (0, import_fflate.inflateSync)(data, { out: new Uint8Array(uncompressedLength) });
85
- swap32LE(data);
86
- this.data = new Uint32Array(data.buffer, data.byteOffset, data.byteLength >> 2);
91
+ bytes = (0, import_fflate.inflateSync)(bytes, { out: new Uint8Array(uncompressedLength) });
92
+ swap32LE(bytes);
93
+ this.data = new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);
87
94
  } else {
88
- ({ data: this.data, highStart: this.highStart, errorValue: this.errorValue } = data);
95
+ this.data = data.data;
96
+ this.highStart = data.highStart;
97
+ this.errorValue = data.errorValue;
89
98
  }
90
99
  }
100
+ /**
101
+ * @param {number} codePoint
102
+ * @returns {number}
103
+ */
91
104
  get(codePoint) {
92
105
  let index;
93
106
  if (codePoint < 0 || codePoint > 1114111) {
@@ -157,6 +170,10 @@ var equal_int = (a, s, t, length) => {
157
170
  return true;
158
171
  };
159
172
  var UnicodeTrieBuilder = class {
173
+ /**
174
+ * @param {number} [initialValue=0]
175
+ * @param {number} [errorValue=0]
176
+ */
160
177
  constructor(initialValue, errorValue) {
161
178
  let i, j;
162
179
  if (initialValue == null) {
@@ -222,6 +239,11 @@ var UnicodeTrieBuilder = class {
222
239
  this.set(i, this.initialValue);
223
240
  }
224
241
  }
242
+ /**
243
+ * @param {number} codePoint
244
+ * @param {number} value
245
+ * @returns {this}
246
+ */
225
247
  set(codePoint, value) {
226
248
  if (codePoint < 0 || codePoint > 1114111) {
227
249
  throw new Error("Invalid code point");
@@ -233,6 +255,13 @@ var UnicodeTrieBuilder = class {
233
255
  this.data[block + (codePoint & DATA_MASK2)] = value;
234
256
  return this;
235
257
  }
258
+ /**
259
+ * @param {number} start
260
+ * @param {number} end
261
+ * @param {number} value
262
+ * @param {boolean} [overwrite=true]
263
+ * @returns {this}
264
+ */
236
265
  setRange(start, end, value, overwrite) {
237
266
  let block, repeatBlock;
238
267
  if (overwrite == null) {
@@ -300,6 +329,11 @@ var UnicodeTrieBuilder = class {
300
329
  }
301
330
  return this;
302
331
  }
332
+ /**
333
+ * @param {number} c
334
+ * @param {boolean} [fromLSCP=true]
335
+ * @returns {number}
336
+ */
303
337
  get(c, fromLSCP) {
304
338
  let i2;
305
339
  if (fromLSCP == null) {
@@ -319,6 +353,11 @@ var UnicodeTrieBuilder = class {
319
353
  const block = this.index2[i2];
320
354
  return this.data[block + (c & DATA_MASK2)];
321
355
  }
356
+ /**
357
+ * @param {number} c
358
+ * @param {boolean} forLSCP
359
+ * @returns {boolean}
360
+ */
322
361
  _isInNullBlock(c, forLSCP) {
323
362
  let i2;
324
363
  if ((c & 4294966272) === 55296 && forLSCP) {
@@ -329,6 +368,9 @@ var UnicodeTrieBuilder = class {
329
368
  const block = this.index2[i2];
330
369
  return block === this.dataNullOffset;
331
370
  }
371
+ /**
372
+ * @returns {number}
373
+ */
332
374
  _allocIndex2Block() {
333
375
  const newBlock = this.index2Length;
334
376
  const newTop = newBlock + INDEX_2_BLOCK_LENGTH2;
@@ -339,6 +381,11 @@ var UnicodeTrieBuilder = class {
339
381
  this.index2.set(this.index2.subarray(this.index2NullOffset, this.index2NullOffset + INDEX_2_BLOCK_LENGTH2), newBlock);
340
382
  return newBlock;
341
383
  }
384
+ /**
385
+ * @param {number} c
386
+ * @param {boolean} forLSCP
387
+ * @returns {number}
388
+ */
342
389
  _getIndex2Block(c, forLSCP) {
343
390
  if (c >= 55296 && c < 56320 && forLSCP) {
344
391
  return LSCP_INDEX_2_OFFSET2;
@@ -351,9 +398,17 @@ var UnicodeTrieBuilder = class {
351
398
  }
352
399
  return i2;
353
400
  }
401
+ /**
402
+ * @param {number} block
403
+ * @returns {boolean}
404
+ */
354
405
  _isWritableBlock(block) {
355
406
  return block !== this.dataNullOffset && this.map[block >> SHIFT_22] === 1;
356
407
  }
408
+ /**
409
+ * @param {number} copyBlock
410
+ * @returns {number}
411
+ */
357
412
  _allocDataBlock(copyBlock) {
358
413
  let newBlock;
359
414
  if (this.firstFreeBlock !== 0) {
@@ -382,10 +437,19 @@ var UnicodeTrieBuilder = class {
382
437
  this.map[newBlock >> SHIFT_22] = 0;
383
438
  return newBlock;
384
439
  }
440
+ /**
441
+ * @param {number} block
442
+ * @returns {void}
443
+ */
385
444
  _releaseDataBlock(block) {
386
445
  this.map[block >> SHIFT_22] = -this.firstFreeBlock;
387
446
  this.firstFreeBlock = block;
388
447
  }
448
+ /**
449
+ * @param {number} i2
450
+ * @param {number} block
451
+ * @returns {void}
452
+ */
389
453
  _setIndex2Entry(i2, block) {
390
454
  ++this.map[block >> SHIFT_22];
391
455
  const oldBlock = this.index2[i2];
@@ -394,6 +458,11 @@ var UnicodeTrieBuilder = class {
394
458
  }
395
459
  this.index2[i2] = block;
396
460
  }
461
+ /**
462
+ * @param {number} c
463
+ * @param {boolean} forLSCP
464
+ * @returns {number}
465
+ */
397
466
  _getDataBlock(c, forLSCP) {
398
467
  let i2 = this._getIndex2Block(c, forLSCP);
399
468
  i2 += c >> SHIFT_22 & INDEX_2_MASK2;
@@ -405,6 +474,15 @@ var UnicodeTrieBuilder = class {
405
474
  this._setIndex2Entry(i2, newBlock);
406
475
  return newBlock;
407
476
  }
477
+ /**
478
+ * @param {number} block
479
+ * @param {number} start
480
+ * @param {number} limit
481
+ * @param {number} value
482
+ * @param {number} initialValue
483
+ * @param {boolean} overwrite
484
+ * @returns {void}
485
+ */
408
486
  _fillBlock(block, start, limit, value, initialValue, overwrite) {
409
487
  let i;
410
488
  if (overwrite) {
@@ -419,12 +497,21 @@ var UnicodeTrieBuilder = class {
419
497
  }
420
498
  }
421
499
  }
500
+ /**
501
+ * @param {number} block
502
+ * @param {number} value
503
+ * @returns {void}
504
+ */
422
505
  _writeBlock(block, value) {
423
506
  const limit = block + DATA_BLOCK_LENGTH2;
424
507
  while (block < limit) {
425
508
  this.data[block++] = value;
426
509
  }
427
510
  }
511
+ /**
512
+ * @param {number} highValue
513
+ * @returns {number}
514
+ */
428
515
  _findHighStart(highValue) {
429
516
  let prevBlock, prevI2Block;
430
517
  const data32 = this.data;
@@ -482,6 +569,12 @@ var UnicodeTrieBuilder = class {
482
569
  }
483
570
  return 0;
484
571
  }
572
+ /**
573
+ * @param {number} dataLength
574
+ * @param {number} otherBlock
575
+ * @param {number} blockLength
576
+ * @returns {number}
577
+ */
485
578
  _findSameDataBlock(dataLength, otherBlock, blockLength) {
486
579
  dataLength -= blockLength;
487
580
  let block = 0;
@@ -493,6 +586,11 @@ var UnicodeTrieBuilder = class {
493
586
  }
494
587
  return -1;
495
588
  }
589
+ /**
590
+ * @param {number} index2Length
591
+ * @param {number} otherBlock
592
+ * @returns {number}
593
+ */
496
594
  _findSameIndex2Block(index2Length, otherBlock) {
497
595
  index2Length -= INDEX_2_BLOCK_LENGTH2;
498
596
  for (let block = 0; block <= index2Length; block++) {
@@ -502,6 +600,9 @@ var UnicodeTrieBuilder = class {
502
600
  }
503
601
  return -1;
504
602
  }
603
+ /**
604
+ * @returns {void}
605
+ */
505
606
  _compactData() {
506
607
  let newStart = DATA_START_OFFSET;
507
608
  let start = 0;
@@ -570,6 +671,9 @@ var UnicodeTrieBuilder = class {
570
671
  }
571
672
  this.dataLength = newStart;
572
673
  }
674
+ /**
675
+ * @returns {void}
676
+ */
573
677
  _compactIndex2() {
574
678
  let newStart = INDEX_2_BMP_LENGTH2;
575
679
  let start = 0;
@@ -612,6 +716,9 @@ var UnicodeTrieBuilder = class {
612
716
  }
613
717
  this.index2Length = newStart;
614
718
  }
719
+ /**
720
+ * @returns {void}
721
+ */
615
722
  _compact() {
616
723
  let highValue = this.get(1114111);
617
724
  let highStart = this._findHighStart(highValue);
@@ -634,6 +741,9 @@ var UnicodeTrieBuilder = class {
634
741
  }
635
742
  this.isCompacted = true;
636
743
  }
744
+ /**
745
+ * @returns {import('./index.js').default}
746
+ */
637
747
  freeze() {
638
748
  let allIndexesLength, i;
639
749
  if (!this.isCompacted) {
@@ -680,13 +790,16 @@ var UnicodeTrieBuilder = class {
680
790
  });
681
791
  return dest;
682
792
  }
683
- // Generates a Buffer containing the serialized and compressed trie.
684
- // Trie data is compressed once with raw deflate (a second pass does not help).
685
- // Format:
686
- // uint32_t highStart;
687
- // uint32_t errorValue;
688
- // uint32_t uncompressedDataLength;
689
- // uint8_t trieData[dataLength];
793
+ /**
794
+ * Generates a Buffer containing the serialized and compressed trie.
795
+ * Trie data is compressed once with raw deflate (a second pass does not help).
796
+ * Format:
797
+ * uint32_t highStart;
798
+ * uint32_t errorValue;
799
+ * uint32_t uncompressedDataLength;
800
+ * uint8_t trieData[dataLength];
801
+ * @returns {Buffer}
802
+ */
690
803
  toBuffer() {
691
804
  const trie = this.freeze();
692
805
  const data = new Uint8Array(trie.data.buffer);