pdfjs-dist 2.0.943 → 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 (192) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/README.md +4 -0
  3. package/bower.json +1 -1
  4. package/build/pdf.js +8286 -14230
  5. package/build/pdf.js.map +1 -1
  6. package/build/pdf.min.js +22 -1
  7. package/build/pdf.worker.entry.js +5 -3
  8. package/build/pdf.worker.js +25500 -26628
  9. package/build/pdf.worker.js.map +1 -1
  10. package/build/pdf.worker.min.js +22 -1
  11. package/es5/build/pdf.js +25473 -0
  12. package/es5/build/pdf.js.map +1 -0
  13. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  14. package/es5/build/pdf.worker.js +57878 -0
  15. package/es5/build/pdf.worker.js.map +1 -0
  16. package/es5/web/images/annotation-check.svg +11 -0
  17. package/es5/web/images/annotation-comment.svg +16 -0
  18. package/es5/web/images/annotation-help.svg +26 -0
  19. package/es5/web/images/annotation-insert.svg +10 -0
  20. package/es5/web/images/annotation-key.svg +11 -0
  21. package/es5/web/images/annotation-newparagraph.svg +11 -0
  22. package/es5/web/images/annotation-noicon.svg +7 -0
  23. package/es5/web/images/annotation-note.svg +42 -0
  24. package/es5/web/images/annotation-paragraph.svg +16 -0
  25. package/es5/web/images/loading-icon.gif +0 -0
  26. package/es5/web/images/shadow.png +0 -0
  27. package/es5/web/images/texture.png +0 -0
  28. package/es5/web/pdf_viewer.css +407 -0
  29. package/es5/web/pdf_viewer.js +7757 -0
  30. package/es5/web/pdf_viewer.js.map +1 -0
  31. package/image_decoders/pdf.image_decoders.js +2887 -4094
  32. package/image_decoders/pdf.image_decoders.js.map +1 -1
  33. package/image_decoders/pdf.image_decoders.min.js +22 -1
  34. package/lib/README.md +7 -0
  35. package/lib/core/annotation.js +855 -778
  36. package/lib/core/arithmetic_decoder.js +325 -311
  37. package/lib/core/bidi.js +117 -50
  38. package/lib/core/ccitt.js +251 -89
  39. package/lib/core/ccitt_stream.js +26 -16
  40. package/lib/core/cff_parser.js +525 -197
  41. package/lib/core/charsets.js +6 -5
  42. package/lib/core/chunked_stream.js +541 -406
  43. package/lib/core/cmap.js +368 -253
  44. package/lib/core/colorspace.js +781 -800
  45. package/lib/core/core_utils.js +152 -0
  46. package/lib/core/crypto.js +609 -422
  47. package/lib/core/document.js +649 -481
  48. package/lib/core/encodings.js +33 -24
  49. package/lib/core/evaluator.js +1471 -736
  50. package/lib/core/font_renderer.js +289 -149
  51. package/lib/core/fonts.js +1067 -413
  52. package/lib/core/function.js +517 -287
  53. package/lib/core/glyphlist.js +4529 -4527
  54. package/lib/core/image.js +232 -114
  55. package/lib/core/image_utils.js +94 -0
  56. package/lib/core/jbig2.js +711 -342
  57. package/lib/core/jbig2_stream.js +31 -19
  58. package/lib/core/jpeg_stream.js +151 -26
  59. package/lib/core/jpg.js +433 -181
  60. package/lib/core/jpx.js +551 -143
  61. package/lib/core/jpx_stream.js +40 -28
  62. package/lib/core/metrics.js +2931 -2931
  63. package/lib/core/murmurhash3.js +104 -97
  64. package/lib/core/obj.js +1561 -1053
  65. package/lib/core/operator_list.js +192 -64
  66. package/lib/core/parser.js +1162 -864
  67. package/lib/core/pattern.js +224 -75
  68. package/lib/core/pdf_manager.js +154 -285
  69. package/lib/core/primitives.js +145 -69
  70. package/lib/core/ps_parser.js +212 -162
  71. package/lib/core/standard_fonts.js +245 -244
  72. package/lib/core/stream.js +353 -81
  73. package/lib/core/type1_parser.js +218 -68
  74. package/lib/core/unicode.js +1682 -1655
  75. package/lib/core/worker.js +233 -302
  76. package/lib/core/worker_stream.js +168 -0
  77. package/lib/display/annotation_layer.js +808 -862
  78. package/lib/display/api.js +1778 -1462
  79. package/lib/display/api_compatibility.js +14 -9
  80. package/lib/display/canvas.js +463 -140
  81. package/lib/display/content_disposition.js +86 -58
  82. package/lib/display/display_utils.js +524 -0
  83. package/lib/display/fetch_stream.js +202 -274
  84. package/lib/display/font_loader.js +311 -333
  85. package/lib/display/metadata.js +98 -88
  86. package/lib/display/network.js +343 -347
  87. package/lib/display/network_utils.js +46 -26
  88. package/lib/display/node_stream.js +326 -404
  89. package/lib/display/pattern_helper.js +168 -69
  90. package/lib/display/svg.js +1296 -885
  91. package/lib/display/text_layer.js +229 -103
  92. package/lib/display/transport_stream.js +290 -250
  93. package/lib/display/webgl.js +116 -83
  94. package/lib/display/worker_options.js +6 -5
  95. package/lib/display/xml_parser.js +358 -337
  96. package/lib/examples/node/domstubs.js +95 -39
  97. package/lib/pdf.js +49 -31
  98. package/lib/pdf.worker.js +7 -5
  99. package/lib/shared/compatibility.js +3 -145
  100. package/lib/shared/is_node.js +8 -7
  101. package/lib/shared/message_handler.js +367 -314
  102. package/lib/shared/util.js +421 -415
  103. package/lib/test/unit/annotation_spec.js +1570 -690
  104. package/lib/test/unit/api_spec.js +855 -493
  105. package/lib/test/unit/bidi_spec.js +12 -12
  106. package/lib/test/unit/cff_parser_spec.js +88 -61
  107. package/lib/test/unit/clitests_helper.js +9 -12
  108. package/lib/test/unit/cmap_spec.js +140 -88
  109. package/lib/test/unit/colorspace_spec.js +204 -152
  110. package/lib/test/unit/core_utils_spec.js +211 -0
  111. package/lib/test/unit/crypto_spec.js +194 -182
  112. package/lib/test/unit/custom_spec.js +50 -64
  113. package/lib/test/unit/display_svg_spec.js +53 -38
  114. package/lib/test/unit/display_utils_spec.js +263 -0
  115. package/lib/test/unit/document_spec.js +17 -22
  116. package/lib/test/unit/encodings_spec.js +15 -57
  117. package/lib/test/unit/evaluator_spec.js +90 -83
  118. package/lib/test/unit/fetch_stream_spec.js +111 -0
  119. package/lib/test/unit/function_spec.js +219 -205
  120. package/lib/test/unit/jasmine-boot.js +68 -39
  121. package/lib/test/unit/message_handler_spec.js +187 -160
  122. package/lib/test/unit/metadata_spec.js +87 -34
  123. package/lib/test/unit/murmurhash3_spec.js +13 -13
  124. package/lib/test/unit/network_spec.js +26 -59
  125. package/lib/test/unit/network_utils_spec.js +187 -121
  126. package/lib/test/unit/node_stream_spec.js +98 -90
  127. package/lib/test/unit/parser_spec.js +173 -131
  128. package/lib/test/unit/pdf_find_controller_spec.js +148 -67
  129. package/lib/test/unit/pdf_find_utils_spec.js +35 -34
  130. package/lib/test/unit/pdf_history_spec.js +45 -33
  131. package/lib/test/unit/primitives_spec.js +161 -126
  132. package/lib/test/unit/stream_spec.js +22 -15
  133. package/lib/test/unit/test_utils.js +149 -98
  134. package/lib/test/unit/testreporter.js +36 -18
  135. package/lib/test/unit/type1_parser_spec.js +46 -44
  136. package/lib/test/unit/ui_utils_spec.js +388 -372
  137. package/lib/test/unit/unicode_spec.js +49 -46
  138. package/lib/test/unit/util_spec.js +144 -248
  139. package/lib/web/annotation_layer_builder.js +75 -95
  140. package/lib/web/app.js +1538 -1147
  141. package/lib/web/app_options.js +116 -104
  142. package/lib/web/base_viewer.js +950 -775
  143. package/lib/web/chromecom.js +217 -225
  144. package/lib/web/debugger.js +236 -148
  145. package/lib/web/download_manager.js +50 -50
  146. package/lib/web/firefox_print_service.js +51 -33
  147. package/lib/web/firefoxcom.js +225 -352
  148. package/lib/web/genericcom.js +30 -93
  149. package/lib/web/genericl10n.js +26 -143
  150. package/lib/web/grab_to_pan.js +57 -33
  151. package/lib/web/interfaces.js +105 -232
  152. package/lib/web/overlay_manager.js +73 -227
  153. package/lib/web/password_prompt.js +44 -62
  154. package/lib/web/pdf_attachment_viewer.js +118 -123
  155. package/lib/web/pdf_cursor_tools.js +89 -93
  156. package/lib/web/pdf_document_properties.js +242 -281
  157. package/lib/web/pdf_find_bar.js +157 -163
  158. package/lib/web/pdf_find_controller.js +598 -454
  159. package/lib/web/pdf_find_utils.js +32 -16
  160. package/lib/web/pdf_history.js +481 -355
  161. package/lib/web/pdf_link_service.js +355 -323
  162. package/lib/web/pdf_outline_viewer.js +167 -152
  163. package/lib/web/pdf_page_view.js +511 -457
  164. package/lib/web/pdf_presentation_mode.js +347 -335
  165. package/lib/web/pdf_print_service.js +133 -103
  166. package/lib/web/pdf_rendering_queue.js +98 -100
  167. package/lib/web/pdf_sidebar.js +323 -299
  168. package/lib/web/pdf_sidebar_resizer.js +107 -108
  169. package/lib/web/pdf_single_page_viewer.js +94 -146
  170. package/lib/web/pdf_thumbnail_view.js +319 -269
  171. package/lib/web/pdf_thumbnail_viewer.js +219 -199
  172. package/lib/web/pdf_viewer.component.js +111 -32
  173. package/lib/web/pdf_viewer.js +61 -101
  174. package/lib/web/preferences.js +87 -272
  175. package/lib/web/secondary_toolbar.js +207 -220
  176. package/lib/web/text_layer_builder.js +322 -322
  177. package/lib/web/toolbar.js +227 -180
  178. package/lib/web/ui_utils.js +476 -421
  179. package/lib/web/view_history.js +59 -208
  180. package/lib/web/viewer_compatibility.js +9 -6
  181. package/package.json +2 -9
  182. package/web/pdf_viewer.css +36 -22
  183. package/web/pdf_viewer.js +4407 -4516
  184. package/web/pdf_viewer.js.map +1 -1
  185. package/webpack.js +14 -5
  186. package/external/streams/streams-lib.js +0 -3962
  187. package/external/url/url-lib.js +0 -627
  188. package/lib/display/dom_utils.js +0 -441
  189. package/lib/shared/streams_polyfill.js +0 -39
  190. package/lib/shared/url_polyfill.js +0 -50
  191. package/lib/test/unit/dom_utils_spec.js +0 -89
  192. package/lib/web/dom_events.js +0 -140
@@ -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 2018 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.
@@ -19,56 +19,70 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.OperatorList = undefined;
27
+ exports.OperatorList = void 0;
28
28
 
29
- var _util = require('../shared/util');
29
+ var _util = require("../shared/util.js");
30
30
 
31
31
  var QueueOptimizer = function QueueOptimizerClosure() {
32
32
  function addState(parentState, pattern, checkFn, iterateFn, processFn) {
33
33
  var state = parentState;
34
+
34
35
  for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
35
36
  var item = pattern[i];
36
37
  state = state[item] || (state[item] = []);
37
38
  }
39
+
38
40
  state[pattern[pattern.length - 1]] = {
39
- checkFn: checkFn,
40
- iterateFn: iterateFn,
41
- processFn: processFn
41
+ checkFn,
42
+ iterateFn,
43
+ processFn
42
44
  };
43
45
  }
46
+
44
47
  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
45
48
  var iFirstPIMXO = iFirstSave + 2;
49
+
46
50
  for (var i = 0; i < count; i++) {
47
51
  var arg = argsArray[iFirstPIMXO + 4 * i];
48
52
  var imageMask = arg.length === 1 && arg[0];
53
+
49
54
  if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {
50
55
  fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
51
56
  continue;
52
57
  }
58
+
53
59
  break;
54
60
  }
61
+
55
62
  return count - i;
56
63
  }
64
+
57
65
  var InitialState = [];
58
66
  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
59
67
  var fnArray = context.fnArray;
60
68
  var iFirstSave = context.iCurr - 3;
61
69
  var pos = (i - iFirstSave) % 4;
70
+
62
71
  switch (pos) {
63
72
  case 0:
64
73
  return fnArray[i] === _util.OPS.save;
74
+
65
75
  case 1:
66
76
  return fnArray[i] === _util.OPS.transform;
77
+
67
78
  case 2:
68
79
  return fnArray[i] === _util.OPS.paintInlineImageXObject;
80
+
69
81
  case 3:
70
82
  return fnArray[i] === _util.OPS.restore;
71
83
  }
84
+
85
+ throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
72
86
  }, function foundInlineImageGroup(context, i) {
73
87
  var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
74
88
  var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
@@ -81,26 +95,31 @@ var QueueOptimizer = function QueueOptimizerClosure() {
81
95
  var iFirstTransform = curr - 2;
82
96
  var iFirstPIIXO = curr - 1;
83
97
  var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
98
+
84
99
  if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
85
100
  return i - (i - iFirstSave) % 4;
86
101
  }
102
+
87
103
  var maxX = 0;
88
104
  var map = [],
89
105
  maxLineHeight = 0;
90
106
  var currentX = IMAGE_PADDING,
91
107
  currentY = IMAGE_PADDING;
92
108
  var q;
109
+
93
110
  for (q = 0; q < count; q++) {
94
111
  var transform = argsArray[iFirstTransform + (q << 2)];
95
112
  var img = argsArray[iFirstPIIXO + (q << 2)][0];
113
+
96
114
  if (currentX + img.width > MAX_WIDTH) {
97
115
  maxX = Math.max(maxX, currentX);
98
116
  currentY += maxLineHeight + 2 * IMAGE_PADDING;
99
117
  currentX = 0;
100
118
  maxLineHeight = 0;
101
119
  }
120
+
102
121
  map.push({
103
- transform: transform,
122
+ transform,
104
123
  x: currentX,
105
124
  y: currentY,
106
125
  w: img.width,
@@ -109,22 +128,27 @@ var QueueOptimizer = function QueueOptimizerClosure() {
109
128
  currentX += img.width + 2 * IMAGE_PADDING;
110
129
  maxLineHeight = Math.max(maxLineHeight, img.height);
111
130
  }
131
+
112
132
  var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
113
133
  var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
114
134
  var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
115
135
  var imgRowSize = imgWidth << 2;
136
+
116
137
  for (q = 0; q < count; q++) {
117
138
  var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
118
139
  var rowSize = map[q].w << 2;
119
140
  var dataOffset = 0;
120
141
  var offset = map[q].x + map[q].y * imgWidth << 2;
121
142
  imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
143
+
122
144
  for (var k = 0, kk = map[q].h; k < kk; k++) {
123
145
  imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
124
146
  dataOffset += rowSize;
125
147
  offset += imgRowSize;
126
148
  }
149
+
127
150
  imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
151
+
128
152
  while (offset >= 0) {
129
153
  data[offset - 4] = data[offset];
130
154
  data[offset - 3] = data[offset + 1];
@@ -137,6 +161,7 @@ var QueueOptimizer = function QueueOptimizerClosure() {
137
161
  offset -= imgRowSize;
138
162
  }
139
163
  }
164
+
140
165
  fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
141
166
  argsArray.splice(iFirstSave, count * 4, [{
142
167
  width: imgWidth,
@@ -150,16 +175,22 @@ var QueueOptimizer = function QueueOptimizerClosure() {
150
175
  var fnArray = context.fnArray;
151
176
  var iFirstSave = context.iCurr - 3;
152
177
  var pos = (i - iFirstSave) % 4;
178
+
153
179
  switch (pos) {
154
180
  case 0:
155
181
  return fnArray[i] === _util.OPS.save;
182
+
156
183
  case 1:
157
184
  return fnArray[i] === _util.OPS.transform;
185
+
158
186
  case 2:
159
187
  return fnArray[i] === _util.OPS.paintImageMaskXObject;
188
+
160
189
  case 3:
161
190
  return fnArray[i] === _util.OPS.restore;
162
191
  }
192
+
193
+ throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
163
194
  }, function foundImageMaskGroup(context, i) {
164
195
  var MIN_IMAGES_IN_MASKS_BLOCK = 10;
165
196
  var MAX_IMAGES_IN_MASKS_BLOCK = 100;
@@ -172,45 +203,55 @@ var QueueOptimizer = function QueueOptimizerClosure() {
172
203
  var iFirstPIMXO = curr - 1;
173
204
  var count = Math.floor((i - iFirstSave) / 4);
174
205
  count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
206
+
175
207
  if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
176
208
  return i - (i - iFirstSave) % 4;
177
209
  }
210
+
178
211
  var q;
179
212
  var isSameImage = false;
180
213
  var iTransform, transformArgs;
181
214
  var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
215
+
182
216
  if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {
183
217
  isSameImage = true;
184
218
  var firstTransformArg0 = argsArray[iFirstTransform][0];
185
219
  var firstTransformArg3 = argsArray[iFirstTransform][3];
186
220
  iTransform = iFirstTransform + 4;
187
221
  var iPIMXO = iFirstPIMXO + 4;
222
+
188
223
  for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
189
224
  transformArgs = argsArray[iTransform];
225
+
190
226
  if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) {
191
227
  if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
192
228
  isSameImage = false;
193
229
  } else {
194
230
  count = q;
195
231
  }
232
+
196
233
  break;
197
234
  }
198
235
  }
199
236
  }
237
+
200
238
  if (isSameImage) {
201
239
  count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
202
240
  var positions = new Float32Array(count * 2);
203
241
  iTransform = iFirstTransform;
242
+
204
243
  for (q = 0; q < count; q++, iTransform += 4) {
205
244
  transformArgs = argsArray[iTransform];
206
245
  positions[q << 1] = transformArgs[4];
207
246
  positions[(q << 1) + 1] = transformArgs[5];
208
247
  }
248
+
209
249
  fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
210
250
  argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
211
251
  } else {
212
252
  count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
213
253
  var images = [];
254
+
214
255
  for (q = 0; q < count; q++) {
215
256
  transformArgs = argsArray[iFirstTransform + (q << 2)];
216
257
  var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
@@ -221,47 +262,61 @@ var QueueOptimizer = function QueueOptimizerClosure() {
221
262
  transform: transformArgs
222
263
  });
223
264
  }
265
+
224
266
  fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
225
267
  argsArray.splice(iFirstSave, count * 4, [images]);
226
268
  }
269
+
227
270
  return iFirstSave + 1;
228
271
  });
229
272
  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
230
273
  var argsArray = context.argsArray;
231
274
  var iFirstTransform = context.iCurr - 2;
232
275
  return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
233
- }, function (context, i) {
276
+ }, function iterateImageGroup(context, i) {
234
277
  var fnArray = context.fnArray,
235
278
  argsArray = context.argsArray;
236
279
  var iFirstSave = context.iCurr - 3;
237
280
  var pos = (i - iFirstSave) % 4;
281
+
238
282
  switch (pos) {
239
283
  case 0:
240
284
  return fnArray[i] === _util.OPS.save;
285
+
241
286
  case 1:
242
287
  if (fnArray[i] !== _util.OPS.transform) {
243
288
  return false;
244
289
  }
290
+
245
291
  var iFirstTransform = context.iCurr - 2;
246
292
  var firstTransformArg0 = argsArray[iFirstTransform][0];
247
293
  var firstTransformArg3 = argsArray[iFirstTransform][3];
294
+
248
295
  if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
249
296
  return false;
250
297
  }
298
+
251
299
  return true;
300
+
252
301
  case 2:
253
302
  if (fnArray[i] !== _util.OPS.paintImageXObject) {
254
303
  return false;
255
304
  }
305
+
256
306
  var iFirstPIXO = context.iCurr - 1;
257
307
  var firstPIXOArg0 = argsArray[iFirstPIXO][0];
308
+
258
309
  if (argsArray[i][0] !== firstPIXOArg0) {
259
310
  return false;
260
311
  }
312
+
261
313
  return true;
314
+
262
315
  case 3:
263
316
  return fnArray[i] === _util.OPS.restore;
264
317
  }
318
+
319
+ throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
265
320
  }, function (context, i) {
266
321
  var MIN_IMAGES_IN_BLOCK = 3;
267
322
  var MAX_IMAGES_IN_BLOCK = 1000;
@@ -275,47 +330,61 @@ var QueueOptimizer = function QueueOptimizerClosure() {
275
330
  var firstTransformArg0 = argsArray[iFirstTransform][0];
276
331
  var firstTransformArg3 = argsArray[iFirstTransform][3];
277
332
  var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
333
+
278
334
  if (count < MIN_IMAGES_IN_BLOCK) {
279
335
  return i - (i - iFirstSave) % 4;
280
336
  }
337
+
281
338
  var positions = new Float32Array(count * 2);
282
339
  var iTransform = iFirstTransform;
340
+
283
341
  for (var q = 0; q < count; q++, iTransform += 4) {
284
342
  var transformArgs = argsArray[iTransform];
285
343
  positions[q << 1] = transformArgs[4];
286
344
  positions[(q << 1) + 1] = transformArgs[5];
287
345
  }
346
+
288
347
  var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
289
348
  fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
290
349
  argsArray.splice(iFirstSave, count * 4, args);
291
350
  return iFirstSave + 1;
292
351
  });
293
- addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function (context, i) {
352
+ addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
294
353
  var fnArray = context.fnArray,
295
354
  argsArray = context.argsArray;
296
355
  var iFirstSave = context.iCurr - 4;
297
356
  var pos = (i - iFirstSave) % 5;
357
+
298
358
  switch (pos) {
299
359
  case 0:
300
360
  return fnArray[i] === _util.OPS.beginText;
361
+
301
362
  case 1:
302
363
  return fnArray[i] === _util.OPS.setFont;
364
+
303
365
  case 2:
304
366
  return fnArray[i] === _util.OPS.setTextMatrix;
367
+
305
368
  case 3:
306
369
  if (fnArray[i] !== _util.OPS.showText) {
307
370
  return false;
308
371
  }
372
+
309
373
  var iFirstSetFont = context.iCurr - 3;
310
374
  var firstSetFontArg0 = argsArray[iFirstSetFont][0];
311
375
  var firstSetFontArg1 = argsArray[iFirstSetFont][1];
376
+
312
377
  if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
313
378
  return false;
314
379
  }
380
+
315
381
  return true;
382
+
316
383
  case 4:
317
384
  return fnArray[i] === _util.OPS.endText;
318
385
  }
386
+
387
+ throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
319
388
  }, function (context, i) {
320
389
  var MIN_CHARS_IN_BLOCK = 3;
321
390
  var MAX_CHARS_IN_BLOCK = 1000;
@@ -330,22 +399,29 @@ var QueueOptimizer = function QueueOptimizerClosure() {
330
399
  var firstSetFontArg0 = argsArray[iFirstSetFont][0];
331
400
  var firstSetFontArg1 = argsArray[iFirstSetFont][1];
332
401
  var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
402
+
333
403
  if (count < MIN_CHARS_IN_BLOCK) {
334
404
  return i - (i - iFirstBeginText) % 5;
335
405
  }
406
+
336
407
  var iFirst = iFirstBeginText;
408
+
337
409
  if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
338
410
  count++;
339
411
  iFirst -= 5;
340
412
  }
413
+
341
414
  var iEndText = iFirst + 4;
415
+
342
416
  for (var q = 1; q < count; q++) {
343
417
  fnArray.splice(iEndText, 3);
344
418
  argsArray.splice(iEndText, 3);
345
419
  iEndText += 2;
346
420
  }
421
+
347
422
  return iEndText + 1;
348
423
  });
424
+
349
425
  function QueueOptimizer(queue) {
350
426
  this.queue = queue;
351
427
  this.state = null;
@@ -357,134 +433,153 @@ var QueueOptimizer = function QueueOptimizerClosure() {
357
433
  this.match = null;
358
434
  this.lastProcessed = 0;
359
435
  }
436
+
360
437
  QueueOptimizer.prototype = {
361
- _optimize: function _optimize() {
362
- var fnArray = this.queue.fnArray;
363
- var i = this.lastProcessed,
438
+ _optimize() {
439
+ const fnArray = this.queue.fnArray;
440
+ let i = this.lastProcessed,
364
441
  ii = fnArray.length;
365
- var state = this.state;
366
- var match = this.match;
442
+ let state = this.state;
443
+ let match = this.match;
444
+
367
445
  if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
368
446
  this.lastProcessed = ii;
369
447
  return;
370
448
  }
371
- var context = this.context;
449
+
450
+ const context = this.context;
451
+
372
452
  while (i < ii) {
373
453
  if (match) {
374
- var iterate = (0, match.iterateFn)(context, i);
454
+ const iterate = (0, match.iterateFn)(context, i);
455
+
375
456
  if (iterate) {
376
457
  i++;
377
458
  continue;
378
459
  }
460
+
379
461
  i = (0, match.processFn)(context, i + 1);
380
462
  ii = fnArray.length;
381
463
  match = null;
382
464
  state = null;
465
+
383
466
  if (i >= ii) {
384
467
  break;
385
468
  }
386
469
  }
470
+
387
471
  state = (state || InitialState)[fnArray[i]];
472
+
388
473
  if (!state || Array.isArray(state)) {
389
474
  i++;
390
475
  continue;
391
476
  }
477
+
392
478
  context.iCurr = i;
393
479
  i++;
480
+
394
481
  if (state.checkFn && !(0, state.checkFn)(context)) {
395
482
  state = null;
396
483
  continue;
397
484
  }
485
+
398
486
  match = state;
399
487
  state = null;
400
488
  }
489
+
401
490
  this.state = state;
402
491
  this.match = match;
403
492
  this.lastProcessed = i;
404
493
  },
405
- push: function push(fn, args) {
494
+
495
+ push(fn, args) {
406
496
  this.queue.fnArray.push(fn);
407
497
  this.queue.argsArray.push(args);
498
+
408
499
  this._optimize();
409
500
  },
410
- flush: function flush() {
501
+
502
+ flush() {
411
503
  while (this.match) {
412
- var length = this.queue.fnArray.length;
504
+ const length = this.queue.fnArray.length;
413
505
  this.lastProcessed = (0, this.match.processFn)(this.context, length);
414
506
  this.match = null;
415
507
  this.state = null;
508
+
416
509
  this._optimize();
417
510
  }
418
511
  },
419
- reset: function reset() {
512
+
513
+ reset() {
420
514
  this.state = null;
421
515
  this.match = null;
422
516
  this.lastProcessed = 0;
423
517
  }
518
+
424
519
  };
425
520
  return QueueOptimizer;
426
521
  }();
522
+
427
523
  var NullOptimizer = function NullOptimizerClosure() {
428
524
  function NullOptimizer(queue) {
429
525
  this.queue = queue;
430
526
  }
527
+
431
528
  NullOptimizer.prototype = {
432
- push: function push(fn, args) {
529
+ push(fn, args) {
433
530
  this.queue.fnArray.push(fn);
434
531
  this.queue.argsArray.push(args);
435
532
  },
436
- flush: function flush() {}
533
+
534
+ flush() {},
535
+
536
+ reset() {}
537
+
437
538
  };
438
539
  return NullOptimizer;
439
540
  }();
541
+
440
542
  var OperatorList = function OperatorListClosure() {
441
543
  var CHUNK_SIZE = 1000;
442
544
  var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
443
- function getTransfers(queue) {
444
- var transfers = [];
445
- var fnArray = queue.fnArray,
446
- argsArray = queue.argsArray;
447
- for (var i = 0, ii = queue.length; i < ii; i++) {
448
- switch (fnArray[i]) {
449
- case _util.OPS.paintInlineImageXObject:
450
- case _util.OPS.paintInlineImageXObjectGroup:
451
- case _util.OPS.paintImageMaskXObject:
452
- var arg = argsArray[i][0];
453
- ;
454
- if (!arg.cached) {
455
- transfers.push(arg.data.buffer);
456
- }
457
- break;
458
- }
459
- }
460
- return transfers;
461
- }
462
- function OperatorList(intent, messageHandler, pageIndex) {
463
- this.messageHandler = messageHandler;
545
+
546
+ function OperatorList(intent, streamSink, pageIndex) {
547
+ this._streamSink = streamSink;
464
548
  this.fnArray = [];
465
549
  this.argsArray = [];
466
- if (messageHandler && this.intent !== 'oplist') {
550
+
551
+ if (streamSink && intent !== "oplist") {
467
552
  this.optimizer = new QueueOptimizer(this);
468
553
  } else {
469
554
  this.optimizer = new NullOptimizer(this);
470
555
  }
556
+
471
557
  this.dependencies = Object.create(null);
472
558
  this._totalLength = 0;
473
559
  this.pageIndex = pageIndex;
474
560
  this.intent = intent;
475
561
  this.weight = 0;
562
+ this._resolved = streamSink ? null : Promise.resolve();
476
563
  }
564
+
477
565
  OperatorList.prototype = {
478
566
  get length() {
479
567
  return this.argsArray.length;
480
568
  },
569
+
570
+ get ready() {
571
+ return this._resolved || this._streamSink.ready;
572
+ },
573
+
481
574
  get totalLength() {
482
575
  return this._totalLength + this.length;
483
576
  },
484
- addOp: function addOp(fn, args) {
577
+
578
+ addOp(fn, args) {
485
579
  this.optimizer.push(fn, args);
486
580
  this.weight++;
487
- if (this.messageHandler) {
581
+
582
+ if (this._streamSink) {
488
583
  if (this.weight >= CHUNK_SIZE) {
489
584
  this.flush();
490
585
  } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
@@ -492,53 +587,86 @@ var OperatorList = function OperatorListClosure() {
492
587
  }
493
588
  }
494
589
  },
495
- addDependency: function addDependency(dependency) {
590
+
591
+ addDependency(dependency) {
496
592
  if (dependency in this.dependencies) {
497
593
  return;
498
594
  }
595
+
499
596
  this.dependencies[dependency] = true;
500
597
  this.addOp(_util.OPS.dependency, [dependency]);
501
598
  },
502
- addDependencies: function addDependencies(dependencies) {
599
+
600
+ addDependencies(dependencies) {
503
601
  for (var key in dependencies) {
504
602
  this.addDependency(key);
505
603
  }
506
604
  },
507
- addOpList: function addOpList(opList) {
605
+
606
+ addOpList(opList) {
508
607
  Object.assign(this.dependencies, opList.dependencies);
608
+
509
609
  for (var i = 0, ii = opList.length; i < ii; i++) {
510
610
  this.addOp(opList.fnArray[i], opList.argsArray[i]);
511
611
  }
512
612
  },
513
- getIR: function getIR() {
613
+
614
+ getIR() {
514
615
  return {
515
616
  fnArray: this.fnArray,
516
617
  argsArray: this.argsArray,
517
618
  length: this.length
518
619
  };
519
620
  },
520
- flush: function flush(lastChunk) {
621
+
622
+ get _transfers() {
623
+ const transfers = [];
624
+ const {
625
+ fnArray,
626
+ argsArray,
627
+ length
628
+ } = this;
629
+
630
+ for (let i = 0; i < length; i++) {
631
+ switch (fnArray[i]) {
632
+ case _util.OPS.paintInlineImageXObject:
633
+ case _util.OPS.paintInlineImageXObjectGroup:
634
+ case _util.OPS.paintImageMaskXObject:
635
+ const arg = argsArray[i][0];
636
+ ;
637
+
638
+ if (!arg.cached) {
639
+ transfers.push(arg.data.buffer);
640
+ }
641
+
642
+ break;
643
+ }
644
+ }
645
+
646
+ return transfers;
647
+ },
648
+
649
+ flush(lastChunk = false) {
521
650
  this.optimizer.flush();
522
- var transfers = getTransfers(this);
523
- var length = this.length;
651
+ const length = this.length;
524
652
  this._totalLength += length;
525
- this.messageHandler.send('RenderPageChunk', {
526
- operatorList: {
527
- fnArray: this.fnArray,
528
- argsArray: this.argsArray,
529
- lastChunk: lastChunk,
530
- length: length
531
- },
532
- pageIndex: this.pageIndex,
533
- intent: this.intent
534
- }, transfers);
653
+
654
+ this._streamSink.enqueue({
655
+ fnArray: this.fnArray,
656
+ argsArray: this.argsArray,
657
+ lastChunk,
658
+ length
659
+ }, 1, this._transfers);
660
+
535
661
  this.dependencies = Object.create(null);
536
662
  this.fnArray.length = 0;
537
663
  this.argsArray.length = 0;
538
664
  this.weight = 0;
539
665
  this.optimizer.reset();
540
666
  }
667
+
541
668
  };
542
669
  return OperatorList;
543
670
  }();
671
+
544
672
  exports.OperatorList = OperatorList;