pdfjs-dist 2.0.550 → 2.3.200

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 (168) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +21618 -14369
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +22758 -11399
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/image_decoders/pdf.image_decoders.js +11500 -0
  10. package/image_decoders/pdf.image_decoders.js.map +1 -0
  11. package/image_decoders/pdf.image_decoders.min.js +1 -0
  12. package/lib/core/annotation.js +767 -258
  13. package/lib/core/arithmetic_decoder.js +275 -245
  14. package/lib/core/bidi.js +65 -6
  15. package/lib/core/ccitt.js +173 -18
  16. package/lib/core/ccitt_stream.js +15 -6
  17. package/lib/core/cff_parser.js +433 -61
  18. package/lib/core/charsets.js +5 -4
  19. package/lib/core/chunked_stream.js +428 -157
  20. package/lib/core/cmap.js +326 -87
  21. package/lib/core/colorspace.js +874 -594
  22. package/lib/core/core_utils.js +173 -0
  23. package/lib/core/crypto.js +290 -45
  24. package/lib/core/document.js +575 -272
  25. package/lib/core/encodings.js +19 -10
  26. package/lib/core/evaluator.js +1032 -351
  27. package/lib/core/font_renderer.js +331 -97
  28. package/lib/core/fonts.js +813 -196
  29. package/lib/core/function.js +253 -27
  30. package/lib/core/glyphlist.js +5 -3
  31. package/lib/core/image.js +169 -62
  32. package/lib/core/image_utils.js +111 -0
  33. package/lib/core/jbig2.js +502 -72
  34. package/lib/core/jbig2_stream.js +19 -8
  35. package/lib/core/jpeg_stream.js +38 -13
  36. package/lib/core/jpg.js +293 -52
  37. package/lib/core/jpx.js +419 -12
  38. package/lib/core/jpx_stream.js +18 -6
  39. package/lib/core/metrics.js +15 -15
  40. package/lib/core/murmurhash3.js +56 -34
  41. package/lib/core/obj.js +1368 -500
  42. package/lib/core/operator_list.js +159 -43
  43. package/lib/core/parser.js +544 -199
  44. package/lib/core/pattern.js +170 -21
  45. package/lib/core/pdf_manager.js +324 -134
  46. package/lib/core/primitives.js +169 -61
  47. package/lib/core/ps_parser.js +134 -45
  48. package/lib/core/standard_fonts.js +17 -17
  49. package/lib/core/stream.js +327 -34
  50. package/lib/core/type1_parser.js +148 -8
  51. package/lib/core/unicode.js +32 -5
  52. package/lib/core/worker.js +215 -229
  53. package/lib/core/worker_stream.js +277 -0
  54. package/lib/display/annotation_layer.js +618 -192
  55. package/lib/display/api.js +1798 -882
  56. package/lib/display/api_compatibility.js +5 -10
  57. package/lib/display/canvas.js +366 -45
  58. package/lib/display/content_disposition.js +71 -24
  59. package/lib/display/display_utils.js +777 -0
  60. package/lib/display/fetch_stream.js +205 -87
  61. package/lib/display/font_loader.js +468 -236
  62. package/lib/display/metadata.js +38 -16
  63. package/lib/display/network.js +635 -428
  64. package/lib/display/network_utils.js +38 -19
  65. package/lib/display/node_stream.js +367 -175
  66. package/lib/display/pattern_helper.js +103 -36
  67. package/lib/display/svg.js +1232 -519
  68. package/lib/display/text_layer.js +208 -75
  69. package/lib/display/transport_stream.js +345 -94
  70. package/lib/display/webgl.js +64 -18
  71. package/lib/display/worker_options.js +5 -4
  72. package/lib/display/xml_parser.js +166 -53
  73. package/lib/examples/node/domstubs.js +60 -4
  74. package/lib/pdf.js +35 -14
  75. package/lib/pdf.worker.js +5 -3
  76. package/lib/shared/compatibility.js +170 -572
  77. package/lib/shared/global_scope.js +2 -2
  78. package/lib/shared/is_node.js +4 -4
  79. package/lib/shared/message_handler.js +216 -163
  80. package/lib/shared/streams_polyfill.js +21 -17
  81. package/lib/shared/util.js +495 -385
  82. package/lib/test/unit/annotation_spec.js +1464 -401
  83. package/lib/test/unit/api_spec.js +718 -361
  84. package/lib/test/unit/bidi_spec.js +7 -7
  85. package/lib/test/unit/cff_parser_spec.js +54 -11
  86. package/lib/test/unit/clitests_helper.js +9 -10
  87. package/lib/test/unit/cmap_spec.js +95 -41
  88. package/lib/test/unit/colorspace_spec.js +115 -63
  89. package/lib/test/unit/core_utils_spec.js +191 -0
  90. package/lib/test/unit/crypto_spec.js +17 -5
  91. package/lib/test/unit/custom_spec.js +43 -55
  92. package/lib/test/unit/display_svg_spec.js +34 -18
  93. package/lib/test/unit/display_utils_spec.js +273 -0
  94. package/lib/test/unit/document_spec.js +8 -13
  95. package/lib/test/unit/encodings_spec.js +25 -45
  96. package/lib/test/unit/evaluator_spec.js +59 -20
  97. package/lib/test/unit/fetch_stream_spec.js +111 -0
  98. package/lib/test/unit/function_spec.js +17 -5
  99. package/lib/test/unit/jasmine-boot.js +33 -20
  100. package/lib/test/unit/message_handler_spec.js +30 -13
  101. package/lib/test/unit/metadata_spec.js +71 -11
  102. package/lib/test/unit/murmurhash3_spec.js +3 -3
  103. package/lib/test/unit/network_spec.js +22 -55
  104. package/lib/test/unit/network_utils_spec.js +105 -14
  105. package/lib/test/unit/node_stream_spec.js +58 -34
  106. package/lib/test/unit/parser_spec.js +162 -71
  107. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  108. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  109. package/lib/test/unit/pdf_history_spec.js +21 -9
  110. package/lib/test/unit/primitives_spec.js +55 -22
  111. package/lib/test/unit/stream_spec.js +12 -4
  112. package/lib/test/unit/test_utils.js +273 -56
  113. package/lib/test/unit/testreporter.js +21 -3
  114. package/lib/test/unit/type1_parser_spec.js +9 -7
  115. package/lib/test/unit/ui_utils_spec.js +236 -36
  116. package/lib/test/unit/unicode_spec.js +18 -15
  117. package/lib/test/unit/util_spec.js +87 -128
  118. package/lib/web/annotation_layer_builder.js +39 -22
  119. package/lib/web/app.js +1252 -609
  120. package/lib/web/app_options.js +103 -65
  121. package/lib/web/base_viewer.js +522 -242
  122. package/lib/web/chromecom.js +259 -117
  123. package/lib/web/debugger.js +166 -22
  124. package/lib/web/download_manager.js +31 -12
  125. package/lib/web/firefox_print_service.js +27 -14
  126. package/lib/web/firefoxcom.js +318 -78
  127. package/lib/web/genericcom.js +89 -30
  128. package/lib/web/genericl10n.js +142 -30
  129. package/lib/web/grab_to_pan.js +28 -4
  130. package/lib/web/interfaces.js +174 -47
  131. package/lib/web/overlay_manager.js +235 -85
  132. package/lib/web/password_prompt.js +22 -14
  133. package/lib/web/pdf_attachment_viewer.js +38 -18
  134. package/lib/web/pdf_cursor_tools.js +39 -16
  135. package/lib/web/pdf_document_properties.js +255 -136
  136. package/lib/web/pdf_find_bar.js +84 -40
  137. package/lib/web/pdf_find_controller.js +495 -184
  138. package/lib/web/pdf_find_utils.js +111 -0
  139. package/lib/web/pdf_history.js +190 -53
  140. package/lib/web/pdf_link_service.js +144 -79
  141. package/lib/web/pdf_outline_viewer.js +124 -47
  142. package/lib/web/pdf_page_view.js +194 -74
  143. package/lib/web/pdf_presentation_mode.js +99 -34
  144. package/lib/web/pdf_print_service.js +59 -13
  145. package/lib/web/pdf_rendering_queue.js +28 -9
  146. package/lib/web/pdf_sidebar.js +144 -81
  147. package/lib/web/pdf_sidebar_resizer.js +42 -16
  148. package/lib/web/pdf_single_page_viewer.js +74 -66
  149. package/lib/web/pdf_thumbnail_view.js +104 -33
  150. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  151. package/lib/web/pdf_viewer.component.js +112 -32
  152. package/lib/web/pdf_viewer.js +82 -87
  153. package/lib/web/preferences.js +284 -91
  154. package/lib/web/secondary_toolbar.js +132 -59
  155. package/lib/web/text_layer_builder.js +134 -59
  156. package/lib/web/toolbar.js +80 -43
  157. package/lib/web/ui_utils.js +400 -134
  158. package/lib/web/view_history.js +215 -67
  159. package/lib/web/viewer_compatibility.js +3 -8
  160. package/package.json +3 -2
  161. package/web/pdf_viewer.css +23 -15
  162. package/web/pdf_viewer.js +3429 -1245
  163. package/web/pdf_viewer.js.map +1 -1
  164. package/external/streams/streams-lib.js +0 -3962
  165. package/lib/display/dom_utils.js +0 -429
  166. package/lib/test/unit/dom_utils_spec.js +0 -89
  167. package/lib/test/unit/fonts_spec.js +0 -81
  168. package/lib/web/dom_events.js +0 -137
@@ -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 2017 Mozilla Foundation
5
+ * Copyright 2019 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");
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
41
  checkFn: checkFn,
40
42
  iterateFn: iterateFn,
41
43
  processFn: 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: ".concat(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,24 +95,29 @@ 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
122
  transform: transform,
104
123
  x: currentX,
@@ -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
- var imgData = new Uint8Array(imgWidth * imgHeight * 4);
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: ".concat(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: ".concat(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: ".concat(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,6 +433,7 @@ var QueueOptimizer = function QueueOptimizerClosure() {
357
433
  this.match = null;
358
434
  this.lastProcessed = 0;
359
435
  }
436
+
360
437
  QueueOptimizer.prototype = {
361
438
  _optimize: function _optimize() {
362
439
  var fnArray = this.queue.fnArray;
@@ -364,40 +441,52 @@ var QueueOptimizer = function QueueOptimizerClosure() {
364
441
  ii = fnArray.length;
365
442
  var state = this.state;
366
443
  var 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
  }
449
+
371
450
  var context = this.context;
451
+
372
452
  while (i < ii) {
373
453
  if (match) {
374
454
  var 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;
@@ -405,6 +494,7 @@ var QueueOptimizer = function QueueOptimizerClosure() {
405
494
  push: function push(fn, args) {
406
495
  this.queue.fnArray.push(fn);
407
496
  this.queue.argsArray.push(args);
497
+
408
498
  this._optimize();
409
499
  },
410
500
  flush: function flush() {
@@ -413,6 +503,7 @@ var QueueOptimizer = function QueueOptimizerClosure() {
413
503
  this.lastProcessed = (0, this.match.processFn)(this.context, length);
414
504
  this.match = null;
415
505
  this.state = null;
506
+
416
507
  this._optimize();
417
508
  }
418
509
  },
@@ -424,66 +515,64 @@ var QueueOptimizer = function QueueOptimizerClosure() {
424
515
  };
425
516
  return QueueOptimizer;
426
517
  }();
518
+
427
519
  var NullOptimizer = function NullOptimizerClosure() {
428
520
  function NullOptimizer(queue) {
429
521
  this.queue = queue;
430
522
  }
523
+
431
524
  NullOptimizer.prototype = {
432
525
  push: function push(fn, args) {
433
526
  this.queue.fnArray.push(fn);
434
527
  this.queue.argsArray.push(args);
435
528
  },
436
- flush: function flush() {}
529
+ flush: function flush() {},
530
+ reset: function reset() {}
437
531
  };
438
532
  return NullOptimizer;
439
533
  }();
534
+
440
535
  var OperatorList = function OperatorListClosure() {
441
536
  var CHUNK_SIZE = 1000;
442
537
  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
- if (!arg.cached) {
454
- transfers.push(arg.data.buffer);
455
- }
456
- break;
457
- }
458
- }
459
- return transfers;
460
- }
461
- function OperatorList(intent, messageHandler, pageIndex) {
462
- this.messageHandler = messageHandler;
538
+
539
+ function OperatorList(intent, streamSink, pageIndex) {
540
+ this._streamSink = streamSink;
463
541
  this.fnArray = [];
464
542
  this.argsArray = [];
465
- if (messageHandler && this.intent !== 'oplist') {
543
+
544
+ if (streamSink && intent !== 'oplist') {
466
545
  this.optimizer = new QueueOptimizer(this);
467
546
  } else {
468
547
  this.optimizer = new NullOptimizer(this);
469
548
  }
549
+
470
550
  this.dependencies = Object.create(null);
471
551
  this._totalLength = 0;
472
552
  this.pageIndex = pageIndex;
473
553
  this.intent = intent;
474
554
  this.weight = 0;
555
+ this._resolved = streamSink ? null : Promise.resolve();
475
556
  }
557
+
476
558
  OperatorList.prototype = {
477
559
  get length() {
478
560
  return this.argsArray.length;
479
561
  },
562
+
563
+ get ready() {
564
+ return this._resolved || this._streamSink.ready;
565
+ },
566
+
480
567
  get totalLength() {
481
568
  return this._totalLength + this.length;
482
569
  },
570
+
483
571
  addOp: function addOp(fn, args) {
484
572
  this.optimizer.push(fn, args);
485
573
  this.weight++;
486
- if (this.messageHandler) {
574
+
575
+ if (this._streamSink) {
487
576
  if (this.weight >= CHUNK_SIZE) {
488
577
  this.flush();
489
578
  } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
@@ -495,6 +584,7 @@ var OperatorList = function OperatorListClosure() {
495
584
  if (dependency in this.dependencies) {
496
585
  return;
497
586
  }
587
+
498
588
  this.dependencies[dependency] = true;
499
589
  this.addOp(_util.OPS.dependency, [dependency]);
500
590
  },
@@ -504,7 +594,8 @@ var OperatorList = function OperatorListClosure() {
504
594
  }
505
595
  },
506
596
  addOpList: function addOpList(opList) {
507
- _util.Util.extendObj(this.dependencies, opList.dependencies);
597
+ Object.assign(this.dependencies, opList.dependencies);
598
+
508
599
  for (var i = 0, ii = opList.length; i < ii; i++) {
509
600
  this.addOp(opList.fnArray[i], opList.argsArray[i]);
510
601
  }
@@ -516,21 +607,45 @@ var OperatorList = function OperatorListClosure() {
516
607
  length: this.length
517
608
  };
518
609
  },
519
- flush: function flush(lastChunk) {
610
+
611
+ get _transfers() {
612
+ var transfers = [];
613
+ var fnArray = this.fnArray,
614
+ argsArray = this.argsArray,
615
+ length = this.length;
616
+
617
+ for (var i = 0; i < length; i++) {
618
+ switch (fnArray[i]) {
619
+ case _util.OPS.paintInlineImageXObject:
620
+ case _util.OPS.paintInlineImageXObjectGroup:
621
+ case _util.OPS.paintImageMaskXObject:
622
+ var arg = argsArray[i][0];
623
+ ;
624
+
625
+ if (!arg.cached) {
626
+ transfers.push(arg.data.buffer);
627
+ }
628
+
629
+ break;
630
+ }
631
+ }
632
+
633
+ return transfers;
634
+ },
635
+
636
+ flush: function flush() {
637
+ var lastChunk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
520
638
  this.optimizer.flush();
521
- var transfers = getTransfers(this);
522
639
  var length = this.length;
523
640
  this._totalLength += length;
524
- this.messageHandler.send('RenderPageChunk', {
525
- operatorList: {
526
- fnArray: this.fnArray,
527
- argsArray: this.argsArray,
528
- lastChunk: lastChunk,
529
- length: length
530
- },
531
- pageIndex: this.pageIndex,
532
- intent: this.intent
533
- }, transfers);
641
+
642
+ this._streamSink.enqueue({
643
+ fnArray: this.fnArray,
644
+ argsArray: this.argsArray,
645
+ lastChunk: lastChunk,
646
+ length: length
647
+ }, 1, this._transfers);
648
+
534
649
  this.dependencies = Object.create(null);
535
650
  this.fnArray.length = 0;
536
651
  this.argsArray.length = 0;
@@ -540,4 +655,5 @@ var OperatorList = function OperatorListClosure() {
540
655
  };
541
656
  return OperatorList;
542
657
  }();
658
+
543
659
  exports.OperatorList = OperatorList;