pdfjs-dist 2.0.489 → 2.2.228

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 (169) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +18515 -11402
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +48266 -37137
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/external/url/url-lib.js +627 -0
  10. package/image_decoders/pdf.image_decoders.js +11350 -0
  11. package/image_decoders/pdf.image_decoders.js.map +1 -0
  12. package/image_decoders/pdf.image_decoders.min.js +1 -0
  13. package/lib/core/annotation.js +587 -242
  14. package/lib/core/arithmetic_decoder.js +275 -245
  15. package/lib/core/bidi.js +65 -6
  16. package/lib/core/ccitt.js +173 -18
  17. package/lib/core/ccitt_stream.js +15 -6
  18. package/lib/core/cff_parser.js +433 -61
  19. package/lib/core/charsets.js +5 -4
  20. package/lib/core/chunked_stream.js +400 -152
  21. package/lib/core/cmap.js +326 -87
  22. package/lib/core/colorspace.js +874 -594
  23. package/lib/core/core_utils.js +147 -0
  24. package/lib/core/crypto.js +290 -45
  25. package/lib/core/document.js +560 -268
  26. package/lib/core/encodings.js +19 -10
  27. package/lib/core/evaluator.js +1005 -360
  28. package/lib/core/font_renderer.js +331 -97
  29. package/lib/core/fonts.js +812 -195
  30. package/lib/core/function.js +284 -71
  31. package/lib/core/glyphlist.js +4 -3
  32. package/lib/core/image.js +169 -62
  33. package/lib/core/image_utils.js +111 -0
  34. package/lib/core/jbig2.js +479 -66
  35. package/lib/core/jbig2_stream.js +19 -8
  36. package/lib/core/jpeg_stream.js +38 -13
  37. package/lib/core/jpg.js +253 -29
  38. package/lib/core/jpx.js +396 -6
  39. package/lib/core/jpx_stream.js +18 -6
  40. package/lib/core/metrics.js +15 -15
  41. package/lib/core/murmurhash3.js +56 -34
  42. package/lib/core/obj.js +1354 -488
  43. package/lib/core/operator_list.js +144 -31
  44. package/lib/core/parser.js +539 -191
  45. package/lib/core/pattern.js +148 -14
  46. package/lib/core/pdf_manager.js +323 -133
  47. package/lib/core/primitives.js +111 -24
  48. package/lib/core/ps_parser.js +134 -45
  49. package/lib/core/standard_fonts.js +17 -17
  50. package/lib/core/stream.js +313 -34
  51. package/lib/core/type1_parser.js +143 -13
  52. package/lib/core/unicode.js +32 -5
  53. package/lib/core/worker.js +217 -190
  54. package/lib/core/worker_stream.js +277 -0
  55. package/lib/display/annotation_layer.js +450 -133
  56. package/lib/display/api.js +1597 -784
  57. package/lib/display/api_compatibility.js +11 -13
  58. package/lib/display/canvas.js +360 -44
  59. package/lib/display/content_disposition.js +83 -32
  60. package/lib/display/display_utils.js +747 -0
  61. package/lib/display/fetch_stream.js +221 -90
  62. package/lib/display/font_loader.js +468 -236
  63. package/lib/display/metadata.js +38 -16
  64. package/lib/display/network.js +635 -428
  65. package/lib/display/network_utils.js +32 -19
  66. package/lib/display/node_stream.js +367 -175
  67. package/lib/display/pattern_helper.js +81 -31
  68. package/lib/display/svg.js +1235 -519
  69. package/lib/display/text_layer.js +153 -29
  70. package/lib/display/transport_stream.js +345 -94
  71. package/lib/display/webgl.js +64 -18
  72. package/lib/display/worker_options.js +5 -4
  73. package/lib/display/xml_parser.js +166 -53
  74. package/lib/examples/node/domstubs.js +60 -4
  75. package/lib/pdf.js +36 -14
  76. package/lib/pdf.worker.js +5 -3
  77. package/lib/shared/compatibility.js +158 -564
  78. package/lib/shared/global_scope.js +2 -2
  79. package/lib/shared/is_node.js +4 -4
  80. package/lib/shared/message_handler.js +521 -0
  81. package/lib/shared/streams_polyfill.js +21 -17
  82. package/lib/shared/url_polyfill.js +56 -0
  83. package/lib/shared/util.js +243 -710
  84. package/lib/test/unit/annotation_spec.js +870 -401
  85. package/lib/test/unit/api_spec.js +657 -345
  86. package/lib/test/unit/bidi_spec.js +7 -7
  87. package/lib/test/unit/cff_parser_spec.js +54 -11
  88. package/lib/test/unit/clitests_helper.js +10 -8
  89. package/lib/test/unit/cmap_spec.js +95 -41
  90. package/lib/test/unit/colorspace_spec.js +115 -63
  91. package/lib/test/unit/core_utils_spec.js +191 -0
  92. package/lib/test/unit/crypto_spec.js +17 -5
  93. package/lib/test/unit/custom_spec.js +43 -55
  94. package/lib/test/unit/display_svg_spec.js +34 -18
  95. package/lib/test/unit/display_utils_spec.js +273 -0
  96. package/lib/test/unit/document_spec.js +8 -13
  97. package/lib/test/unit/encodings_spec.js +25 -45
  98. package/lib/test/unit/evaluator_spec.js +38 -15
  99. package/lib/test/unit/fetch_stream_spec.js +109 -0
  100. package/lib/test/unit/function_spec.js +17 -5
  101. package/lib/test/unit/jasmine-boot.js +33 -20
  102. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  103. package/lib/test/unit/metadata_spec.js +71 -11
  104. package/lib/test/unit/murmurhash3_spec.js +3 -3
  105. package/lib/test/unit/network_spec.js +19 -54
  106. package/lib/test/unit/network_utils_spec.js +91 -14
  107. package/lib/test/unit/node_stream_spec.js +56 -32
  108. package/lib/test/unit/parser_spec.js +162 -71
  109. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  110. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  111. package/lib/test/unit/pdf_history_spec.js +21 -9
  112. package/lib/test/unit/primitives_spec.js +53 -20
  113. package/lib/test/unit/stream_spec.js +12 -4
  114. package/lib/test/unit/test_utils.js +273 -56
  115. package/lib/test/unit/testreporter.js +21 -3
  116. package/lib/test/unit/type1_parser_spec.js +8 -6
  117. package/lib/test/unit/ui_utils_spec.js +454 -16
  118. package/lib/test/unit/unicode_spec.js +18 -15
  119. package/lib/test/unit/util_spec.js +87 -128
  120. package/lib/web/annotation_layer_builder.js +39 -22
  121. package/lib/web/app.js +1290 -588
  122. package/lib/web/app_options.js +100 -62
  123. package/lib/web/base_viewer.js +511 -182
  124. package/lib/web/chromecom.js +261 -117
  125. package/lib/web/debugger.js +166 -22
  126. package/lib/web/download_manager.js +32 -13
  127. package/lib/web/firefox_print_service.js +20 -10
  128. package/lib/web/firefoxcom.js +315 -80
  129. package/lib/web/genericcom.js +89 -30
  130. package/lib/web/genericl10n.js +142 -30
  131. package/lib/web/grab_to_pan.js +28 -4
  132. package/lib/web/interfaces.js +170 -47
  133. package/lib/web/overlay_manager.js +235 -85
  134. package/lib/web/password_prompt.js +22 -14
  135. package/lib/web/pdf_attachment_viewer.js +38 -18
  136. package/lib/web/pdf_cursor_tools.js +39 -16
  137. package/lib/web/pdf_document_properties.js +255 -136
  138. package/lib/web/pdf_find_bar.js +84 -40
  139. package/lib/web/pdf_find_controller.js +495 -184
  140. package/lib/web/pdf_find_utils.js +111 -0
  141. package/lib/web/pdf_history.js +190 -53
  142. package/lib/web/pdf_link_service.js +138 -77
  143. package/lib/web/pdf_outline_viewer.js +122 -46
  144. package/lib/web/pdf_page_view.js +191 -67
  145. package/lib/web/pdf_presentation_mode.js +99 -34
  146. package/lib/web/pdf_print_service.js +61 -13
  147. package/lib/web/pdf_rendering_queue.js +28 -9
  148. package/lib/web/pdf_sidebar.js +141 -81
  149. package/lib/web/pdf_sidebar_resizer.js +42 -16
  150. package/lib/web/pdf_single_page_viewer.js +74 -66
  151. package/lib/web/pdf_thumbnail_view.js +104 -33
  152. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  153. package/lib/web/pdf_viewer.component.js +112 -32
  154. package/lib/web/pdf_viewer.js +91 -52
  155. package/lib/web/preferences.js +284 -89
  156. package/lib/web/secondary_toolbar.js +165 -40
  157. package/lib/web/text_layer_builder.js +134 -59
  158. package/lib/web/toolbar.js +78 -43
  159. package/lib/web/ui_utils.js +462 -136
  160. package/lib/web/view_history.js +215 -67
  161. package/lib/web/viewer_compatibility.js +4 -13
  162. package/package.json +5 -4
  163. package/web/pdf_viewer.css +79 -11
  164. package/web/pdf_viewer.js +6107 -3748
  165. package/web/pdf_viewer.js.map +1 -1
  166. package/lib/display/dom_utils.js +0 -309
  167. package/lib/test/unit/dom_utils_spec.js +0 -89
  168. package/lib/test/unit/fonts_spec.js +0 -81
  169. 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,65 +515,58 @@ 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
- }
538
+
461
539
  function OperatorList(intent, messageHandler, pageIndex) {
462
540
  this.messageHandler = messageHandler;
463
541
  this.fnArray = [];
464
542
  this.argsArray = [];
465
- if (messageHandler && this.intent !== 'oplist') {
543
+
544
+ if (messageHandler && 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;
475
555
  }
556
+
476
557
  OperatorList.prototype = {
477
558
  get length() {
478
559
  return this.argsArray.length;
479
560
  },
561
+
480
562
  get totalLength() {
481
563
  return this._totalLength + this.length;
482
564
  },
565
+
483
566
  addOp: function addOp(fn, args) {
484
567
  this.optimizer.push(fn, args);
485
568
  this.weight++;
569
+
486
570
  if (this.messageHandler) {
487
571
  if (this.weight >= CHUNK_SIZE) {
488
572
  this.flush();
@@ -495,6 +579,7 @@ var OperatorList = function OperatorListClosure() {
495
579
  if (dependency in this.dependencies) {
496
580
  return;
497
581
  }
582
+
498
583
  this.dependencies[dependency] = true;
499
584
  this.addOp(_util.OPS.dependency, [dependency]);
500
585
  },
@@ -504,7 +589,8 @@ var OperatorList = function OperatorListClosure() {
504
589
  }
505
590
  },
506
591
  addOpList: function addOpList(opList) {
507
- _util.Util.extendObj(this.dependencies, opList.dependencies);
592
+ Object.assign(this.dependencies, opList.dependencies);
593
+
508
594
  for (var i = 0, ii = opList.length; i < ii; i++) {
509
595
  this.addOp(opList.fnArray[i], opList.argsArray[i]);
510
596
  }
@@ -516,9 +602,35 @@ var OperatorList = function OperatorListClosure() {
516
602
  length: this.length
517
603
  };
518
604
  },
519
- flush: function flush(lastChunk) {
605
+
606
+ get _transfers() {
607
+ var transfers = [];
608
+ var fnArray = this.fnArray,
609
+ argsArray = this.argsArray,
610
+ length = this.length;
611
+
612
+ for (var i = 0; i < length; i++) {
613
+ switch (fnArray[i]) {
614
+ case _util.OPS.paintInlineImageXObject:
615
+ case _util.OPS.paintInlineImageXObjectGroup:
616
+ case _util.OPS.paintImageMaskXObject:
617
+ var arg = argsArray[i][0];
618
+ ;
619
+
620
+ if (!arg.cached) {
621
+ transfers.push(arg.data.buffer);
622
+ }
623
+
624
+ break;
625
+ }
626
+ }
627
+
628
+ return transfers;
629
+ },
630
+
631
+ flush: function flush() {
632
+ var lastChunk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
520
633
  this.optimizer.flush();
521
- var transfers = getTransfers(this);
522
634
  var length = this.length;
523
635
  this._totalLength += length;
524
636
  this.messageHandler.send('RenderPageChunk', {
@@ -530,7 +642,7 @@ var OperatorList = function OperatorListClosure() {
530
642
  },
531
643
  pageIndex: this.pageIndex,
532
644
  intent: this.intent
533
- }, transfers);
645
+ }, this._transfers);
534
646
  this.dependencies = Object.create(null);
535
647
  this.fnArray.length = 0;
536
648
  this.argsArray.length = 0;
@@ -540,4 +652,5 @@ var OperatorList = function OperatorListClosure() {
540
652
  };
541
653
  return OperatorList;
542
654
  }();
655
+
543
656
  exports.OperatorList = OperatorList;