pdfjs-dist 2.3.200 → 2.4.456
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +6499 -17971
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +19303 -29896
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25473 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +57878 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +407 -0
- package/es5/web/pdf_viewer.js +7757 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1333 -4839
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +683 -1066
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +196 -193
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +441 -569
- package/lib/core/cmap.js +220 -279
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +59 -80
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +564 -673
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +983 -889
- package/lib/core/font_renderer.js +128 -171
- package/lib/core/fonts.js +451 -400
- package/lib/core/function.js +289 -285
- package/lib/core/glyphlist.js +4527 -4527
- package/lib/core/image.js +138 -117
- package/lib/core/image_utils.js +46 -63
- package/lib/core/jbig2.js +324 -332
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +133 -24
- package/lib/core/jpg.js +238 -210
- package/lib/core/jpx.js +158 -157
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2928 -2928
- package/lib/core/murmurhash3.js +87 -102
- package/lib/core/obj.js +1111 -1302
- package/lib/core/operator_list.js +55 -42
- package/lib/core/parser.js +956 -987
- package/lib/core/pattern.js +69 -69
- package/lib/core/pdf_manager.js +149 -316
- package/lib/core/primitives.js +45 -77
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +83 -77
- package/lib/core/type1_parser.js +78 -68
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +148 -196
- package/lib/core/worker_stream.js +101 -210
- package/lib/display/annotation_layer.js +733 -1155
- package/lib/display/api.js +1539 -1928
- package/lib/display/api_compatibility.js +10 -8
- package/lib/display/canvas.js +159 -158
- package/lib/display/content_disposition.js +36 -55
- package/lib/display/display_utils.js +298 -551
- package/lib/display/fetch_stream.js +181 -305
- package/lib/display/font_loader.js +273 -416
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +376 -511
- package/lib/display/network_utils.js +20 -19
- package/lib/display/node_stream.js +276 -460
- package/lib/display/pattern_helper.js +76 -44
- package/lib/display/svg.js +1137 -1405
- package/lib/display/text_layer.js +75 -82
- package/lib/display/transport_stream.js +236 -374
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +37 -37
- package/lib/pdf.js +22 -21
- package/lib/pdf.worker.js +5 -5
- package/lib/shared/compatibility.js +2 -251
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +222 -194
- package/lib/shared/util.js +269 -405
- package/lib/test/unit/annotation_spec.js +1089 -1014
- package/lib/test/unit/api_spec.js +617 -544
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +63 -62
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +84 -86
- package/lib/test/unit/colorspace_spec.js +154 -154
- package/lib/test/unit/core_utils_spec.js +125 -105
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +22 -24
- package/lib/test/unit/display_svg_spec.js +35 -36
- package/lib/test/unit/display_utils_spec.js +139 -149
- package/lib/test/unit/document_spec.js +16 -16
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +81 -95
- package/lib/test/unit/fetch_stream_spec.js +30 -30
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +48 -32
- package/lib/test/unit/message_handler_spec.js +172 -162
- package/lib/test/unit/metadata_spec.js +69 -69
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +12 -12
- package/lib/test/unit/network_utils_spec.js +152 -152
- package/lib/test/unit/node_stream_spec.js +74 -90
- package/lib/test/unit/parser_spec.js +107 -113
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +117 -115
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +119 -285
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +41 -41
- package/lib/test/unit/ui_utils_spec.js +318 -426
- package/lib/test/unit/unicode_spec.js +42 -42
- package/lib/test/unit/util_spec.js +122 -143
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1166 -1196
- package/lib/web/app_options.js +61 -77
- package/lib/web/base_viewer.js +804 -850
- package/lib/web/chromecom.js +164 -249
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +38 -57
- package/lib/web/firefox_print_service.js +35 -30
- package/lib/web/firefoxcom.js +175 -374
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +30 -30
- package/lib/web/interfaces.js +80 -258
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +105 -130
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +227 -376
- package/lib/web/pdf_find_bar.js +137 -171
- package/lib/web/pdf_find_controller.js +492 -549
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +395 -406
- package/lib/web/pdf_link_service.js +302 -349
- package/lib/web/pdf_outline_viewer.js +148 -209
- package/lib/web/pdf_page_view.js +449 -507
- package/lib/web/pdf_presentation_mode.js +304 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +87 -108
- package/lib/web/pdf_sidebar.js +264 -304
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +276 -297
- package/lib/web/pdf_thumbnail_viewer.js +186 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +66 -273
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +284 -317
- package/lib/web/toolbar.js +216 -211
- package/lib/web/ui_utils.js +303 -404
- package/lib/web/view_history.js +49 -222
- package/lib/web/viewer_compatibility.js +7 -5
- package/package.json +2 -9
- package/web/pdf_viewer.css +25 -18
- package/web/pdf_viewer.js +3481 -4764
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/lib/shared/streams_polyfill.js +0 -43
package/lib/core/jbig2.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -26,51 +26,33 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
26
|
});
|
27
27
|
exports.Jbig2Image = void 0;
|
28
28
|
|
29
|
-
var _util = require("../shared/util");
|
29
|
+
var _util = require("../shared/util.js");
|
30
30
|
|
31
|
-
var
|
31
|
+
var _core_utils = require("./core_utils.js");
|
32
32
|
|
33
|
-
var
|
33
|
+
var _arithmetic_decoder = require("./arithmetic_decoder.js");
|
34
34
|
|
35
|
-
|
35
|
+
var _ccitt = require("./ccitt.js");
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
42
|
-
|
43
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
44
|
-
|
45
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
46
|
-
|
47
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
48
|
-
|
49
|
-
var Jbig2Error =
|
50
|
-
/*#__PURE__*/
|
51
|
-
function (_BaseException) {
|
52
|
-
_inherits(Jbig2Error, _BaseException);
|
53
|
-
|
54
|
-
function Jbig2Error(msg) {
|
55
|
-
_classCallCheck(this, Jbig2Error);
|
56
|
-
|
57
|
-
return _possibleConstructorReturn(this, _getPrototypeOf(Jbig2Error).call(this, "JBIG2 error: ".concat(msg)));
|
37
|
+
class Jbig2Error extends _util.BaseException {
|
38
|
+
constructor(msg) {
|
39
|
+
super(`JBIG2 error: ${msg}`);
|
58
40
|
}
|
59
41
|
|
60
|
-
|
61
|
-
}(_util.BaseException);
|
42
|
+
}
|
62
43
|
|
63
44
|
var Jbig2Image = function Jbig2ImageClosure() {
|
64
45
|
function ContextCache() {}
|
65
46
|
|
66
47
|
ContextCache.prototype = {
|
67
|
-
getContexts
|
48
|
+
getContexts(id) {
|
68
49
|
if (id in this) {
|
69
50
|
return this[id];
|
70
51
|
}
|
71
52
|
|
72
53
|
return this[id] = new Int8Array(1 << 16);
|
73
54
|
}
|
55
|
+
|
74
56
|
};
|
75
57
|
|
76
58
|
function DecodingContext(data, start, end) {
|
@@ -82,12 +64,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
82
64
|
DecodingContext.prototype = {
|
83
65
|
get decoder() {
|
84
66
|
var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
|
85
|
-
return (0, _util.shadow)(this,
|
67
|
+
return (0, _util.shadow)(this, "decoder", decoder);
|
86
68
|
},
|
87
69
|
|
88
70
|
get contextCache() {
|
89
71
|
var cache = new ContextCache();
|
90
|
-
return (0, _util.shadow)(this,
|
72
|
+
return (0, _util.shadow)(this, "contextCache", cache);
|
91
73
|
}
|
92
74
|
|
93
75
|
};
|
@@ -110,11 +92,18 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
110
92
|
|
111
93
|
var sign = readBits(1);
|
112
94
|
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);
|
113
|
-
|
95
|
+
|
96
|
+
if (sign === 0) {
|
97
|
+
return value;
|
98
|
+
} else if (value > 0) {
|
99
|
+
return -value;
|
100
|
+
}
|
101
|
+
|
102
|
+
return null;
|
114
103
|
}
|
115
104
|
|
116
105
|
function decodeIAID(contextCache, decoder, codeLength) {
|
117
|
-
var contexts = contextCache.getContexts(
|
106
|
+
var contexts = contextCache.getContexts("IAID");
|
118
107
|
var prev = 1;
|
119
108
|
|
120
109
|
for (var i = 0; i < codeLength; i++) {
|
@@ -126,10 +115,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
126
115
|
return prev & (1 << codeLength) - 1;
|
127
116
|
}
|
128
117
|
|
129
|
-
return prev &
|
118
|
+
return prev & 0x7fffffff;
|
130
119
|
}
|
131
120
|
|
132
|
-
var SegmentTypes = [
|
121
|
+
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"];
|
133
122
|
var CodingTemplates = [[{
|
134
123
|
x: -1,
|
135
124
|
y: -2
|
@@ -327,12 +316,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
327
316
|
y: 1
|
328
317
|
}]
|
329
318
|
}];
|
330
|
-
var ReusedContexts = [
|
319
|
+
var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
|
331
320
|
var RefinementReusedContexts = [0x0020, 0x0008];
|
332
321
|
|
333
322
|
function decodeBitmapTemplate0(width, height, decodingContext) {
|
334
323
|
var decoder = decodingContext.decoder;
|
335
|
-
var contexts = decodingContext.contextCache.getContexts(
|
324
|
+
var contexts = decodingContext.contextCache.getContexts("GB");
|
336
325
|
var contextLabel,
|
337
326
|
i,
|
338
327
|
j,
|
@@ -341,7 +330,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
341
330
|
row1,
|
342
331
|
row2,
|
343
332
|
bitmap = [];
|
344
|
-
var OLD_PIXEL_MASK =
|
333
|
+
var OLD_PIXEL_MASK = 0x7bf7;
|
345
334
|
|
346
335
|
for (i = 0; i < height; i++) {
|
347
336
|
row = bitmap[i] = new Uint8Array(width);
|
@@ -360,7 +349,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
360
349
|
|
361
350
|
function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
|
362
351
|
if (mmr) {
|
363
|
-
|
352
|
+
const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
|
364
353
|
return decodeMMRBitmap(input, width, height, false);
|
365
354
|
}
|
366
355
|
|
@@ -416,7 +405,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
416
405
|
var row = new Uint8Array(width);
|
417
406
|
var bitmap = [];
|
418
407
|
var decoder = decodingContext.decoder;
|
419
|
-
var contexts = decodingContext.contextCache.getContexts(
|
408
|
+
var contexts = decodingContext.contextCache.getContexts("GB");
|
420
409
|
var ltp = 0,
|
421
410
|
j,
|
422
411
|
i0,
|
@@ -524,7 +513,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
524
513
|
var pseudoPixelContext = RefinementReusedContexts[templateIndex];
|
525
514
|
var bitmap = [];
|
526
515
|
var decoder = decodingContext.decoder;
|
527
|
-
var contexts = decodingContext.contextCache.getContexts(
|
516
|
+
var contexts = decodingContext.contextCache.getContexts("GR");
|
528
517
|
var ltp = 0;
|
529
518
|
|
530
519
|
for (var i = 0; i < height; i++) {
|
@@ -533,7 +522,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
533
522
|
ltp ^= sltp;
|
534
523
|
|
535
524
|
if (ltp) {
|
536
|
-
throw new Jbig2Error(
|
525
|
+
throw new Jbig2Error("prediction is not supported");
|
537
526
|
}
|
538
527
|
}
|
539
528
|
|
@@ -576,15 +565,15 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
576
565
|
|
577
566
|
function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
|
578
567
|
if (huffman && refinement) {
|
579
|
-
throw new Jbig2Error(
|
568
|
+
throw new Jbig2Error("symbol refinement with Huffman is not supported");
|
580
569
|
}
|
581
570
|
|
582
571
|
var newSymbols = [];
|
583
572
|
var currentHeight = 0;
|
584
|
-
var symbolCodeLength = (0,
|
573
|
+
var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
|
585
574
|
var decoder = decodingContext.decoder;
|
586
575
|
var contextCache = decodingContext.contextCache;
|
587
|
-
|
576
|
+
let tableB1, symbolWidths;
|
588
577
|
|
589
578
|
if (huffman) {
|
590
579
|
tableB1 = getStandardTable(1);
|
@@ -593,14 +582,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
593
582
|
}
|
594
583
|
|
595
584
|
while (newSymbols.length < numberOfNewSymbols) {
|
596
|
-
var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache,
|
585
|
+
var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
|
597
586
|
currentHeight += deltaHeight;
|
598
|
-
|
587
|
+
let currentWidth = 0,
|
599
588
|
totalWidth = 0;
|
600
|
-
|
589
|
+
const firstSymbol = huffman ? symbolWidths.length : 0;
|
601
590
|
|
602
591
|
while (true) {
|
603
|
-
var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache,
|
592
|
+
var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
|
604
593
|
|
605
594
|
if (deltaWidth === null) {
|
606
595
|
break;
|
@@ -611,14 +600,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
611
600
|
var bitmap;
|
612
601
|
|
613
602
|
if (refinement) {
|
614
|
-
var numberOfInstances = decodeInteger(contextCache,
|
603
|
+
var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
|
615
604
|
|
616
605
|
if (numberOfInstances > 1) {
|
617
606
|
bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
|
618
607
|
} else {
|
619
608
|
var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
|
620
|
-
var rdx = decodeInteger(contextCache,
|
621
|
-
var rdy = decodeInteger(contextCache,
|
609
|
+
var rdx = decodeInteger(contextCache, "IARDX", decoder);
|
610
|
+
var rdy = decodeInteger(contextCache, "IARDY", decoder);
|
622
611
|
var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
|
623
612
|
bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
|
624
613
|
}
|
@@ -633,35 +622,35 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
633
622
|
}
|
634
623
|
|
635
624
|
if (huffman && !refinement) {
|
636
|
-
|
625
|
+
const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
|
637
626
|
huffmanInput.byteAlign();
|
638
|
-
|
627
|
+
let collectiveBitmap;
|
639
628
|
|
640
629
|
if (bitmapSize === 0) {
|
641
630
|
collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
|
642
631
|
} else {
|
643
|
-
|
644
|
-
|
632
|
+
const originalEnd = huffmanInput.end;
|
633
|
+
const bitmapEnd = huffmanInput.position + bitmapSize;
|
645
634
|
huffmanInput.end = bitmapEnd;
|
646
635
|
collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
|
647
636
|
huffmanInput.end = originalEnd;
|
648
637
|
huffmanInput.position = bitmapEnd;
|
649
638
|
}
|
650
639
|
|
651
|
-
|
640
|
+
const numberOfSymbolsDecoded = symbolWidths.length;
|
652
641
|
|
653
642
|
if (firstSymbol === numberOfSymbolsDecoded - 1) {
|
654
643
|
newSymbols.push(collectiveBitmap);
|
655
644
|
} else {
|
656
|
-
|
657
|
-
y
|
645
|
+
let i,
|
646
|
+
y,
|
658
647
|
xMin = 0,
|
659
|
-
xMax
|
660
|
-
bitmapWidth
|
661
|
-
symbolBitmap
|
648
|
+
xMax,
|
649
|
+
bitmapWidth,
|
650
|
+
symbolBitmap;
|
662
651
|
|
663
|
-
for (
|
664
|
-
bitmapWidth = symbolWidths[
|
652
|
+
for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
|
653
|
+
bitmapWidth = symbolWidths[i];
|
665
654
|
xMax = xMin + bitmapWidth;
|
666
655
|
symbolBitmap = [];
|
667
656
|
|
@@ -682,7 +671,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
682
671
|
var totalSymbolsLength = symbols.length + numberOfNewSymbols;
|
683
672
|
|
684
673
|
while (flags.length < totalSymbolsLength) {
|
685
|
-
var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache,
|
674
|
+
var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
|
686
675
|
|
687
676
|
while (runLength--) {
|
688
677
|
flags.push(currentFlag);
|
@@ -708,7 +697,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
708
697
|
|
709
698
|
function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
|
710
699
|
if (huffman && refinement) {
|
711
|
-
throw new Jbig2Error(
|
700
|
+
throw new Jbig2Error("refinement with Huffman is not supported");
|
712
701
|
}
|
713
702
|
|
714
703
|
var bitmap = [];
|
@@ -728,36 +717,36 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
728
717
|
|
729
718
|
var decoder = decodingContext.decoder;
|
730
719
|
var contextCache = decodingContext.contextCache;
|
731
|
-
var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache,
|
720
|
+
var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
|
732
721
|
var firstS = 0;
|
733
722
|
i = 0;
|
734
723
|
|
735
724
|
while (i < numberOfSymbolInstances) {
|
736
|
-
var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache,
|
725
|
+
var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
|
737
726
|
stripT += deltaT;
|
738
|
-
var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache,
|
727
|
+
var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
|
739
728
|
firstS += deltaFirstS;
|
740
729
|
var currentS = firstS;
|
741
730
|
|
742
731
|
do {
|
743
|
-
|
732
|
+
let currentT = 0;
|
744
733
|
|
745
734
|
if (stripSize > 1) {
|
746
|
-
currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache,
|
735
|
+
currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
|
747
736
|
}
|
748
737
|
|
749
738
|
var t = stripSize * stripT + currentT;
|
750
739
|
var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
|
751
|
-
var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache,
|
740
|
+
var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
|
752
741
|
var symbolBitmap = inputSymbols[symbolId];
|
753
742
|
var symbolWidth = symbolBitmap[0].length;
|
754
743
|
var symbolHeight = symbolBitmap.length;
|
755
744
|
|
756
745
|
if (applyRefinement) {
|
757
|
-
var rdw = decodeInteger(contextCache,
|
758
|
-
var rdh = decodeInteger(contextCache,
|
759
|
-
var rdx = decodeInteger(contextCache,
|
760
|
-
var rdy = decodeInteger(contextCache,
|
746
|
+
var rdw = decodeInteger(contextCache, "IARDW", decoder);
|
747
|
+
var rdh = decodeInteger(contextCache, "IARDH", decoder);
|
748
|
+
var rdx = decodeInteger(contextCache, "IARDX", decoder);
|
749
|
+
var rdy = decodeInteger(contextCache, "IARDY", decoder);
|
761
750
|
symbolWidth += rdw;
|
762
751
|
symbolHeight += rdh;
|
763
752
|
symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
|
@@ -794,7 +783,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
794
783
|
break;
|
795
784
|
|
796
785
|
default:
|
797
|
-
throw new Jbig2Error(
|
786
|
+
throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
|
798
787
|
}
|
799
788
|
}
|
800
789
|
|
@@ -825,7 +814,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
825
814
|
break;
|
826
815
|
|
827
816
|
default:
|
828
|
-
throw new Jbig2Error(
|
817
|
+
throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
|
829
818
|
}
|
830
819
|
}
|
831
820
|
|
@@ -833,7 +822,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
833
822
|
}
|
834
823
|
|
835
824
|
i++;
|
836
|
-
var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache,
|
825
|
+
var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
|
837
826
|
|
838
827
|
if (deltaS === null) {
|
839
828
|
break;
|
@@ -847,7 +836,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
847
836
|
}
|
848
837
|
|
849
838
|
function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
|
850
|
-
|
839
|
+
const at = [];
|
851
840
|
|
852
841
|
if (!mmr) {
|
853
842
|
at.push({
|
@@ -871,44 +860,38 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
871
860
|
}
|
872
861
|
}
|
873
862
|
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
i = 0,
|
878
|
-
patternBitmap,
|
879
|
-
xMin,
|
880
|
-
xMax,
|
881
|
-
y;
|
863
|
+
const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
|
864
|
+
const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
|
865
|
+
const patterns = [];
|
882
866
|
|
883
|
-
|
884
|
-
patternBitmap = [];
|
885
|
-
xMin = patternWidth * i;
|
886
|
-
xMax = xMin + patternWidth;
|
867
|
+
for (let i = 0; i <= maxPatternIndex; i++) {
|
868
|
+
const patternBitmap = [];
|
869
|
+
const xMin = patternWidth * i;
|
870
|
+
const xMax = xMin + patternWidth;
|
887
871
|
|
888
|
-
for (y = 0; y < patternHeight; y++) {
|
872
|
+
for (let y = 0; y < patternHeight; y++) {
|
889
873
|
patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
|
890
874
|
}
|
891
875
|
|
892
876
|
patterns.push(patternBitmap);
|
893
|
-
i++;
|
894
877
|
}
|
895
878
|
|
896
879
|
return patterns;
|
897
880
|
}
|
898
881
|
|
899
882
|
function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
|
900
|
-
|
883
|
+
const skip = null;
|
901
884
|
|
902
885
|
if (enableSkip) {
|
903
|
-
throw new Jbig2Error(
|
886
|
+
throw new Jbig2Error("skip is not supported");
|
904
887
|
}
|
905
888
|
|
906
889
|
if (combinationOperator !== 0) {
|
907
|
-
throw new Jbig2Error(
|
890
|
+
throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region");
|
908
891
|
}
|
909
892
|
|
910
|
-
|
911
|
-
|
893
|
+
const regionBitmap = [];
|
894
|
+
let i, j, row;
|
912
895
|
|
913
896
|
for (i = 0; i < regionHeight; i++) {
|
914
897
|
row = new Uint8Array(regionWidth);
|
@@ -922,12 +905,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
922
905
|
regionBitmap.push(row);
|
923
906
|
}
|
924
907
|
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
908
|
+
const numberOfPatterns = patterns.length;
|
909
|
+
const pattern0 = patterns[0];
|
910
|
+
const patternWidth = pattern0[0].length,
|
911
|
+
patternHeight = pattern0.length;
|
912
|
+
const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);
|
913
|
+
const at = [];
|
931
914
|
|
932
915
|
if (!mmr) {
|
933
916
|
at.push({
|
@@ -951,9 +934,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
951
934
|
}
|
952
935
|
}
|
953
936
|
|
954
|
-
|
955
|
-
|
956
|
-
bitmap;
|
937
|
+
const grayScaleBitPlanes = [];
|
938
|
+
let mmrInput, bitmap;
|
957
939
|
|
958
940
|
if (mmr) {
|
959
941
|
mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
|
@@ -969,7 +951,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
969
951
|
grayScaleBitPlanes[i] = bitmap;
|
970
952
|
}
|
971
953
|
|
972
|
-
|
954
|
+
let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
|
973
955
|
|
974
956
|
for (mg = 0; mg < gridHeight; mg++) {
|
975
957
|
for (ng = 0; ng < gridWidth; ng++) {
|
@@ -995,8 +977,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
995
977
|
}
|
996
978
|
}
|
997
979
|
} else {
|
998
|
-
|
999
|
-
regionY = void 0;
|
980
|
+
let regionX, regionY;
|
1000
981
|
|
1001
982
|
for (i = 0; i < patternHeight; i++) {
|
1002
983
|
regionY = y + i;
|
@@ -1025,12 +1006,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1025
1006
|
|
1026
1007
|
function readSegmentHeader(data, start) {
|
1027
1008
|
var segmentHeader = {};
|
1028
|
-
segmentHeader.number = (0,
|
1009
|
+
segmentHeader.number = (0, _core_utils.readUint32)(data, start);
|
1029
1010
|
var flags = data[start + 4];
|
1030
|
-
var segmentType = flags &
|
1011
|
+
var segmentType = flags & 0x3f;
|
1031
1012
|
|
1032
1013
|
if (!SegmentTypes[segmentType]) {
|
1033
|
-
throw new Jbig2Error(
|
1014
|
+
throw new Jbig2Error("invalid segment type: " + segmentType);
|
1034
1015
|
}
|
1035
1016
|
|
1036
1017
|
segmentHeader.type = segmentType;
|
@@ -1043,7 +1024,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1043
1024
|
var position = start + 6;
|
1044
1025
|
|
1045
1026
|
if (referredFlags === 7) {
|
1046
|
-
referredToCount = (0,
|
1027
|
+
referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
|
1047
1028
|
position += 3;
|
1048
1029
|
var bytes = referredToCount + 7 >> 3;
|
1049
1030
|
retainBits[0] = data[position++];
|
@@ -1052,16 +1033,32 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1052
1033
|
retainBits.push(data[position++]);
|
1053
1034
|
}
|
1054
1035
|
} else if (referredFlags === 5 || referredFlags === 6) {
|
1055
|
-
throw new Jbig2Error(
|
1036
|
+
throw new Jbig2Error("invalid referred-to flags");
|
1056
1037
|
}
|
1057
1038
|
|
1058
1039
|
segmentHeader.retainBits = retainBits;
|
1059
|
-
|
1040
|
+
let referredToSegmentNumberSize = 4;
|
1041
|
+
|
1042
|
+
if (segmentHeader.number <= 256) {
|
1043
|
+
referredToSegmentNumberSize = 1;
|
1044
|
+
} else if (segmentHeader.number <= 65536) {
|
1045
|
+
referredToSegmentNumberSize = 2;
|
1046
|
+
}
|
1047
|
+
|
1060
1048
|
var referredTo = [];
|
1061
1049
|
var i, ii;
|
1062
1050
|
|
1063
1051
|
for (i = 0; i < referredToCount; i++) {
|
1064
|
-
|
1052
|
+
let number;
|
1053
|
+
|
1054
|
+
if (referredToSegmentNumberSize === 1) {
|
1055
|
+
number = data[position];
|
1056
|
+
} else if (referredToSegmentNumberSize === 2) {
|
1057
|
+
number = (0, _core_utils.readUint16)(data, position);
|
1058
|
+
} else {
|
1059
|
+
number = (0, _core_utils.readUint32)(data, position);
|
1060
|
+
}
|
1061
|
+
|
1065
1062
|
referredTo.push(number);
|
1066
1063
|
position += referredToSegmentNumberSize;
|
1067
1064
|
}
|
@@ -1071,14 +1068,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1071
1068
|
if (!pageAssociationFieldSize) {
|
1072
1069
|
segmentHeader.pageAssociation = data[position++];
|
1073
1070
|
} else {
|
1074
|
-
segmentHeader.pageAssociation = (0,
|
1071
|
+
segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
|
1075
1072
|
position += 4;
|
1076
1073
|
}
|
1077
1074
|
|
1078
|
-
segmentHeader.length = (0,
|
1075
|
+
segmentHeader.length = (0, _core_utils.readUint32)(data, position);
|
1079
1076
|
position += 4;
|
1080
1077
|
|
1081
|
-
if (segmentHeader.length ===
|
1078
|
+
if (segmentHeader.length === 0xffffffff) {
|
1082
1079
|
if (segmentType === 38) {
|
1083
1080
|
var genericRegionInfo = readRegionSegmentInformation(data, position);
|
1084
1081
|
var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
|
@@ -1087,14 +1084,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1087
1084
|
var searchPattern = new Uint8Array(searchPatternLength);
|
1088
1085
|
|
1089
1086
|
if (!genericRegionMmr) {
|
1090
|
-
searchPattern[0] =
|
1091
|
-
searchPattern[1] =
|
1087
|
+
searchPattern[0] = 0xff;
|
1088
|
+
searchPattern[1] = 0xac;
|
1092
1089
|
}
|
1093
1090
|
|
1094
|
-
searchPattern[2] = genericRegionInfo.height >>> 24 &
|
1095
|
-
searchPattern[3] = genericRegionInfo.height >> 16 &
|
1096
|
-
searchPattern[4] = genericRegionInfo.height >> 8 &
|
1097
|
-
searchPattern[5] = genericRegionInfo.height &
|
1091
|
+
searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;
|
1092
|
+
searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;
|
1093
|
+
searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;
|
1094
|
+
searchPattern[5] = genericRegionInfo.height & 0xff;
|
1098
1095
|
|
1099
1096
|
for (i = position, ii = data.length; i < ii; i++) {
|
1100
1097
|
var j = 0;
|
@@ -1109,11 +1106,11 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1109
1106
|
}
|
1110
1107
|
}
|
1111
1108
|
|
1112
|
-
if (segmentHeader.length ===
|
1113
|
-
throw new Jbig2Error(
|
1109
|
+
if (segmentHeader.length === 0xffffffff) {
|
1110
|
+
throw new Jbig2Error("segment end was not found");
|
1114
1111
|
}
|
1115
1112
|
} else {
|
1116
|
-
throw new Jbig2Error(
|
1113
|
+
throw new Jbig2Error("invalid unknown segment length");
|
1117
1114
|
}
|
1118
1115
|
}
|
1119
1116
|
|
@@ -1130,7 +1127,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1130
1127
|
position = segmentHeader.headerEnd;
|
1131
1128
|
var segment = {
|
1132
1129
|
header: segmentHeader,
|
1133
|
-
data
|
1130
|
+
data
|
1134
1131
|
};
|
1135
1132
|
|
1136
1133
|
if (!header.randomAccess) {
|
@@ -1159,10 +1156,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1159
1156
|
|
1160
1157
|
function readRegionSegmentInformation(data, start) {
|
1161
1158
|
return {
|
1162
|
-
width: (0,
|
1163
|
-
height: (0,
|
1164
|
-
x: (0,
|
1165
|
-
y: (0,
|
1159
|
+
width: (0, _core_utils.readUint32)(data, start),
|
1160
|
+
height: (0, _core_utils.readUint32)(data, start + 4),
|
1161
|
+
x: (0, _core_utils.readUint32)(data, start + 8),
|
1162
|
+
y: (0, _core_utils.readUint32)(data, start + 12),
|
1166
1163
|
combinationOperator: data[start + 16] & 7
|
1167
1164
|
};
|
1168
1165
|
}
|
@@ -1179,7 +1176,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1179
1176
|
switch (header.type) {
|
1180
1177
|
case 0:
|
1181
1178
|
var dictionary = {};
|
1182
|
-
var dictionaryFlags = (0,
|
1179
|
+
var dictionaryFlags = (0, _core_utils.readUint16)(data, position);
|
1183
1180
|
dictionary.huffman = !!(dictionaryFlags & 1);
|
1184
1181
|
dictionary.refinement = !!(dictionaryFlags & 2);
|
1185
1182
|
dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
|
@@ -1198,8 +1195,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1198
1195
|
|
1199
1196
|
for (i = 0; i < atLength; i++) {
|
1200
1197
|
at.push({
|
1201
|
-
x: (0,
|
1202
|
-
y: (0,
|
1198
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1199
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1203
1200
|
});
|
1204
1201
|
position += 2;
|
1205
1202
|
}
|
@@ -1212,8 +1209,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1212
1209
|
|
1213
1210
|
for (i = 0; i < 2; i++) {
|
1214
1211
|
at.push({
|
1215
|
-
x: (0,
|
1216
|
-
y: (0,
|
1212
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1213
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1217
1214
|
});
|
1218
1215
|
position += 2;
|
1219
1216
|
}
|
@@ -1221,9 +1218,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1221
1218
|
dictionary.refinementAt = at;
|
1222
1219
|
}
|
1223
1220
|
|
1224
|
-
dictionary.numberOfExportedSymbols = (0,
|
1221
|
+
dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
|
1225
1222
|
position += 4;
|
1226
|
-
dictionary.numberOfNewSymbols = (0,
|
1223
|
+
dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
|
1227
1224
|
position += 4;
|
1228
1225
|
args = [dictionary, header.number, header.referredTo, data, position, end];
|
1229
1226
|
break;
|
@@ -1233,7 +1230,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1233
1230
|
var textRegion = {};
|
1234
1231
|
textRegion.info = readRegionSegmentInformation(data, position);
|
1235
1232
|
position += RegionSegmentInformationFieldLength;
|
1236
|
-
var textRegionSegmentFlags = (0,
|
1233
|
+
var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
|
1237
1234
|
position += 2;
|
1238
1235
|
textRegion.huffman = !!(textRegionSegmentFlags & 1);
|
1239
1236
|
textRegion.refinement = !!(textRegionSegmentFlags & 2);
|
@@ -1247,7 +1244,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1247
1244
|
textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
|
1248
1245
|
|
1249
1246
|
if (textRegion.huffman) {
|
1250
|
-
var textRegionHuffmanFlags = (0,
|
1247
|
+
var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
|
1251
1248
|
position += 2;
|
1252
1249
|
textRegion.huffmanFS = textRegionHuffmanFlags & 3;
|
1253
1250
|
textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
|
@@ -1264,8 +1261,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1264
1261
|
|
1265
1262
|
for (i = 0; i < 2; i++) {
|
1266
1263
|
at.push({
|
1267
|
-
x: (0,
|
1268
|
-
y: (0,
|
1264
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1265
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1269
1266
|
});
|
1270
1267
|
position += 2;
|
1271
1268
|
}
|
@@ -1273,45 +1270,45 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1273
1270
|
textRegion.refinementAt = at;
|
1274
1271
|
}
|
1275
1272
|
|
1276
|
-
textRegion.numberOfSymbolInstances = (0,
|
1273
|
+
textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
|
1277
1274
|
position += 4;
|
1278
1275
|
args = [textRegion, header.referredTo, data, position, end];
|
1279
1276
|
break;
|
1280
1277
|
|
1281
1278
|
case 16:
|
1282
|
-
|
1283
|
-
|
1279
|
+
const patternDictionary = {};
|
1280
|
+
const patternDictionaryFlags = data[position++];
|
1284
1281
|
patternDictionary.mmr = !!(patternDictionaryFlags & 1);
|
1285
1282
|
patternDictionary.template = patternDictionaryFlags >> 1 & 3;
|
1286
1283
|
patternDictionary.patternWidth = data[position++];
|
1287
1284
|
patternDictionary.patternHeight = data[position++];
|
1288
|
-
patternDictionary.maxPatternIndex = (0,
|
1285
|
+
patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
|
1289
1286
|
position += 4;
|
1290
1287
|
args = [patternDictionary, header.number, data, position, end];
|
1291
1288
|
break;
|
1292
1289
|
|
1293
1290
|
case 22:
|
1294
1291
|
case 23:
|
1295
|
-
|
1292
|
+
const halftoneRegion = {};
|
1296
1293
|
halftoneRegion.info = readRegionSegmentInformation(data, position);
|
1297
1294
|
position += RegionSegmentInformationFieldLength;
|
1298
|
-
|
1295
|
+
const halftoneRegionFlags = data[position++];
|
1299
1296
|
halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
|
1300
1297
|
halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
|
1301
1298
|
halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
|
1302
1299
|
halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
|
1303
1300
|
halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
|
1304
|
-
halftoneRegion.gridWidth = (0,
|
1301
|
+
halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
|
1305
1302
|
position += 4;
|
1306
|
-
halftoneRegion.gridHeight = (0,
|
1303
|
+
halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
|
1307
1304
|
position += 4;
|
1308
|
-
halftoneRegion.gridOffsetX = (0,
|
1305
|
+
halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
|
1309
1306
|
position += 4;
|
1310
|
-
halftoneRegion.gridOffsetY = (0,
|
1307
|
+
halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
|
1311
1308
|
position += 4;
|
1312
|
-
halftoneRegion.gridVectorX = (0,
|
1309
|
+
halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
|
1313
1310
|
position += 2;
|
1314
|
-
halftoneRegion.gridVectorY = (0,
|
1311
|
+
halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
|
1315
1312
|
position += 2;
|
1316
1313
|
args = [halftoneRegion, header.referredTo, data, position, end];
|
1317
1314
|
break;
|
@@ -1332,8 +1329,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1332
1329
|
|
1333
1330
|
for (i = 0; i < atLength; i++) {
|
1334
1331
|
at.push({
|
1335
|
-
x: (0,
|
1336
|
-
y: (0,
|
1332
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1333
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1337
1334
|
});
|
1338
1335
|
position += 2;
|
1339
1336
|
}
|
@@ -1346,18 +1343,18 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1346
1343
|
|
1347
1344
|
case 48:
|
1348
1345
|
var pageInfo = {
|
1349
|
-
width: (0,
|
1350
|
-
height: (0,
|
1351
|
-
resolutionX: (0,
|
1352
|
-
resolutionY: (0,
|
1346
|
+
width: (0, _core_utils.readUint32)(data, position),
|
1347
|
+
height: (0, _core_utils.readUint32)(data, position + 4),
|
1348
|
+
resolutionX: (0, _core_utils.readUint32)(data, position + 8),
|
1349
|
+
resolutionY: (0, _core_utils.readUint32)(data, position + 12)
|
1353
1350
|
};
|
1354
1351
|
|
1355
|
-
if (pageInfo.height ===
|
1352
|
+
if (pageInfo.height === 0xffffffff) {
|
1356
1353
|
delete pageInfo.height;
|
1357
1354
|
}
|
1358
1355
|
|
1359
1356
|
var pageSegmentFlags = data[position + 16];
|
1360
|
-
(0,
|
1357
|
+
(0, _core_utils.readUint16)(data, position + 17);
|
1361
1358
|
pageInfo.lossless = !!(pageSegmentFlags & 1);
|
1362
1359
|
pageInfo.refinement = !!(pageSegmentFlags & 2);
|
1363
1360
|
pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
|
@@ -1384,10 +1381,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1384
1381
|
break;
|
1385
1382
|
|
1386
1383
|
default:
|
1387
|
-
throw new Jbig2Error(
|
1384
|
+
throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented");
|
1388
1385
|
}
|
1389
1386
|
|
1390
|
-
var callbackName =
|
1387
|
+
var callbackName = "on" + header.typeName;
|
1391
1388
|
|
1392
1389
|
if (callbackName in visitor) {
|
1393
1390
|
visitor[callbackName].apply(visitor, args);
|
@@ -1413,39 +1410,40 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1413
1410
|
}
|
1414
1411
|
|
1415
1412
|
function parseJbig2(data) {
|
1416
|
-
|
1417
|
-
|
1413
|
+
const end = data.length;
|
1414
|
+
let position = 0;
|
1418
1415
|
|
1419
|
-
if (data[position] !== 0x97 || data[position + 1] !==
|
1420
|
-
throw new Jbig2Error(
|
1416
|
+
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) {
|
1417
|
+
throw new Jbig2Error("parseJbig2 - invalid header.");
|
1421
1418
|
}
|
1422
1419
|
|
1423
|
-
|
1420
|
+
const header = Object.create(null);
|
1424
1421
|
position += 8;
|
1425
|
-
|
1422
|
+
const flags = data[position++];
|
1426
1423
|
header.randomAccess = !(flags & 1);
|
1427
1424
|
|
1428
1425
|
if (!(flags & 2)) {
|
1429
|
-
header.numberOfPages = (0,
|
1426
|
+
header.numberOfPages = (0, _core_utils.readUint32)(data, position);
|
1430
1427
|
position += 4;
|
1431
1428
|
}
|
1432
1429
|
|
1433
|
-
|
1434
|
-
|
1430
|
+
const segments = readSegments(header, data, position, end);
|
1431
|
+
const visitor = new SimpleSegmentVisitor();
|
1435
1432
|
processSegments(segments, visitor);
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1433
|
+
const {
|
1434
|
+
width,
|
1435
|
+
height
|
1436
|
+
} = visitor.currentPageInfo;
|
1437
|
+
const bitPacked = visitor.buffer;
|
1438
|
+
const imgData = new Uint8ClampedArray(width * height);
|
1439
|
+
let q = 0,
|
1442
1440
|
k = 0;
|
1443
1441
|
|
1444
|
-
for (
|
1445
|
-
|
1446
|
-
buffer
|
1442
|
+
for (let i = 0; i < height; i++) {
|
1443
|
+
let mask = 0,
|
1444
|
+
buffer;
|
1447
1445
|
|
1448
|
-
for (
|
1446
|
+
for (let j = 0; j < width; j++) {
|
1449
1447
|
if (!mask) {
|
1450
1448
|
mask = 128;
|
1451
1449
|
buffer = bitPacked[k++];
|
@@ -1457,9 +1455,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1457
1455
|
}
|
1458
1456
|
|
1459
1457
|
return {
|
1460
|
-
imgData
|
1461
|
-
width
|
1462
|
-
height
|
1458
|
+
imgData,
|
1459
|
+
width,
|
1460
|
+
height
|
1463
1461
|
};
|
1464
1462
|
}
|
1465
1463
|
|
@@ -1473,7 +1471,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1473
1471
|
|
1474
1472
|
if (info.defaultPixelValue) {
|
1475
1473
|
for (var i = 0, ii = buffer.length; i < ii; i++) {
|
1476
|
-
buffer[i] =
|
1474
|
+
buffer[i] = 0xff;
|
1477
1475
|
}
|
1478
1476
|
}
|
1479
1477
|
|
@@ -1538,7 +1536,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1538
1536
|
break;
|
1539
1537
|
|
1540
1538
|
default:
|
1541
|
-
throw new Jbig2Error(
|
1539
|
+
throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
|
1542
1540
|
}
|
1543
1541
|
},
|
1544
1542
|
onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
|
@@ -1551,7 +1549,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1551
1549
|
this.onImmediateGenericRegion.apply(this, arguments);
|
1552
1550
|
},
|
1553
1551
|
onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
|
1554
|
-
|
1552
|
+
let huffmanTables, huffmanInput;
|
1555
1553
|
|
1556
1554
|
if (dictionary.huffman) {
|
1557
1555
|
huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
|
@@ -1567,7 +1565,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1567
1565
|
var inputSymbols = [];
|
1568
1566
|
|
1569
1567
|
for (var i = 0, ii = referredSegments.length; i < ii; i++) {
|
1570
|
-
|
1568
|
+
const referredSymbols = symbols[referredSegments[i]];
|
1571
1569
|
|
1572
1570
|
if (referredSymbols) {
|
1573
1571
|
inputSymbols = inputSymbols.concat(referredSymbols);
|
@@ -1579,19 +1577,19 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1579
1577
|
},
|
1580
1578
|
onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
|
1581
1579
|
var regionInfo = region.info;
|
1582
|
-
|
1580
|
+
let huffmanTables, huffmanInput;
|
1583
1581
|
var symbols = this.symbols;
|
1584
1582
|
var inputSymbols = [];
|
1585
1583
|
|
1586
1584
|
for (var i = 0, ii = referredSegments.length; i < ii; i++) {
|
1587
|
-
|
1585
|
+
const referredSymbols = symbols[referredSegments[i]];
|
1588
1586
|
|
1589
1587
|
if (referredSymbols) {
|
1590
1588
|
inputSymbols = inputSymbols.concat(referredSymbols);
|
1591
1589
|
}
|
1592
1590
|
}
|
1593
1591
|
|
1594
|
-
var symbolCodeLength = (0,
|
1592
|
+
var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
|
1595
1593
|
|
1596
1594
|
if (region.huffman) {
|
1597
1595
|
huffmanInput = new Reader(data, start, end);
|
@@ -1605,28 +1603,32 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1605
1603
|
onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
|
1606
1604
|
this.onImmediateTextRegion.apply(this, arguments);
|
1607
1605
|
},
|
1608
|
-
|
1609
|
-
|
1606
|
+
|
1607
|
+
onPatternDictionary(dictionary, currentSegment, data, start, end) {
|
1608
|
+
let patterns = this.patterns;
|
1610
1609
|
|
1611
1610
|
if (!patterns) {
|
1612
1611
|
this.patterns = patterns = {};
|
1613
1612
|
}
|
1614
1613
|
|
1615
|
-
|
1614
|
+
const decodingContext = new DecodingContext(data, start, end);
|
1616
1615
|
patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
|
1617
1616
|
},
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1617
|
+
|
1618
|
+
onImmediateHalftoneRegion(region, referredSegments, data, start, end) {
|
1619
|
+
const patterns = this.patterns[referredSegments[0]];
|
1620
|
+
const regionInfo = region.info;
|
1621
|
+
const decodingContext = new DecodingContext(data, start, end);
|
1622
|
+
const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);
|
1623
1623
|
this.drawBitmap(regionInfo, bitmap);
|
1624
1624
|
},
|
1625
|
-
|
1625
|
+
|
1626
|
+
onImmediateLosslessHalftoneRegion() {
|
1626
1627
|
this.onImmediateHalftoneRegion.apply(this, arguments);
|
1627
1628
|
},
|
1628
|
-
|
1629
|
-
|
1629
|
+
|
1630
|
+
onTables(currentSegment, data, start, end) {
|
1631
|
+
let customTables = this.customTables;
|
1630
1632
|
|
1631
1633
|
if (!customTables) {
|
1632
1634
|
this.customTables = customTables = {};
|
@@ -1634,6 +1636,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1634
1636
|
|
1635
1637
|
customTables[currentSegment] = decodeTablesSegment(data, start, end);
|
1636
1638
|
}
|
1639
|
+
|
1637
1640
|
};
|
1638
1641
|
|
1639
1642
|
function HuffmanLine(lineData) {
|
@@ -1650,7 +1653,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1650
1653
|
this.prefixLength = lineData[1];
|
1651
1654
|
this.rangeLength = lineData[2];
|
1652
1655
|
this.prefixCode = lineData[3];
|
1653
|
-
this.isLowerRange = lineData[4] ===
|
1656
|
+
this.isLowerRange = lineData[4] === "lower";
|
1654
1657
|
}
|
1655
1658
|
}
|
1656
1659
|
|
@@ -1669,13 +1672,13 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1669
1672
|
}
|
1670
1673
|
|
1671
1674
|
HuffmanTreeNode.prototype = {
|
1672
|
-
buildTree
|
1673
|
-
|
1675
|
+
buildTree(line, shift) {
|
1676
|
+
const bit = line.prefixCode >> shift & 1;
|
1674
1677
|
|
1675
1678
|
if (shift <= 0) {
|
1676
1679
|
this.children[bit] = new HuffmanTreeNode(line);
|
1677
1680
|
} else {
|
1678
|
-
|
1681
|
+
let node = this.children[bit];
|
1679
1682
|
|
1680
1683
|
if (!node) {
|
1681
1684
|
this.children[bit] = node = new HuffmanTreeNode(null);
|
@@ -1684,24 +1687,26 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1684
1687
|
node.buildTree(line, shift - 1);
|
1685
1688
|
}
|
1686
1689
|
},
|
1687
|
-
|
1690
|
+
|
1691
|
+
decodeNode(reader) {
|
1688
1692
|
if (this.isLeaf) {
|
1689
1693
|
if (this.isOOB) {
|
1690
1694
|
return null;
|
1691
1695
|
}
|
1692
1696
|
|
1693
|
-
|
1697
|
+
const htOffset = reader.readBits(this.rangeLength);
|
1694
1698
|
return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
|
1695
1699
|
}
|
1696
1700
|
|
1697
|
-
|
1701
|
+
const node = this.children[reader.readBit()];
|
1698
1702
|
|
1699
1703
|
if (!node) {
|
1700
|
-
throw new Jbig2Error(
|
1704
|
+
throw new Jbig2Error("invalid Huffman data");
|
1701
1705
|
}
|
1702
1706
|
|
1703
1707
|
return node.decodeNode(reader);
|
1704
1708
|
}
|
1709
|
+
|
1705
1710
|
};
|
1706
1711
|
|
1707
1712
|
function HuffmanTable(lines, prefixCodesDone) {
|
@@ -1710,12 +1715,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1710
1715
|
}
|
1711
1716
|
|
1712
1717
|
this.rootNode = new HuffmanTreeNode(null);
|
1713
|
-
var i,
|
1714
|
-
ii = lines.length,
|
1715
|
-
line;
|
1716
1718
|
|
1717
|
-
for (i = 0; i < ii; i++) {
|
1718
|
-
line = lines[i];
|
1719
|
+
for (let i = 0, ii = lines.length; i < ii; i++) {
|
1720
|
+
const line = lines[i];
|
1719
1721
|
|
1720
1722
|
if (line.prefixLength > 0) {
|
1721
1723
|
this.rootNode.buildTree(line, line.prefixLength - 1);
|
@@ -1724,25 +1726,25 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1724
1726
|
}
|
1725
1727
|
|
1726
1728
|
HuffmanTable.prototype = {
|
1727
|
-
decode
|
1729
|
+
decode(reader) {
|
1728
1730
|
return this.rootNode.decodeNode(reader);
|
1729
1731
|
},
|
1730
|
-
assignPrefixCodes: function assignPrefixCodes(lines) {
|
1731
|
-
var linesLength = lines.length,
|
1732
|
-
prefixLengthMax = 0,
|
1733
|
-
i;
|
1734
1732
|
|
1735
|
-
|
1733
|
+
assignPrefixCodes(lines) {
|
1734
|
+
const linesLength = lines.length;
|
1735
|
+
let prefixLengthMax = 0;
|
1736
|
+
|
1737
|
+
for (let i = 0; i < linesLength; i++) {
|
1736
1738
|
prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
|
1737
1739
|
}
|
1738
1740
|
|
1739
|
-
|
1741
|
+
const histogram = new Uint32Array(prefixLengthMax + 1);
|
1740
1742
|
|
1741
|
-
for (i = 0; i < linesLength; i++) {
|
1743
|
+
for (let i = 0; i < linesLength; i++) {
|
1742
1744
|
histogram[lines[i].prefixLength]++;
|
1743
1745
|
}
|
1744
1746
|
|
1745
|
-
|
1747
|
+
let currentLength = 1,
|
1746
1748
|
firstCode = 0,
|
1747
1749
|
currentCode,
|
1748
1750
|
currentTemp,
|
@@ -1768,17 +1770,18 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1768
1770
|
currentLength++;
|
1769
1771
|
}
|
1770
1772
|
}
|
1773
|
+
|
1771
1774
|
};
|
1772
1775
|
|
1773
1776
|
function decodeTablesSegment(data, start, end) {
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1777
|
+
const flags = data[start];
|
1778
|
+
const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;
|
1779
|
+
const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;
|
1780
|
+
const reader = new Reader(data, start + 9, end);
|
1781
|
+
const prefixSizeBits = (flags >> 1 & 7) + 1;
|
1782
|
+
const rangeSizeBits = (flags >> 4 & 7) + 1;
|
1783
|
+
const lines = [];
|
1784
|
+
let prefixLength,
|
1782
1785
|
rangeLength,
|
1783
1786
|
currentRangeLow = lowestValue;
|
1784
1787
|
|
@@ -1790,7 +1793,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1790
1793
|
} while (currentRangeLow < highestValue);
|
1791
1794
|
|
1792
1795
|
prefixLength = reader.readBits(prefixSizeBits);
|
1793
|
-
lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0,
|
1796
|
+
lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
|
1794
1797
|
prefixLength = reader.readBits(prefixSizeBits);
|
1795
1798
|
lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
|
1796
1799
|
|
@@ -1802,16 +1805,16 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1802
1805
|
return new HuffmanTable(lines, false);
|
1803
1806
|
}
|
1804
1807
|
|
1805
|
-
|
1808
|
+
const standardTablesCache = {};
|
1806
1809
|
|
1807
1810
|
function getStandardTable(number) {
|
1808
|
-
|
1811
|
+
let table = standardTablesCache[number];
|
1809
1812
|
|
1810
1813
|
if (table) {
|
1811
1814
|
return table;
|
1812
1815
|
}
|
1813
1816
|
|
1814
|
-
|
1817
|
+
let lines;
|
1815
1818
|
|
1816
1819
|
switch (number) {
|
1817
1820
|
case 1:
|
@@ -1819,51 +1822,51 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1819
1822
|
break;
|
1820
1823
|
|
1821
1824
|
case 2:
|
1822
|
-
lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3,
|
1825
|
+
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]];
|
1823
1826
|
break;
|
1824
1827
|
|
1825
1828
|
case 3:
|
1826
|
-
lines = [[-256, 8, 8,
|
1829
|
+
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]];
|
1827
1830
|
break;
|
1828
1831
|
|
1829
1832
|
case 4:
|
1830
|
-
lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3,
|
1833
|
+
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]];
|
1831
1834
|
break;
|
1832
1835
|
|
1833
1836
|
case 5:
|
1834
|
-
lines = [[-255, 7, 8,
|
1837
|
+
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]];
|
1835
1838
|
break;
|
1836
1839
|
|
1837
1840
|
case 6:
|
1838
|
-
lines = [[-2048, 5, 10,
|
1841
|
+
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]];
|
1839
1842
|
break;
|
1840
1843
|
|
1841
1844
|
case 7:
|
1842
|
-
lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6,
|
1845
|
+
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]];
|
1843
1846
|
break;
|
1844
1847
|
|
1845
1848
|
case 8:
|
1846
|
-
lines = [[-15, 8, 3,
|
1849
|
+
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]];
|
1847
1850
|
break;
|
1848
1851
|
|
1849
1852
|
case 9:
|
1850
|
-
lines = [[-31, 8, 4,
|
1853
|
+
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]];
|
1851
1854
|
break;
|
1852
1855
|
|
1853
1856
|
case 10:
|
1854
|
-
lines = [[-21, 7, 4,
|
1857
|
+
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]];
|
1855
1858
|
break;
|
1856
1859
|
|
1857
1860
|
case 11:
|
1858
|
-
lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0,
|
1861
|
+
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]];
|
1859
1862
|
break;
|
1860
1863
|
|
1861
1864
|
case 12:
|
1862
|
-
lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0,
|
1865
|
+
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]];
|
1863
1866
|
break;
|
1864
1867
|
|
1865
1868
|
case 13:
|
1866
|
-
lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0,
|
1869
|
+
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]];
|
1867
1870
|
break;
|
1868
1871
|
|
1869
1872
|
case 14:
|
@@ -1871,17 +1874,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1871
1874
|
break;
|
1872
1875
|
|
1873
1876
|
case 15:
|
1874
|
-
lines = [[-24, 7, 4,
|
1877
|
+
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]];
|
1875
1878
|
break;
|
1876
1879
|
|
1877
1880
|
default:
|
1878
|
-
throw new Jbig2Error(
|
1881
|
+
throw new Jbig2Error(`standard table B.${number} does not exist`);
|
1879
1882
|
}
|
1880
1883
|
|
1881
|
-
|
1882
|
-
i;
|
1883
|
-
|
1884
|
-
for (i = 0; i < length; i++) {
|
1884
|
+
for (let i = 0, ii = lines.length; i < ii; i++) {
|
1885
1885
|
lines[i] = new HuffmanLine(lines[i]);
|
1886
1886
|
}
|
1887
1887
|
|
@@ -1900,22 +1900,23 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1900
1900
|
}
|
1901
1901
|
|
1902
1902
|
Reader.prototype = {
|
1903
|
-
readBit
|
1903
|
+
readBit() {
|
1904
1904
|
if (this.shift < 0) {
|
1905
1905
|
if (this.position >= this.end) {
|
1906
|
-
throw new Jbig2Error(
|
1906
|
+
throw new Jbig2Error("end of data while reading bit");
|
1907
1907
|
}
|
1908
1908
|
|
1909
1909
|
this.currentByte = this.data[this.position++];
|
1910
1910
|
this.shift = 7;
|
1911
1911
|
}
|
1912
1912
|
|
1913
|
-
|
1913
|
+
const bit = this.currentByte >> this.shift & 1;
|
1914
1914
|
this.shift--;
|
1915
1915
|
return bit;
|
1916
1916
|
},
|
1917
|
-
|
1918
|
-
|
1917
|
+
|
1918
|
+
readBits(numBits) {
|
1919
|
+
let result = 0,
|
1919
1920
|
i;
|
1920
1921
|
|
1921
1922
|
for (i = numBits - 1; i >= 0; i--) {
|
@@ -1924,26 +1925,26 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1924
1925
|
|
1925
1926
|
return result;
|
1926
1927
|
},
|
1927
|
-
|
1928
|
+
|
1929
|
+
byteAlign() {
|
1928
1930
|
this.shift = -1;
|
1929
1931
|
},
|
1930
|
-
|
1932
|
+
|
1933
|
+
next() {
|
1931
1934
|
if (this.position >= this.end) {
|
1932
1935
|
return -1;
|
1933
1936
|
}
|
1934
1937
|
|
1935
1938
|
return this.data[this.position++];
|
1936
1939
|
}
|
1940
|
+
|
1937
1941
|
};
|
1938
1942
|
|
1939
1943
|
function getCustomHuffmanTable(index, referredTo, customTables) {
|
1940
|
-
|
1941
|
-
i,
|
1942
|
-
ii = referredTo.length,
|
1943
|
-
table;
|
1944
|
+
let currentIndex = 0;
|
1944
1945
|
|
1945
|
-
for (i = 0; i < ii; i++) {
|
1946
|
-
table = customTables[referredTo[i]];
|
1946
|
+
for (let i = 0, ii = referredTo.length; i < ii; i++) {
|
1947
|
+
const table = customTables[referredTo[i]];
|
1947
1948
|
|
1948
1949
|
if (table) {
|
1949
1950
|
if (index === currentIndex) {
|
@@ -1954,34 +1955,30 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1954
1955
|
}
|
1955
1956
|
}
|
1956
1957
|
|
1957
|
-
throw new Jbig2Error(
|
1958
|
+
throw new Jbig2Error("can't find custom Huffman table");
|
1958
1959
|
}
|
1959
1960
|
|
1960
1961
|
function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
|
1961
|
-
|
1962
|
-
i,
|
1963
|
-
codeLength;
|
1962
|
+
const codes = [];
|
1964
1963
|
|
1965
|
-
for (i = 0; i <= 34; i++) {
|
1966
|
-
codeLength = reader.readBits(4);
|
1964
|
+
for (let i = 0; i <= 34; i++) {
|
1965
|
+
const codeLength = reader.readBits(4);
|
1967
1966
|
codes.push(new HuffmanLine([i, codeLength, 0, 0]));
|
1968
1967
|
}
|
1969
1968
|
|
1970
|
-
|
1969
|
+
const runCodesTable = new HuffmanTable(codes, false);
|
1971
1970
|
codes.length = 0;
|
1972
1971
|
|
1973
|
-
for (i = 0; i < numberOfSymbols;) {
|
1974
|
-
codeLength = runCodesTable.decode(reader);
|
1972
|
+
for (let i = 0; i < numberOfSymbols;) {
|
1973
|
+
const codeLength = runCodesTable.decode(reader);
|
1975
1974
|
|
1976
1975
|
if (codeLength >= 32) {
|
1977
|
-
|
1978
|
-
numberOfRepeats = void 0,
|
1979
|
-
j = void 0;
|
1976
|
+
let repeatedLength, numberOfRepeats, j;
|
1980
1977
|
|
1981
1978
|
switch (codeLength) {
|
1982
1979
|
case 32:
|
1983
1980
|
if (i === 0) {
|
1984
|
-
throw new Jbig2Error(
|
1981
|
+
throw new Jbig2Error("no previous value in symbol ID table");
|
1985
1982
|
}
|
1986
1983
|
|
1987
1984
|
numberOfRepeats = reader.readBits(2) + 3;
|
@@ -1999,7 +1996,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1999
1996
|
break;
|
2000
1997
|
|
2001
1998
|
default:
|
2002
|
-
throw new Jbig2Error(
|
1999
|
+
throw new Jbig2Error("invalid code length in symbol ID table");
|
2003
2000
|
}
|
2004
2001
|
|
2005
2002
|
for (j = 0; j < numberOfRepeats; j++) {
|
@@ -2013,8 +2010,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2013
2010
|
}
|
2014
2011
|
|
2015
2012
|
reader.byteAlign();
|
2016
|
-
|
2017
|
-
|
2013
|
+
const symbolIDTable = new HuffmanTable(codes, false);
|
2014
|
+
let customIndex = 0,
|
2018
2015
|
tableFirstS,
|
2019
2016
|
tableDeltaS,
|
2020
2017
|
tableDeltaT;
|
@@ -2031,7 +2028,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2031
2028
|
break;
|
2032
2029
|
|
2033
2030
|
default:
|
2034
|
-
throw new Jbig2Error(
|
2031
|
+
throw new Jbig2Error("invalid Huffman FS selector");
|
2035
2032
|
}
|
2036
2033
|
|
2037
2034
|
switch (textRegion.huffmanDS) {
|
@@ -2047,7 +2044,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2047
2044
|
break;
|
2048
2045
|
|
2049
2046
|
default:
|
2050
|
-
throw new Jbig2Error(
|
2047
|
+
throw new Jbig2Error("invalid Huffman DS selector");
|
2051
2048
|
}
|
2052
2049
|
|
2053
2050
|
switch (textRegion.huffmanDT) {
|
@@ -2063,23 +2060,23 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2063
2060
|
break;
|
2064
2061
|
|
2065
2062
|
default:
|
2066
|
-
throw new Jbig2Error(
|
2063
|
+
throw new Jbig2Error("invalid Huffman DT selector");
|
2067
2064
|
}
|
2068
2065
|
|
2069
2066
|
if (textRegion.refinement) {
|
2070
|
-
throw new Jbig2Error(
|
2067
|
+
throw new Jbig2Error("refinement with Huffman is not supported");
|
2071
2068
|
}
|
2072
2069
|
|
2073
2070
|
return {
|
2074
|
-
symbolIDTable
|
2075
|
-
tableFirstS
|
2076
|
-
tableDeltaS
|
2077
|
-
tableDeltaT
|
2071
|
+
symbolIDTable,
|
2072
|
+
tableFirstS,
|
2073
|
+
tableDeltaS,
|
2074
|
+
tableDeltaT
|
2078
2075
|
};
|
2079
2076
|
}
|
2080
2077
|
|
2081
2078
|
function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
|
2082
|
-
|
2079
|
+
let customIndex = 0,
|
2083
2080
|
tableDeltaHeight,
|
2084
2081
|
tableDeltaWidth;
|
2085
2082
|
|
@@ -2095,7 +2092,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2095
2092
|
break;
|
2096
2093
|
|
2097
2094
|
default:
|
2098
|
-
throw new Jbig2Error(
|
2095
|
+
throw new Jbig2Error("invalid Huffman DH selector");
|
2099
2096
|
}
|
2100
2097
|
|
2101
2098
|
switch (dictionary.huffmanDWSelector) {
|
@@ -2110,10 +2107,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2110
2107
|
break;
|
2111
2108
|
|
2112
2109
|
default:
|
2113
|
-
throw new Jbig2Error(
|
2110
|
+
throw new Jbig2Error("invalid Huffman DW selector");
|
2114
2111
|
}
|
2115
2112
|
|
2116
|
-
|
2113
|
+
let tableBitmapSize, tableAggregateInstances;
|
2117
2114
|
|
2118
2115
|
if (dictionary.bitmapSizeSelector) {
|
2119
2116
|
tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
|
@@ -2129,24 +2126,21 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2129
2126
|
}
|
2130
2127
|
|
2131
2128
|
return {
|
2132
|
-
tableDeltaHeight
|
2133
|
-
tableDeltaWidth
|
2134
|
-
tableBitmapSize
|
2135
|
-
tableAggregateInstances
|
2129
|
+
tableDeltaHeight,
|
2130
|
+
tableDeltaWidth,
|
2131
|
+
tableBitmapSize,
|
2132
|
+
tableAggregateInstances
|
2136
2133
|
};
|
2137
2134
|
}
|
2138
2135
|
|
2139
2136
|
function readUncompressedBitmap(reader, width, height) {
|
2140
|
-
|
2141
|
-
x,
|
2142
|
-
y,
|
2143
|
-
row;
|
2137
|
+
const bitmap = [];
|
2144
2138
|
|
2145
|
-
for (y = 0; y < height; y++) {
|
2146
|
-
row = new Uint8Array(width);
|
2139
|
+
for (let y = 0; y < height; y++) {
|
2140
|
+
const row = new Uint8Array(width);
|
2147
2141
|
bitmap.push(row);
|
2148
2142
|
|
2149
|
-
for (x = 0; x < width; x++) {
|
2143
|
+
for (let x = 0; x < width; x++) {
|
2150
2144
|
row[x] = reader.readBit();
|
2151
2145
|
}
|
2152
2146
|
|
@@ -2157,28 +2151,24 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2157
2151
|
}
|
2158
2152
|
|
2159
2153
|
function decodeMMRBitmap(input, width, height, endOfBlock) {
|
2160
|
-
|
2154
|
+
const params = {
|
2161
2155
|
K: -1,
|
2162
2156
|
Columns: width,
|
2163
2157
|
Rows: height,
|
2164
2158
|
BlackIs1: true,
|
2165
2159
|
EndOfBlock: endOfBlock
|
2166
2160
|
};
|
2167
|
-
|
2168
|
-
|
2169
|
-
|
2170
|
-
y,
|
2171
|
-
row,
|
2172
|
-
currentByte,
|
2173
|
-
shift,
|
2161
|
+
const decoder = new _ccitt.CCITTFaxDecoder(input, params);
|
2162
|
+
const bitmap = [];
|
2163
|
+
let currentByte,
|
2174
2164
|
eof = false;
|
2175
2165
|
|
2176
|
-
for (y = 0; y < height; y++) {
|
2177
|
-
row = new Uint8Array(width);
|
2166
|
+
for (let y = 0; y < height; y++) {
|
2167
|
+
const row = new Uint8Array(width);
|
2178
2168
|
bitmap.push(row);
|
2179
|
-
shift = -1;
|
2169
|
+
let shift = -1;
|
2180
2170
|
|
2181
|
-
for (x = 0; x < width; x++) {
|
2171
|
+
for (let x = 0; x < width; x++) {
|
2182
2172
|
if (shift < 0) {
|
2183
2173
|
currentByte = decoder.readNextChar();
|
2184
2174
|
|
@@ -2196,9 +2186,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2196
2186
|
}
|
2197
2187
|
|
2198
2188
|
if (endOfBlock && !eof) {
|
2199
|
-
|
2189
|
+
const lookForEOFLimit = 5;
|
2200
2190
|
|
2201
|
-
for (
|
2191
|
+
for (let i = 0; i < lookForEOFLimit; i++) {
|
2202
2192
|
if (decoder.readNextChar() === -1) {
|
2203
2193
|
break;
|
2204
2194
|
}
|
@@ -2211,19 +2201,21 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2211
2201
|
function Jbig2Image() {}
|
2212
2202
|
|
2213
2203
|
Jbig2Image.prototype = {
|
2214
|
-
parseChunks
|
2204
|
+
parseChunks(chunks) {
|
2215
2205
|
return parseJbig2Chunks(chunks);
|
2216
2206
|
},
|
2217
|
-
parse: function parse(data) {
|
2218
|
-
var _parseJbig = parseJbig2(data),
|
2219
|
-
imgData = _parseJbig.imgData,
|
2220
|
-
width = _parseJbig.width,
|
2221
|
-
height = _parseJbig.height;
|
2222
2207
|
|
2208
|
+
parse(data) {
|
2209
|
+
const {
|
2210
|
+
imgData,
|
2211
|
+
width,
|
2212
|
+
height
|
2213
|
+
} = parseJbig2(data);
|
2223
2214
|
this.width = width;
|
2224
2215
|
this.height = height;
|
2225
2216
|
return imgData;
|
2226
2217
|
}
|
2218
|
+
|
2227
2219
|
};
|
2228
2220
|
return Jbig2Image;
|
2229
2221
|
}();
|