pdfjs-dist 2.0.943 → 2.1.266

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 (159) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +15329 -11095
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +12497 -4184
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/image_decoders/pdf.image_decoders.js +3438 -1209
  9. package/image_decoders/pdf.image_decoders.js.map +1 -1
  10. package/image_decoders/pdf.image_decoders.min.js +1 -1
  11. package/lib/core/annotation.js +335 -109
  12. package/lib/core/arithmetic_decoder.js +274 -244
  13. package/lib/core/bidi.js +64 -5
  14. package/lib/core/ccitt.js +172 -17
  15. package/lib/core/ccitt_stream.js +14 -5
  16. package/lib/core/cff_parser.js +304 -28
  17. package/lib/core/charsets.js +4 -3
  18. package/lib/core/chunked_stream.js +379 -149
  19. package/lib/core/cmap.js +210 -40
  20. package/lib/core/colorspace.js +332 -187
  21. package/lib/core/crypto.js +289 -44
  22. package/lib/core/document.js +508 -249
  23. package/lib/core/encodings.js +18 -9
  24. package/lib/core/evaluator.js +657 -119
  25. package/lib/core/font_renderer.js +217 -34
  26. package/lib/core/fonts.js +632 -41
  27. package/lib/core/function.js +252 -26
  28. package/lib/core/glyphlist.js +2 -1
  29. package/lib/core/image.js +124 -27
  30. package/lib/core/jbig2.js +425 -65
  31. package/lib/core/jbig2_stream.js +18 -7
  32. package/lib/core/jpeg_stream.js +24 -8
  33. package/lib/core/jpg.js +208 -16
  34. package/lib/core/jpx.js +395 -5
  35. package/lib/core/jpx_stream.js +17 -5
  36. package/lib/core/metrics.js +3 -3
  37. package/lib/core/murmurhash3.js +23 -5
  38. package/lib/core/obj.js +625 -132
  39. package/lib/core/operator_list.js +104 -3
  40. package/lib/core/parser.js +262 -25
  41. package/lib/core/pattern.js +144 -12
  42. package/lib/core/pdf_manager.js +104 -70
  43. package/lib/core/primitives.js +74 -21
  44. package/lib/core/ps_parser.js +133 -44
  45. package/lib/core/standard_fonts.js +9 -9
  46. package/lib/core/stream.js +283 -31
  47. package/lib/core/type1_parser.js +138 -6
  48. package/lib/core/unicode.js +28 -1
  49. package/lib/core/worker.js +192 -57
  50. package/lib/display/annotation_layer.js +303 -123
  51. package/lib/display/api.js +1073 -574
  52. package/lib/display/api_compatibility.js +4 -1
  53. package/lib/display/canvas.js +314 -18
  54. package/lib/display/content_disposition.js +70 -23
  55. package/lib/display/dom_utils.js +112 -59
  56. package/lib/display/fetch_stream.js +95 -50
  57. package/lib/display/font_loader.js +250 -132
  58. package/lib/display/metadata.js +37 -15
  59. package/lib/display/network.js +123 -34
  60. package/lib/display/network_utils.js +23 -10
  61. package/lib/display/node_stream.js +162 -65
  62. package/lib/display/pattern_helper.js +57 -6
  63. package/lib/display/svg.js +194 -18
  64. package/lib/display/text_layer.js +128 -14
  65. package/lib/display/transport_stream.js +83 -27
  66. package/lib/display/webgl.js +63 -17
  67. package/lib/display/worker_options.js +4 -3
  68. package/lib/display/xml_parser.js +162 -52
  69. package/lib/examples/node/domstubs.js +56 -3
  70. package/lib/pdf.js +15 -2
  71. package/lib/pdf.worker.js +4 -2
  72. package/lib/shared/compatibility.js +129 -26
  73. package/lib/shared/global_scope.js +1 -1
  74. package/lib/shared/is_node.js +3 -3
  75. package/lib/shared/message_handler.js +103 -45
  76. package/lib/shared/streams_polyfill.js +20 -16
  77. package/lib/shared/url_polyfill.js +8 -2
  78. package/lib/shared/util.js +246 -84
  79. package/lib/test/unit/annotation_spec.js +99 -73
  80. package/lib/test/unit/api_spec.js +347 -113
  81. package/lib/test/unit/bidi_spec.js +6 -6
  82. package/lib/test/unit/cff_parser_spec.js +17 -5
  83. package/lib/test/unit/clitests_helper.js +7 -8
  84. package/lib/test/unit/cmap_spec.js +79 -25
  85. package/lib/test/unit/colorspace_spec.js +65 -18
  86. package/lib/test/unit/crypto_spec.js +16 -4
  87. package/lib/test/unit/custom_spec.js +40 -52
  88. package/lib/test/unit/display_svg_spec.js +32 -16
  89. package/lib/test/unit/document_spec.js +2 -2
  90. package/lib/test/unit/dom_utils_spec.js +8 -8
  91. package/lib/test/unit/encodings_spec.js +24 -44
  92. package/lib/test/unit/evaluator_spec.js +15 -8
  93. package/lib/test/unit/function_spec.js +16 -4
  94. package/lib/test/unit/jasmine-boot.js +29 -16
  95. package/lib/test/unit/message_handler_spec.js +19 -6
  96. package/lib/test/unit/metadata_spec.js +64 -11
  97. package/lib/test/unit/murmurhash3_spec.js +2 -2
  98. package/lib/test/unit/network_spec.js +19 -4
  99. package/lib/test/unit/network_utils_spec.js +6 -4
  100. package/lib/test/unit/node_stream_spec.js +50 -26
  101. package/lib/test/unit/parser_spec.js +13 -29
  102. package/lib/test/unit/pdf_find_controller_spec.js +144 -32
  103. package/lib/test/unit/pdf_find_utils_spec.js +10 -9
  104. package/lib/test/unit/pdf_history_spec.js +20 -8
  105. package/lib/test/unit/primitives_spec.js +23 -3
  106. package/lib/test/unit/stream_spec.js +8 -3
  107. package/lib/test/unit/test_utils.js +89 -26
  108. package/lib/test/unit/testreporter.js +19 -1
  109. package/lib/test/unit/type1_parser_spec.js +7 -5
  110. package/lib/test/unit/ui_utils_spec.js +162 -38
  111. package/lib/test/unit/unicode_spec.js +13 -10
  112. package/lib/test/unit/util_spec.js +89 -9
  113. package/lib/web/annotation_layer_builder.js +38 -21
  114. package/lib/web/app.js +610 -245
  115. package/lib/web/app_options.js +54 -34
  116. package/lib/web/base_viewer.js +359 -162
  117. package/lib/web/chromecom.js +159 -80
  118. package/lib/web/debugger.js +161 -17
  119. package/lib/web/download_manager.js +29 -11
  120. package/lib/web/firefox_print_service.js +16 -8
  121. package/lib/web/firefoxcom.js +127 -91
  122. package/lib/web/genericcom.js +50 -31
  123. package/lib/web/genericl10n.js +46 -34
  124. package/lib/web/grab_to_pan.js +25 -3
  125. package/lib/web/interfaces.js +108 -61
  126. package/lib/web/overlay_manager.js +67 -45
  127. package/lib/web/password_prompt.js +20 -12
  128. package/lib/web/pdf_attachment_viewer.js +37 -17
  129. package/lib/web/pdf_cursor_tools.js +38 -15
  130. package/lib/web/pdf_document_properties.js +65 -24
  131. package/lib/web/pdf_find_bar.js +48 -20
  132. package/lib/web/pdf_find_controller.js +290 -89
  133. package/lib/web/pdf_find_utils.js +19 -3
  134. package/lib/web/pdf_history.js +186 -49
  135. package/lib/web/pdf_link_service.js +127 -52
  136. package/lib/web/pdf_outline_viewer.js +71 -21
  137. package/lib/web/pdf_page_view.js +188 -63
  138. package/lib/web/pdf_presentation_mode.js +98 -33
  139. package/lib/web/pdf_print_service.js +54 -10
  140. package/lib/web/pdf_rendering_queue.js +26 -4
  141. package/lib/web/pdf_sidebar.js +116 -62
  142. package/lib/web/pdf_sidebar_resizer.js +41 -15
  143. package/lib/web/pdf_single_page_viewer.js +65 -68
  144. package/lib/web/pdf_thumbnail_view.js +102 -31
  145. package/lib/web/pdf_thumbnail_viewer.js +62 -22
  146. package/lib/web/pdf_viewer.component.js +111 -31
  147. package/lib/web/pdf_viewer.js +80 -60
  148. package/lib/web/preferences.js +61 -39
  149. package/lib/web/secondary_toolbar.js +101 -82
  150. package/lib/web/text_layer_builder.js +124 -69
  151. package/lib/web/toolbar.js +67 -27
  152. package/lib/web/ui_utils.js +284 -128
  153. package/lib/web/view_history.js +75 -51
  154. package/lib/web/viewer_compatibility.js +2 -1
  155. package/package.json +1 -1
  156. package/web/pdf_viewer.css +1 -1
  157. package/web/pdf_viewer.js +2200 -973
  158. package/web/pdf_viewer.js.map +1 -1
  159. package/lib/web/dom_events.js +0 -140
package/lib/core/jbig2.js CHANGED
@@ -19,81 +19,99 @@
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.Jbig2Image = undefined;
27
+ exports.Jbig2Image = void 0;
28
28
 
29
- var _util = require('../shared/util');
29
+ var _util = require("../shared/util");
30
30
 
31
- var _arithmetic_decoder = require('./arithmetic_decoder');
31
+ var _arithmetic_decoder = require("./arithmetic_decoder");
32
32
 
33
- var _ccitt = require('./ccitt');
33
+ var _ccitt = require("./ccitt");
34
34
 
35
35
  var Jbig2Error = function Jbig2ErrorClosure() {
36
36
  function Jbig2Error(msg) {
37
37
  this.message = 'JBIG2 error: ' + msg;
38
38
  }
39
+
39
40
  Jbig2Error.prototype = new Error();
40
41
  Jbig2Error.prototype.name = 'Jbig2Error';
41
42
  Jbig2Error.constructor = Jbig2Error;
42
43
  return Jbig2Error;
43
44
  }();
45
+
44
46
  var Jbig2Image = function Jbig2ImageClosure() {
45
47
  function ContextCache() {}
48
+
46
49
  ContextCache.prototype = {
47
50
  getContexts: function getContexts(id) {
48
51
  if (id in this) {
49
52
  return this[id];
50
53
  }
54
+
51
55
  return this[id] = new Int8Array(1 << 16);
52
56
  }
53
57
  };
58
+
54
59
  function DecodingContext(data, start, end) {
55
60
  this.data = data;
56
61
  this.start = start;
57
62
  this.end = end;
58
63
  }
64
+
59
65
  DecodingContext.prototype = {
60
66
  get decoder() {
61
67
  var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
62
68
  return (0, _util.shadow)(this, 'decoder', decoder);
63
69
  },
70
+
64
71
  get contextCache() {
65
72
  var cache = new ContextCache();
66
73
  return (0, _util.shadow)(this, 'contextCache', cache);
67
74
  }
75
+
68
76
  };
77
+
69
78
  function decodeInteger(contextCache, procedure, decoder) {
70
79
  var contexts = contextCache.getContexts(procedure);
71
80
  var prev = 1;
81
+
72
82
  function readBits(length) {
73
83
  var v = 0;
84
+
74
85
  for (var i = 0; i < length; i++) {
75
86
  var bit = decoder.readBit(contexts, prev);
76
87
  prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
77
88
  v = v << 1 | bit;
78
89
  }
90
+
79
91
  return v >>> 0;
80
92
  }
93
+
81
94
  var sign = readBits(1);
82
95
  var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
83
96
  return sign === 0 ? value : value > 0 ? -value : null;
84
97
  }
98
+
85
99
  function decodeIAID(contextCache, decoder, codeLength) {
86
100
  var contexts = contextCache.getContexts('IAID');
87
101
  var prev = 1;
102
+
88
103
  for (var i = 0; i < codeLength; i++) {
89
104
  var bit = decoder.readBit(contexts, prev);
90
105
  prev = prev << 1 | bit;
91
106
  }
107
+
92
108
  if (codeLength < 31) {
93
109
  return prev & (1 << codeLength) - 1;
94
110
  }
111
+
95
112
  return prev & 0x7FFFFFFF;
96
113
  }
114
+
97
115
  var SegmentTypes = ['SymbolDictionary', null, null, null, 'IntermediateTextRegion', null, 'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null, null, null, null, null, null, 'PatternDictionary', null, null, null, 'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion', 'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null, null, null, null, null, null, 'IntermediateGenericRegion', null, 'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion', 'IntermediateGenericRefinementRegion', null, 'ImmediateGenericRefinementRegion', 'ImmediateLosslessGenericRefinementRegion', null, null, null, null, 'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles', 'Tables', null, null, null, null, null, null, null, null, 'Extension'];
98
116
  var CodingTemplates = [[{
99
117
  x: -1,
@@ -294,6 +312,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
294
312
  }];
295
313
  var ReusedContexts = [0x9B25, 0x0795, 0x00E5, 0x0195];
296
314
  var RefinementReusedContexts = [0x0020, 0x0008];
315
+
297
316
  function decodeBitmapTemplate0(width, height, decodingContext) {
298
317
  var decoder = decodingContext.decoder;
299
318
  var contexts = decodingContext.contextCache.getContexts('GB');
@@ -306,26 +325,32 @@ var Jbig2Image = function Jbig2ImageClosure() {
306
325
  row2,
307
326
  bitmap = [];
308
327
  var OLD_PIXEL_MASK = 0x7BF7;
328
+
309
329
  for (i = 0; i < height; i++) {
310
330
  row = bitmap[i] = new Uint8Array(width);
311
331
  row1 = i < 1 ? row : bitmap[i - 1];
312
332
  row2 = i < 2 ? row : bitmap[i - 2];
313
333
  contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
334
+
314
335
  for (j = 0; j < width; j++) {
315
336
  row[j] = pixel = decoder.readBit(contexts, contextLabel);
316
337
  contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
317
338
  }
318
339
  }
340
+
319
341
  return bitmap;
320
342
  }
343
+
321
344
  function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
322
345
  if (mmr) {
323
346
  var input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
324
347
  return decodeMMRBitmap(input, width, height, false);
325
348
  }
349
+
326
350
  if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
327
351
  return decodeBitmapTemplate0(width, height, decodingContext);
328
352
  }
353
+
329
354
  var useskip = !!skip;
330
355
  var template = CodingTemplates[templateIndex].concat(at);
331
356
  template.sort(function (a, b) {
@@ -340,28 +365,33 @@ var Jbig2Image = function Jbig2ImageClosure() {
340
365
  maxX = 0,
341
366
  minY = 0;
342
367
  var c, k;
368
+
343
369
  for (k = 0; k < templateLength; k++) {
344
370
  templateX[k] = template[k].x;
345
371
  templateY[k] = template[k].y;
346
372
  minX = Math.min(minX, template[k].x);
347
373
  maxX = Math.max(maxX, template[k].x);
348
374
  minY = Math.min(minY, template[k].y);
375
+
349
376
  if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
350
377
  reuseMask |= 1 << templateLength - 1 - k;
351
378
  } else {
352
379
  changingTemplateEntries.push(k);
353
380
  }
354
381
  }
382
+
355
383
  var changingEntriesLength = changingTemplateEntries.length;
356
384
  var changingTemplateX = new Int8Array(changingEntriesLength);
357
385
  var changingTemplateY = new Int8Array(changingEntriesLength);
358
386
  var changingTemplateBit = new Uint16Array(changingEntriesLength);
387
+
359
388
  for (c = 0; c < changingEntriesLength; c++) {
360
389
  k = changingTemplateEntries[c];
361
390
  changingTemplateX[c] = template[k].x;
362
391
  changingTemplateY[c] = template[k].y;
363
392
  changingTemplateBit[c] = 1 << templateLength - 1 - k;
364
393
  }
394
+
365
395
  var sbb_left = -minX;
366
396
  var sbb_top = -minY;
367
397
  var sbb_right = width - maxX;
@@ -377,28 +407,35 @@ var Jbig2Image = function Jbig2ImageClosure() {
377
407
  contextLabel = 0,
378
408
  bit,
379
409
  shift;
410
+
380
411
  for (var i = 0; i < height; i++) {
381
412
  if (prediction) {
382
413
  var sltp = decoder.readBit(contexts, pseudoPixelContext);
383
414
  ltp ^= sltp;
415
+
384
416
  if (ltp) {
385
417
  bitmap.push(row);
386
418
  continue;
387
419
  }
388
420
  }
421
+
389
422
  row = new Uint8Array(row);
390
423
  bitmap.push(row);
424
+
391
425
  for (j = 0; j < width; j++) {
392
426
  if (useskip && skip[i][j]) {
393
427
  row[j] = 0;
394
428
  continue;
395
429
  }
430
+
396
431
  if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
397
432
  contextLabel = contextLabel << 1 & reuseMask;
433
+
398
434
  for (k = 0; k < changingEntriesLength; k++) {
399
435
  i0 = i + changingTemplateY[k];
400
436
  j0 = j + changingTemplateX[k];
401
437
  bit = bitmap[i0][j0];
438
+
402
439
  if (bit) {
403
440
  bit = changingTemplateBit[k];
404
441
  contextLabel |= bit;
@@ -407,12 +444,16 @@ var Jbig2Image = function Jbig2ImageClosure() {
407
444
  } else {
408
445
  contextLabel = 0;
409
446
  shift = templateLength - 1;
447
+
410
448
  for (k = 0; k < templateLength; k++, shift--) {
411
449
  j0 = j + templateX[k];
450
+
412
451
  if (j0 >= 0 && j0 < width) {
413
452
  i0 = i + templateY[k];
453
+
414
454
  if (i0 >= 0) {
415
455
  bit = bitmap[i0][j0];
456
+
416
457
  if (bit) {
417
458
  contextLabel |= bit << shift;
418
459
  }
@@ -420,36 +461,47 @@ var Jbig2Image = function Jbig2ImageClosure() {
420
461
  }
421
462
  }
422
463
  }
464
+
423
465
  var pixel = decoder.readBit(contexts, contextLabel);
424
466
  row[j] = pixel;
425
467
  }
426
468
  }
469
+
427
470
  return bitmap;
428
471
  }
472
+
429
473
  function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
430
474
  var codingTemplate = RefinementTemplates[templateIndex].coding;
475
+
431
476
  if (templateIndex === 0) {
432
477
  codingTemplate = codingTemplate.concat([at[0]]);
433
478
  }
479
+
434
480
  var codingTemplateLength = codingTemplate.length;
435
481
  var codingTemplateX = new Int32Array(codingTemplateLength);
436
482
  var codingTemplateY = new Int32Array(codingTemplateLength);
437
483
  var k;
484
+
438
485
  for (k = 0; k < codingTemplateLength; k++) {
439
486
  codingTemplateX[k] = codingTemplate[k].x;
440
487
  codingTemplateY[k] = codingTemplate[k].y;
441
488
  }
489
+
442
490
  var referenceTemplate = RefinementTemplates[templateIndex].reference;
491
+
443
492
  if (templateIndex === 0) {
444
493
  referenceTemplate = referenceTemplate.concat([at[1]]);
445
494
  }
495
+
446
496
  var referenceTemplateLength = referenceTemplate.length;
447
497
  var referenceTemplateX = new Int32Array(referenceTemplateLength);
448
498
  var referenceTemplateY = new Int32Array(referenceTemplateLength);
499
+
449
500
  for (k = 0; k < referenceTemplateLength; k++) {
450
501
  referenceTemplateX[k] = referenceTemplate[k].x;
451
502
  referenceTemplateY[k] = referenceTemplate[k].y;
452
503
  }
504
+
453
505
  var referenceWidth = referenceBitmap[0].length;
454
506
  var referenceHeight = referenceBitmap.length;
455
507
  var pseudoPixelContext = RefinementReusedContexts[templateIndex];
@@ -457,75 +509,93 @@ var Jbig2Image = function Jbig2ImageClosure() {
457
509
  var decoder = decodingContext.decoder;
458
510
  var contexts = decodingContext.contextCache.getContexts('GR');
459
511
  var ltp = 0;
512
+
460
513
  for (var i = 0; i < height; i++) {
461
514
  if (prediction) {
462
515
  var sltp = decoder.readBit(contexts, pseudoPixelContext);
463
516
  ltp ^= sltp;
517
+
464
518
  if (ltp) {
465
519
  throw new Jbig2Error('prediction is not supported');
466
520
  }
467
521
  }
522
+
468
523
  var row = new Uint8Array(width);
469
524
  bitmap.push(row);
525
+
470
526
  for (var j = 0; j < width; j++) {
471
527
  var i0, j0;
472
528
  var contextLabel = 0;
529
+
473
530
  for (k = 0; k < codingTemplateLength; k++) {
474
531
  i0 = i + codingTemplateY[k];
475
532
  j0 = j + codingTemplateX[k];
533
+
476
534
  if (i0 < 0 || j0 < 0 || j0 >= width) {
477
535
  contextLabel <<= 1;
478
536
  } else {
479
537
  contextLabel = contextLabel << 1 | bitmap[i0][j0];
480
538
  }
481
539
  }
540
+
482
541
  for (k = 0; k < referenceTemplateLength; k++) {
483
542
  i0 = i + referenceTemplateY[k] - offsetY;
484
543
  j0 = j + referenceTemplateX[k] - offsetX;
544
+
485
545
  if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
486
546
  contextLabel <<= 1;
487
547
  } else {
488
548
  contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
489
549
  }
490
550
  }
551
+
491
552
  var pixel = decoder.readBit(contexts, contextLabel);
492
553
  row[j] = pixel;
493
554
  }
494
555
  }
556
+
495
557
  return bitmap;
496
558
  }
559
+
497
560
  function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
498
561
  if (huffman && refinement) {
499
562
  throw new Jbig2Error('symbol refinement with Huffman is not supported');
500
563
  }
564
+
501
565
  var newSymbols = [];
502
566
  var currentHeight = 0;
503
567
  var symbolCodeLength = (0, _util.log2)(symbols.length + numberOfNewSymbols);
504
568
  var decoder = decodingContext.decoder;
505
569
  var contextCache = decodingContext.contextCache;
506
- var tableB1 = void 0,
507
- symbolWidths = void 0;
570
+ var tableB1, symbolWidths;
571
+
508
572
  if (huffman) {
509
573
  tableB1 = getStandardTable(1);
510
574
  symbolWidths = [];
511
575
  symbolCodeLength = Math.max(symbolCodeLength, 1);
512
576
  }
577
+
513
578
  while (newSymbols.length < numberOfNewSymbols) {
514
579
  var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, 'IADH', decoder);
515
580
  currentHeight += deltaHeight;
516
581
  var currentWidth = 0,
517
582
  totalWidth = 0;
518
583
  var firstSymbol = huffman ? symbolWidths.length : 0;
584
+
519
585
  while (true) {
520
586
  var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, 'IADW', decoder);
587
+
521
588
  if (deltaWidth === null) {
522
589
  break;
523
590
  }
591
+
524
592
  currentWidth += deltaWidth;
525
593
  totalWidth += currentWidth;
526
594
  var bitmap;
595
+
527
596
  if (refinement) {
528
597
  var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder);
598
+
529
599
  if (numberOfInstances > 1) {
530
600
  bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
531
601
  } else {
@@ -535,6 +605,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
535
605
  var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
536
606
  bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
537
607
  }
608
+
538
609
  newSymbols.push(bitmap);
539
610
  } else if (huffman) {
540
611
  symbolWidths.push(currentWidth);
@@ -543,10 +614,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
543
614
  newSymbols.push(bitmap);
544
615
  }
545
616
  }
617
+
546
618
  if (huffman && !refinement) {
547
619
  var bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
548
620
  huffmanInput.byteAlign();
549
621
  var collectiveBitmap = void 0;
622
+
550
623
  if (bitmapSize === 0) {
551
624
  collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
552
625
  } else {
@@ -557,7 +630,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
557
630
  huffmanInput.end = originalEnd;
558
631
  huffmanInput.position = bitmapEnd;
559
632
  }
633
+
560
634
  var numberOfSymbolsDecoded = symbolWidths.length;
635
+
561
636
  if (firstSymbol === numberOfSymbolsDecoded - 1) {
562
637
  newSymbols.push(collectiveBitmap);
563
638
  } else {
@@ -567,79 +642,100 @@ var Jbig2Image = function Jbig2ImageClosure() {
567
642
  xMax = void 0,
568
643
  bitmapWidth = void 0,
569
644
  symbolBitmap = void 0;
645
+
570
646
  for (_i = firstSymbol; _i < numberOfSymbolsDecoded; _i++) {
571
647
  bitmapWidth = symbolWidths[_i];
572
648
  xMax = xMin + bitmapWidth;
573
649
  symbolBitmap = [];
650
+
574
651
  for (y = 0; y < currentHeight; y++) {
575
652
  symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
576
653
  }
654
+
577
655
  newSymbols.push(symbolBitmap);
578
656
  xMin = xMax;
579
657
  }
580
658
  }
581
659
  }
582
660
  }
661
+
583
662
  var exportedSymbols = [];
584
663
  var flags = [],
585
664
  currentFlag = false;
586
665
  var totalSymbolsLength = symbols.length + numberOfNewSymbols;
666
+
587
667
  while (flags.length < totalSymbolsLength) {
588
668
  var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, 'IAEX', decoder);
669
+
589
670
  while (runLength--) {
590
671
  flags.push(currentFlag);
591
672
  }
673
+
592
674
  currentFlag = !currentFlag;
593
675
  }
676
+
594
677
  for (var i = 0, ii = symbols.length; i < ii; i++) {
595
678
  if (flags[i]) {
596
679
  exportedSymbols.push(symbols[i]);
597
680
  }
598
681
  }
682
+
599
683
  for (var j = 0; j < numberOfNewSymbols; i++, j++) {
600
684
  if (flags[i]) {
601
685
  exportedSymbols.push(newSymbols[j]);
602
686
  }
603
687
  }
688
+
604
689
  return exportedSymbols;
605
690
  }
691
+
606
692
  function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
607
693
  if (huffman && refinement) {
608
694
  throw new Jbig2Error('refinement with Huffman is not supported');
609
695
  }
696
+
610
697
  var bitmap = [];
611
698
  var i, row;
699
+
612
700
  for (i = 0; i < height; i++) {
613
701
  row = new Uint8Array(width);
702
+
614
703
  if (defaultPixelValue) {
615
704
  for (var j = 0; j < width; j++) {
616
705
  row[j] = defaultPixelValue;
617
706
  }
618
707
  }
708
+
619
709
  bitmap.push(row);
620
710
  }
711
+
621
712
  var decoder = decodingContext.decoder;
622
713
  var contextCache = decodingContext.contextCache;
623
714
  var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, 'IADT', decoder);
624
715
  var firstS = 0;
625
716
  i = 0;
717
+
626
718
  while (i < numberOfSymbolInstances) {
627
719
  var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, 'IADT', decoder);
628
720
  stripT += deltaT;
629
721
  var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, 'IAFS', decoder);
630
722
  firstS += deltaFirstS;
631
723
  var currentS = firstS;
724
+
632
725
  do {
633
726
  var currentT = 0;
727
+
634
728
  if (stripSize > 1) {
635
729
  currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, 'IAIT', decoder);
636
730
  }
731
+
637
732
  var t = stripSize * stripT + currentT;
638
733
  var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
639
734
  var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, 'IARI', decoder));
640
735
  var symbolBitmap = inputSymbols[symbolId];
641
736
  var symbolWidth = symbolBitmap[0].length;
642
737
  var symbolHeight = symbolBitmap.length;
738
+
643
739
  if (applyRefinement) {
644
740
  var rdw = decodeInteger(contextCache, 'IARDW', decoder);
645
741
  var rdh = decodeInteger(contextCache, 'IARDH', decoder);
@@ -649,74 +745,99 @@ var Jbig2Image = function Jbig2ImageClosure() {
649
745
  symbolHeight += rdh;
650
746
  symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
651
747
  }
748
+
652
749
  var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
653
750
  var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
654
751
  var s2, t2, symbolRow;
752
+
655
753
  if (transposed) {
656
754
  for (s2 = 0; s2 < symbolHeight; s2++) {
657
755
  row = bitmap[offsetS + s2];
756
+
658
757
  if (!row) {
659
758
  continue;
660
759
  }
760
+
661
761
  symbolRow = symbolBitmap[s2];
662
762
  var maxWidth = Math.min(width - offsetT, symbolWidth);
763
+
663
764
  switch (combinationOperator) {
664
765
  case 0:
665
766
  for (t2 = 0; t2 < maxWidth; t2++) {
666
767
  row[offsetT + t2] |= symbolRow[t2];
667
768
  }
769
+
668
770
  break;
771
+
669
772
  case 2:
670
773
  for (t2 = 0; t2 < maxWidth; t2++) {
671
774
  row[offsetT + t2] ^= symbolRow[t2];
672
775
  }
776
+
673
777
  break;
778
+
674
779
  default:
675
- throw new Jbig2Error('operator ' + combinationOperator + ' is not supported');
780
+ throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported"));
676
781
  }
677
782
  }
783
+
678
784
  currentS += symbolHeight - 1;
679
785
  } else {
680
786
  for (t2 = 0; t2 < symbolHeight; t2++) {
681
787
  row = bitmap[offsetT + t2];
788
+
682
789
  if (!row) {
683
790
  continue;
684
791
  }
792
+
685
793
  symbolRow = symbolBitmap[t2];
794
+
686
795
  switch (combinationOperator) {
687
796
  case 0:
688
797
  for (s2 = 0; s2 < symbolWidth; s2++) {
689
798
  row[offsetS + s2] |= symbolRow[s2];
690
799
  }
800
+
691
801
  break;
802
+
692
803
  case 2:
693
804
  for (s2 = 0; s2 < symbolWidth; s2++) {
694
805
  row[offsetS + s2] ^= symbolRow[s2];
695
806
  }
807
+
696
808
  break;
809
+
697
810
  default:
698
- throw new Jbig2Error('operator ' + combinationOperator + ' is not supported');
811
+ throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported"));
699
812
  }
700
813
  }
814
+
701
815
  currentS += symbolWidth - 1;
702
816
  }
817
+
703
818
  i++;
704
819
  var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, 'IADS', decoder);
820
+
705
821
  if (deltaS === null) {
706
822
  break;
707
823
  }
824
+
708
825
  currentS += deltaS + dsOffset;
709
826
  } while (true);
710
827
  }
828
+
711
829
  return bitmap;
712
830
  }
831
+
713
832
  function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
714
833
  var at = [];
834
+
715
835
  if (!mmr) {
716
836
  at.push({
717
837
  x: -patternWidth,
718
838
  y: 0
719
839
  });
840
+
720
841
  if (template === 0) {
721
842
  at.push({
722
843
  x: -3,
@@ -732,58 +853,71 @@ var Jbig2Image = function Jbig2ImageClosure() {
732
853
  });
733
854
  }
734
855
  }
856
+
735
857
  var collectiveWidth = (maxPatternIndex + 1) * patternWidth;
736
858
  var collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
737
859
  var patterns = [],
738
860
  i = 0,
739
- patternBitmap = void 0,
740
- xMin = void 0,
741
- xMax = void 0,
742
- y = void 0;
861
+ patternBitmap,
862
+ xMin,
863
+ xMax,
864
+ y;
865
+
743
866
  while (i <= maxPatternIndex) {
744
867
  patternBitmap = [];
745
868
  xMin = patternWidth * i;
746
869
  xMax = xMin + patternWidth;
870
+
747
871
  for (y = 0; y < patternHeight; y++) {
748
872
  patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
749
873
  }
874
+
750
875
  patterns.push(patternBitmap);
751
876
  i++;
752
877
  }
878
+
753
879
  return patterns;
754
880
  }
881
+
755
882
  function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
756
883
  var skip = null;
884
+
757
885
  if (enableSkip) {
758
886
  throw new Jbig2Error('skip is not supported');
759
887
  }
888
+
760
889
  if (combinationOperator !== 0) {
761
890
  throw new Jbig2Error('operator ' + combinationOperator + ' is not supported in halftone region');
762
891
  }
892
+
763
893
  var regionBitmap = [];
764
- var i = void 0,
765
- j = void 0,
766
- row = void 0;
894
+ var i, j, row;
895
+
767
896
  for (i = 0; i < regionHeight; i++) {
768
897
  row = new Uint8Array(regionWidth);
898
+
769
899
  if (defaultPixelValue) {
770
900
  for (j = 0; j < regionWidth; j++) {
771
901
  row[j] = defaultPixelValue;
772
902
  }
773
903
  }
904
+
774
905
  regionBitmap.push(row);
775
906
  }
907
+
776
908
  var numberOfPatterns = patterns.length;
777
909
  var pattern0 = patterns[0];
778
910
  var patternWidth = pattern0[0].length,
779
911
  patternHeight = pattern0.length;
780
912
  var bitsPerValue = (0, _util.log2)(numberOfPatterns);
781
913
  var at = [];
914
+
782
915
  if (!mmr) {
783
916
  at.push({
784
917
  x: template <= 1 ? 3 : 2,
785
918
  y: -1
786
919
  });
920
+
787
921
  if (template === 0) {
788
922
  at.push({
789
923
  x: -3,
@@ -799,44 +933,46 @@ var Jbig2Image = function Jbig2ImageClosure() {
799
933
  });
800
934
  }
801
935
  }
936
+
802
937
  var grayScaleBitPlanes = [],
803
- mmrInput = void 0,
804
- bitmap = void 0;
938
+ mmrInput,
939
+ bitmap;
940
+
805
941
  if (mmr) {
806
942
  mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
807
943
  }
944
+
808
945
  for (i = bitsPerValue - 1; i >= 0; i--) {
809
946
  if (mmr) {
810
947
  bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);
811
948
  } else {
812
949
  bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);
813
950
  }
951
+
814
952
  grayScaleBitPlanes[i] = bitmap;
815
953
  }
816
- var mg = void 0,
817
- ng = void 0,
818
- bit = void 0,
819
- patternIndex = void 0,
820
- patternBitmap = void 0,
821
- x = void 0,
822
- y = void 0,
823
- patternRow = void 0,
824
- regionRow = void 0;
954
+
955
+ var mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
956
+
825
957
  for (mg = 0; mg < gridHeight; mg++) {
826
958
  for (ng = 0; ng < gridWidth; ng++) {
827
959
  bit = 0;
828
960
  patternIndex = 0;
961
+
829
962
  for (j = bitsPerValue - 1; j >= 0; j--) {
830
963
  bit = grayScaleBitPlanes[j][mg][ng] ^ bit;
831
964
  patternIndex |= bit << j;
832
965
  }
966
+
833
967
  patternBitmap = patterns[patternIndex];
834
968
  x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;
835
969
  y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;
970
+
836
971
  if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {
837
972
  for (i = 0; i < patternHeight; i++) {
838
973
  regionRow = regionBitmap[y + i];
839
974
  patternRow = patternBitmap[i];
975
+
840
976
  for (j = 0; j < patternWidth; j++) {
841
977
  regionRow[x + j] |= patternRow[j];
842
978
  }
@@ -844,15 +980,20 @@ var Jbig2Image = function Jbig2ImageClosure() {
844
980
  } else {
845
981
  var regionX = void 0,
846
982
  regionY = void 0;
983
+
847
984
  for (i = 0; i < patternHeight; i++) {
848
985
  regionY = y + i;
986
+
849
987
  if (regionY < 0 || regionY >= regionHeight) {
850
988
  continue;
851
989
  }
990
+
852
991
  regionRow = regionBitmap[regionY];
853
992
  patternRow = patternBitmap[i];
993
+
854
994
  for (j = 0; j < patternWidth; j++) {
855
995
  regionX = x + j;
996
+
856
997
  if (regionX >= 0 && regionX < regionWidth) {
857
998
  regionRow[regionX] |= patternRow[j];
858
999
  }
@@ -861,16 +1002,20 @@ var Jbig2Image = function Jbig2ImageClosure() {
861
1002
  }
862
1003
  }
863
1004
  }
1005
+
864
1006
  return regionBitmap;
865
1007
  }
1008
+
866
1009
  function readSegmentHeader(data, start) {
867
1010
  var segmentHeader = {};
868
1011
  segmentHeader.number = (0, _util.readUint32)(data, start);
869
1012
  var flags = data[start + 4];
870
1013
  var segmentType = flags & 0x3F;
1014
+
871
1015
  if (!SegmentTypes[segmentType]) {
872
1016
  throw new Jbig2Error('invalid segment type: ' + segmentType);
873
1017
  }
1018
+
874
1019
  segmentHeader.type = segmentType;
875
1020
  segmentHeader.typeName = SegmentTypes[segmentType];
876
1021
  segmentHeader.deferredNonRetain = !!(flags & 0x80);
@@ -879,35 +1024,43 @@ var Jbig2Image = function Jbig2ImageClosure() {
879
1024
  var referredToCount = referredFlags >> 5 & 7;
880
1025
  var retainBits = [referredFlags & 31];
881
1026
  var position = start + 6;
1027
+
882
1028
  if (referredFlags === 7) {
883
1029
  referredToCount = (0, _util.readUint32)(data, position - 1) & 0x1FFFFFFF;
884
1030
  position += 3;
885
1031
  var bytes = referredToCount + 7 >> 3;
886
1032
  retainBits[0] = data[position++];
1033
+
887
1034
  while (--bytes > 0) {
888
1035
  retainBits.push(data[position++]);
889
1036
  }
890
1037
  } else if (referredFlags === 5 || referredFlags === 6) {
891
1038
  throw new Jbig2Error('invalid referred-to flags');
892
1039
  }
1040
+
893
1041
  segmentHeader.retainBits = retainBits;
894
1042
  var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : segmentHeader.number <= 65536 ? 2 : 4;
895
1043
  var referredTo = [];
896
1044
  var i, ii;
1045
+
897
1046
  for (i = 0; i < referredToCount; i++) {
898
1047
  var number = referredToSegmentNumberSize === 1 ? data[position] : referredToSegmentNumberSize === 2 ? (0, _util.readUint16)(data, position) : (0, _util.readUint32)(data, position);
899
1048
  referredTo.push(number);
900
1049
  position += referredToSegmentNumberSize;
901
1050
  }
1051
+
902
1052
  segmentHeader.referredTo = referredTo;
1053
+
903
1054
  if (!pageAssociationFieldSize) {
904
1055
  segmentHeader.pageAssociation = data[position++];
905
1056
  } else {
906
1057
  segmentHeader.pageAssociation = (0, _util.readUint32)(data, position);
907
1058
  position += 4;
908
1059
  }
1060
+
909
1061
  segmentHeader.length = (0, _util.readUint32)(data, position);
910
1062
  position += 4;
1063
+
911
1064
  if (segmentHeader.length === 0xFFFFFFFF) {
912
1065
  if (segmentType === 38) {
913
1066
  var genericRegionInfo = readRegionSegmentInformation(data, position);
@@ -915,24 +1068,30 @@ var Jbig2Image = function Jbig2ImageClosure() {
915
1068
  var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
916
1069
  var searchPatternLength = 6;
917
1070
  var searchPattern = new Uint8Array(searchPatternLength);
1071
+
918
1072
  if (!genericRegionMmr) {
919
1073
  searchPattern[0] = 0xFF;
920
1074
  searchPattern[1] = 0xAC;
921
1075
  }
1076
+
922
1077
  searchPattern[2] = genericRegionInfo.height >>> 24 & 0xFF;
923
1078
  searchPattern[3] = genericRegionInfo.height >> 16 & 0xFF;
924
1079
  searchPattern[4] = genericRegionInfo.height >> 8 & 0xFF;
925
1080
  searchPattern[5] = genericRegionInfo.height & 0xFF;
1081
+
926
1082
  for (i = position, ii = data.length; i < ii; i++) {
927
1083
  var j = 0;
1084
+
928
1085
  while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
929
1086
  j++;
930
1087
  }
1088
+
931
1089
  if (j === searchPatternLength) {
932
1090
  segmentHeader.length = i + searchPatternLength;
933
1091
  break;
934
1092
  }
935
1093
  }
1094
+
936
1095
  if (segmentHeader.length === 0xFFFFFFFF) {
937
1096
  throw new Jbig2Error('segment end was not found');
938
1097
  }
@@ -940,12 +1099,15 @@ var Jbig2Image = function Jbig2ImageClosure() {
940
1099
  throw new Jbig2Error('invalid unknown segment length');
941
1100
  }
942
1101
  }
1102
+
943
1103
  segmentHeader.headerEnd = position;
944
1104
  return segmentHeader;
945
1105
  }
1106
+
946
1107
  function readSegments(header, data, start, end) {
947
1108
  var segments = [];
948
1109
  var position = start;
1110
+
949
1111
  while (position < end) {
950
1112
  var segmentHeader = readSegmentHeader(data, position);
951
1113
  position = segmentHeader.headerEnd;
@@ -953,16 +1115,20 @@ var Jbig2Image = function Jbig2ImageClosure() {
953
1115
  header: segmentHeader,
954
1116
  data: data
955
1117
  };
1118
+
956
1119
  if (!header.randomAccess) {
957
1120
  segment.start = position;
958
1121
  position += segmentHeader.length;
959
1122
  segment.end = position;
960
1123
  }
1124
+
961
1125
  segments.push(segment);
1126
+
962
1127
  if (segmentHeader.type === 51) {
963
1128
  break;
964
1129
  }
965
1130
  }
1131
+
966
1132
  if (header.randomAccess) {
967
1133
  for (var i = 0, ii = segments.length; i < ii; i++) {
968
1134
  segments[i].start = position;
@@ -970,8 +1136,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
970
1136
  segments[i].end = position;
971
1137
  }
972
1138
  }
1139
+
973
1140
  return segments;
974
1141
  }
1142
+
975
1143
  function readRegionSegmentInformation(data, start) {
976
1144
  return {
977
1145
  width: (0, _util.readUint32)(data, start),
@@ -981,13 +1149,16 @@ var Jbig2Image = function Jbig2ImageClosure() {
981
1149
  combinationOperator: data[start + 16] & 7
982
1150
  };
983
1151
  }
1152
+
984
1153
  var RegionSegmentInformationFieldLength = 17;
1154
+
985
1155
  function processSegment(segment, visitor) {
986
1156
  var header = segment.header;
987
1157
  var data = segment.data,
988
1158
  position = segment.start,
989
1159
  end = segment.end;
990
1160
  var args, at, i, atLength;
1161
+
991
1162
  switch (header.type) {
992
1163
  case 0:
993
1164
  var dictionary = {};
@@ -1003,9 +1174,11 @@ var Jbig2Image = function Jbig2ImageClosure() {
1003
1174
  dictionary.template = dictionaryFlags >> 10 & 3;
1004
1175
  dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
1005
1176
  position += 2;
1177
+
1006
1178
  if (!dictionary.huffman) {
1007
1179
  atLength = dictionary.template === 0 ? 4 : 1;
1008
1180
  at = [];
1181
+
1009
1182
  for (i = 0; i < atLength; i++) {
1010
1183
  at.push({
1011
1184
  x: (0, _util.readInt8)(data, position),
@@ -1013,10 +1186,13 @@ var Jbig2Image = function Jbig2ImageClosure() {
1013
1186
  });
1014
1187
  position += 2;
1015
1188
  }
1189
+
1016
1190
  dictionary.at = at;
1017
1191
  }
1192
+
1018
1193
  if (dictionary.refinement && !dictionary.refinementTemplate) {
1019
1194
  at = [];
1195
+
1020
1196
  for (i = 0; i < 2; i++) {
1021
1197
  at.push({
1022
1198
  x: (0, _util.readInt8)(data, position),
@@ -1024,14 +1200,17 @@ var Jbig2Image = function Jbig2ImageClosure() {
1024
1200
  });
1025
1201
  position += 2;
1026
1202
  }
1203
+
1027
1204
  dictionary.refinementAt = at;
1028
1205
  }
1206
+
1029
1207
  dictionary.numberOfExportedSymbols = (0, _util.readUint32)(data, position);
1030
1208
  position += 4;
1031
1209
  dictionary.numberOfNewSymbols = (0, _util.readUint32)(data, position);
1032
1210
  position += 4;
1033
1211
  args = [dictionary, header.number, header.referredTo, data, position, end];
1034
1212
  break;
1213
+
1035
1214
  case 6:
1036
1215
  case 7:
1037
1216
  var textRegion = {};
@@ -1049,6 +1228,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
1049
1228
  textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
1050
1229
  textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
1051
1230
  textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
1231
+
1052
1232
  if (textRegion.huffman) {
1053
1233
  var textRegionHuffmanFlags = (0, _util.readUint16)(data, position);
1054
1234
  position += 2;
@@ -1061,8 +1241,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
1061
1241
  textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
1062
1242
  textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);
1063
1243
  }
1244
+
1064
1245
  if (textRegion.refinement && !textRegion.refinementTemplate) {
1065
1246
  at = [];
1247
+
1066
1248
  for (i = 0; i < 2; i++) {
1067
1249
  at.push({
1068
1250
  x: (0, _util.readInt8)(data, position),
@@ -1070,12 +1252,15 @@ var Jbig2Image = function Jbig2ImageClosure() {
1070
1252
  });
1071
1253
  position += 2;
1072
1254
  }
1255
+
1073
1256
  textRegion.refinementAt = at;
1074
1257
  }
1258
+
1075
1259
  textRegion.numberOfSymbolInstances = (0, _util.readUint32)(data, position);
1076
1260
  position += 4;
1077
1261
  args = [textRegion, header.referredTo, data, position, end];
1078
1262
  break;
1263
+
1079
1264
  case 16:
1080
1265
  var patternDictionary = {};
1081
1266
  var patternDictionaryFlags = data[position++];
@@ -1087,6 +1272,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
1087
1272
  position += 4;
1088
1273
  args = [patternDictionary, header.number, data, position, end];
1089
1274
  break;
1275
+
1090
1276
  case 22:
1091
1277
  case 23:
1092
1278
  var halftoneRegion = {};
@@ -1112,6 +1298,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
1112
1298
  position += 2;
1113
1299
  args = [halftoneRegion, header.referredTo, data, position, end];
1114
1300
  break;
1301
+
1115
1302
  case 38:
1116
1303
  case 39:
1117
1304
  var genericRegion = {};
@@ -1121,9 +1308,11 @@ var Jbig2Image = function Jbig2ImageClosure() {
1121
1308
  genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
1122
1309
  genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
1123
1310
  genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
1311
+
1124
1312
  if (!genericRegion.mmr) {
1125
1313
  atLength = genericRegion.template === 0 ? 4 : 1;
1126
1314
  at = [];
1315
+
1127
1316
  for (i = 0; i < atLength; i++) {
1128
1317
  at.push({
1129
1318
  x: (0, _util.readInt8)(data, position),
@@ -1131,10 +1320,13 @@ var Jbig2Image = function Jbig2ImageClosure() {
1131
1320
  });
1132
1321
  position += 2;
1133
1322
  }
1323
+
1134
1324
  genericRegion.at = at;
1135
1325
  }
1326
+
1136
1327
  args = [genericRegion, data, position, end];
1137
1328
  break;
1329
+
1138
1330
  case 48:
1139
1331
  var pageInfo = {
1140
1332
  width: (0, _util.readUint32)(data, position),
@@ -1142,9 +1334,11 @@ var Jbig2Image = function Jbig2ImageClosure() {
1142
1334
  resolutionX: (0, _util.readUint32)(data, position + 8),
1143
1335
  resolutionY: (0, _util.readUint32)(data, position + 12)
1144
1336
  };
1337
+
1145
1338
  if (pageInfo.height === 0xFFFFFFFF) {
1146
1339
  delete pageInfo.height;
1147
1340
  }
1341
+
1148
1342
  var pageSegmentFlags = data[position + 16];
1149
1343
  (0, _util.readUint16)(data, position + 17);
1150
1344
  pageInfo.lossless = !!(pageSegmentFlags & 1);
@@ -1155,93 +1349,117 @@ var Jbig2Image = function Jbig2ImageClosure() {
1155
1349
  pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
1156
1350
  args = [pageInfo];
1157
1351
  break;
1352
+
1158
1353
  case 49:
1159
1354
  break;
1355
+
1160
1356
  case 50:
1161
1357
  break;
1358
+
1162
1359
  case 51:
1163
1360
  break;
1361
+
1164
1362
  case 53:
1165
1363
  args = [header.number, data, position, end];
1166
1364
  break;
1365
+
1167
1366
  case 62:
1168
1367
  break;
1368
+
1169
1369
  default:
1170
- throw new Jbig2Error('segment type ' + header.typeName + '(' + header.type + ')' + ' is not implemented');
1370
+ throw new Jbig2Error("segment type ".concat(header.typeName, "(").concat(header.type, ")") + ' is not implemented');
1171
1371
  }
1372
+
1172
1373
  var callbackName = 'on' + header.typeName;
1374
+
1173
1375
  if (callbackName in visitor) {
1174
1376
  visitor[callbackName].apply(visitor, args);
1175
1377
  }
1176
1378
  }
1379
+
1177
1380
  function processSegments(segments, visitor) {
1178
1381
  for (var i = 0, ii = segments.length; i < ii; i++) {
1179
1382
  processSegment(segments[i], visitor);
1180
1383
  }
1181
1384
  }
1385
+
1182
1386
  function parseJbig2Chunks(chunks) {
1183
1387
  var visitor = new SimpleSegmentVisitor();
1388
+
1184
1389
  for (var i = 0, ii = chunks.length; i < ii; i++) {
1185
1390
  var chunk = chunks[i];
1186
1391
  var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
1187
1392
  processSegments(segments, visitor);
1188
1393
  }
1394
+
1189
1395
  return visitor.buffer;
1190
1396
  }
1397
+
1191
1398
  function parseJbig2(data) {
1192
1399
  var position = 0,
1193
1400
  end = data.length;
1401
+
1194
1402
  if (data[position] !== 0x97 || data[position + 1] !== 0x4A || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0D || data[position + 5] !== 0x0A || data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) {
1195
1403
  throw new Jbig2Error('parseJbig2 - invalid header.');
1196
1404
  }
1405
+
1197
1406
  var header = Object.create(null);
1198
1407
  position += 8;
1199
1408
  var flags = data[position++];
1200
1409
  header.randomAccess = !(flags & 1);
1410
+
1201
1411
  if (!(flags & 2)) {
1202
1412
  header.numberOfPages = (0, _util.readUint32)(data, position);
1203
1413
  position += 4;
1204
1414
  }
1415
+
1205
1416
  var segments = readSegments(header, data, position, end);
1206
1417
  var visitor = new SimpleSegmentVisitor();
1207
1418
  processSegments(segments, visitor);
1208
1419
  var _visitor$currentPageI = visitor.currentPageInfo,
1209
1420
  width = _visitor$currentPageI.width,
1210
1421
  height = _visitor$currentPageI.height;
1211
-
1212
1422
  var bitPacked = visitor.buffer;
1213
1423
  var imgData = new Uint8ClampedArray(width * height);
1214
1424
  var q = 0,
1215
1425
  k = 0;
1426
+
1216
1427
  for (var i = 0; i < height; i++) {
1217
1428
  var mask = 0,
1218
1429
  buffer = void 0;
1430
+
1219
1431
  for (var j = 0; j < width; j++) {
1220
1432
  if (!mask) {
1221
1433
  mask = 128;
1222
1434
  buffer = bitPacked[k++];
1223
1435
  }
1436
+
1224
1437
  imgData[q++] = buffer & mask ? 0 : 255;
1225
1438
  mask >>= 1;
1226
1439
  }
1227
1440
  }
1441
+
1228
1442
  return {
1229
1443
  imgData: imgData,
1230
1444
  width: width,
1231
1445
  height: height
1232
1446
  };
1233
1447
  }
1448
+
1234
1449
  function SimpleSegmentVisitor() {}
1450
+
1235
1451
  SimpleSegmentVisitor.prototype = {
1236
1452
  onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
1237
1453
  this.currentPageInfo = info;
1238
1454
  var rowSize = info.width + 7 >> 3;
1239
1455
  var buffer = new Uint8ClampedArray(rowSize * info.height);
1456
+
1240
1457
  if (info.defaultPixelValue) {
1241
1458
  for (var i = 0, ii = buffer.length; i < ii; i++) {
1242
1459
  buffer[i] = 0xFF;
1243
1460
  }
1244
1461
  }
1462
+
1245
1463
  this.buffer = buffer;
1246
1464
  },
1247
1465
  drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
@@ -1254,43 +1472,56 @@ var Jbig2Image = function Jbig2ImageClosure() {
1254
1472
  var mask0 = 128 >> (regionInfo.x & 7);
1255
1473
  var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
1256
1474
  var i, j, mask, offset;
1475
+
1257
1476
  switch (combinationOperator) {
1258
1477
  case 0:
1259
1478
  for (i = 0; i < height; i++) {
1260
1479
  mask = mask0;
1261
1480
  offset = offset0;
1481
+
1262
1482
  for (j = 0; j < width; j++) {
1263
1483
  if (bitmap[i][j]) {
1264
1484
  buffer[offset] |= mask;
1265
1485
  }
1486
+
1266
1487
  mask >>= 1;
1488
+
1267
1489
  if (!mask) {
1268
1490
  mask = 128;
1269
1491
  offset++;
1270
1492
  }
1271
1493
  }
1494
+
1272
1495
  offset0 += rowSize;
1273
1496
  }
1497
+
1274
1498
  break;
1499
+
1275
1500
  case 2:
1276
1501
  for (i = 0; i < height; i++) {
1277
1502
  mask = mask0;
1278
1503
  offset = offset0;
1504
+
1279
1505
  for (j = 0; j < width; j++) {
1280
1506
  if (bitmap[i][j]) {
1281
1507
  buffer[offset] ^= mask;
1282
1508
  }
1509
+
1283
1510
  mask >>= 1;
1511
+
1284
1512
  if (!mask) {
1285
1513
  mask = 128;
1286
1514
  offset++;
1287
1515
  }
1288
1516
  }
1517
+
1289
1518
  offset0 += rowSize;
1290
1519
  }
1520
+
1291
1521
  break;
1522
+
1292
1523
  default:
1293
- throw new Jbig2Error('operator ' + combinationOperator + ' is not supported');
1524
+ throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported"));
1294
1525
  }
1295
1526
  },
1296
1527
  onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
@@ -1303,43 +1534,53 @@ var Jbig2Image = function Jbig2ImageClosure() {
1303
1534
  this.onImmediateGenericRegion.apply(this, arguments);
1304
1535
  },
1305
1536
  onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
1306
- var huffmanTables = void 0,
1307
- huffmanInput = void 0;
1537
+ var huffmanTables, huffmanInput;
1538
+
1308
1539
  if (dictionary.huffman) {
1309
1540
  huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
1310
1541
  huffmanInput = new Reader(data, start, end);
1311
1542
  }
1543
+
1312
1544
  var symbols = this.symbols;
1545
+
1313
1546
  if (!symbols) {
1314
1547
  this.symbols = symbols = {};
1315
1548
  }
1549
+
1316
1550
  var inputSymbols = [];
1551
+
1317
1552
  for (var i = 0, ii = referredSegments.length; i < ii; i++) {
1318
1553
  var referredSymbols = symbols[referredSegments[i]];
1554
+
1319
1555
  if (referredSymbols) {
1320
1556
  inputSymbols = inputSymbols.concat(referredSymbols);
1321
1557
  }
1322
1558
  }
1559
+
1323
1560
  var decodingContext = new DecodingContext(data, start, end);
1324
1561
  symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);
1325
1562
  },
1326
1563
  onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
1327
1564
  var regionInfo = region.info;
1328
- var huffmanTables = void 0,
1329
- huffmanInput = void 0;
1565
+ var huffmanTables, huffmanInput;
1330
1566
  var symbols = this.symbols;
1331
1567
  var inputSymbols = [];
1568
+
1332
1569
  for (var i = 0, ii = referredSegments.length; i < ii; i++) {
1333
1570
  var referredSymbols = symbols[referredSegments[i]];
1571
+
1334
1572
  if (referredSymbols) {
1335
1573
  inputSymbols = inputSymbols.concat(referredSymbols);
1336
1574
  }
1337
1575
  }
1576
+
1338
1577
  var symbolCodeLength = (0, _util.log2)(inputSymbols.length);
1578
+
1339
1579
  if (region.huffman) {
1340
1580
  huffmanInput = new Reader(data, start, end);
1341
1581
  huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);
1342
1582
  }
1583
+
1343
1584
  var decodingContext = new DecodingContext(data, start, end);
1344
1585
  var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);
1345
1586
  this.drawBitmap(regionInfo, bitmap);
@@ -1349,9 +1590,11 @@ var Jbig2Image = function Jbig2ImageClosure() {
1349
1590
  },
1350
1591
  onPatternDictionary: function onPatternDictionary(dictionary, currentSegment, data, start, end) {
1351
1592
  var patterns = this.patterns;
1593
+
1352
1594
  if (!patterns) {
1353
1595
  this.patterns = patterns = {};
1354
1596
  }
1597
+
1355
1598
  var decodingContext = new DecodingContext(data, start, end);
1356
1599
  patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
1357
1600
  },
@@ -1367,12 +1610,15 @@ var Jbig2Image = function Jbig2ImageClosure() {
1367
1610
  },
1368
1611
  onTables: function onTables(currentSegment, data, start, end) {
1369
1612
  var customTables = this.customTables;
1613
+
1370
1614
  if (!customTables) {
1371
1615
  this.customTables = customTables = {};
1372
1616
  }
1617
+
1373
1618
  customTables[currentSegment] = decodeTablesSegment(data, start, end);
1374
1619
  }
1375
1620
  };
1621
+
1376
1622
  function HuffmanLine(lineData) {
1377
1623
  if (lineData.length === 2) {
1378
1624
  this.isOOB = true;
@@ -1390,8 +1636,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
1390
1636
  this.isLowerRange = lineData[4] === 'lower';
1391
1637
  }
1392
1638
  }
1639
+
1393
1640
  function HuffmanTreeNode(line) {
1394
1641
  this.children = [];
1642
+
1395
1643
  if (line) {
1396
1644
  this.isLeaf = true;
1397
1645
  this.rangeLength = line.rangeLength;
@@ -1402,16 +1650,20 @@ var Jbig2Image = function Jbig2ImageClosure() {
1402
1650
  this.isLeaf = false;
1403
1651
  }
1404
1652
  }
1653
+
1405
1654
  HuffmanTreeNode.prototype = {
1406
1655
  buildTree: function buildTree(line, shift) {
1407
1656
  var bit = line.prefixCode >> shift & 1;
1657
+
1408
1658
  if (shift <= 0) {
1409
1659
  this.children[bit] = new HuffmanTreeNode(line);
1410
1660
  } else {
1411
1661
  var node = this.children[bit];
1662
+
1412
1663
  if (!node) {
1413
1664
  this.children[bit] = node = new HuffmanTreeNode(null);
1414
1665
  }
1666
+
1415
1667
  node.buildTree(line, shift - 1);
1416
1668
  }
1417
1669
  },
@@ -1420,31 +1672,40 @@ var Jbig2Image = function Jbig2ImageClosure() {
1420
1672
  if (this.isOOB) {
1421
1673
  return null;
1422
1674
  }
1675
+
1423
1676
  var htOffset = reader.readBits(this.rangeLength);
1424
1677
  return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
1425
1678
  }
1679
+
1426
1680
  var node = this.children[reader.readBit()];
1681
+
1427
1682
  if (!node) {
1428
1683
  throw new Jbig2Error('invalid Huffman data');
1429
1684
  }
1685
+
1430
1686
  return node.decodeNode(reader);
1431
1687
  }
1432
1688
  };
1689
+
1433
1690
  function HuffmanTable(lines, prefixCodesDone) {
1434
1691
  if (!prefixCodesDone) {
1435
1692
  this.assignPrefixCodes(lines);
1436
1693
  }
1694
+
1437
1695
  this.rootNode = new HuffmanTreeNode(null);
1438
- var i = void 0,
1696
+ var i,
1439
1697
  ii = lines.length,
1440
- line = void 0;
1698
+ line;
1699
+
1441
1700
  for (i = 0; i < ii; i++) {
1442
1701
  line = lines[i];
1702
+
1443
1703
  if (line.prefixLength > 0) {
1444
1704
  this.rootNode.buildTree(line, line.prefixLength - 1);
1445
1705
  }
1446
1706
  }
1447
1707
  }
1708
+
1448
1709
  HuffmanTable.prototype = {
1449
1710
  decode: function decode(reader) {
1450
1711
  return this.rootNode.decodeNode(reader);
@@ -1452,36 +1713,46 @@ var Jbig2Image = function Jbig2ImageClosure() {
1452
1713
  assignPrefixCodes: function assignPrefixCodes(lines) {
1453
1714
  var linesLength = lines.length,
1454
1715
  prefixLengthMax = 0,
1455
- i = void 0;
1716
+ i;
1717
+
1456
1718
  for (i = 0; i < linesLength; i++) {
1457
1719
  prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
1458
1720
  }
1721
+
1459
1722
  var histogram = new Uint32Array(prefixLengthMax + 1);
1723
+
1460
1724
  for (i = 0; i < linesLength; i++) {
1461
1725
  histogram[lines[i].prefixLength]++;
1462
1726
  }
1727
+
1463
1728
  var currentLength = 1,
1464
1729
  firstCode = 0,
1465
- currentCode = void 0,
1466
- currentTemp = void 0,
1467
- line = void 0;
1730
+ currentCode,
1731
+ currentTemp,
1732
+ line;
1468
1733
  histogram[0] = 0;
1734
+
1469
1735
  while (currentLength <= prefixLengthMax) {
1470
1736
  firstCode = firstCode + histogram[currentLength - 1] << 1;
1471
1737
  currentCode = firstCode;
1472
1738
  currentTemp = 0;
1739
+
1473
1740
  while (currentTemp < linesLength) {
1474
1741
  line = lines[currentTemp];
1742
+
1475
1743
  if (line.prefixLength === currentLength) {
1476
1744
  line.prefixCode = currentCode;
1477
1745
  currentCode++;
1478
1746
  }
1747
+
1479
1748
  currentTemp++;
1480
1749
  }
1750
+
1481
1751
  currentLength++;
1482
1752
  }
1483
1753
  }
1484
1754
  };
1755
+
1485
1756
  function decodeTablesSegment(data, start, end) {
1486
1757
  var flags = data[start];
1487
1758
  var lowestValue = (0, _util.readUint32)(data, start + 1) & 0xFFFFFFFF;
@@ -1490,90 +1761,118 @@ var Jbig2Image = function Jbig2ImageClosure() {
1490
1761
  var prefixSizeBits = (flags >> 1 & 7) + 1;
1491
1762
  var rangeSizeBits = (flags >> 4 & 7) + 1;
1492
1763
  var lines = [];
1493
- var prefixLength = void 0,
1494
- rangeLength = void 0,
1764
+ var prefixLength,
1765
+ rangeLength,
1495
1766
  currentRangeLow = lowestValue;
1767
+
1496
1768
  do {
1497
1769
  prefixLength = reader.readBits(prefixSizeBits);
1498
1770
  rangeLength = reader.readBits(rangeSizeBits);
1499
1771
  lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));
1500
1772
  currentRangeLow += 1 << rangeLength;
1501
1773
  } while (currentRangeLow < highestValue);
1774
+
1502
1775
  prefixLength = reader.readBits(prefixSizeBits);
1503
1776
  lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, 'lower']));
1504
1777
  prefixLength = reader.readBits(prefixSizeBits);
1505
1778
  lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
1779
+
1506
1780
  if (flags & 1) {
1507
1781
  prefixLength = reader.readBits(prefixSizeBits);
1508
1782
  lines.push(new HuffmanLine([prefixLength, 0]));
1509
1783
  }
1784
+
1510
1785
  return new HuffmanTable(lines, false);
1511
1786
  }
1787
+
1512
1788
  var standardTablesCache = {};
1789
+
1513
1790
  function getStandardTable(number) {
1514
1791
  var table = standardTablesCache[number];
1792
+
1515
1793
  if (table) {
1516
1794
  return table;
1517
1795
  }
1518
- var lines = void 0;
1796
+
1797
+ var lines;
1798
+
1519
1799
  switch (number) {
1520
1800
  case 1:
1521
1801
  lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];
1522
1802
  break;
1803
+
1523
1804
  case 2:
1524
1805
  lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xE], [11, 5, 6, 0x1E], [75, 6, 32, 0x3E], [6, 0x3F]];
1525
1806
  break;
1807
+
1526
1808
  case 3:
1527
1809
  lines = [[-256, 8, 8, 0xFE], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xE], [11, 5, 6, 0x1E], [-257, 8, 32, 0xFF, 'lower'], [75, 7, 32, 0x7E], [6, 0x3E]];
1528
1810
  break;
1811
+
1529
1812
  case 4:
1530
1813
  lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xE], [12, 5, 6, 0x1E], [76, 5, 32, 0x1F]];
1531
1814
  break;
1815
+
1532
1816
  case 5:
1533
1817
  lines = [[-255, 7, 8, 0x7E], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xE], [12, 5, 6, 0x1E], [-256, 7, 32, 0x7F, 'lower'], [76, 6, 32, 0x3E]];
1534
1818
  break;
1819
+
1535
1820
  case 6:
1536
1821
  lines = [[-2048, 5, 10, 0x1C], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xA], [-128, 5, 6, 0x1D], [-64, 5, 5, 0x1E], [-32, 4, 5, 0xB], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xC], [1024, 4, 10, 0xD], [-2049, 6, 32, 0x3E, 'lower'], [2048, 6, 32, 0x3F]];
1537
1822
  break;
1823
+
1538
1824
  case 7:
1539
1825
  lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1A], [-64, 5, 5, 0x1B], [-32, 4, 5, 0xA], [0, 4, 5, 0xB], [32, 5, 5, 0x1C], [64, 5, 6, 0x1D], [128, 4, 7, 0xC], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1E, 'lower'], [2048, 5, 32, 0x1F]];
1540
1826
  break;
1827
+
1541
1828
  case 8:
1542
1829
  lines = [[-15, 8, 3, 0xFC], [-7, 9, 1, 0x1FC], [-5, 8, 1, 0xFD], [-3, 9, 0, 0x1FD], [-2, 7, 0, 0x7C], [-1, 4, 0, 0xA], [0, 2, 1, 0x0], [2, 5, 0, 0x1A], [3, 6, 0, 0x3A], [4, 3, 4, 0x4], [20, 6, 1, 0x3B], [22, 4, 4, 0xB], [38, 4, 5, 0xC], [70, 5, 6, 0x1B], [134, 5, 7, 0x1C], [262, 6, 7, 0x3C], [390, 7, 8, 0x7D], [646, 6, 10, 0x3D], [-16, 9, 32, 0x1FE, 'lower'], [1670, 9, 32, 0x1FF], [2, 0x1]];
1543
1830
  break;
1831
+
1544
1832
  case 9:
1545
1833
  lines = [[-31, 8, 4, 0xFC], [-15, 9, 2, 0x1FC], [-11, 8, 2, 0xFD], [-7, 9, 1, 0x1FD], [-5, 7, 1, 0x7C], [-3, 4, 1, 0xA], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1A], [5, 6, 1, 0x3A], [7, 3, 5, 0x4], [39, 6, 2, 0x3B], [43, 4, 5, 0xB], [75, 4, 6, 0xC], [139, 5, 7, 0x1B], [267, 5, 8, 0x1C], [523, 6, 8, 0x3C], [779, 7, 9, 0x7D], [1291, 6, 11, 0x3D], [-32, 9, 32, 0x1FE, 'lower'], [3339, 9, 32, 0x1FF], [2, 0x0]];
1546
1834
  break;
1835
+
1547
1836
  case 10:
1548
1837
  lines = [[-21, 7, 4, 0x7A], [-5, 8, 0, 0xFC], [-4, 7, 0, 0x7B], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7C], [5, 8, 0, 0xFD], [6, 2, 6, 0x1], [70, 5, 5, 0x1A], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3A], [582, 6, 9, 0x3B], [1094, 6, 10, 0x3C], [2118, 7, 11, 0x7D], [-22, 8, 32, 0xFE, 'lower'], [4166, 8, 32, 0xFF], [2, 0x2]];
1549
1838
  break;
1839
+
1550
1840
  case 11:
1551
1841
  lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xC], [5, 4, 1, 0xD], [7, 5, 1, 0x1C], [9, 5, 2, 0x1D], [13, 6, 2, 0x3C], [17, 7, 2, 0x7A], [21, 7, 3, 0x7B], [29, 7, 4, 0x7C], [45, 7, 5, 0x7D], [77, 7, 6, 0x7E], [141, 7, 32, 0x7F]];
1552
1842
  break;
1843
+
1553
1844
  case 12:
1554
1845
  lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1C], [6, 5, 1, 0x1D], [8, 6, 1, 0x3C], [10, 7, 0, 0x7A], [11, 7, 1, 0x7B], [13, 7, 2, 0x7C], [17, 7, 3, 0x7D], [25, 7, 4, 0x7E], [41, 8, 5, 0xFE], [73, 8, 32, 0xFF]];
1555
1846
  break;
1847
+
1556
1848
  case 13:
1557
1849
  lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xC], [4, 5, 0, 0x1C], [5, 4, 1, 0xD], [7, 3, 3, 0x5], [15, 6, 1, 0x3A], [17, 6, 2, 0x3B], [21, 6, 3, 0x3C], [29, 6, 4, 0x3D], [45, 6, 5, 0x3E], [77, 7, 6, 0x7E], [141, 7, 32, 0x7F]];
1558
1850
  break;
1851
+
1559
1852
  case 14:
1560
1853
  lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];
1561
1854
  break;
1855
+
1562
1856
  case 15:
1563
1857
  lines = [[-24, 7, 4, 0x7C], [-8, 6, 2, 0x3C], [-4, 5, 1, 0x1C], [-2, 4, 0, 0xC], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xD], [3, 5, 1, 0x1D], [5, 6, 2, 0x3D], [9, 7, 4, 0x7D], [-25, 7, 32, 0x7E, 'lower'], [25, 7, 32, 0x7F]];
1564
1858
  break;
1859
+
1565
1860
  default:
1566
- throw new Jbig2Error('standard table B.' + number + ' does not exist');
1861
+ throw new Jbig2Error("standard table B.".concat(number, " does not exist"));
1567
1862
  }
1863
+
1568
1864
  var length = lines.length,
1569
- i = void 0;
1865
+ i;
1866
+
1570
1867
  for (i = 0; i < length; i++) {
1571
1868
  lines[i] = new HuffmanLine(lines[i]);
1572
1869
  }
1870
+
1573
1871
  table = new HuffmanTable(lines, true);
1574
1872
  standardTablesCache[number] = table;
1575
1873
  return table;
1576
1874
  }
1875
+
1577
1876
  function Reader(data, start, end) {
1578
1877
  this.data = data;
1579
1878
  this.start = start;
@@ -1582,25 +1881,30 @@ var Jbig2Image = function Jbig2ImageClosure() {
1582
1881
  this.shift = -1;
1583
1882
  this.currentByte = 0;
1584
1883
  }
1884
+
1585
1885
  Reader.prototype = {
1586
1886
  readBit: function readBit() {
1587
1887
  if (this.shift < 0) {
1588
1888
  if (this.position >= this.end) {
1589
1889
  throw new Jbig2Error('end of data while reading bit');
1590
1890
  }
1891
+
1591
1892
  this.currentByte = this.data[this.position++];
1592
1893
  this.shift = 7;
1593
1894
  }
1895
+
1594
1896
  var bit = this.currentByte >> this.shift & 1;
1595
1897
  this.shift--;
1596
1898
  return bit;
1597
1899
  },
1598
1900
  readBits: function readBits(numBits) {
1599
1901
  var result = 0,
1600
- i = void 0;
1902
+ i;
1903
+
1601
1904
  for (i = numBits - 1; i >= 0; i--) {
1602
1905
  result |= this.readBit() << i;
1603
1906
  }
1907
+
1604
1908
  return result;
1605
1909
  },
1606
1910
  byteAlign: function byteAlign() {
@@ -1610,60 +1914,77 @@ var Jbig2Image = function Jbig2ImageClosure() {
1610
1914
  if (this.position >= this.end) {
1611
1915
  return -1;
1612
1916
  }
1917
+
1613
1918
  return this.data[this.position++];
1614
1919
  }
1615
1920
  };
1921
+
1616
1922
  function getCustomHuffmanTable(index, referredTo, customTables) {
1617
1923
  var currentIndex = 0,
1618
- i = void 0,
1924
+ i,
1619
1925
  ii = referredTo.length,
1620
- table = void 0;
1926
+ table;
1927
+
1621
1928
  for (i = 0; i < ii; i++) {
1622
1929
  table = customTables[referredTo[i]];
1930
+
1623
1931
  if (table) {
1624
1932
  if (index === currentIndex) {
1625
1933
  return table;
1626
1934
  }
1935
+
1627
1936
  currentIndex++;
1628
1937
  }
1629
1938
  }
1939
+
1630
1940
  throw new Jbig2Error('can\'t find custom Huffman table');
1631
1941
  }
1942
+
1632
1943
  function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
1633
1944
  var codes = [],
1634
- i = void 0,
1635
- codeLength = void 0;
1945
+ i,
1946
+ codeLength;
1947
+
1636
1948
  for (i = 0; i <= 34; i++) {
1637
1949
  codeLength = reader.readBits(4);
1638
1950
  codes.push(new HuffmanLine([i, codeLength, 0, 0]));
1639
1951
  }
1952
+
1640
1953
  var runCodesTable = new HuffmanTable(codes, false);
1641
1954
  codes.length = 0;
1955
+
1642
1956
  for (i = 0; i < numberOfSymbols;) {
1643
1957
  codeLength = runCodesTable.decode(reader);
1958
+
1644
1959
  if (codeLength >= 32) {
1645
1960
  var repeatedLength = void 0,
1646
1961
  numberOfRepeats = void 0,
1647
1962
  j = void 0;
1963
+
1648
1964
  switch (codeLength) {
1649
1965
  case 32:
1650
1966
  if (i === 0) {
1651
1967
  throw new Jbig2Error('no previous value in symbol ID table');
1652
1968
  }
1969
+
1653
1970
  numberOfRepeats = reader.readBits(2) + 3;
1654
1971
  repeatedLength = codes[i - 1].prefixLength;
1655
1972
  break;
1973
+
1656
1974
  case 33:
1657
1975
  numberOfRepeats = reader.readBits(3) + 3;
1658
1976
  repeatedLength = 0;
1659
1977
  break;
1978
+
1660
1979
  case 34:
1661
1980
  numberOfRepeats = reader.readBits(7) + 11;
1662
1981
  repeatedLength = 0;
1663
1982
  break;
1983
+
1664
1984
  default:
1665
1985
  throw new Jbig2Error('invalid code length in symbol ID table');
1666
1986
  }
1987
+
1667
1988
  for (j = 0; j < numberOfRepeats; j++) {
1668
1989
  codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));
1669
1990
  i++;
@@ -1673,53 +1994,65 @@ var Jbig2Image = function Jbig2ImageClosure() {
1673
1994
  i++;
1674
1995
  }
1675
1996
  }
1997
+
1676
1998
  reader.byteAlign();
1677
1999
  var symbolIDTable = new HuffmanTable(codes, false);
1678
2000
  var customIndex = 0,
1679
- tableFirstS = void 0,
1680
- tableDeltaS = void 0,
1681
- tableDeltaT = void 0;
2001
+ tableFirstS,
2002
+ tableDeltaS,
2003
+ tableDeltaT;
2004
+
1682
2005
  switch (textRegion.huffmanFS) {
1683
2006
  case 0:
1684
2007
  case 1:
1685
2008
  tableFirstS = getStandardTable(textRegion.huffmanFS + 6);
1686
2009
  break;
2010
+
1687
2011
  case 3:
1688
2012
  tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);
1689
2013
  customIndex++;
1690
2014
  break;
2015
+
1691
2016
  default:
1692
2017
  throw new Jbig2Error('invalid Huffman FS selector');
1693
2018
  }
2019
+
1694
2020
  switch (textRegion.huffmanDS) {
1695
2021
  case 0:
1696
2022
  case 1:
1697
2023
  case 2:
1698
2024
  tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);
1699
2025
  break;
2026
+
1700
2027
  case 3:
1701
2028
  tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);
1702
2029
  customIndex++;
1703
2030
  break;
2031
+
1704
2032
  default:
1705
2033
  throw new Jbig2Error('invalid Huffman DS selector');
1706
2034
  }
2035
+
1707
2036
  switch (textRegion.huffmanDT) {
1708
2037
  case 0:
1709
2038
  case 1:
1710
2039
  case 2:
1711
2040
  tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);
1712
2041
  break;
2042
+
1713
2043
  case 3:
1714
2044
  tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);
1715
2045
  customIndex++;
1716
2046
  break;
2047
+
1717
2048
  default:
1718
2049
  throw new Jbig2Error('invalid Huffman DT selector');
1719
2050
  }
2051
+
1720
2052
  if (textRegion.refinement) {
1721
2053
  throw new Jbig2Error('refinement with Huffman is not supported');
1722
2054
  }
2055
+
1723
2056
  return {
1724
2057
  symbolIDTable: symbolIDTable,
1725
2058
  tableFirstS: tableFirstS,
@@ -1727,47 +2060,57 @@ var Jbig2Image = function Jbig2ImageClosure() {
1727
2060
  tableDeltaT: tableDeltaT
1728
2061
  };
1729
2062
  }
2063
+
1730
2064
  function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
1731
2065
  var customIndex = 0,
1732
- tableDeltaHeight = void 0,
1733
- tableDeltaWidth = void 0;
2066
+ tableDeltaHeight,
2067
+ tableDeltaWidth;
2068
+
1734
2069
  switch (dictionary.huffmanDHSelector) {
1735
2070
  case 0:
1736
2071
  case 1:
1737
2072
  tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);
1738
2073
  break;
2074
+
1739
2075
  case 3:
1740
2076
  tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);
1741
2077
  customIndex++;
1742
2078
  break;
2079
+
1743
2080
  default:
1744
2081
  throw new Jbig2Error('invalid Huffman DH selector');
1745
2082
  }
2083
+
1746
2084
  switch (dictionary.huffmanDWSelector) {
1747
2085
  case 0:
1748
2086
  case 1:
1749
2087
  tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);
1750
2088
  break;
2089
+
1751
2090
  case 3:
1752
2091
  tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);
1753
2092
  customIndex++;
1754
2093
  break;
2094
+
1755
2095
  default:
1756
2096
  throw new Jbig2Error('invalid Huffman DW selector');
1757
2097
  }
1758
- var tableBitmapSize = void 0,
1759
- tableAggregateInstances = void 0;
2098
+
2099
+ var tableBitmapSize, tableAggregateInstances;
2100
+
1760
2101
  if (dictionary.bitmapSizeSelector) {
1761
2102
  tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
1762
2103
  customIndex++;
1763
2104
  } else {
1764
2105
  tableBitmapSize = getStandardTable(1);
1765
2106
  }
2107
+
1766
2108
  if (dictionary.aggregationInstancesSelector) {
1767
2109
  tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);
1768
2110
  } else {
1769
2111
  tableAggregateInstances = getStandardTable(1);
1770
2112
  }
2113
+
1771
2114
  return {
1772
2115
  tableDeltaHeight: tableDeltaHeight,
1773
2116
  tableDeltaWidth: tableDeltaWidth,
@@ -1775,21 +2118,27 @@ var Jbig2Image = function Jbig2ImageClosure() {
1775
2118
  tableAggregateInstances: tableAggregateInstances
1776
2119
  };
1777
2120
  }
2121
+
1778
2122
  function readUncompressedBitmap(reader, width, height) {
1779
2123
  var bitmap = [],
1780
- x = void 0,
1781
- y = void 0,
1782
- row = void 0;
2124
+ x,
2125
+ y,
2126
+ row;
2127
+
1783
2128
  for (y = 0; y < height; y++) {
1784
2129
  row = new Uint8Array(width);
1785
2130
  bitmap.push(row);
2131
+
1786
2132
  for (x = 0; x < width; x++) {
1787
2133
  row[x] = reader.readBit();
1788
2134
  }
2135
+
1789
2136
  reader.byteAlign();
1790
2137
  }
2138
+
1791
2139
  return bitmap;
1792
2140
  }
2141
+
1793
2142
  function decodeMMRBitmap(input, width, height, endOfBlock) {
1794
2143
  var params = {
1795
2144
  K: -1,
@@ -1800,40 +2149,50 @@ var Jbig2Image = function Jbig2ImageClosure() {
1800
2149
  };
1801
2150
  var decoder = new _ccitt.CCITTFaxDecoder(input, params);
1802
2151
  var bitmap = [],
1803
- x = void 0,
1804
- y = void 0,
1805
- row = void 0,
1806
- currentByte = void 0,
1807
- shift = void 0,
2152
+ x,
2153
+ y,
2154
+ row,
2155
+ currentByte,
2156
+ shift,
1808
2157
  eof = false;
2158
+
1809
2159
  for (y = 0; y < height; y++) {
1810
2160
  row = new Uint8Array(width);
1811
2161
  bitmap.push(row);
1812
2162
  shift = -1;
2163
+
1813
2164
  for (x = 0; x < width; x++) {
1814
2165
  if (shift < 0) {
1815
2166
  currentByte = decoder.readNextChar();
2167
+
1816
2168
  if (currentByte === -1) {
1817
2169
  currentByte = 0;
1818
2170
  eof = true;
1819
2171
  }
2172
+
1820
2173
  shift = 7;
1821
2174
  }
2175
+
1822
2176
  row[x] = currentByte >> shift & 1;
1823
2177
  shift--;
1824
2178
  }
1825
2179
  }
2180
+
1826
2181
  if (endOfBlock && !eof) {
1827
2182
  var lookForEOFLimit = 5;
2183
+
1828
2184
  for (var i = 0; i < lookForEOFLimit; i++) {
1829
2185
  if (decoder.readNextChar() === -1) {
1830
2186
  break;
1831
2187
  }
1832
2188
  }
1833
2189
  }
2190
+
1834
2191
  return bitmap;
1835
2192
  }
2193
+
1836
2194
  function Jbig2Image() {}
2195
+
1837
2196
  Jbig2Image.prototype = {
1838
2197
  parseChunks: function parseChunks(chunks) {
1839
2198
  return parseJbig2Chunks(chunks);
@@ -1851,4 +2210,5 @@ var Jbig2Image = function Jbig2ImageClosure() {
1851
2210
  };
1852
2211
  return Jbig2Image;
1853
2212
  }();
2213
+
1854
2214
  exports.Jbig2Image = Jbig2Image;