pdfjs-dist 2.3.200 → 2.4.456

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.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (185) hide show
  1. package/README.md +4 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +6499 -17971
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +22 -1
  6. package/build/pdf.worker.entry.js +5 -3
  7. package/build/pdf.worker.js +19303 -29896
  8. package/build/pdf.worker.js.map +1 -1
  9. package/build/pdf.worker.min.js +22 -1
  10. package/es5/build/pdf.js +25473 -0
  11. package/es5/build/pdf.js.map +1 -0
  12. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  13. package/es5/build/pdf.worker.js +57878 -0
  14. package/es5/build/pdf.worker.js.map +1 -0
  15. package/es5/web/images/annotation-check.svg +11 -0
  16. package/es5/web/images/annotation-comment.svg +16 -0
  17. package/es5/web/images/annotation-help.svg +26 -0
  18. package/es5/web/images/annotation-insert.svg +10 -0
  19. package/es5/web/images/annotation-key.svg +11 -0
  20. package/es5/web/images/annotation-newparagraph.svg +11 -0
  21. package/es5/web/images/annotation-noicon.svg +7 -0
  22. package/es5/web/images/annotation-note.svg +42 -0
  23. package/es5/web/images/annotation-paragraph.svg +16 -0
  24. package/es5/web/images/loading-icon.gif +0 -0
  25. package/es5/web/images/shadow.png +0 -0
  26. package/es5/web/images/texture.png +0 -0
  27. package/es5/web/pdf_viewer.css +407 -0
  28. package/es5/web/pdf_viewer.js +7757 -0
  29. package/es5/web/pdf_viewer.js.map +1 -0
  30. package/image_decoders/pdf.image_decoders.js +1333 -4839
  31. package/image_decoders/pdf.image_decoders.js.map +1 -1
  32. package/image_decoders/pdf.image_decoders.min.js +22 -1
  33. package/lib/README.md +7 -0
  34. package/lib/core/annotation.js +683 -1066
  35. package/lib/core/arithmetic_decoder.js +81 -97
  36. package/lib/core/bidi.js +54 -46
  37. package/lib/core/ccitt.js +88 -81
  38. package/lib/core/ccitt_stream.js +15 -14
  39. package/lib/core/cff_parser.js +196 -193
  40. package/lib/core/charsets.js +4 -4
  41. package/lib/core/chunked_stream.js +441 -569
  42. package/lib/core/cmap.js +220 -279
  43. package/lib/core/colorspace.js +699 -863
  44. package/lib/core/core_utils.js +59 -80
  45. package/lib/core/crypto.js +379 -437
  46. package/lib/core/document.js +564 -673
  47. package/lib/core/encodings.js +15 -15
  48. package/lib/core/evaluator.js +983 -889
  49. package/lib/core/font_renderer.js +128 -171
  50. package/lib/core/fonts.js +451 -400
  51. package/lib/core/function.js +289 -285
  52. package/lib/core/glyphlist.js +4527 -4527
  53. package/lib/core/image.js +138 -117
  54. package/lib/core/image_utils.js +46 -63
  55. package/lib/core/jbig2.js +324 -332
  56. package/lib/core/jbig2_stream.js +18 -17
  57. package/lib/core/jpeg_stream.js +133 -24
  58. package/lib/core/jpg.js +238 -210
  59. package/lib/core/jpx.js +158 -157
  60. package/lib/core/jpx_stream.js +28 -28
  61. package/lib/core/metrics.js +2928 -2928
  62. package/lib/core/murmurhash3.js +87 -102
  63. package/lib/core/obj.js +1111 -1302
  64. package/lib/core/operator_list.js +55 -42
  65. package/lib/core/parser.js +956 -987
  66. package/lib/core/pattern.js +69 -69
  67. package/lib/core/pdf_manager.js +149 -316
  68. package/lib/core/primitives.js +45 -77
  69. package/lib/core/ps_parser.js +175 -214
  70. package/lib/core/standard_fonts.js +237 -236
  71. package/lib/core/stream.js +83 -77
  72. package/lib/core/type1_parser.js +78 -68
  73. package/lib/core/unicode.js +1654 -1654
  74. package/lib/core/worker.js +148 -196
  75. package/lib/core/worker_stream.js +101 -210
  76. package/lib/display/annotation_layer.js +733 -1155
  77. package/lib/display/api.js +1539 -1928
  78. package/lib/display/api_compatibility.js +10 -8
  79. package/lib/display/canvas.js +159 -158
  80. package/lib/display/content_disposition.js +36 -55
  81. package/lib/display/display_utils.js +298 -551
  82. package/lib/display/fetch_stream.js +181 -305
  83. package/lib/display/font_loader.js +273 -416
  84. package/lib/display/metadata.js +86 -98
  85. package/lib/display/network.js +376 -511
  86. package/lib/display/network_utils.js +20 -19
  87. package/lib/display/node_stream.js +276 -460
  88. package/lib/display/pattern_helper.js +76 -44
  89. package/lib/display/svg.js +1137 -1405
  90. package/lib/display/text_layer.js +75 -82
  91. package/lib/display/transport_stream.js +236 -374
  92. package/lib/display/webgl.js +70 -83
  93. package/lib/display/worker_options.js +3 -3
  94. package/lib/display/xml_parser.js +303 -392
  95. package/lib/examples/node/domstubs.js +37 -37
  96. package/lib/pdf.js +22 -21
  97. package/lib/pdf.worker.js +5 -5
  98. package/lib/shared/compatibility.js +2 -251
  99. package/lib/shared/is_node.js +7 -6
  100. package/lib/shared/message_handler.js +222 -194
  101. package/lib/shared/util.js +269 -405
  102. package/lib/test/unit/annotation_spec.js +1089 -1014
  103. package/lib/test/unit/api_spec.js +617 -544
  104. package/lib/test/unit/bidi_spec.js +7 -7
  105. package/lib/test/unit/cff_parser_spec.js +63 -62
  106. package/lib/test/unit/clitests_helper.js +7 -9
  107. package/lib/test/unit/cmap_spec.js +84 -86
  108. package/lib/test/unit/colorspace_spec.js +154 -154
  109. package/lib/test/unit/core_utils_spec.js +125 -105
  110. package/lib/test/unit/crypto_spec.js +181 -181
  111. package/lib/test/unit/custom_spec.js +22 -24
  112. package/lib/test/unit/display_svg_spec.js +35 -36
  113. package/lib/test/unit/display_utils_spec.js +139 -149
  114. package/lib/test/unit/document_spec.js +16 -16
  115. package/lib/test/unit/encodings_spec.js +12 -34
  116. package/lib/test/unit/evaluator_spec.js +81 -95
  117. package/lib/test/unit/fetch_stream_spec.js +30 -30
  118. package/lib/test/unit/function_spec.js +206 -204
  119. package/lib/test/unit/jasmine-boot.js +48 -32
  120. package/lib/test/unit/message_handler_spec.js +172 -162
  121. package/lib/test/unit/metadata_spec.js +69 -69
  122. package/lib/test/unit/murmurhash3_spec.js +12 -12
  123. package/lib/test/unit/network_spec.js +12 -12
  124. package/lib/test/unit/network_utils_spec.js +152 -152
  125. package/lib/test/unit/node_stream_spec.js +74 -90
  126. package/lib/test/unit/parser_spec.js +107 -113
  127. package/lib/test/unit/pdf_find_controller_spec.js +55 -86
  128. package/lib/test/unit/pdf_find_utils_spec.js +32 -32
  129. package/lib/test/unit/pdf_history_spec.js +32 -32
  130. package/lib/test/unit/primitives_spec.js +117 -115
  131. package/lib/test/unit/stream_spec.js +16 -14
  132. package/lib/test/unit/test_utils.js +119 -285
  133. package/lib/test/unit/testreporter.js +19 -19
  134. package/lib/test/unit/type1_parser_spec.js +41 -41
  135. package/lib/test/unit/ui_utils_spec.js +318 -426
  136. package/lib/test/unit/unicode_spec.js +42 -42
  137. package/lib/test/unit/util_spec.js +122 -143
  138. package/lib/web/annotation_layer_builder.js +66 -103
  139. package/lib/web/app.js +1166 -1196
  140. package/lib/web/app_options.js +61 -77
  141. package/lib/web/base_viewer.js +804 -850
  142. package/lib/web/chromecom.js +164 -249
  143. package/lib/web/debugger.js +149 -205
  144. package/lib/web/download_manager.js +38 -57
  145. package/lib/web/firefox_print_service.js +35 -30
  146. package/lib/web/firefoxcom.js +175 -374
  147. package/lib/web/genericcom.js +26 -108
  148. package/lib/web/genericl10n.js +24 -153
  149. package/lib/web/grab_to_pan.js +30 -30
  150. package/lib/web/interfaces.js +80 -258
  151. package/lib/web/overlay_manager.js +70 -246
  152. package/lib/web/password_prompt.js +38 -64
  153. package/lib/web/pdf_attachment_viewer.js +105 -130
  154. package/lib/web/pdf_cursor_tools.js +75 -102
  155. package/lib/web/pdf_document_properties.js +227 -376
  156. package/lib/web/pdf_find_bar.js +137 -171
  157. package/lib/web/pdf_find_controller.js +492 -549
  158. package/lib/web/pdf_find_utils.js +13 -13
  159. package/lib/web/pdf_history.js +395 -406
  160. package/lib/web/pdf_link_service.js +302 -349
  161. package/lib/web/pdf_outline_viewer.js +148 -209
  162. package/lib/web/pdf_page_view.js +449 -507
  163. package/lib/web/pdf_presentation_mode.js +304 -357
  164. package/lib/web/pdf_print_service.js +90 -104
  165. package/lib/web/pdf_rendering_queue.js +87 -108
  166. package/lib/web/pdf_sidebar.js +264 -304
  167. package/lib/web/pdf_sidebar_resizer.js +92 -119
  168. package/lib/web/pdf_single_page_viewer.js +77 -126
  169. package/lib/web/pdf_thumbnail_view.js +276 -297
  170. package/lib/web/pdf_thumbnail_viewer.js +186 -206
  171. package/lib/web/pdf_viewer.component.js +20 -21
  172. package/lib/web/pdf_viewer.js +55 -115
  173. package/lib/web/preferences.js +66 -273
  174. package/lib/web/secondary_toolbar.js +164 -196
  175. package/lib/web/text_layer_builder.js +284 -317
  176. package/lib/web/toolbar.js +216 -211
  177. package/lib/web/ui_utils.js +303 -404
  178. package/lib/web/view_history.js +49 -222
  179. package/lib/web/viewer_compatibility.js +7 -5
  180. package/package.json +2 -9
  181. package/web/pdf_viewer.css +25 -18
  182. package/web/pdf_viewer.js +3481 -4764
  183. package/web/pdf_viewer.js.map +1 -1
  184. package/webpack.js +14 -5
  185. package/lib/shared/streams_polyfill.js +0 -43
package/lib/core/jpg.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2019 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -26,67 +26,26 @@ Object.defineProperty(exports, "__esModule", {
26
26
  });
27
27
  exports.JpegImage = void 0;
28
28
 
29
- var _util = require("../shared/util");
29
+ var _util = require("../shared/util.js");
30
30
 
31
- function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
31
+ var _core_utils = require("./core_utils.js");
32
32
 
33
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34
-
35
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
36
-
37
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
38
-
39
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
40
-
41
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
42
-
43
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
44
-
45
- var JpegError =
46
- /*#__PURE__*/
47
- function (_BaseException) {
48
- _inherits(JpegError, _BaseException);
49
-
50
- function JpegError(msg) {
51
- _classCallCheck(this, JpegError);
52
-
53
- return _possibleConstructorReturn(this, _getPrototypeOf(JpegError).call(this, "JPEG error: ".concat(msg)));
33
+ class JpegError extends _util.BaseException {
34
+ constructor(msg) {
35
+ super(`JPEG error: ${msg}`);
54
36
  }
55
37
 
56
- return JpegError;
57
- }(_util.BaseException);
58
-
59
- var DNLMarkerError =
60
- /*#__PURE__*/
61
- function (_BaseException2) {
62
- _inherits(DNLMarkerError, _BaseException2);
63
-
64
- function DNLMarkerError(message, scanLines) {
65
- var _this;
38
+ }
66
39
 
67
- _classCallCheck(this, DNLMarkerError);
68
-
69
- _this = _possibleConstructorReturn(this, _getPrototypeOf(DNLMarkerError).call(this, message));
70
- _this.scanLines = scanLines;
71
- return _this;
40
+ class DNLMarkerError extends _util.BaseException {
41
+ constructor(message, scanLines) {
42
+ super(message);
43
+ this.scanLines = scanLines;
72
44
  }
73
45
 
74
- return DNLMarkerError;
75
- }(_util.BaseException);
76
-
77
- var EOIMarkerError =
78
- /*#__PURE__*/
79
- function (_BaseException3) {
80
- _inherits(EOIMarkerError, _BaseException3);
81
-
82
- function EOIMarkerError() {
83
- _classCallCheck(this, EOIMarkerError);
84
-
85
- return _possibleConstructorReturn(this, _getPrototypeOf(EOIMarkerError).apply(this, arguments));
86
- }
46
+ }
87
47
 
88
- return EOIMarkerError;
89
- }(_util.BaseException);
48
+ class EOIMarkerError extends _util.BaseException {}
90
49
 
91
50
  var JpegImage = function JpegImageClosure() {
92
51
  var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
@@ -99,13 +58,10 @@ var JpegImage = function JpegImageClosure() {
99
58
  var dctSqrt2 = 5793;
100
59
  var dctSqrt1d2 = 2896;
101
60
 
102
- function JpegImage() {
103
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
104
- _ref$decodeTransform = _ref.decodeTransform,
105
- decodeTransform = _ref$decodeTransform === void 0 ? null : _ref$decodeTransform,
106
- _ref$colorTransform = _ref.colorTransform,
107
- colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform;
108
-
61
+ function JpegImage({
62
+ decodeTransform = null,
63
+ colorTransform = -1
64
+ } = {}) {
109
65
  this._decodeTransform = decodeTransform;
110
66
  this._colorTransform = colorTransform;
111
67
  }
@@ -169,8 +125,7 @@ var JpegImage = function JpegImageClosure() {
169
125
  return 64 * ((component.blocksPerLine + 1) * row + col);
170
126
  }
171
127
 
172
- function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) {
173
- var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false;
128
+ function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
174
129
  var mcusPerLine = frame.mcusPerLine;
175
130
  var progressive = frame.progressive;
176
131
  var startOffset = offset,
@@ -185,22 +140,31 @@ var JpegImage = function JpegImageClosure() {
185
140
 
186
141
  bitsData = data[offset++];
187
142
 
188
- if (bitsData === 0xFF) {
143
+ if (bitsData === 0xff) {
189
144
  var nextByte = data[offset++];
190
145
 
191
146
  if (nextByte) {
192
- if (nextByte === 0xDC && parseDNLMarker) {
147
+ if (nextByte === 0xdc && parseDNLMarker) {
148
+ offset += 2;
149
+ const scanLines = (0, _core_utils.readUint16)(data, offset);
193
150
  offset += 2;
194
- var scanLines = data[offset++] << 8 | data[offset++];
195
151
 
196
152
  if (scanLines > 0 && scanLines !== frame.scanLines) {
197
- throw new DNLMarkerError('Found DNL marker (0xFFDC) while parsing scan data', scanLines);
153
+ throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
154
+ }
155
+ } else if (nextByte === 0xd9) {
156
+ if (parseDNLMarker) {
157
+ const maybeScanLines = blockRow * 8;
158
+
159
+ if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 10) {
160
+ throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
161
+ }
198
162
  }
199
- } else if (nextByte === 0xD9) {
200
- throw new EOIMarkerError('Found EOI marker (0xFFD9) while parsing scan data');
163
+
164
+ throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
201
165
  }
202
166
 
203
- throw new JpegError("unexpected marker ".concat((bitsData << 8 | nextByte).toString(16)));
167
+ throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
204
168
  }
205
169
  }
206
170
 
@@ -214,13 +178,15 @@ var JpegImage = function JpegImageClosure() {
214
178
  while (true) {
215
179
  node = node[readBit()];
216
180
 
217
- if (typeof node === 'number') {
218
- return node;
219
- }
181
+ switch (typeof node) {
182
+ case "number":
183
+ return node;
220
184
 
221
- if (_typeof(node) !== 'object') {
222
- throw new JpegError('invalid huffman sequence');
185
+ case "object":
186
+ continue;
223
187
  }
188
+
189
+ throw new JpegError("invalid huffman sequence");
224
190
  }
225
191
  }
226
192
 
@@ -330,8 +296,8 @@ var JpegImage = function JpegImageClosure() {
330
296
  var rs;
331
297
 
332
298
  while (k <= e) {
333
- var offsetZ = offset + dctZigZag[k];
334
- var sign = component.blockData[offsetZ] < 0 ? -1 : 1;
299
+ const offsetZ = offset + dctZigZag[k];
300
+ const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
335
301
 
336
302
  switch (successiveACState) {
337
303
  case 0:
@@ -349,7 +315,7 @@ var JpegImage = function JpegImageClosure() {
349
315
  }
350
316
  } else {
351
317
  if (s !== 1) {
352
- throw new JpegError('invalid ACn encoding');
318
+ throw new JpegError("invalid ACn encoding");
353
319
  }
354
320
 
355
321
  successiveACNextValue = receiveAndExtend(s);
@@ -402,17 +368,19 @@ var JpegImage = function JpegImageClosure() {
402
368
  }
403
369
  }
404
370
 
371
+ let blockRow = 0;
372
+
405
373
  function decodeMcu(component, decode, mcu, row, col) {
406
374
  var mcuRow = mcu / mcusPerLine | 0;
407
375
  var mcuCol = mcu % mcusPerLine;
408
- var blockRow = mcuRow * component.v + row;
376
+ blockRow = mcuRow * component.v + row;
409
377
  var blockCol = mcuCol * component.h + col;
410
378
  var offset = getBlockBufferOffset(component, blockRow, blockCol);
411
379
  decode(component, offset);
412
380
  }
413
381
 
414
382
  function decodeBlock(component, decode, mcu) {
415
- var blockRow = mcu / component.blocksPerLine | 0;
383
+ blockRow = mcu / component.blocksPerLine | 0;
416
384
  var blockCol = mcu % component.blocksPerLine;
417
385
  var offset = getBlockBufferOffset(component, blockRow, blockCol);
418
386
  decode(component, offset);
@@ -484,17 +452,17 @@ var JpegImage = function JpegImageClosure() {
484
452
  if (!fileMarker) {
485
453
  break;
486
454
  } else if (fileMarker.invalid) {
487
- (0, _util.warn)('decodeScan - unexpected MCU data, current marker is: ' + fileMarker.invalid);
455
+ (0, _util.warn)("decodeScan - unexpected MCU data, current marker is: " + fileMarker.invalid);
488
456
  offset = fileMarker.offset;
489
457
  }
490
458
 
491
459
  var marker = fileMarker && fileMarker.marker;
492
460
 
493
- if (!marker || marker <= 0xFF00) {
494
- throw new JpegError('decodeScan - a valid marker was not found.');
461
+ if (!marker || marker <= 0xff00) {
462
+ throw new JpegError("decodeScan - a valid marker was not found.");
495
463
  }
496
464
 
497
- if (marker >= 0xFFD0 && marker <= 0xFFD7) {
465
+ if (marker >= 0xffd0 && marker <= 0xffd7) {
498
466
  offset += 2;
499
467
  } else {
500
468
  break;
@@ -504,7 +472,7 @@ var JpegImage = function JpegImageClosure() {
504
472
  fileMarker = findNextFileMarker(data, offset);
505
473
 
506
474
  if (fileMarker && fileMarker.invalid) {
507
- (0, _util.warn)('decodeScan - unexpected Scan data, current marker is: ' + fileMarker.invalid);
475
+ (0, _util.warn)("decodeScan - unexpected Scan data, current marker is: " + fileMarker.invalid);
508
476
  offset = fileMarker.offset;
509
477
  }
510
478
 
@@ -519,7 +487,7 @@ var JpegImage = function JpegImageClosure() {
519
487
  var t;
520
488
 
521
489
  if (!qt) {
522
- throw new JpegError('missing required Quantization Table.');
490
+ throw new JpegError("missing required Quantization Table.");
523
491
  }
524
492
 
525
493
  for (var row = 0; row < 64; row += 8) {
@@ -602,7 +570,15 @@ var JpegImage = function JpegImageClosure() {
602
570
 
603
571
  if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
604
572
  t = dctSqrt2 * p0 + 8192 >> 14;
605
- t = t < -2040 ? 0 : t >= 2024 ? 255 : t + 2056 >> 4;
573
+
574
+ if (t < -2040) {
575
+ t = 0;
576
+ } else if (t >= 2024) {
577
+ t = 255;
578
+ } else {
579
+ t = t + 2056 >> 4;
580
+ }
581
+
606
582
  blockData[blockBufferOffset + col] = t;
607
583
  blockData[blockBufferOffset + col + 8] = t;
608
584
  blockData[blockBufferOffset + col + 16] = t;
@@ -649,14 +625,71 @@ var JpegImage = function JpegImageClosure() {
649
625
  p5 = v2 - v5;
650
626
  p3 = v3 + v4;
651
627
  p4 = v3 - v4;
652
- p0 = p0 < 16 ? 0 : p0 >= 4080 ? 255 : p0 >> 4;
653
- p1 = p1 < 16 ? 0 : p1 >= 4080 ? 255 : p1 >> 4;
654
- p2 = p2 < 16 ? 0 : p2 >= 4080 ? 255 : p2 >> 4;
655
- p3 = p3 < 16 ? 0 : p3 >= 4080 ? 255 : p3 >> 4;
656
- p4 = p4 < 16 ? 0 : p4 >= 4080 ? 255 : p4 >> 4;
657
- p5 = p5 < 16 ? 0 : p5 >= 4080 ? 255 : p5 >> 4;
658
- p6 = p6 < 16 ? 0 : p6 >= 4080 ? 255 : p6 >> 4;
659
- p7 = p7 < 16 ? 0 : p7 >= 4080 ? 255 : p7 >> 4;
628
+
629
+ if (p0 < 16) {
630
+ p0 = 0;
631
+ } else if (p0 >= 4080) {
632
+ p0 = 255;
633
+ } else {
634
+ p0 >>= 4;
635
+ }
636
+
637
+ if (p1 < 16) {
638
+ p1 = 0;
639
+ } else if (p1 >= 4080) {
640
+ p1 = 255;
641
+ } else {
642
+ p1 >>= 4;
643
+ }
644
+
645
+ if (p2 < 16) {
646
+ p2 = 0;
647
+ } else if (p2 >= 4080) {
648
+ p2 = 255;
649
+ } else {
650
+ p2 >>= 4;
651
+ }
652
+
653
+ if (p3 < 16) {
654
+ p3 = 0;
655
+ } else if (p3 >= 4080) {
656
+ p3 = 255;
657
+ } else {
658
+ p3 >>= 4;
659
+ }
660
+
661
+ if (p4 < 16) {
662
+ p4 = 0;
663
+ } else if (p4 >= 4080) {
664
+ p4 = 255;
665
+ } else {
666
+ p4 >>= 4;
667
+ }
668
+
669
+ if (p5 < 16) {
670
+ p5 = 0;
671
+ } else if (p5 >= 4080) {
672
+ p5 = 255;
673
+ } else {
674
+ p5 >>= 4;
675
+ }
676
+
677
+ if (p6 < 16) {
678
+ p6 = 0;
679
+ } else if (p6 >= 4080) {
680
+ p6 = 255;
681
+ } else {
682
+ p6 >>= 4;
683
+ }
684
+
685
+ if (p7 < 16) {
686
+ p7 = 0;
687
+ } else if (p7 >= 4080) {
688
+ p7 = 255;
689
+ } else {
690
+ p7 >>= 4;
691
+ }
692
+
660
693
  blockData[blockBufferOffset + col] = p0;
661
694
  blockData[blockBufferOffset + col + 8] = p1;
662
695
  blockData[blockBufferOffset + col + 16] = p2;
@@ -683,23 +716,17 @@ var JpegImage = function JpegImageClosure() {
683
716
  return component.blockData;
684
717
  }
685
718
 
686
- function findNextFileMarker(data, currentPos) {
687
- var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos;
688
-
689
- function peekUint16(pos) {
690
- return data[pos] << 8 | data[pos + 1];
691
- }
692
-
693
- var maxPos = data.length - 1;
719
+ function findNextFileMarker(data, currentPos, startPos = currentPos) {
720
+ const maxPos = data.length - 1;
694
721
  var newPos = startPos < currentPos ? startPos : currentPos;
695
722
 
696
723
  if (currentPos >= maxPos) {
697
724
  return null;
698
725
  }
699
726
 
700
- var currentMarker = peekUint16(currentPos);
727
+ var currentMarker = (0, _core_utils.readUint16)(data, currentPos);
701
728
 
702
- if (currentMarker >= 0xFFC0 && currentMarker <= 0xFFFE) {
729
+ if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
703
730
  return {
704
731
  invalid: null,
705
732
  marker: currentMarker,
@@ -707,14 +734,14 @@ var JpegImage = function JpegImageClosure() {
707
734
  };
708
735
  }
709
736
 
710
- var newMarker = peekUint16(newPos);
737
+ var newMarker = (0, _core_utils.readUint16)(data, newPos);
711
738
 
712
- while (!(newMarker >= 0xFFC0 && newMarker <= 0xFFFE)) {
739
+ while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
713
740
  if (++newPos >= maxPos) {
714
741
  return null;
715
742
  }
716
743
 
717
- newMarker = peekUint16(newPos);
744
+ newMarker = (0, _core_utils.readUint16)(data, newPos);
718
745
  }
719
746
 
720
747
  return {
@@ -725,24 +752,17 @@ var JpegImage = function JpegImageClosure() {
725
752
  }
726
753
 
727
754
  JpegImage.prototype = {
728
- parse: function parse(data) {
729
- var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
730
- _ref2$dnlScanLines = _ref2.dnlScanLines,
731
- dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines;
732
-
733
- function readUint16() {
734
- var value = data[offset] << 8 | data[offset + 1];
735
- offset += 2;
736
- return value;
737
- }
738
-
755
+ parse(data, {
756
+ dnlScanLines = null
757
+ } = {}) {
739
758
  function readDataBlock() {
740
- var length = readUint16();
741
- var endOffset = offset + length - 2;
759
+ const length = (0, _core_utils.readUint16)(data, offset);
760
+ offset += 2;
761
+ let endOffset = offset + length - 2;
742
762
  var fileMarker = findNextFileMarker(data, endOffset, offset);
743
763
 
744
764
  if (fileMarker && fileMarker.invalid) {
745
- (0, _util.warn)('readDataBlock - incorrect length, current marker is: ' + fileMarker.invalid);
765
+ (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
746
766
  endOffset = fileMarker.offset;
747
767
  }
748
768
 
@@ -775,43 +795,45 @@ var JpegImage = function JpegImageClosure() {
775
795
  var jfif = null;
776
796
  var adobe = null;
777
797
  var frame, resetInterval;
778
- var numSOSMarkers = 0;
798
+ let numSOSMarkers = 0;
779
799
  var quantizationTables = [];
780
800
  var huffmanTablesAC = [],
781
801
  huffmanTablesDC = [];
782
- var fileMarker = readUint16();
802
+ let fileMarker = (0, _core_utils.readUint16)(data, offset);
803
+ offset += 2;
783
804
 
784
- if (fileMarker !== 0xFFD8) {
785
- throw new JpegError('SOI not found');
805
+ if (fileMarker !== 0xffd8) {
806
+ throw new JpegError("SOI not found");
786
807
  }
787
808
 
788
- fileMarker = readUint16();
809
+ fileMarker = (0, _core_utils.readUint16)(data, offset);
810
+ offset += 2;
789
811
 
790
- markerLoop: while (fileMarker !== 0xFFD9) {
812
+ markerLoop: while (fileMarker !== 0xffd9) {
791
813
  var i, j, l;
792
814
 
793
815
  switch (fileMarker) {
794
- case 0xFFE0:
795
- case 0xFFE1:
796
- case 0xFFE2:
797
- case 0xFFE3:
798
- case 0xFFE4:
799
- case 0xFFE5:
800
- case 0xFFE6:
801
- case 0xFFE7:
802
- case 0xFFE8:
803
- case 0xFFE9:
804
- case 0xFFEA:
805
- case 0xFFEB:
806
- case 0xFFEC:
807
- case 0xFFED:
808
- case 0xFFEE:
809
- case 0xFFEF:
810
- case 0xFFFE:
816
+ case 0xffe0:
817
+ case 0xffe1:
818
+ case 0xffe2:
819
+ case 0xffe3:
820
+ case 0xffe4:
821
+ case 0xffe5:
822
+ case 0xffe6:
823
+ case 0xffe7:
824
+ case 0xffe8:
825
+ case 0xffe9:
826
+ case 0xffea:
827
+ case 0xffeb:
828
+ case 0xffec:
829
+ case 0xffed:
830
+ case 0xffee:
831
+ case 0xffef:
832
+ case 0xfffe:
811
833
  var appData = readDataBlock();
812
834
 
813
- if (fileMarker === 0xFFE0) {
814
- if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
835
+ if (fileMarker === 0xffe0) {
836
+ if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
815
837
  jfif = {
816
838
  version: {
817
839
  major: appData[5],
@@ -827,8 +849,8 @@ var JpegImage = function JpegImageClosure() {
827
849
  }
828
850
  }
829
851
 
830
- if (fileMarker === 0xFFEE) {
831
- if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && appData[3] === 0x62 && appData[4] === 0x65) {
852
+ if (fileMarker === 0xffee) {
853
+ if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
832
854
  adobe = {
833
855
  version: appData[5] << 8 | appData[6],
834
856
  flags0: appData[7] << 8 | appData[8],
@@ -840,8 +862,9 @@ var JpegImage = function JpegImageClosure() {
840
862
 
841
863
  break;
842
864
 
843
- case 0xFFDB:
844
- var quantizationTablesLength = readUint16();
865
+ case 0xffdb:
866
+ const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
867
+ offset += 2;
845
868
  var quantizationTablesEnd = quantizationTablesLength + offset - 2;
846
869
  var z;
847
870
 
@@ -857,10 +880,11 @@ var JpegImage = function JpegImageClosure() {
857
880
  } else if (quantizationTableSpec >> 4 === 1) {
858
881
  for (j = 0; j < 64; j++) {
859
882
  z = dctZigZag[j];
860
- tableData[z] = readUint16();
883
+ tableData[z] = (0, _core_utils.readUint16)(data, offset);
884
+ offset += 2;
861
885
  }
862
886
  } else {
863
- throw new JpegError('DQT - invalid table spec');
887
+ throw new JpegError("DQT - invalid table spec");
864
888
  }
865
889
 
866
890
  quantizationTables[quantizationTableSpec & 15] = tableData;
@@ -868,21 +892,23 @@ var JpegImage = function JpegImageClosure() {
868
892
 
869
893
  break;
870
894
 
871
- case 0xFFC0:
872
- case 0xFFC1:
873
- case 0xFFC2:
895
+ case 0xffc0:
896
+ case 0xffc1:
897
+ case 0xffc2:
874
898
  if (frame) {
875
- throw new JpegError('Only single frame JPEGs supported');
899
+ throw new JpegError("Only single frame JPEGs supported");
876
900
  }
877
901
 
878
- readUint16();
902
+ offset += 2;
879
903
  frame = {};
880
- frame.extended = fileMarker === 0xFFC1;
881
- frame.progressive = fileMarker === 0xFFC2;
904
+ frame.extended = fileMarker === 0xffc1;
905
+ frame.progressive = fileMarker === 0xffc2;
882
906
  frame.precision = data[offset++];
883
- var sofScanLines = readUint16();
907
+ const sofScanLines = (0, _core_utils.readUint16)(data, offset);
908
+ offset += 2;
884
909
  frame.scanLines = dnlScanLines || sofScanLines;
885
- frame.samplesPerLine = readUint16();
910
+ frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
911
+ offset += 2;
886
912
  frame.components = [];
887
913
  frame.componentIds = {};
888
914
  var componentsCount = data[offset++],
@@ -905,8 +931,8 @@ var JpegImage = function JpegImageClosure() {
905
931
 
906
932
  var qId = data[offset + 2];
907
933
  l = frame.components.push({
908
- h: h,
909
- v: v,
934
+ h,
935
+ v,
910
936
  quantizationId: qId,
911
937
  quantizationTable: null
912
938
  });
@@ -919,8 +945,9 @@ var JpegImage = function JpegImageClosure() {
919
945
  prepareComponents(frame);
920
946
  break;
921
947
 
922
- case 0xFFC4:
923
- var huffmanLength = readUint16();
948
+ case 0xffc4:
949
+ const huffmanLength = (0, _core_utils.readUint16)(data, offset);
950
+ offset += 2;
924
951
 
925
952
  for (i = 2; i < huffmanLength;) {
926
953
  var huffmanTableSpec = data[offset++];
@@ -943,14 +970,15 @@ var JpegImage = function JpegImageClosure() {
943
970
 
944
971
  break;
945
972
 
946
- case 0xFFDD:
947
- readUint16();
948
- resetInterval = readUint16();
973
+ case 0xffdd:
974
+ offset += 2;
975
+ resetInterval = (0, _core_utils.readUint16)(data, offset);
976
+ offset += 2;
949
977
  break;
950
978
 
951
- case 0xFFDA:
952
- var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
953
- readUint16();
979
+ case 0xffda:
980
+ const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
981
+ offset += 2;
954
982
  var selectorsCount = data[offset++];
955
983
  var components = [],
956
984
  component;
@@ -973,12 +1001,12 @@ var JpegImage = function JpegImageClosure() {
973
1001
  offset += processed;
974
1002
  } catch (ex) {
975
1003
  if (ex instanceof DNLMarkerError) {
976
- (0, _util.warn)("".concat(ex.message, " -- attempting to re-parse the JPEG image."));
1004
+ (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
977
1005
  return this.parse(data, {
978
1006
  dnlScanLines: ex.scanLines
979
1007
  });
980
1008
  } else if (ex instanceof EOIMarkerError) {
981
- (0, _util.warn)("".concat(ex.message, " -- ignoring the rest of the image data."));
1009
+ (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
982
1010
  break markerLoop;
983
1011
  }
984
1012
 
@@ -987,40 +1015,36 @@ var JpegImage = function JpegImageClosure() {
987
1015
 
988
1016
  break;
989
1017
 
990
- case 0xFFDC:
1018
+ case 0xffdc:
991
1019
  offset += 4;
992
1020
  break;
993
1021
 
994
- case 0xFFFF:
995
- if (data[offset] !== 0xFF) {
1022
+ case 0xffff:
1023
+ if (data[offset] !== 0xff) {
996
1024
  offset--;
997
1025
  }
998
1026
 
999
1027
  break;
1000
1028
 
1001
1029
  default:
1002
- if (data[offset - 3] === 0xFF && data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {
1003
- offset -= 3;
1004
- break;
1005
- }
1006
-
1007
- var nextFileMarker = findNextFileMarker(data, offset - 2);
1030
+ const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
1008
1031
 
1009
1032
  if (nextFileMarker && nextFileMarker.invalid) {
1010
- (0, _util.warn)('JpegImage.parse - unexpected data, current marker is: ' + nextFileMarker.invalid);
1033
+ (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
1011
1034
  offset = nextFileMarker.offset;
1012
1035
  break;
1013
1036
  }
1014
1037
 
1015
- if (offset > data.length - 2) {
1016
- (0, _util.warn)('JpegImage.parse - reached the end of the image data ' + 'without finding an EOI marker (0xFFD9).');
1038
+ if (offset >= data.length - 1) {
1039
+ (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
1017
1040
  break markerLoop;
1018
1041
  }
1019
1042
 
1020
- throw new JpegError('JpegImage.parse - unknown marker: ' + fileMarker.toString(16));
1043
+ throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
1021
1044
  }
1022
1045
 
1023
- fileMarker = readUint16();
1046
+ fileMarker = (0, _core_utils.readUint16)(data, offset);
1047
+ offset += 2;
1024
1048
  }
1025
1049
 
1026
1050
  this.width = frame.samplesPerLine;
@@ -1049,8 +1073,8 @@ var JpegImage = function JpegImageClosure() {
1049
1073
  this.numComponents = this.components.length;
1050
1074
  return undefined;
1051
1075
  },
1052
- _getLinearizedBlockData: function _getLinearizedBlockData(width, height) {
1053
- var isSourcePDF = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1076
+
1077
+ _getLinearizedBlockData(width, height, isSourcePDF = false) {
1054
1078
  var scaleX = this.width / width,
1055
1079
  scaleY = this.height / height;
1056
1080
  var component, componentScaleX, componentScaleY, blocksPerScanline;
@@ -1063,6 +1087,7 @@ var JpegImage = function JpegImageClosure() {
1063
1087
  var data = new Uint8ClampedArray(dataLength);
1064
1088
  var xScaleBlockOffset = new Uint32Array(width);
1065
1089
  var mask3LSB = 0xfffffff8;
1090
+ let lastComponentScaleX;
1066
1091
 
1067
1092
  for (i = 0; i < numComponents; i++) {
1068
1093
  component = this.components[i];
@@ -1072,9 +1097,13 @@ var JpegImage = function JpegImageClosure() {
1072
1097
  output = component.output;
1073
1098
  blocksPerScanline = component.blocksPerLine + 1 << 3;
1074
1099
 
1075
- for (x = 0; x < width; x++) {
1076
- j = 0 | x * componentScaleX;
1077
- xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
1100
+ if (componentScaleX !== lastComponentScaleX) {
1101
+ for (x = 0; x < width; x++) {
1102
+ j = 0 | x * componentScaleX;
1103
+ xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
1104
+ }
1105
+
1106
+ lastComponentScaleX = componentScaleX;
1078
1107
  }
1079
1108
 
1080
1109
  for (y = 0; y < height; y++) {
@@ -1088,7 +1117,7 @@ var JpegImage = function JpegImageClosure() {
1088
1117
  }
1089
1118
  }
1090
1119
 
1091
- var transform = this._decodeTransform;
1120
+ let transform = this._decodeTransform;
1092
1121
 
1093
1122
  if (!isSourcePDF && numComponents === 4 && !transform) {
1094
1123
  transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
@@ -1172,30 +1201,28 @@ var JpegImage = function JpegImageClosure() {
1172
1201
  _convertCmykToRgb: function convertCmykToRgb(data) {
1173
1202
  var c, m, y, k;
1174
1203
  var offset = 0;
1175
- var scale = 1 / 255;
1176
1204
 
1177
1205
  for (var i = 0, length = data.length; i < length; i += 4) {
1178
- c = data[i] * scale;
1179
- m = data[i + 1] * scale;
1180
- y = data[i + 2] * scale;
1181
- k = data[i + 3] * scale;
1182
- data[offset++] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k - 285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y - 17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) - k * (21.86122147463605 * k + 189.48180835922747);
1183
- data[offset++] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k - 79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) - k * (20.737325471181034 * k + 187.80453709719578);
1184
- data[offset++] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k - 14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k - 193.58209356861505) - k * (22.33816807309886 * k + 180.12613974708367);
1206
+ c = data[i];
1207
+ m = data[i + 1];
1208
+ y = data[i + 2];
1209
+ k = data[i + 3];
1210
+ data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
1211
+ data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);
1212
+ data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
1185
1213
  }
1186
1214
 
1187
1215
  return data.subarray(0, offset);
1188
1216
  },
1189
- getData: function getData(_ref3) {
1190
- var width = _ref3.width,
1191
- height = _ref3.height,
1192
- _ref3$forceRGB = _ref3.forceRGB,
1193
- forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB,
1194
- _ref3$isSourcePDF = _ref3.isSourcePDF,
1195
- isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF;
1196
1217
 
1218
+ getData({
1219
+ width,
1220
+ height,
1221
+ forceRGB = false,
1222
+ isSourcePDF = false
1223
+ }) {
1197
1224
  if (this.numComponents > 4) {
1198
- throw new JpegError('Unsupported color mode');
1225
+ throw new JpegError("Unsupported color mode");
1199
1226
  }
1200
1227
 
1201
1228
  var data = this._getLinearizedBlockData(width, height, isSourcePDF);
@@ -1229,6 +1256,7 @@ var JpegImage = function JpegImageClosure() {
1229
1256
 
1230
1257
  return data;
1231
1258
  }
1259
+
1232
1260
  };
1233
1261
  return JpegImage;
1234
1262
  }();