@cantoo/fontkit 2.0.7 → 2.0.9

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 (54) hide show
  1. package/dist/browser-module.d.ts +27 -16
  2. package/dist/browser-module.mjs +20 -0
  3. package/dist/browser-module.mjs.map +1 -1
  4. package/dist/browser.cjs +20 -0
  5. package/dist/browser.cjs.map +1 -1
  6. package/dist/browser.d.ts +27 -16
  7. package/dist/fontkit.umd.d.ts +27 -16
  8. package/dist/fontkit.umd.js +21 -0
  9. package/dist/fontkit.umd.js.map +2 -2
  10. package/dist/fontkit.umd.min.js +11 -0
  11. package/dist/fontkit.umd.min.js.map +7 -0
  12. package/dist/index.d.ts +27 -16
  13. package/dist/main.cjs +22 -0
  14. package/dist/main.cjs.map +1 -1
  15. package/dist/main.d.ts +27 -16
  16. package/dist/module.d.ts +27 -16
  17. package/dist/module.mjs +22 -0
  18. package/dist/module.mjs.map +1 -1
  19. package/dist/unicode-properties/index.cjs +270 -0
  20. package/dist/unicode-properties/index.cjs.map +7 -0
  21. package/dist/unicode-properties/index.d.ts +37 -0
  22. package/dist/unicode-properties/index.mjs +246 -0
  23. package/dist/unicode-properties/index.mjs.map +7 -0
  24. package/dist/unicode-properties/index.umd.js +640 -0
  25. package/dist/unicode-properties/index.umd.js.map +7 -0
  26. package/dist/unicode-trie/builder.cjs +821 -0
  27. package/dist/unicode-trie/builder.cjs.map +7 -0
  28. package/dist/unicode-trie/builder.d.ts +19 -0
  29. package/dist/unicode-trie/builder.mjs +799 -0
  30. package/dist/unicode-trie/builder.mjs.map +7 -0
  31. package/dist/unicode-trie/index.cjs +125 -0
  32. package/dist/unicode-trie/index.cjs.map +7 -0
  33. package/dist/unicode-trie/index.d.ts +19 -0
  34. package/dist/unicode-trie/index.mjs +103 -0
  35. package/dist/unicode-trie/index.mjs.map +7 -0
  36. package/dist/unicode-trie/index.umd.js +498 -0
  37. package/dist/unicode-trie/index.umd.js.map +7 -0
  38. package/package.json +14 -10
  39. package/src/base.js +33 -0
  40. package/src/index.js +2 -1
  41. package/src/node.js +7 -1
  42. package/src/packages/unicode-properties/dist/index.d.ts +37 -0
  43. package/src/packages/unicode-properties/dist/index.umd.js +640 -0
  44. package/src/packages/unicode-properties/dist/index.umd.js.map +7 -0
  45. package/src/packages/unicode-properties/index.d.ts +37 -0
  46. package/src/packages/unicode-properties/package.json +6 -1
  47. package/src/packages/unicode-trie/builder.d.ts +19 -0
  48. package/src/packages/unicode-trie/dist/builder.d.ts +19 -0
  49. package/src/packages/unicode-trie/dist/index.d.ts +19 -0
  50. package/src/packages/unicode-trie/dist/index.umd.js +498 -0
  51. package/src/packages/unicode-trie/dist/index.umd.js.map +7 -0
  52. package/src/packages/unicode-trie/index.d.ts +19 -0
  53. package/src/packages/unicode-trie/package.json +8 -1
  54. package/types/index.d.ts +27 -16
@@ -0,0 +1,821 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // builder.js
21
+ var builder_exports = {};
22
+ __export(builder_exports, {
23
+ default: () => builder_default
24
+ });
25
+ module.exports = __toCommonJS(builder_exports);
26
+ var import_fflate2 = require("fflate");
27
+
28
+ // index.js
29
+ var import_fflate = require("fflate");
30
+
31
+ // swap.js
32
+ var isBigEndian = new Uint8Array(new Uint32Array([305419896]).buffer)[0] === 18;
33
+ var swap = (b, n, m) => {
34
+ let i = b[n];
35
+ b[n] = b[m];
36
+ b[m] = i;
37
+ };
38
+ var swap32 = (array) => {
39
+ const len = array.length;
40
+ for (let i = 0; i < len; i += 4) {
41
+ swap(array, i, i + 3);
42
+ swap(array, i + 1, i + 2);
43
+ }
44
+ };
45
+ var swap32LE = (array) => {
46
+ if (isBigEndian) {
47
+ swap32(array);
48
+ }
49
+ };
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
+ }
55
+ var SHIFT_1 = 6 + 5;
56
+ var SHIFT_2 = 5;
57
+ var SHIFT_1_2 = SHIFT_1 - SHIFT_2;
58
+ var OMITTED_BMP_INDEX_1_LENGTH = 65536 >> SHIFT_1;
59
+ var INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
60
+ var INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
61
+ var INDEX_SHIFT = 2;
62
+ var DATA_BLOCK_LENGTH = 1 << SHIFT_2;
63
+ var DATA_MASK = DATA_BLOCK_LENGTH - 1;
64
+ var LSCP_INDEX_2_OFFSET = 65536 >> SHIFT_2;
65
+ var LSCP_INDEX_2_LENGTH = 1024 >> SHIFT_2;
66
+ var INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
67
+ var UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
68
+ var UTF8_2B_INDEX_2_LENGTH = 2048 >> 6;
69
+ var INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
70
+ var DATA_GRANULARITY = 1 << INDEX_SHIFT;
71
+ var UnicodeTrie = class {
72
+ /**
73
+ * @param {Uint8Array | Buffer | UnicodeTrieInit} data
74
+ */
75
+ constructor(data) {
76
+ if (isNodeBuffer(data) || data instanceof Uint8Array) {
77
+ let bytes;
78
+ let uncompressedLength;
79
+ if (isNodeBuffer(data)) {
80
+ this.highStart = data.readUInt32LE(0);
81
+ this.errorValue = data.readUInt32LE(4);
82
+ uncompressedLength = data.readUInt32LE(8);
83
+ bytes = new Uint8Array(data.buffer, data.byteOffset + 12, data.byteLength - 12);
84
+ } else {
85
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
86
+ this.highStart = view.getUint32(0, true);
87
+ this.errorValue = view.getUint32(4, true);
88
+ uncompressedLength = view.getUint32(8, true);
89
+ bytes = data.subarray(12);
90
+ }
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);
94
+ } else {
95
+ this.data = data.data;
96
+ this.highStart = data.highStart;
97
+ this.errorValue = data.errorValue;
98
+ }
99
+ }
100
+ /**
101
+ * @param {number} codePoint
102
+ * @returns {number}
103
+ */
104
+ get(codePoint) {
105
+ let index;
106
+ if (codePoint < 0 || codePoint > 1114111) {
107
+ return this.errorValue;
108
+ }
109
+ if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) {
110
+ index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
111
+ return this.data[index];
112
+ }
113
+ if (codePoint <= 65535) {
114
+ index = (this.data[LSCP_INDEX_2_OFFSET + (codePoint - 55296 >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
115
+ return this.data[index];
116
+ }
117
+ if (codePoint < this.highStart) {
118
+ index = this.data[INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> SHIFT_1)];
119
+ index = this.data[index + (codePoint >> SHIFT_2 & INDEX_2_MASK)];
120
+ index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
121
+ return this.data[index];
122
+ }
123
+ return this.data[this.data.length - DATA_GRANULARITY];
124
+ }
125
+ };
126
+ var index_default = UnicodeTrie;
127
+
128
+ // builder.js
129
+ var SHIFT_12 = 6 + 5;
130
+ var SHIFT_22 = 5;
131
+ var SHIFT_1_22 = SHIFT_12 - SHIFT_22;
132
+ var OMITTED_BMP_INDEX_1_LENGTH2 = 65536 >> SHIFT_12;
133
+ var CP_PER_INDEX_1_ENTRY = 1 << SHIFT_12;
134
+ var INDEX_2_BLOCK_LENGTH2 = 1 << SHIFT_1_22;
135
+ var INDEX_2_MASK2 = INDEX_2_BLOCK_LENGTH2 - 1;
136
+ var DATA_BLOCK_LENGTH2 = 1 << SHIFT_22;
137
+ var DATA_MASK2 = DATA_BLOCK_LENGTH2 - 1;
138
+ var INDEX_SHIFT2 = 2;
139
+ var DATA_GRANULARITY2 = 1 << INDEX_SHIFT2;
140
+ var INDEX_2_OFFSET = 0;
141
+ var LSCP_INDEX_2_OFFSET2 = 65536 >> SHIFT_22;
142
+ var LSCP_INDEX_2_LENGTH2 = 1024 >> SHIFT_22;
143
+ var INDEX_2_BMP_LENGTH2 = LSCP_INDEX_2_OFFSET2 + LSCP_INDEX_2_LENGTH2;
144
+ var UTF8_2B_INDEX_2_OFFSET2 = INDEX_2_BMP_LENGTH2;
145
+ var UTF8_2B_INDEX_2_LENGTH2 = 2048 >> 6;
146
+ var INDEX_1_OFFSET2 = UTF8_2B_INDEX_2_OFFSET2 + UTF8_2B_INDEX_2_LENGTH2;
147
+ var MAX_INDEX_1_LENGTH = 1048576 >> SHIFT_12;
148
+ var BAD_UTF8_DATA_OFFSET = 128;
149
+ var DATA_START_OFFSET = 192;
150
+ var DATA_NULL_OFFSET = DATA_START_OFFSET;
151
+ var NEW_DATA_START_OFFSET = DATA_NULL_OFFSET + 64;
152
+ var DATA_0800_OFFSET = NEW_DATA_START_OFFSET + 1920;
153
+ var INITIAL_DATA_LENGTH = 1 << 14;
154
+ var MEDIUM_DATA_LENGTH = 1 << 17;
155
+ var MAX_DATA_LENGTH_RUNTIME = 65535 << INDEX_SHIFT2;
156
+ var INDEX_1_LENGTH = 1114112 >> SHIFT_12;
157
+ var MAX_DATA_LENGTH_BUILDTIME = 1114112 + 64 + 64 + 1024;
158
+ var INDEX_GAP_OFFSET = INDEX_2_BMP_LENGTH2;
159
+ var INDEX_GAP_LENGTH = UTF8_2B_INDEX_2_LENGTH2 + MAX_INDEX_1_LENGTH + INDEX_2_MASK2 & ~INDEX_2_MASK2;
160
+ var MAX_INDEX_2_LENGTH = (1114112 >> SHIFT_22) + LSCP_INDEX_2_LENGTH2 + INDEX_GAP_LENGTH + INDEX_2_BLOCK_LENGTH2;
161
+ var INDEX_2_NULL_OFFSET = INDEX_GAP_OFFSET + INDEX_GAP_LENGTH;
162
+ var INDEX_2_START_OFFSET = INDEX_2_NULL_OFFSET + INDEX_2_BLOCK_LENGTH2;
163
+ var MAX_INDEX_LENGTH = 65535;
164
+ var equal_int = (a, s, t, length) => {
165
+ for (let i = 0; i < length; i++) {
166
+ if (a[s + i] !== a[t + i]) {
167
+ return false;
168
+ }
169
+ }
170
+ return true;
171
+ };
172
+ var UnicodeTrieBuilder = class {
173
+ /**
174
+ * @param {number} [initialValue=0]
175
+ * @param {number} [errorValue=0]
176
+ */
177
+ constructor(initialValue, errorValue) {
178
+ let i, j;
179
+ if (initialValue == null) {
180
+ initialValue = 0;
181
+ }
182
+ this.initialValue = initialValue;
183
+ if (errorValue == null) {
184
+ errorValue = 0;
185
+ }
186
+ this.errorValue = errorValue;
187
+ this.index1 = new Int32Array(INDEX_1_LENGTH);
188
+ this.index2 = new Int32Array(MAX_INDEX_2_LENGTH);
189
+ this.highStart = 1114112;
190
+ this.data = new Uint32Array(INITIAL_DATA_LENGTH);
191
+ this.dataCapacity = INITIAL_DATA_LENGTH;
192
+ this.firstFreeBlock = 0;
193
+ this.isCompacted = false;
194
+ this.map = new Int32Array(MAX_DATA_LENGTH_BUILDTIME >> SHIFT_22);
195
+ for (i = 0; i < 128; i++) {
196
+ this.data[i] = this.initialValue;
197
+ }
198
+ for (; i < 192; i++) {
199
+ this.data[i] = this.errorValue;
200
+ }
201
+ for (i = DATA_NULL_OFFSET; i < NEW_DATA_START_OFFSET; i++) {
202
+ this.data[i] = this.initialValue;
203
+ }
204
+ this.dataNullOffset = DATA_NULL_OFFSET;
205
+ this.dataLength = NEW_DATA_START_OFFSET;
206
+ i = 0;
207
+ for (j = 0; j < 128; j += DATA_BLOCK_LENGTH2) {
208
+ this.index2[i] = j;
209
+ this.map[i++] = 1;
210
+ }
211
+ for (; j < 192; j += DATA_BLOCK_LENGTH2) {
212
+ this.map[i++] = 0;
213
+ }
214
+ this.map[i++] = (1114112 >> SHIFT_22) - (128 >> SHIFT_22) + 1 + LSCP_INDEX_2_LENGTH2;
215
+ j += DATA_BLOCK_LENGTH2;
216
+ for (; j < NEW_DATA_START_OFFSET; j += DATA_BLOCK_LENGTH2) {
217
+ this.map[i++] = 0;
218
+ }
219
+ for (i = 128 >> SHIFT_22; i < INDEX_2_BMP_LENGTH2; i++) {
220
+ this.index2[i] = DATA_NULL_OFFSET;
221
+ }
222
+ for (i = 0; i < INDEX_GAP_LENGTH; i++) {
223
+ this.index2[INDEX_GAP_OFFSET + i] = -1;
224
+ }
225
+ for (i = 0; i < INDEX_2_BLOCK_LENGTH2; i++) {
226
+ this.index2[INDEX_2_NULL_OFFSET + i] = DATA_NULL_OFFSET;
227
+ }
228
+ this.index2NullOffset = INDEX_2_NULL_OFFSET;
229
+ this.index2Length = INDEX_2_START_OFFSET;
230
+ j = 0;
231
+ for (i = 0; i < OMITTED_BMP_INDEX_1_LENGTH2; i++) {
232
+ this.index1[i] = j;
233
+ j += INDEX_2_BLOCK_LENGTH2;
234
+ }
235
+ for (; i < INDEX_1_LENGTH; i++) {
236
+ this.index1[i] = INDEX_2_NULL_OFFSET;
237
+ }
238
+ for (i = 128; i < 2048; i += DATA_BLOCK_LENGTH2) {
239
+ this.set(i, this.initialValue);
240
+ }
241
+ }
242
+ /**
243
+ * @param {number} codePoint
244
+ * @param {number} value
245
+ * @returns {this}
246
+ */
247
+ set(codePoint, value) {
248
+ if (codePoint < 0 || codePoint > 1114111) {
249
+ throw new Error("Invalid code point");
250
+ }
251
+ if (this.isCompacted) {
252
+ throw new Error("Already compacted");
253
+ }
254
+ const block = this._getDataBlock(codePoint, true);
255
+ this.data[block + (codePoint & DATA_MASK2)] = value;
256
+ return this;
257
+ }
258
+ /**
259
+ * @param {number} start
260
+ * @param {number} end
261
+ * @param {number} value
262
+ * @param {boolean} [overwrite=true]
263
+ * @returns {this}
264
+ */
265
+ setRange(start, end, value, overwrite) {
266
+ let block, repeatBlock;
267
+ if (overwrite == null) {
268
+ overwrite = true;
269
+ }
270
+ if (start > 1114111 || end > 1114111 || start > end) {
271
+ throw new Error("Invalid code point");
272
+ }
273
+ if (this.isCompacted) {
274
+ throw new Error("Already compacted");
275
+ }
276
+ if (!overwrite && value === this.initialValue) {
277
+ return this;
278
+ }
279
+ let limit = end + 1;
280
+ if ((start & DATA_MASK2) !== 0) {
281
+ block = this._getDataBlock(start, true);
282
+ const nextStart = start + DATA_BLOCK_LENGTH2 & ~DATA_MASK2;
283
+ if (nextStart <= limit) {
284
+ this._fillBlock(block, start & DATA_MASK2, DATA_BLOCK_LENGTH2, value, this.initialValue, overwrite);
285
+ start = nextStart;
286
+ } else {
287
+ this._fillBlock(block, start & DATA_MASK2, limit & DATA_MASK2, value, this.initialValue, overwrite);
288
+ return this;
289
+ }
290
+ }
291
+ const rest = limit & DATA_MASK2;
292
+ limit &= ~DATA_MASK2;
293
+ if (value === this.initialValue) {
294
+ repeatBlock = this.dataNullOffset;
295
+ } else {
296
+ repeatBlock = -1;
297
+ }
298
+ while (start < limit) {
299
+ let setRepeatBlock = false;
300
+ if (value === this.initialValue && this._isInNullBlock(start, true)) {
301
+ start += DATA_BLOCK_LENGTH2;
302
+ continue;
303
+ }
304
+ let i2 = this._getIndex2Block(start, true);
305
+ i2 += start >> SHIFT_22 & INDEX_2_MASK2;
306
+ block = this.index2[i2];
307
+ if (this._isWritableBlock(block)) {
308
+ if (overwrite && block >= DATA_0800_OFFSET) {
309
+ setRepeatBlock = true;
310
+ } else {
311
+ this._fillBlock(block, 0, DATA_BLOCK_LENGTH2, value, this.initialValue, overwrite);
312
+ }
313
+ } else if (this.data[block] !== value && (overwrite || block === this.dataNullOffset)) {
314
+ setRepeatBlock = true;
315
+ }
316
+ if (setRepeatBlock) {
317
+ if (repeatBlock >= 0) {
318
+ this._setIndex2Entry(i2, repeatBlock);
319
+ } else {
320
+ repeatBlock = this._getDataBlock(start, true);
321
+ this._writeBlock(repeatBlock, value);
322
+ }
323
+ }
324
+ start += DATA_BLOCK_LENGTH2;
325
+ }
326
+ if (rest > 0) {
327
+ block = this._getDataBlock(start, true);
328
+ this._fillBlock(block, 0, rest, value, this.initialValue, overwrite);
329
+ }
330
+ return this;
331
+ }
332
+ /**
333
+ * @param {number} c
334
+ * @param {boolean} [fromLSCP=true]
335
+ * @returns {number}
336
+ */
337
+ get(c, fromLSCP) {
338
+ let i2;
339
+ if (fromLSCP == null) {
340
+ fromLSCP = true;
341
+ }
342
+ if (c < 0 || c > 1114111) {
343
+ return this.errorValue;
344
+ }
345
+ if (c >= this.highStart && (!(c >= 55296 && c < 56320) || fromLSCP)) {
346
+ return this.data[this.dataLength - DATA_GRANULARITY2];
347
+ }
348
+ if (c >= 55296 && c < 56320 && fromLSCP) {
349
+ i2 = LSCP_INDEX_2_OFFSET2 - (55296 >> SHIFT_22) + (c >> SHIFT_22);
350
+ } else {
351
+ i2 = this.index1[c >> SHIFT_12] + (c >> SHIFT_22 & INDEX_2_MASK2);
352
+ }
353
+ const block = this.index2[i2];
354
+ return this.data[block + (c & DATA_MASK2)];
355
+ }
356
+ /**
357
+ * @param {number} c
358
+ * @param {boolean} forLSCP
359
+ * @returns {boolean}
360
+ */
361
+ _isInNullBlock(c, forLSCP) {
362
+ let i2;
363
+ if ((c & 4294966272) === 55296 && forLSCP) {
364
+ i2 = LSCP_INDEX_2_OFFSET2 - (55296 >> SHIFT_22) + (c >> SHIFT_22);
365
+ } else {
366
+ i2 = this.index1[c >> SHIFT_12] + (c >> SHIFT_22 & INDEX_2_MASK2);
367
+ }
368
+ const block = this.index2[i2];
369
+ return block === this.dataNullOffset;
370
+ }
371
+ /**
372
+ * @returns {number}
373
+ */
374
+ _allocIndex2Block() {
375
+ const newBlock = this.index2Length;
376
+ const newTop = newBlock + INDEX_2_BLOCK_LENGTH2;
377
+ if (newTop > this.index2.length) {
378
+ throw new Error("Internal error in Trie2 creation.");
379
+ }
380
+ this.index2Length = newTop;
381
+ this.index2.set(this.index2.subarray(this.index2NullOffset, this.index2NullOffset + INDEX_2_BLOCK_LENGTH2), newBlock);
382
+ return newBlock;
383
+ }
384
+ /**
385
+ * @param {number} c
386
+ * @param {boolean} forLSCP
387
+ * @returns {number}
388
+ */
389
+ _getIndex2Block(c, forLSCP) {
390
+ if (c >= 55296 && c < 56320 && forLSCP) {
391
+ return LSCP_INDEX_2_OFFSET2;
392
+ }
393
+ const i1 = c >> SHIFT_12;
394
+ let i2 = this.index1[i1];
395
+ if (i2 === this.index2NullOffset) {
396
+ i2 = this._allocIndex2Block();
397
+ this.index1[i1] = i2;
398
+ }
399
+ return i2;
400
+ }
401
+ /**
402
+ * @param {number} block
403
+ * @returns {boolean}
404
+ */
405
+ _isWritableBlock(block) {
406
+ return block !== this.dataNullOffset && this.map[block >> SHIFT_22] === 1;
407
+ }
408
+ /**
409
+ * @param {number} copyBlock
410
+ * @returns {number}
411
+ */
412
+ _allocDataBlock(copyBlock) {
413
+ let newBlock;
414
+ if (this.firstFreeBlock !== 0) {
415
+ newBlock = this.firstFreeBlock;
416
+ this.firstFreeBlock = -this.map[newBlock >> SHIFT_22];
417
+ } else {
418
+ newBlock = this.dataLength;
419
+ const newTop = newBlock + DATA_BLOCK_LENGTH2;
420
+ if (newTop > this.dataCapacity) {
421
+ let capacity;
422
+ if (this.dataCapacity < MEDIUM_DATA_LENGTH) {
423
+ capacity = MEDIUM_DATA_LENGTH;
424
+ } else if (this.dataCapacity < MAX_DATA_LENGTH_BUILDTIME) {
425
+ capacity = MAX_DATA_LENGTH_BUILDTIME;
426
+ } else {
427
+ throw new Error("Internal error in Trie2 creation.");
428
+ }
429
+ const newData = new Uint32Array(capacity);
430
+ newData.set(this.data.subarray(0, this.dataLength));
431
+ this.data = newData;
432
+ this.dataCapacity = capacity;
433
+ }
434
+ this.dataLength = newTop;
435
+ }
436
+ this.data.set(this.data.subarray(copyBlock, copyBlock + DATA_BLOCK_LENGTH2), newBlock);
437
+ this.map[newBlock >> SHIFT_22] = 0;
438
+ return newBlock;
439
+ }
440
+ /**
441
+ * @param {number} block
442
+ * @returns {void}
443
+ */
444
+ _releaseDataBlock(block) {
445
+ this.map[block >> SHIFT_22] = -this.firstFreeBlock;
446
+ this.firstFreeBlock = block;
447
+ }
448
+ /**
449
+ * @param {number} i2
450
+ * @param {number} block
451
+ * @returns {void}
452
+ */
453
+ _setIndex2Entry(i2, block) {
454
+ ++this.map[block >> SHIFT_22];
455
+ const oldBlock = this.index2[i2];
456
+ if (--this.map[oldBlock >> SHIFT_22] === 0) {
457
+ this._releaseDataBlock(oldBlock);
458
+ }
459
+ this.index2[i2] = block;
460
+ }
461
+ /**
462
+ * @param {number} c
463
+ * @param {boolean} forLSCP
464
+ * @returns {number}
465
+ */
466
+ _getDataBlock(c, forLSCP) {
467
+ let i2 = this._getIndex2Block(c, forLSCP);
468
+ i2 += c >> SHIFT_22 & INDEX_2_MASK2;
469
+ const oldBlock = this.index2[i2];
470
+ if (this._isWritableBlock(oldBlock)) {
471
+ return oldBlock;
472
+ }
473
+ const newBlock = this._allocDataBlock(oldBlock);
474
+ this._setIndex2Entry(i2, newBlock);
475
+ return newBlock;
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
+ */
486
+ _fillBlock(block, start, limit, value, initialValue, overwrite) {
487
+ let i;
488
+ if (overwrite) {
489
+ for (i = block + start; i < block + limit; i++) {
490
+ this.data[i] = value;
491
+ }
492
+ } else {
493
+ for (i = block + start; i < block + limit; i++) {
494
+ if (this.data[i] === initialValue) {
495
+ this.data[i] = value;
496
+ }
497
+ }
498
+ }
499
+ }
500
+ /**
501
+ * @param {number} block
502
+ * @param {number} value
503
+ * @returns {void}
504
+ */
505
+ _writeBlock(block, value) {
506
+ const limit = block + DATA_BLOCK_LENGTH2;
507
+ while (block < limit) {
508
+ this.data[block++] = value;
509
+ }
510
+ }
511
+ /**
512
+ * @param {number} highValue
513
+ * @returns {number}
514
+ */
515
+ _findHighStart(highValue) {
516
+ let prevBlock, prevI2Block;
517
+ const data32 = this.data;
518
+ const { initialValue } = this;
519
+ const { index2NullOffset } = this;
520
+ const nullBlock = this.dataNullOffset;
521
+ if (highValue === initialValue) {
522
+ prevI2Block = index2NullOffset;
523
+ prevBlock = nullBlock;
524
+ } else {
525
+ prevI2Block = -1;
526
+ prevBlock = -1;
527
+ }
528
+ const prev = 1114112;
529
+ let i1 = INDEX_1_LENGTH;
530
+ let c = prev;
531
+ while (c > 0) {
532
+ const i2Block = this.index1[--i1];
533
+ if (i2Block === prevI2Block) {
534
+ c -= CP_PER_INDEX_1_ENTRY;
535
+ continue;
536
+ }
537
+ prevI2Block = i2Block;
538
+ if (i2Block === index2NullOffset) {
539
+ if (highValue !== initialValue) {
540
+ return c;
541
+ }
542
+ c -= CP_PER_INDEX_1_ENTRY;
543
+ } else {
544
+ let i2 = INDEX_2_BLOCK_LENGTH2;
545
+ while (i2 > 0) {
546
+ const block = this.index2[i2Block + --i2];
547
+ if (block === prevBlock) {
548
+ c -= DATA_BLOCK_LENGTH2;
549
+ continue;
550
+ }
551
+ prevBlock = block;
552
+ if (block === nullBlock) {
553
+ if (highValue !== initialValue) {
554
+ return c;
555
+ }
556
+ c -= DATA_BLOCK_LENGTH2;
557
+ } else {
558
+ let j = DATA_BLOCK_LENGTH2;
559
+ while (j > 0) {
560
+ const value = data32[block + --j];
561
+ if (value !== highValue) {
562
+ return c;
563
+ }
564
+ --c;
565
+ }
566
+ }
567
+ }
568
+ }
569
+ }
570
+ return 0;
571
+ }
572
+ /**
573
+ * @param {number} dataLength
574
+ * @param {number} otherBlock
575
+ * @param {number} blockLength
576
+ * @returns {number}
577
+ */
578
+ _findSameDataBlock(dataLength, otherBlock, blockLength) {
579
+ dataLength -= blockLength;
580
+ let block = 0;
581
+ while (block <= dataLength) {
582
+ if (equal_int(this.data, block, otherBlock, blockLength)) {
583
+ return block;
584
+ }
585
+ block += DATA_GRANULARITY2;
586
+ }
587
+ return -1;
588
+ }
589
+ /**
590
+ * @param {number} index2Length
591
+ * @param {number} otherBlock
592
+ * @returns {number}
593
+ */
594
+ _findSameIndex2Block(index2Length, otherBlock) {
595
+ index2Length -= INDEX_2_BLOCK_LENGTH2;
596
+ for (let block = 0; block <= index2Length; block++) {
597
+ if (equal_int(this.index2, block, otherBlock, INDEX_2_BLOCK_LENGTH2)) {
598
+ return block;
599
+ }
600
+ }
601
+ return -1;
602
+ }
603
+ /**
604
+ * @returns {void}
605
+ */
606
+ _compactData() {
607
+ let newStart = DATA_START_OFFSET;
608
+ let start = 0;
609
+ let i = 0;
610
+ while (start < newStart) {
611
+ this.map[i++] = start;
612
+ start += DATA_BLOCK_LENGTH2;
613
+ }
614
+ let blockLength = 64;
615
+ let blockCount = blockLength >> SHIFT_22;
616
+ start = newStart;
617
+ while (start < this.dataLength) {
618
+ var mapIndex, movedStart;
619
+ if (start === DATA_0800_OFFSET) {
620
+ blockLength = DATA_BLOCK_LENGTH2;
621
+ blockCount = 1;
622
+ }
623
+ if (this.map[start >> SHIFT_22] <= 0) {
624
+ start += blockLength;
625
+ continue;
626
+ }
627
+ if ((movedStart = this._findSameDataBlock(newStart, start, blockLength)) >= 0) {
628
+ mapIndex = start >> SHIFT_22;
629
+ for (i = blockCount; i > 0; i--) {
630
+ this.map[mapIndex++] = movedStart;
631
+ movedStart += DATA_BLOCK_LENGTH2;
632
+ }
633
+ start += blockLength;
634
+ continue;
635
+ }
636
+ let overlap = blockLength - DATA_GRANULARITY2;
637
+ while (overlap > 0 && !equal_int(this.data, newStart - overlap, start, overlap)) {
638
+ overlap -= DATA_GRANULARITY2;
639
+ }
640
+ if (overlap > 0 || newStart < start) {
641
+ movedStart = newStart - overlap;
642
+ mapIndex = start >> SHIFT_22;
643
+ for (i = blockCount; i > 0; i--) {
644
+ this.map[mapIndex++] = movedStart;
645
+ movedStart += DATA_BLOCK_LENGTH2;
646
+ }
647
+ start += overlap;
648
+ for (i = blockLength - overlap; i > 0; i--) {
649
+ this.data[newStart++] = this.data[start++];
650
+ }
651
+ } else {
652
+ mapIndex = start >> SHIFT_22;
653
+ for (i = blockCount; i > 0; i--) {
654
+ this.map[mapIndex++] = start;
655
+ start += DATA_BLOCK_LENGTH2;
656
+ }
657
+ newStart = start;
658
+ }
659
+ }
660
+ i = 0;
661
+ while (i < this.index2Length) {
662
+ if (i === INDEX_GAP_OFFSET) {
663
+ i += INDEX_GAP_LENGTH;
664
+ }
665
+ this.index2[i] = this.map[this.index2[i] >> SHIFT_22];
666
+ ++i;
667
+ }
668
+ this.dataNullOffset = this.map[this.dataNullOffset >> SHIFT_22];
669
+ while ((newStart & DATA_GRANULARITY2 - 1) !== 0) {
670
+ this.data[newStart++] = this.initialValue;
671
+ }
672
+ this.dataLength = newStart;
673
+ }
674
+ /**
675
+ * @returns {void}
676
+ */
677
+ _compactIndex2() {
678
+ let newStart = INDEX_2_BMP_LENGTH2;
679
+ let start = 0;
680
+ let i = 0;
681
+ while (start < newStart) {
682
+ this.map[i++] = start;
683
+ start += INDEX_2_BLOCK_LENGTH2;
684
+ }
685
+ newStart += UTF8_2B_INDEX_2_LENGTH2 + (this.highStart - 65536 >> SHIFT_12);
686
+ start = INDEX_2_NULL_OFFSET;
687
+ while (start < this.index2Length) {
688
+ var movedStart;
689
+ if ((movedStart = this._findSameIndex2Block(newStart, start)) >= 0) {
690
+ this.map[start >> SHIFT_1_22] = movedStart;
691
+ start += INDEX_2_BLOCK_LENGTH2;
692
+ continue;
693
+ }
694
+ let overlap = INDEX_2_BLOCK_LENGTH2 - 1;
695
+ while (overlap > 0 && !equal_int(this.index2, newStart - overlap, start, overlap)) {
696
+ --overlap;
697
+ }
698
+ if (overlap > 0 || newStart < start) {
699
+ this.map[start >> SHIFT_1_22] = newStart - overlap;
700
+ start += overlap;
701
+ for (i = INDEX_2_BLOCK_LENGTH2 - overlap; i > 0; i--) {
702
+ this.index2[newStart++] = this.index2[start++];
703
+ }
704
+ } else {
705
+ this.map[start >> SHIFT_1_22] = start;
706
+ start += INDEX_2_BLOCK_LENGTH2;
707
+ newStart = start;
708
+ }
709
+ }
710
+ for (i = 0; i < INDEX_1_LENGTH; i++) {
711
+ this.index1[i] = this.map[this.index1[i] >> SHIFT_1_22];
712
+ }
713
+ this.index2NullOffset = this.map[this.index2NullOffset >> SHIFT_1_22];
714
+ while ((newStart & (DATA_GRANULARITY2 - 1 | 1)) !== 0) {
715
+ this.index2[newStart++] = 65535 << INDEX_SHIFT2;
716
+ }
717
+ this.index2Length = newStart;
718
+ }
719
+ /**
720
+ * @returns {void}
721
+ */
722
+ _compact() {
723
+ let highValue = this.get(1114111);
724
+ let highStart = this._findHighStart(highValue);
725
+ highStart = highStart + (CP_PER_INDEX_1_ENTRY - 1) & ~(CP_PER_INDEX_1_ENTRY - 1);
726
+ if (highStart === 1114112) {
727
+ highValue = this.errorValue;
728
+ }
729
+ this.highStart = highStart;
730
+ if (this.highStart < 1114112) {
731
+ const suppHighStart = this.highStart <= 65536 ? 65536 : this.highStart;
732
+ this.setRange(suppHighStart, 1114111, this.initialValue, true);
733
+ }
734
+ this._compactData();
735
+ if (this.highStart > 65536) {
736
+ this._compactIndex2();
737
+ }
738
+ this.data[this.dataLength++] = highValue;
739
+ while ((this.dataLength & DATA_GRANULARITY2 - 1) !== 0) {
740
+ this.data[this.dataLength++] = this.initialValue;
741
+ }
742
+ this.isCompacted = true;
743
+ }
744
+ /**
745
+ * @returns {import('./index.js').default}
746
+ */
747
+ freeze() {
748
+ let allIndexesLength, i;
749
+ if (!this.isCompacted) {
750
+ this._compact();
751
+ }
752
+ if (this.highStart <= 65536) {
753
+ allIndexesLength = INDEX_1_OFFSET2;
754
+ } else {
755
+ allIndexesLength = this.index2Length;
756
+ }
757
+ const dataMove = allIndexesLength;
758
+ if (allIndexesLength > MAX_INDEX_LENGTH || dataMove + this.dataNullOffset > 65535 || dataMove + DATA_0800_OFFSET > 65535 || dataMove + this.dataLength > MAX_DATA_LENGTH_RUNTIME) {
759
+ throw new Error("Trie data is too large.");
760
+ }
761
+ const indexLength = allIndexesLength + this.dataLength;
762
+ const data = new Int32Array(indexLength);
763
+ let destIdx = 0;
764
+ for (i = 0; i < INDEX_2_BMP_LENGTH2; i++) {
765
+ data[destIdx++] = this.index2[i] + dataMove >> INDEX_SHIFT2;
766
+ }
767
+ for (i = 0; i < 194 - 192; i++) {
768
+ data[destIdx++] = dataMove + BAD_UTF8_DATA_OFFSET;
769
+ }
770
+ for (; i < 224 - 192; i++) {
771
+ data[destIdx++] = dataMove + this.index2[i << 6 - SHIFT_22];
772
+ }
773
+ if (this.highStart > 65536) {
774
+ const index1Length = this.highStart - 65536 >> SHIFT_12;
775
+ const index2Offset = INDEX_2_BMP_LENGTH2 + UTF8_2B_INDEX_2_LENGTH2 + index1Length;
776
+ for (i = 0; i < index1Length; i++) {
777
+ data[destIdx++] = INDEX_2_OFFSET + this.index1[i + OMITTED_BMP_INDEX_1_LENGTH2];
778
+ }
779
+ for (i = 0; i < this.index2Length - index2Offset; i++) {
780
+ data[destIdx++] = dataMove + this.index2[index2Offset + i] >> INDEX_SHIFT2;
781
+ }
782
+ }
783
+ for (i = 0; i < this.dataLength; i++) {
784
+ data[destIdx++] = this.data[i];
785
+ }
786
+ const dest = new index_default({
787
+ data,
788
+ highStart: this.highStart,
789
+ errorValue: this.errorValue
790
+ });
791
+ return dest;
792
+ }
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
+ */
803
+ toBuffer() {
804
+ const trie = this.freeze();
805
+ const data = new Uint8Array(trie.data.buffer);
806
+ swap32LE(data);
807
+ const compressed = (0, import_fflate2.deflateSync)(data);
808
+ const buf = Buffer.alloc(compressed.length + 12);
809
+ buf.writeUInt32LE(trie.highStart, 0);
810
+ buf.writeUInt32LE(trie.errorValue, 4);
811
+ buf.writeUInt32LE(data.length, 8);
812
+ for (let i = 0; i < compressed.length; i++) {
813
+ const b = compressed[i];
814
+ buf[i + 12] = b;
815
+ }
816
+ return buf;
817
+ }
818
+ };
819
+ var builder_default = UnicodeTrieBuilder;
820
+ module.exports = module.exports.default ?? module.exports;
821
+ //# sourceMappingURL=builder.cjs.map