pdf-parser.js 5.2.27 → 5.2.28

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 (145) hide show
  1. package/dist/{afm-widths-BYiX2L9D.cjs → afm-widths-BHD2HZIL.cjs} +553 -642
  2. package/dist/{afm-widths-blUDDjlI.js → afm-widths-B_IGbGky.js} +553 -642
  3. package/dist/afm-widths.cjs +1 -1
  4. package/dist/afm-widths.js +1 -1
  5. package/dist/annotations.cjs +5 -3
  6. package/dist/annotations.js +5 -3
  7. package/dist/builtin-encoding.cjs +17 -6
  8. package/dist/builtin-encoding.js +17 -6
  9. package/dist/bytes/crc32.cjs +5 -3
  10. package/dist/bytes/crc32.js +5 -3
  11. package/dist/bytes/flate.cjs +0 -1
  12. package/dist/bytes/flate.js +0 -1
  13. package/dist/cff-bounds.cjs +42 -24
  14. package/dist/cff-bounds.js +42 -24
  15. package/dist/cff.cjs +13 -6
  16. package/dist/cff.js +13 -6
  17. package/dist/cmap-table.cjs +54 -26
  18. package/dist/cmap-table.js +54 -26
  19. package/dist/cmap.cjs +5 -3
  20. package/dist/cmap.js +5 -3
  21. package/dist/content-write.cjs +3 -2
  22. package/dist/content-write.js +3 -2
  23. package/dist/crypto/aes.cjs +76 -55
  24. package/dist/crypto/aes.js +76 -55
  25. package/dist/crypto/md5.cjs +345 -149
  26. package/dist/crypto/md5.js +345 -149
  27. package/dist/crypto/rc4.cjs +5 -4
  28. package/dist/crypto/rc4.js +5 -4
  29. package/dist/crypto/sha2.cjs +92 -43
  30. package/dist/crypto/sha2.js +92 -43
  31. package/dist/embedded-font.cjs +4 -2
  32. package/dist/embedded-font.js +4 -2
  33. package/dist/encoding.cjs +1 -1
  34. package/dist/encoding.js +1 -1
  35. package/dist/encrypt-write.cjs +25 -21
  36. package/dist/encrypt-write.js +25 -21
  37. package/dist/encrypt.cjs +43 -64
  38. package/dist/encrypt.js +43 -64
  39. package/dist/filters.cjs +40 -20
  40. package/dist/filters.js +40 -20
  41. package/dist/font-face.cjs +2 -1
  42. package/dist/font-face.js +2 -1
  43. package/dist/font-read.cjs +12 -6
  44. package/dist/font-read.js +12 -6
  45. package/dist/font-tables.cjs +55 -28
  46. package/dist/font-tables.js +55 -28
  47. package/dist/gdef-table.cjs +6 -3
  48. package/dist/gdef-table.js +6 -3
  49. package/dist/glyf-contours.cjs +3 -1
  50. package/dist/glyf-contours.js +3 -1
  51. package/dist/glyf.cjs +22 -11
  52. package/dist/glyf.js +22 -11
  53. package/dist/gpos-table.cjs +37 -19
  54. package/dist/gpos-table.js +37 -19
  55. package/dist/gsub-table.cjs +28 -17
  56. package/dist/gsub-table.js +28 -17
  57. package/dist/hmtx-table.cjs +5 -3
  58. package/dist/hmtx-table.js +5 -3
  59. package/dist/image/ccitt-encode.cjs +8 -5
  60. package/dist/image/ccitt-encode.js +8 -5
  61. package/dist/image/ccitt.cjs +801 -209
  62. package/dist/image/ccitt.js +801 -209
  63. package/dist/image/jbig2-arith.cjs +340 -306
  64. package/dist/image/jbig2-arith.js +340 -306
  65. package/dist/image/jbig2-bitmap.cjs +8 -5
  66. package/dist/image/jbig2-bitmap.js +8 -5
  67. package/dist/image/jbig2-generic.cjs +240 -69
  68. package/dist/image/jbig2-generic.js +240 -69
  69. package/dist/image/jbig2-text.cjs +4 -2
  70. package/dist/image/jbig2-text.js +4 -2
  71. package/dist/image/jbig2.cjs +69 -31
  72. package/dist/image/jbig2.js +69 -31
  73. package/dist/image/jp2-boxes.cjs +52 -27
  74. package/dist/image/jp2-boxes.js +52 -27
  75. package/dist/image/jpeg-info.cjs +29 -24
  76. package/dist/image/jpeg-info.js +29 -24
  77. package/dist/image/jpeg2000-codestream.cjs +44 -24
  78. package/dist/image/jpeg2000-codestream.js +44 -24
  79. package/dist/image/jpeg2000-dwt.cjs +2 -1
  80. package/dist/image/jpeg2000-dwt.js +2 -1
  81. package/dist/image/jpeg2000-t1.cjs +21 -11
  82. package/dist/image/jpeg2000-t1.js +21 -11
  83. package/dist/image/jpeg2000-t2.cjs +12 -5
  84. package/dist/image/jpeg2000-t2.js +12 -5
  85. package/dist/image/jpeg2000-tagtree.cjs +8 -4
  86. package/dist/image/jpeg2000-tagtree.js +8 -4
  87. package/dist/image/jpeg2000.cjs +11 -6
  88. package/dist/image/jpeg2000.js +11 -6
  89. package/dist/image/png-decode.cjs +62 -39
  90. package/dist/image/png-decode.d.cts +3 -2
  91. package/dist/image/png-decode.d.ts +3 -2
  92. package/dist/image/png-decode.js +62 -39
  93. package/dist/image/png-filter.cjs +23 -15
  94. package/dist/image/png-filter.js +23 -15
  95. package/dist/images-read.cjs +41 -36
  96. package/dist/images-read.js +41 -36
  97. package/dist/index.cjs +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/interpret.cjs +39 -24
  100. package/dist/interpret.js +39 -24
  101. package/dist/lexer.cjs +86 -51
  102. package/dist/lexer.js +86 -51
  103. package/dist/math-content-write.cjs +9 -5
  104. package/dist/math-content-write.js +9 -5
  105. package/dist/math-font-write.cjs +2 -1
  106. package/dist/math-font-write.js +2 -1
  107. package/dist/math-font.cjs +16 -7
  108. package/dist/math-font.js +16 -7
  109. package/dist/math-table.cjs +25 -13
  110. package/dist/math-table.js +25 -13
  111. package/dist/matrix.cjs +3 -2
  112. package/dist/matrix.js +3 -2
  113. package/dist/measure.cjs +1 -1
  114. package/dist/measure.js +1 -1
  115. package/dist/navigation.cjs +10 -5
  116. package/dist/navigation.js +10 -5
  117. package/dist/ot-layout-common.cjs +4 -2
  118. package/dist/ot-layout-common.js +4 -2
  119. package/dist/parse.cjs +7 -5
  120. package/dist/parse.js +7 -5
  121. package/dist/pdf-text.cjs +5 -2
  122. package/dist/pdf-text.js +5 -2
  123. package/dist/predictors.cjs +14 -9
  124. package/dist/predictors.js +14 -9
  125. package/dist/raster.cjs +30 -19
  126. package/dist/raster.js +30 -19
  127. package/dist/read.cjs +17 -8
  128. package/dist/read.js +17 -8
  129. package/dist/serialize.cjs +6 -2
  130. package/dist/serialize.js +6 -2
  131. package/dist/sfnt-subset.cjs +25 -13
  132. package/dist/sfnt-subset.js +25 -13
  133. package/dist/sfnt.cjs +20 -10
  134. package/dist/sfnt.js +20 -10
  135. package/dist/text-group.cjs +0 -1
  136. package/dist/text-group.js +0 -1
  137. package/dist/tounicode.cjs +4 -2
  138. package/dist/tounicode.js +4 -2
  139. package/dist/winansi.cjs +1 -1
  140. package/dist/winansi.js +1 -1
  141. package/dist/write.cjs +20 -12
  142. package/dist/write.js +20 -12
  143. package/dist/xref.cjs +5 -2
  144. package/dist/xref.js +5 -2
  145. package/package.json +1 -1
@@ -20,6 +20,13 @@ const LEFT_SIDE_BEARING_SIZE = 2;
20
20
  const LOCA_LONG_ENTRY_SIZE = 4;
21
21
  const TABLE_DIRECTORY_HEADER_SIZE = 12;
22
22
  const TABLE_RECORD_SIZE = 16;
23
+ const SFNT_HEADER_NUM_TABLES_OFFSET = 4;
24
+ const SFNT_HEADER_SEARCH_RANGE_OFFSET = 6;
25
+ const SFNT_HEADER_ENTRY_SELECTOR_OFFSET = 8;
26
+ const SFNT_HEADER_RANGE_SHIFT_OFFSET = 10;
27
+ const TABLE_RECORD_CHECKSUM_OFFSET = 4;
28
+ const TABLE_RECORD_TABLE_OFFSET_OFFSET = 8;
29
+ const TABLE_RECORD_LENGTH_OFFSET = 12;
23
30
  const SFNT_VERSION_TRUETYPE = 65536;
24
31
  const CHECKSUM_ADJUSTMENT_MAGIC = 2981146554;
25
32
  const GLYPH_ALIGNMENT = 4;
@@ -31,15 +38,20 @@ const COPIED_TAGS = [
31
38
  function alignUp(value) {
32
39
  return Math.ceil(value / GLYPH_ALIGNMENT) * GLYPH_ALIGNMENT;
33
40
  }
41
+ const BITS_PER_BYTE = 8;
42
+ const BYTE_MASK = 255;
43
+ const U32_BYTE_2_SHIFT = 16;
44
+ const U32_BYTE_1_SHIFT = 24;
45
+ const U32_LAST_BYTE_OFFSET = 3;
34
46
  function writeU16(bytes, offset, value) {
35
- bytes[offset] = value >>> 8 & 255;
36
- bytes[offset + 1] = value & 255;
47
+ bytes[offset] = value >>> BITS_PER_BYTE & BYTE_MASK;
48
+ bytes[offset + 1] = value & BYTE_MASK;
37
49
  }
38
50
  function writeU32(bytes, offset, value) {
39
- bytes[offset] = value >>> 24 & 255;
40
- bytes[offset + 1] = value >>> 16 & 255;
41
- bytes[offset + 2] = value >>> 8 & 255;
42
- bytes[offset + 3] = value & 255;
51
+ bytes[offset] = value >>> U32_BYTE_1_SHIFT & BYTE_MASK;
52
+ bytes[offset + 1] = value >>> U32_BYTE_2_SHIFT & BYTE_MASK;
53
+ bytes[offset + 2] = value >>> BITS_PER_BYTE & BYTE_MASK;
54
+ bytes[offset + U32_LAST_BYTE_OFFSET] = value & BYTE_MASK;
43
55
  }
44
56
  function checksum(bytes, offset, length) {
45
57
  let sum = 0;
@@ -229,19 +241,19 @@ function subsetSfnt(font, codePoints, extraGlyphIds = []) {
229
241
  }
230
242
  const file = new Uint8Array(fileLength);
231
243
  writeU32(file, 0, SFNT_VERSION_TRUETYPE);
232
- writeU16(file, 4, numTables);
233
- writeU16(file, 6, searchRange);
234
- writeU16(file, 8, entrySelector);
235
- writeU16(file, 10, rangeShift);
244
+ writeU16(file, SFNT_HEADER_NUM_TABLES_OFFSET, numTables);
245
+ writeU16(file, SFNT_HEADER_SEARCH_RANGE_OFFSET, searchRange);
246
+ writeU16(file, SFNT_HEADER_ENTRY_SELECTOR_OFFSET, entrySelector);
247
+ writeU16(file, SFNT_HEADER_RANGE_SHIFT_OFFSET, rangeShift);
236
248
  for (let i = 0; i < numTables; i++) {
237
249
  const table = tables[i];
238
250
  const tableOffset = offsets[i];
239
251
  file.set(table.data, tableOffset);
240
252
  const recordOffset = TABLE_DIRECTORY_HEADER_SIZE + i * TABLE_RECORD_SIZE;
241
253
  for (let c = 0; c < table.tag.length; c++) file[recordOffset + c] = table.tag.charCodeAt(c);
242
- writeU32(file, recordOffset + 4, checksum(file, tableOffset, alignUp(table.data.length)));
243
- writeU32(file, recordOffset + 8, tableOffset);
244
- writeU32(file, recordOffset + 12, table.data.length);
254
+ writeU32(file, recordOffset + TABLE_RECORD_CHECKSUM_OFFSET, checksum(file, tableOffset, alignUp(table.data.length)));
255
+ writeU32(file, recordOffset + TABLE_RECORD_TABLE_OFFSET_OFFSET, tableOffset);
256
+ writeU32(file, recordOffset + TABLE_RECORD_LENGTH_OFFSET, table.data.length);
245
257
  }
246
258
  const headOffsetInFile = offsets[tables.findIndex((table) => table.tag === "head")];
247
259
  writeU32(file, headOffsetInFile + HEAD_CHECKSUM_ADJUSTMENT_OFFSET, CHECKSUM_ADJUSTMENT_MAGIC - checksum(file, 0, fileLength) >>> 0);
package/dist/sfnt.cjs CHANGED
@@ -3,6 +3,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const TABLE_DIRECTORY_HEADER_SIZE = 12;
4
4
  const TABLE_RECORD_SIZE = 16;
5
5
  const TABLE_TAG_SIZE = 4;
6
+ const BITS_PER_BYTE = 8;
7
+ const UINT32_BYTE_COUNT = 4;
8
+ const TABLE_DIRECTORY_NUM_TABLES_FIELD = 4;
9
+ const TABLE_RECORD_OFFSET_FIELD = 8;
10
+ const TABLE_RECORD_LENGTH_FIELD = 12;
11
+ const PRINTABLE_ASCII_MIN = 32;
12
+ const PRINTABLE_ASCII_MAX = 126;
6
13
  const SFNT_VERSIONS = /* @__PURE__ */ new Set([
7
14
  65536,
8
15
  1330926671,
@@ -16,16 +23,16 @@ function requireBytes(bytes, offset, length) {
16
23
  if (!hasBytes(bytes, offset, length)) throw new Error(`sfnt read of ${String(length)} byte(s) at offset ${String(offset)} is outside the ${String(bytes.length)}-byte range`);
17
24
  }
18
25
  function readUint16(bytes, offset) {
19
- return bytes[offset] << 8 | bytes[offset + 1];
26
+ return bytes[offset] << BITS_PER_BYTE | bytes[offset + 1];
20
27
  }
21
28
  function readUint32(bytes, offset) {
22
- return (bytes[offset] << 24 | bytes[offset + 1] << 16 | bytes[offset + 2] << 8 | bytes[offset + 3]) >>> 0;
29
+ return (bytes[offset] << 24 | bytes[offset + 1] << 16 | bytes[offset + 2] << BITS_PER_BYTE | bytes[offset + 3]) >>> 0;
23
30
  }
24
31
  function decodeTag(bytes, offset) {
25
32
  let tag = "";
26
33
  for (let i = 0; i < TABLE_TAG_SIZE; i++) {
27
34
  const byte = bytes[offset + i];
28
- if (byte < 32 || byte > 126) return;
35
+ if (byte < PRINTABLE_ASCII_MIN || byte > PRINTABLE_ASCII_MAX) return;
29
36
  tag += String.fromCharCode(byte);
30
37
  }
31
38
  return tag;
@@ -33,15 +40,15 @@ function decodeTag(bytes, offset) {
33
40
  function parseSfnt(bytes) {
34
41
  if (!hasBytes(bytes, 0, TABLE_DIRECTORY_HEADER_SIZE)) return;
35
42
  if (!SFNT_VERSIONS.has(readUint32(bytes, 0))) return;
36
- const numTables = readUint16(bytes, 4);
43
+ const numTables = readUint16(bytes, TABLE_DIRECTORY_NUM_TABLES_FIELD);
37
44
  if (!hasBytes(bytes, 0, TABLE_DIRECTORY_HEADER_SIZE + numTables * TABLE_RECORD_SIZE)) return;
38
45
  const tables = /* @__PURE__ */ new Map();
39
46
  for (let i = 0; i < numTables; i++) {
40
47
  const recordOffset = TABLE_DIRECTORY_HEADER_SIZE + i * TABLE_RECORD_SIZE;
41
48
  const tag = decodeTag(bytes, recordOffset);
42
49
  if (tag === void 0) return;
43
- const offset = readUint32(bytes, recordOffset + 8);
44
- const length = readUint32(bytes, recordOffset + 12);
50
+ const offset = readUint32(bytes, recordOffset + TABLE_RECORD_OFFSET_FIELD);
51
+ const length = readUint32(bytes, recordOffset + TABLE_RECORD_LENGTH_FIELD);
45
52
  if (!hasBytes(bytes, offset, length)) continue;
46
53
  if (tables.has(tag)) continue;
47
54
  tables.set(tag, {
@@ -66,16 +73,19 @@ function u16(bytes, offset) {
66
73
  requireBytes(bytes, offset, 2);
67
74
  return readUint16(bytes, offset);
68
75
  }
76
+ const INT16_SIGN_BIT = 32768;
77
+ const UINT16_MODULUS = 65536;
69
78
  function i16(bytes, offset) {
70
79
  const value = u16(bytes, offset);
71
- return value >= 32768 ? value - 65536 : value;
80
+ return value >= INT16_SIGN_BIT ? value - UINT16_MODULUS : value;
72
81
  }
82
+ const UINT24_BYTE_COUNT = 3;
73
83
  function u24(bytes, offset) {
74
- requireBytes(bytes, offset, 3);
75
- return bytes[offset] << 16 | bytes[offset + 1] << 8 | bytes[offset + 2];
84
+ requireBytes(bytes, offset, UINT24_BYTE_COUNT);
85
+ return bytes[offset] << 16 | bytes[offset + 1] << BITS_PER_BYTE | bytes[offset + 2];
76
86
  }
77
87
  function u32(bytes, offset) {
78
- requireBytes(bytes, offset, 4);
88
+ requireBytes(bytes, offset, UINT32_BYTE_COUNT);
79
89
  return readUint32(bytes, offset);
80
90
  }
81
91
  function i32(bytes, offset) {
package/dist/sfnt.js CHANGED
@@ -2,6 +2,13 @@
2
2
  const TABLE_DIRECTORY_HEADER_SIZE = 12;
3
3
  const TABLE_RECORD_SIZE = 16;
4
4
  const TABLE_TAG_SIZE = 4;
5
+ const BITS_PER_BYTE = 8;
6
+ const UINT32_BYTE_COUNT = 4;
7
+ const TABLE_DIRECTORY_NUM_TABLES_FIELD = 4;
8
+ const TABLE_RECORD_OFFSET_FIELD = 8;
9
+ const TABLE_RECORD_LENGTH_FIELD = 12;
10
+ const PRINTABLE_ASCII_MIN = 32;
11
+ const PRINTABLE_ASCII_MAX = 126;
5
12
  const SFNT_VERSIONS = /* @__PURE__ */ new Set([
6
13
  65536,
7
14
  1330926671,
@@ -15,16 +22,16 @@ function requireBytes(bytes, offset, length) {
15
22
  if (!hasBytes(bytes, offset, length)) throw new Error(`sfnt read of ${String(length)} byte(s) at offset ${String(offset)} is outside the ${String(bytes.length)}-byte range`);
16
23
  }
17
24
  function readUint16(bytes, offset) {
18
- return bytes[offset] << 8 | bytes[offset + 1];
25
+ return bytes[offset] << BITS_PER_BYTE | bytes[offset + 1];
19
26
  }
20
27
  function readUint32(bytes, offset) {
21
- return (bytes[offset] << 24 | bytes[offset + 1] << 16 | bytes[offset + 2] << 8 | bytes[offset + 3]) >>> 0;
28
+ return (bytes[offset] << 24 | bytes[offset + 1] << 16 | bytes[offset + 2] << BITS_PER_BYTE | bytes[offset + 3]) >>> 0;
22
29
  }
23
30
  function decodeTag(bytes, offset) {
24
31
  let tag = "";
25
32
  for (let i = 0; i < TABLE_TAG_SIZE; i++) {
26
33
  const byte = bytes[offset + i];
27
- if (byte < 32 || byte > 126) return;
34
+ if (byte < PRINTABLE_ASCII_MIN || byte > PRINTABLE_ASCII_MAX) return;
28
35
  tag += String.fromCharCode(byte);
29
36
  }
30
37
  return tag;
@@ -32,15 +39,15 @@ function decodeTag(bytes, offset) {
32
39
  function parseSfnt(bytes) {
33
40
  if (!hasBytes(bytes, 0, TABLE_DIRECTORY_HEADER_SIZE)) return;
34
41
  if (!SFNT_VERSIONS.has(readUint32(bytes, 0))) return;
35
- const numTables = readUint16(bytes, 4);
42
+ const numTables = readUint16(bytes, TABLE_DIRECTORY_NUM_TABLES_FIELD);
36
43
  if (!hasBytes(bytes, 0, TABLE_DIRECTORY_HEADER_SIZE + numTables * TABLE_RECORD_SIZE)) return;
37
44
  const tables = /* @__PURE__ */ new Map();
38
45
  for (let i = 0; i < numTables; i++) {
39
46
  const recordOffset = TABLE_DIRECTORY_HEADER_SIZE + i * TABLE_RECORD_SIZE;
40
47
  const tag = decodeTag(bytes, recordOffset);
41
48
  if (tag === void 0) return;
42
- const offset = readUint32(bytes, recordOffset + 8);
43
- const length = readUint32(bytes, recordOffset + 12);
49
+ const offset = readUint32(bytes, recordOffset + TABLE_RECORD_OFFSET_FIELD);
50
+ const length = readUint32(bytes, recordOffset + TABLE_RECORD_LENGTH_FIELD);
44
51
  if (!hasBytes(bytes, offset, length)) continue;
45
52
  if (tables.has(tag)) continue;
46
53
  tables.set(tag, {
@@ -65,16 +72,19 @@ function u16(bytes, offset) {
65
72
  requireBytes(bytes, offset, 2);
66
73
  return readUint16(bytes, offset);
67
74
  }
75
+ const INT16_SIGN_BIT = 32768;
76
+ const UINT16_MODULUS = 65536;
68
77
  function i16(bytes, offset) {
69
78
  const value = u16(bytes, offset);
70
- return value >= 32768 ? value - 65536 : value;
79
+ return value >= INT16_SIGN_BIT ? value - UINT16_MODULUS : value;
71
80
  }
81
+ const UINT24_BYTE_COUNT = 3;
72
82
  function u24(bytes, offset) {
73
- requireBytes(bytes, offset, 3);
74
- return bytes[offset] << 16 | bytes[offset + 1] << 8 | bytes[offset + 2];
83
+ requireBytes(bytes, offset, UINT24_BYTE_COUNT);
84
+ return bytes[offset] << 16 | bytes[offset + 1] << BITS_PER_BYTE | bytes[offset + 2];
75
85
  }
76
86
  function u32(bytes, offset) {
77
- requireBytes(bytes, offset, 4);
87
+ requireBytes(bytes, offset, UINT32_BYTE_COUNT);
78
88
  return readUint32(bytes, offset);
79
89
  }
80
90
  function i32(bytes, offset) {
@@ -1,5 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- //#region src/text-group.ts
3
2
  const DEFAULT_BASELINE_TOLERANCE_EM = 2 / 3;
4
3
  const DEFAULT_WORD_GAP_EM = 1 / 8;
5
4
  const DEFAULT_COLUMN_GAP_EM = 1;
@@ -1,4 +1,3 @@
1
- //#region src/text-group.ts
2
1
  const DEFAULT_BASELINE_TOLERANCE_EM = 2 / 3;
3
2
  const DEFAULT_WORD_GAP_EM = 1 / 8;
4
3
  const DEFAULT_COLUMN_GAP_EM = 1;
@@ -2,10 +2,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_objects = require("./objects.cjs");
3
3
  //#region src/tounicode.ts
4
4
  const MAX_BFCHAR_ENTRIES_PER_BLOCK = 100;
5
+ const HEX_RADIX = 16;
6
+ const UTF16_HEX_DIGIT_WIDTH = 4;
5
7
  function codePointToUtf16BEHex(codePoint) {
6
8
  const text = String.fromCodePoint(codePoint);
7
9
  let hex = "";
8
- for (let i = 0; i < text.length; i++) hex += text.charCodeAt(i).toString(16).padStart(4, "0");
10
+ for (let i = 0; i < text.length; i++) hex += text.charCodeAt(i).toString(HEX_RADIX).padStart(UTF16_HEX_DIGIT_WIDTH, "0");
9
11
  return hex;
10
12
  }
11
13
  function sequenceToUtf16BEHex(codePoints) {
@@ -29,7 +31,7 @@ function buildToUnicodeCMap(codeToSequence) {
29
31
  for (let start = 0; start < entries.length; start += MAX_BFCHAR_ENTRIES_PER_BLOCK) {
30
32
  const block = entries.slice(start, start + MAX_BFCHAR_ENTRIES_PER_BLOCK);
31
33
  lines.push(`${block.length} beginbfchar`);
32
- for (const [code, sequence] of block) lines.push(`<${code.toString(16).padStart(4, "0")}> <${sequenceToUtf16BEHex(sequence)}>`);
34
+ for (const [code, sequence] of block) lines.push(`<${code.toString(HEX_RADIX).padStart(UTF16_HEX_DIGIT_WIDTH, "0")}> <${sequenceToUtf16BEHex(sequence)}>`);
33
35
  lines.push("endbfchar");
34
36
  }
35
37
  lines.push("endcmap", "CMapName currentdict /CMap defineresource pop", "end", "end");
package/dist/tounicode.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import { pdfDict, pdfStream } from "./objects.js";
2
2
  //#region src/tounicode.ts
3
3
  const MAX_BFCHAR_ENTRIES_PER_BLOCK = 100;
4
+ const HEX_RADIX = 16;
5
+ const UTF16_HEX_DIGIT_WIDTH = 4;
4
6
  function codePointToUtf16BEHex(codePoint) {
5
7
  const text = String.fromCodePoint(codePoint);
6
8
  let hex = "";
7
- for (let i = 0; i < text.length; i++) hex += text.charCodeAt(i).toString(16).padStart(4, "0");
9
+ for (let i = 0; i < text.length; i++) hex += text.charCodeAt(i).toString(HEX_RADIX).padStart(UTF16_HEX_DIGIT_WIDTH, "0");
8
10
  return hex;
9
11
  }
10
12
  function sequenceToUtf16BEHex(codePoints) {
@@ -28,7 +30,7 @@ function buildToUnicodeCMap(codeToSequence) {
28
30
  for (let start = 0; start < entries.length; start += MAX_BFCHAR_ENTRIES_PER_BLOCK) {
29
31
  const block = entries.slice(start, start + MAX_BFCHAR_ENTRIES_PER_BLOCK);
30
32
  lines.push(`${block.length} beginbfchar`);
31
- for (const [code, sequence] of block) lines.push(`<${code.toString(16).padStart(4, "0")}> <${sequenceToUtf16BEHex(sequence)}>`);
33
+ for (const [code, sequence] of block) lines.push(`<${code.toString(HEX_RADIX).padStart(UTF16_HEX_DIGIT_WIDTH, "0")}> <${sequenceToUtf16BEHex(sequence)}>`);
32
34
  lines.push("endbfchar");
33
35
  }
34
36
  lines.push("endcmap", "CMapName currentdict /CMap defineresource pop", "end", "end");
package/dist/winansi.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_afm_widths = require("./afm-widths-BYiX2L9D.cjs");
2
+ const require_afm_widths = require("./afm-widths-BHD2HZIL.cjs");
3
3
  exports.encodeForShow = require_afm_widths.encodeForShow;
4
4
  exports.sanitizeToWinAnsi = require_afm_widths.sanitizeToWinAnsi;
5
5
  exports.winAnsiCodeToUnicode = require_afm_widths.winAnsiCodeToUnicode;
package/dist/winansi.js CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as winAnsiCodeToUnicode, g as sanitizeToWinAnsi, h as encodeForShow } from "./afm-widths-blUDDjlI.js";
1
+ import { _ as winAnsiCodeToUnicode, g as sanitizeToWinAnsi, h as encodeForShow } from "./afm-widths-B_IGbGky.js";
2
2
  export { encodeForShow, sanitizeToWinAnsi, winAnsiCodeToUnicode };
package/dist/write.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_afm_widths = require("./afm-widths-BYiX2L9D.cjs");
2
+ const require_afm_widths = require("./afm-widths-BHD2HZIL.cjs");
3
3
  const require_notes_annotation_author = require("./notes-annotation-author.cjs");
4
4
  const require_objects = require("./objects.cjs");
5
5
  const require_bytes_writer = require("./bytes/writer.cjs");
@@ -36,6 +36,11 @@ const FLAG_NONSYMBOLIC = 32;
36
36
  const FLAG_ITALIC = 64;
37
37
  const FLAG_FORCE_BOLD = 262144;
38
38
  const FILE_ID_BYTES = 16;
39
+ const BITS_PER_BYTE = 8;
40
+ const BYTE_SHIFT = Math.log2(BITS_PER_BYTE);
41
+ const BYTE_MASK = 255;
42
+ const PACKED_BIT_MSB_MASK = 128;
43
+ const BIT_INDEX_MASK = 7;
39
44
  function textToPdfString(text) {
40
45
  const bytes = new Uint8Array(2 + text.length * 2);
41
46
  bytes[0] = 254;
@@ -43,8 +48,8 @@ function textToPdfString(text) {
43
48
  let offset = 2;
44
49
  for (const unit of text.split("")) {
45
50
  const code = unit.charCodeAt(0);
46
- bytes[offset] = code >> 8 & 255;
47
- bytes[offset + 1] = code & 255;
51
+ bytes[offset] = code >> BITS_PER_BYTE & BYTE_MASK;
52
+ bytes[offset + 1] = code & BYTE_MASK;
48
53
  offset += 2;
49
54
  }
50
55
  return require_objects.pdfHexString(bytes);
@@ -108,9 +113,10 @@ function buildFontObjects(standardName, descriptorRef) {
108
113
  function codePointsOf(texts) {
109
114
  return new Set(texts.flatMap((text) => [...text].map((character) => character.codePointAt(0))));
110
115
  }
116
+ const JPEG_COMPONENTS_CMYK = 4;
111
117
  function prepareJpegImage(bytes) {
112
118
  const info = require_image_jpeg_info.readJpegInfo(bytes);
113
- const colorSpace = info.components === 1 ? "DeviceGray" : info.components === 4 ? "DeviceCMYK" : "DeviceRGB";
119
+ const colorSpace = info.components === 1 ? "DeviceGray" : info.components === JPEG_COMPONENTS_CMYK ? "DeviceCMYK" : "DeviceRGB";
114
120
  const entries = /* @__PURE__ */ new Map([
115
121
  ["Type", require_objects.pdfName("XObject")],
116
122
  ["Subtype", require_objects.pdfName("Image")],
@@ -120,7 +126,7 @@ function prepareJpegImage(bytes) {
120
126
  ["BitsPerComponent", require_objects.pdfNum(info.precision)],
121
127
  ["Filter", require_objects.pdfName("DCTDecode")]
122
128
  ]);
123
- if (info.components === 4 && (info.adobeTransform === 2 || info.adobeTransform === void 0)) entries.set("Decode", require_objects.pdfArray([
129
+ if (info.components === JPEG_COMPONENTS_CMYK && (info.adobeTransform === 2 || info.adobeTransform === void 0)) entries.set("Decode", require_objects.pdfArray([
124
130
  1,
125
131
  0,
126
132
  1,
@@ -142,22 +148,22 @@ function pngImageDict(width, height, colorSpace, compress) {
142
148
  ["Width", require_objects.pdfNum(width)],
143
149
  ["Height", require_objects.pdfNum(height)],
144
150
  ["ColorSpace", require_objects.pdfName(colorSpace)],
145
- ["BitsPerComponent", require_objects.pdfNum(8)]
151
+ ["BitsPerComponent", require_objects.pdfNum(BITS_PER_BYTE)]
146
152
  ]);
147
153
  if (compress) entries.set("Filter", require_objects.pdfName("FlateDecode"));
148
154
  return require_objects.pdfDict(entries);
149
155
  }
150
156
  function packBilevel(raw) {
151
- const rowBytes = raw.width + 7 >> 3;
157
+ const rowBytes = raw.width + BIT_INDEX_MASK >> BYTE_SHIFT;
152
158
  const packed = new Uint8Array(rowBytes * raw.height);
153
159
  const view = new DataView(packed.buffer);
154
160
  for (let index = 0; index < raw.data.length; index++) {
155
161
  const sample = raw.data[index];
156
- if (sample !== 0 && sample !== 255) return;
157
- if (sample === 255) {
162
+ if (sample !== 0 && sample !== BYTE_MASK) return;
163
+ if (sample === BYTE_MASK) {
158
164
  const x = index % raw.width;
159
- const byteIndex = Math.floor(index / raw.width) * rowBytes + (x >> 3);
160
- view.setUint8(byteIndex, view.getUint8(byteIndex) | 128 >> (x & 7));
165
+ const byteIndex = Math.floor(index / raw.width) * rowBytes + (x >> BYTE_SHIFT);
166
+ view.setUint8(byteIndex, view.getUint8(byteIndex) | PACKED_BIT_MSB_MASK >> (x & BIT_INDEX_MASK));
161
167
  }
162
168
  }
163
169
  return packed;
@@ -323,8 +329,10 @@ function buildNotesAnnotDict(notes) {
323
329
  F: require_objects.pdfNum(NOTES_ANNOTATION_HIDDEN_FLAG)
324
330
  });
325
331
  }
332
+ const XREF_OFFSET_DIGITS = 10;
333
+ const XREF_GENERATION_DIGITS = 5;
326
334
  function xrefEntry(offset, generation, inUse) {
327
- return `${offset.toString().padStart(10, "0")} ${generation.toString().padStart(5, "0")} ${inUse ? "n" : "f"} \n`;
335
+ return `${offset.toString().padStart(XREF_OFFSET_DIGITS, "0")} ${generation.toString().padStart(XREF_GENERATION_DIGITS, "0")} ${inUse ? "n" : "f"} \n`;
328
336
  }
329
337
  function parseResidueRow(residue) {
330
338
  const reader = new require_bytes_reader.ByteReader(new TextEncoder().encode(residue.xml));
package/dist/write.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as widthOfCode, t as STANDARD_METRICS } from "./afm-widths-blUDDjlI.js";
1
+ import { n as widthOfCode, t as STANDARD_METRICS } from "./afm-widths-B_IGbGky.js";
2
2
  import { NOTES_ANNOTATION_AUTHOR } from "./notes-annotation-author.js";
3
3
  import { pdfArray, pdfBool, pdfDict, pdfHexString, pdfLiteralString, pdfName, pdfNull, pdfNum, pdfRef, pdfStream } from "./objects.js";
4
4
  import { ByteWriter, concatBytes } from "./bytes/writer.js";
@@ -35,6 +35,11 @@ const FLAG_NONSYMBOLIC = 32;
35
35
  const FLAG_ITALIC = 64;
36
36
  const FLAG_FORCE_BOLD = 262144;
37
37
  const FILE_ID_BYTES = 16;
38
+ const BITS_PER_BYTE = 8;
39
+ const BYTE_SHIFT = Math.log2(BITS_PER_BYTE);
40
+ const BYTE_MASK = 255;
41
+ const PACKED_BIT_MSB_MASK = 128;
42
+ const BIT_INDEX_MASK = 7;
38
43
  function textToPdfString(text) {
39
44
  const bytes = new Uint8Array(2 + text.length * 2);
40
45
  bytes[0] = 254;
@@ -42,8 +47,8 @@ function textToPdfString(text) {
42
47
  let offset = 2;
43
48
  for (const unit of text.split("")) {
44
49
  const code = unit.charCodeAt(0);
45
- bytes[offset] = code >> 8 & 255;
46
- bytes[offset + 1] = code & 255;
50
+ bytes[offset] = code >> BITS_PER_BYTE & BYTE_MASK;
51
+ bytes[offset + 1] = code & BYTE_MASK;
47
52
  offset += 2;
48
53
  }
49
54
  return pdfHexString(bytes);
@@ -107,9 +112,10 @@ function buildFontObjects(standardName, descriptorRef) {
107
112
  function codePointsOf(texts) {
108
113
  return new Set(texts.flatMap((text) => [...text].map((character) => character.codePointAt(0))));
109
114
  }
115
+ const JPEG_COMPONENTS_CMYK = 4;
110
116
  function prepareJpegImage(bytes) {
111
117
  const info = readJpegInfo$1(bytes);
112
- const colorSpace = info.components === 1 ? "DeviceGray" : info.components === 4 ? "DeviceCMYK" : "DeviceRGB";
118
+ const colorSpace = info.components === 1 ? "DeviceGray" : info.components === JPEG_COMPONENTS_CMYK ? "DeviceCMYK" : "DeviceRGB";
113
119
  const entries = /* @__PURE__ */ new Map([
114
120
  ["Type", pdfName("XObject")],
115
121
  ["Subtype", pdfName("Image")],
@@ -119,7 +125,7 @@ function prepareJpegImage(bytes) {
119
125
  ["BitsPerComponent", pdfNum(info.precision)],
120
126
  ["Filter", pdfName("DCTDecode")]
121
127
  ]);
122
- if (info.components === 4 && (info.adobeTransform === 2 || info.adobeTransform === void 0)) entries.set("Decode", pdfArray([
128
+ if (info.components === JPEG_COMPONENTS_CMYK && (info.adobeTransform === 2 || info.adobeTransform === void 0)) entries.set("Decode", pdfArray([
123
129
  1,
124
130
  0,
125
131
  1,
@@ -141,22 +147,22 @@ function pngImageDict(width, height, colorSpace, compress) {
141
147
  ["Width", pdfNum(width)],
142
148
  ["Height", pdfNum(height)],
143
149
  ["ColorSpace", pdfName(colorSpace)],
144
- ["BitsPerComponent", pdfNum(8)]
150
+ ["BitsPerComponent", pdfNum(BITS_PER_BYTE)]
145
151
  ]);
146
152
  if (compress) entries.set("Filter", pdfName("FlateDecode"));
147
153
  return pdfDict(entries);
148
154
  }
149
155
  function packBilevel(raw) {
150
- const rowBytes = raw.width + 7 >> 3;
156
+ const rowBytes = raw.width + BIT_INDEX_MASK >> BYTE_SHIFT;
151
157
  const packed = new Uint8Array(rowBytes * raw.height);
152
158
  const view = new DataView(packed.buffer);
153
159
  for (let index = 0; index < raw.data.length; index++) {
154
160
  const sample = raw.data[index];
155
- if (sample !== 0 && sample !== 255) return;
156
- if (sample === 255) {
161
+ if (sample !== 0 && sample !== BYTE_MASK) return;
162
+ if (sample === BYTE_MASK) {
157
163
  const x = index % raw.width;
158
- const byteIndex = Math.floor(index / raw.width) * rowBytes + (x >> 3);
159
- view.setUint8(byteIndex, view.getUint8(byteIndex) | 128 >> (x & 7));
164
+ const byteIndex = Math.floor(index / raw.width) * rowBytes + (x >> BYTE_SHIFT);
165
+ view.setUint8(byteIndex, view.getUint8(byteIndex) | PACKED_BIT_MSB_MASK >> (x & BIT_INDEX_MASK));
160
166
  }
161
167
  }
162
168
  return packed;
@@ -322,8 +328,10 @@ function buildNotesAnnotDict(notes) {
322
328
  F: pdfNum(NOTES_ANNOTATION_HIDDEN_FLAG)
323
329
  });
324
330
  }
331
+ const XREF_OFFSET_DIGITS = 10;
332
+ const XREF_GENERATION_DIGITS = 5;
325
333
  function xrefEntry(offset, generation, inUse) {
326
- return `${offset.toString().padStart(10, "0")} ${generation.toString().padStart(5, "0")} ${inUse ? "n" : "f"} \n`;
334
+ return `${offset.toString().padStart(XREF_OFFSET_DIGITS, "0")} ${generation.toString().padStart(XREF_GENERATION_DIGITS, "0")} ${inUse ? "n" : "f"} \n`;
327
335
  }
328
336
  function parseResidueRow(residue) {
329
337
  const reader = new ByteReader(new TextEncoder().encode(residue.xml));
package/dist/xref.cjs CHANGED
@@ -220,9 +220,10 @@ function readXrefStreamSection(dict, raw, sink) {
220
220
  prevOffset: require_objects.asNumber(require_objects.dictGet(dict, "Prev"))
221
221
  };
222
222
  }
223
+ const BYTE_RADIX = 256;
223
224
  function readBigEndian(bytes, offset, width) {
224
225
  let value = 0;
225
- for (let i = 0; i < width; i++) value = value * 256 + (bytes[offset + i] ?? 0);
226
+ for (let i = 0; i < width; i++) value = value * BYTE_RADIX + (bytes[offset + i] ?? 0);
226
227
  return value;
227
228
  }
228
229
  function isBoundaryByte(byte) {
@@ -238,8 +239,10 @@ function findAllKeywordPositions(bytes, needle) {
238
239
  }
239
240
  return positions;
240
241
  }
242
+ const ASCII_DIGIT_ZERO = 48;
243
+ const ASCII_DIGIT_NINE = 57;
241
244
  function isDigitByte(byte) {
242
- return byte !== void 0 && byte >= 48 && byte <= 57;
245
+ return byte !== void 0 && byte >= ASCII_DIGIT_ZERO && byte <= ASCII_DIGIT_NINE;
243
246
  }
244
247
  function scanBackWhile(bytes, end, predicate) {
245
248
  let i = end;
package/dist/xref.js CHANGED
@@ -219,9 +219,10 @@ function readXrefStreamSection(dict, raw, sink) {
219
219
  prevOffset: asNumber(dictGet(dict, "Prev"))
220
220
  };
221
221
  }
222
+ const BYTE_RADIX = 256;
222
223
  function readBigEndian(bytes, offset, width) {
223
224
  let value = 0;
224
- for (let i = 0; i < width; i++) value = value * 256 + (bytes[offset + i] ?? 0);
225
+ for (let i = 0; i < width; i++) value = value * BYTE_RADIX + (bytes[offset + i] ?? 0);
225
226
  return value;
226
227
  }
227
228
  function isBoundaryByte(byte) {
@@ -237,8 +238,10 @@ function findAllKeywordPositions(bytes, needle) {
237
238
  }
238
239
  return positions;
239
240
  }
241
+ const ASCII_DIGIT_ZERO = 48;
242
+ const ASCII_DIGIT_NINE = 57;
240
243
  function isDigitByte(byte) {
241
- return byte !== void 0 && byte >= 48 && byte <= 57;
244
+ return byte !== void 0 && byte >= ASCII_DIGIT_ZERO && byte <= ASCII_DIGIT_NINE;
242
245
  }
243
246
  function scanBackWhile(bytes, end, predicate) {
244
247
  let i = end;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-parser.js",
3
- "version": "5.2.27",
3
+ "version": "5.2.28",
4
4
  "description": "Hand-written, dependency-minimal PDF codec: parses arbitrary real-world PDFs and generates new ones, built on its own codec-owned LayoutDocument item model and Zod 4 codecs.",
5
5
  "type": "module",
6
6
  "repository": {