pdfjs-dist 2.1.266 → 2.5.207
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/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8382 -18492
- 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 +20417 -29816
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25688 -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 +58239 -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 +403 -0
- package/es5/web/pdf_viewer.js +7742 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1475 -4897
- 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 +750 -899
- 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 +235 -183
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +447 -542
- package/lib/core/cmap.js +222 -264
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +573 -660
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +1103 -868
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +570 -491
- package/lib/core/function.js +291 -288
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +145 -149
- package/lib/core/image_utils.js +170 -0
- package/lib/core/jbig2.js +325 -316
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +21 -26
- package/lib/core/jpg.js +284 -232
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2929 -2929
- package/lib/core/murmurhash3.js +90 -101
- package/lib/core/obj.js +1183 -1157
- package/lib/core/operator_list.js +99 -67
- package/lib/core/parser.js +972 -911
- package/lib/core/pattern.js +87 -70
- package/lib/core/pdf_manager.js +150 -315
- package/lib/core/primitives.js +83 -56
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +94 -74
- package/lib/core/type1_parser.js +87 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +193 -390
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +741 -972
- package/lib/display/api.js +1500 -1791
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +165 -165
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +515 -0
- package/lib/display/fetch_stream.js +183 -298
- package/lib/display/font_loader.js +273 -413
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +266 -359
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +285 -458
- package/lib/display/pattern_helper.js +113 -65
- package/lib/display/svg.js +1166 -901
- package/lib/display/text_layer.js +156 -132
- package/lib/display/transport_stream.js +262 -278
- 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 +40 -37
- package/lib/pdf.js +226 -59
- package/lib/pdf.worker.js +14 -6
- package/lib/shared/compatibility.js +3 -246
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +327 -332
- package/lib/shared/util.js +266 -416
- package/lib/test/unit/annotation_spec.js +1555 -701
- package/lib/test/unit/api_spec.js +802 -604
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +84 -69
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +74 -76
- package/lib/test/unit/colorspace_spec.js +166 -161
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +20 -22
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +16 -21
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +83 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +46 -30
- package/lib/test/unit/message_handler_spec.js +173 -159
- 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 +13 -61
- package/lib/test/unit/network_utils_spec.js +183 -119
- package/lib/test/unit/node_stream_spec.js +78 -92
- package/lib/test/unit/parser_spec.js +172 -114
- 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 +140 -125
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +131 -143
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +297 -459
- package/lib/test/unit/unicode_spec.js +38 -38
- package/lib/test/unit/util_spec.js +121 -305
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1328 -1214
- package/lib/web/app_options.js +105 -107
- package/lib/web/base_viewer.js +824 -838
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +39 -55
- package/lib/web/firefox_print_service.js +37 -27
- package/lib/web/firefoxcom.js +212 -363
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +32 -30
- package/lib/web/interfaces.js +80 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +113 -131
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +221 -306
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +491 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +140 -175
- package/lib/web/pdf_page_view.js +452 -523
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +84 -108
- package/lib/web/pdf_sidebar.js +276 -306
- 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 +82 -286
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +282 -339
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +267 -420
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +35 -25
- package/web/pdf_viewer.js +3489 -4855
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -494
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/lib/test/unit/dom_utils_spec.js +0 -89
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,34 +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
|
-
var
|
36
|
-
|
37
|
-
|
35
|
+
var _ccitt = require("./ccitt.js");
|
36
|
+
|
37
|
+
class Jbig2Error extends _util.BaseException {
|
38
|
+
constructor(msg) {
|
39
|
+
super(`JBIG2 error: ${msg}`);
|
38
40
|
}
|
39
41
|
|
40
|
-
|
41
|
-
Jbig2Error.prototype.name = 'Jbig2Error';
|
42
|
-
Jbig2Error.constructor = Jbig2Error;
|
43
|
-
return Jbig2Error;
|
44
|
-
}();
|
42
|
+
}
|
45
43
|
|
46
44
|
var Jbig2Image = function Jbig2ImageClosure() {
|
47
45
|
function ContextCache() {}
|
48
46
|
|
49
47
|
ContextCache.prototype = {
|
50
|
-
getContexts
|
48
|
+
getContexts(id) {
|
51
49
|
if (id in this) {
|
52
50
|
return this[id];
|
53
51
|
}
|
54
52
|
|
55
53
|
return this[id] = new Int8Array(1 << 16);
|
56
54
|
}
|
55
|
+
|
57
56
|
};
|
58
57
|
|
59
58
|
function DecodingContext(data, start, end) {
|
@@ -65,12 +64,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
65
64
|
DecodingContext.prototype = {
|
66
65
|
get decoder() {
|
67
66
|
var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
|
68
|
-
return (0, _util.shadow)(this,
|
67
|
+
return (0, _util.shadow)(this, "decoder", decoder);
|
69
68
|
},
|
70
69
|
|
71
70
|
get contextCache() {
|
72
71
|
var cache = new ContextCache();
|
73
|
-
return (0, _util.shadow)(this,
|
72
|
+
return (0, _util.shadow)(this, "contextCache", cache);
|
74
73
|
}
|
75
74
|
|
76
75
|
};
|
@@ -93,11 +92,18 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
93
92
|
|
94
93
|
var sign = readBits(1);
|
95
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);
|
96
|
-
|
95
|
+
|
96
|
+
if (sign === 0) {
|
97
|
+
return value;
|
98
|
+
} else if (value > 0) {
|
99
|
+
return -value;
|
100
|
+
}
|
101
|
+
|
102
|
+
return null;
|
97
103
|
}
|
98
104
|
|
99
105
|
function decodeIAID(contextCache, decoder, codeLength) {
|
100
|
-
var contexts = contextCache.getContexts(
|
106
|
+
var contexts = contextCache.getContexts("IAID");
|
101
107
|
var prev = 1;
|
102
108
|
|
103
109
|
for (var i = 0; i < codeLength; i++) {
|
@@ -109,10 +115,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
109
115
|
return prev & (1 << codeLength) - 1;
|
110
116
|
}
|
111
117
|
|
112
|
-
return prev &
|
118
|
+
return prev & 0x7fffffff;
|
113
119
|
}
|
114
120
|
|
115
|
-
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"];
|
116
122
|
var CodingTemplates = [[{
|
117
123
|
x: -1,
|
118
124
|
y: -2
|
@@ -310,12 +316,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
310
316
|
y: 1
|
311
317
|
}]
|
312
318
|
}];
|
313
|
-
var ReusedContexts = [
|
319
|
+
var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
|
314
320
|
var RefinementReusedContexts = [0x0020, 0x0008];
|
315
321
|
|
316
322
|
function decodeBitmapTemplate0(width, height, decodingContext) {
|
317
323
|
var decoder = decodingContext.decoder;
|
318
|
-
var contexts = decodingContext.contextCache.getContexts(
|
324
|
+
var contexts = decodingContext.contextCache.getContexts("GB");
|
319
325
|
var contextLabel,
|
320
326
|
i,
|
321
327
|
j,
|
@@ -324,7 +330,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
324
330
|
row1,
|
325
331
|
row2,
|
326
332
|
bitmap = [];
|
327
|
-
var OLD_PIXEL_MASK =
|
333
|
+
var OLD_PIXEL_MASK = 0x7bf7;
|
328
334
|
|
329
335
|
for (i = 0; i < height; i++) {
|
330
336
|
row = bitmap[i] = new Uint8Array(width);
|
@@ -343,7 +349,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
343
349
|
|
344
350
|
function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
|
345
351
|
if (mmr) {
|
346
|
-
|
352
|
+
const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
|
347
353
|
return decodeMMRBitmap(input, width, height, false);
|
348
354
|
}
|
349
355
|
|
@@ -399,7 +405,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
399
405
|
var row = new Uint8Array(width);
|
400
406
|
var bitmap = [];
|
401
407
|
var decoder = decodingContext.decoder;
|
402
|
-
var contexts = decodingContext.contextCache.getContexts(
|
408
|
+
var contexts = decodingContext.contextCache.getContexts("GB");
|
403
409
|
var ltp = 0,
|
404
410
|
j,
|
405
411
|
i0,
|
@@ -507,7 +513,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
507
513
|
var pseudoPixelContext = RefinementReusedContexts[templateIndex];
|
508
514
|
var bitmap = [];
|
509
515
|
var decoder = decodingContext.decoder;
|
510
|
-
var contexts = decodingContext.contextCache.getContexts(
|
516
|
+
var contexts = decodingContext.contextCache.getContexts("GR");
|
511
517
|
var ltp = 0;
|
512
518
|
|
513
519
|
for (var i = 0; i < height; i++) {
|
@@ -516,7 +522,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
516
522
|
ltp ^= sltp;
|
517
523
|
|
518
524
|
if (ltp) {
|
519
|
-
throw new Jbig2Error(
|
525
|
+
throw new Jbig2Error("prediction is not supported");
|
520
526
|
}
|
521
527
|
}
|
522
528
|
|
@@ -559,15 +565,15 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
559
565
|
|
560
566
|
function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
|
561
567
|
if (huffman && refinement) {
|
562
|
-
throw new Jbig2Error(
|
568
|
+
throw new Jbig2Error("symbol refinement with Huffman is not supported");
|
563
569
|
}
|
564
570
|
|
565
571
|
var newSymbols = [];
|
566
572
|
var currentHeight = 0;
|
567
|
-
var symbolCodeLength = (0,
|
573
|
+
var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
|
568
574
|
var decoder = decodingContext.decoder;
|
569
575
|
var contextCache = decodingContext.contextCache;
|
570
|
-
|
576
|
+
let tableB1, symbolWidths;
|
571
577
|
|
572
578
|
if (huffman) {
|
573
579
|
tableB1 = getStandardTable(1);
|
@@ -576,14 +582,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
576
582
|
}
|
577
583
|
|
578
584
|
while (newSymbols.length < numberOfNewSymbols) {
|
579
|
-
var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache,
|
585
|
+
var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
|
580
586
|
currentHeight += deltaHeight;
|
581
|
-
|
587
|
+
let currentWidth = 0,
|
582
588
|
totalWidth = 0;
|
583
|
-
|
589
|
+
const firstSymbol = huffman ? symbolWidths.length : 0;
|
584
590
|
|
585
591
|
while (true) {
|
586
|
-
var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache,
|
592
|
+
var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
|
587
593
|
|
588
594
|
if (deltaWidth === null) {
|
589
595
|
break;
|
@@ -594,14 +600,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
594
600
|
var bitmap;
|
595
601
|
|
596
602
|
if (refinement) {
|
597
|
-
var numberOfInstances = decodeInteger(contextCache,
|
603
|
+
var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
|
598
604
|
|
599
605
|
if (numberOfInstances > 1) {
|
600
606
|
bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
|
601
607
|
} else {
|
602
608
|
var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
|
603
|
-
var rdx = decodeInteger(contextCache,
|
604
|
-
var rdy = decodeInteger(contextCache,
|
609
|
+
var rdx = decodeInteger(contextCache, "IARDX", decoder);
|
610
|
+
var rdy = decodeInteger(contextCache, "IARDY", decoder);
|
605
611
|
var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
|
606
612
|
bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
|
607
613
|
}
|
@@ -616,35 +622,35 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
616
622
|
}
|
617
623
|
|
618
624
|
if (huffman && !refinement) {
|
619
|
-
|
625
|
+
const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
|
620
626
|
huffmanInput.byteAlign();
|
621
|
-
|
627
|
+
let collectiveBitmap;
|
622
628
|
|
623
629
|
if (bitmapSize === 0) {
|
624
630
|
collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
|
625
631
|
} else {
|
626
|
-
|
627
|
-
|
632
|
+
const originalEnd = huffmanInput.end;
|
633
|
+
const bitmapEnd = huffmanInput.position + bitmapSize;
|
628
634
|
huffmanInput.end = bitmapEnd;
|
629
635
|
collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
|
630
636
|
huffmanInput.end = originalEnd;
|
631
637
|
huffmanInput.position = bitmapEnd;
|
632
638
|
}
|
633
639
|
|
634
|
-
|
640
|
+
const numberOfSymbolsDecoded = symbolWidths.length;
|
635
641
|
|
636
642
|
if (firstSymbol === numberOfSymbolsDecoded - 1) {
|
637
643
|
newSymbols.push(collectiveBitmap);
|
638
644
|
} else {
|
639
|
-
|
640
|
-
y
|
645
|
+
let i,
|
646
|
+
y,
|
641
647
|
xMin = 0,
|
642
|
-
xMax
|
643
|
-
bitmapWidth
|
644
|
-
symbolBitmap
|
648
|
+
xMax,
|
649
|
+
bitmapWidth,
|
650
|
+
symbolBitmap;
|
645
651
|
|
646
|
-
for (
|
647
|
-
bitmapWidth = symbolWidths[
|
652
|
+
for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
|
653
|
+
bitmapWidth = symbolWidths[i];
|
648
654
|
xMax = xMin + bitmapWidth;
|
649
655
|
symbolBitmap = [];
|
650
656
|
|
@@ -665,7 +671,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
665
671
|
var totalSymbolsLength = symbols.length + numberOfNewSymbols;
|
666
672
|
|
667
673
|
while (flags.length < totalSymbolsLength) {
|
668
|
-
var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache,
|
674
|
+
var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
|
669
675
|
|
670
676
|
while (runLength--) {
|
671
677
|
flags.push(currentFlag);
|
@@ -691,7 +697,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
691
697
|
|
692
698
|
function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
|
693
699
|
if (huffman && refinement) {
|
694
|
-
throw new Jbig2Error(
|
700
|
+
throw new Jbig2Error("refinement with Huffman is not supported");
|
695
701
|
}
|
696
702
|
|
697
703
|
var bitmap = [];
|
@@ -711,36 +717,36 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
711
717
|
|
712
718
|
var decoder = decodingContext.decoder;
|
713
719
|
var contextCache = decodingContext.contextCache;
|
714
|
-
var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache,
|
720
|
+
var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
|
715
721
|
var firstS = 0;
|
716
722
|
i = 0;
|
717
723
|
|
718
724
|
while (i < numberOfSymbolInstances) {
|
719
|
-
var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache,
|
725
|
+
var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
|
720
726
|
stripT += deltaT;
|
721
|
-
var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache,
|
727
|
+
var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
|
722
728
|
firstS += deltaFirstS;
|
723
729
|
var currentS = firstS;
|
724
730
|
|
725
731
|
do {
|
726
|
-
|
732
|
+
let currentT = 0;
|
727
733
|
|
728
734
|
if (stripSize > 1) {
|
729
|
-
currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache,
|
735
|
+
currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
|
730
736
|
}
|
731
737
|
|
732
738
|
var t = stripSize * stripT + currentT;
|
733
739
|
var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
|
734
|
-
var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache,
|
740
|
+
var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
|
735
741
|
var symbolBitmap = inputSymbols[symbolId];
|
736
742
|
var symbolWidth = symbolBitmap[0].length;
|
737
743
|
var symbolHeight = symbolBitmap.length;
|
738
744
|
|
739
745
|
if (applyRefinement) {
|
740
|
-
var rdw = decodeInteger(contextCache,
|
741
|
-
var rdh = decodeInteger(contextCache,
|
742
|
-
var rdx = decodeInteger(contextCache,
|
743
|
-
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);
|
744
750
|
symbolWidth += rdw;
|
745
751
|
symbolHeight += rdh;
|
746
752
|
symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
|
@@ -777,7 +783,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
777
783
|
break;
|
778
784
|
|
779
785
|
default:
|
780
|
-
throw new Jbig2Error(
|
786
|
+
throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
|
781
787
|
}
|
782
788
|
}
|
783
789
|
|
@@ -808,7 +814,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
808
814
|
break;
|
809
815
|
|
810
816
|
default:
|
811
|
-
throw new Jbig2Error(
|
817
|
+
throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
|
812
818
|
}
|
813
819
|
}
|
814
820
|
|
@@ -816,7 +822,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
816
822
|
}
|
817
823
|
|
818
824
|
i++;
|
819
|
-
var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache,
|
825
|
+
var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
|
820
826
|
|
821
827
|
if (deltaS === null) {
|
822
828
|
break;
|
@@ -830,7 +836,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
830
836
|
}
|
831
837
|
|
832
838
|
function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
|
833
|
-
|
839
|
+
const at = [];
|
834
840
|
|
835
841
|
if (!mmr) {
|
836
842
|
at.push({
|
@@ -854,44 +860,38 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
854
860
|
}
|
855
861
|
}
|
856
862
|
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
i = 0,
|
861
|
-
patternBitmap,
|
862
|
-
xMin,
|
863
|
-
xMax,
|
864
|
-
y;
|
863
|
+
const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
|
864
|
+
const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
|
865
|
+
const patterns = [];
|
865
866
|
|
866
|
-
|
867
|
-
patternBitmap = [];
|
868
|
-
xMin = patternWidth * i;
|
869
|
-
xMax = xMin + patternWidth;
|
867
|
+
for (let i = 0; i <= maxPatternIndex; i++) {
|
868
|
+
const patternBitmap = [];
|
869
|
+
const xMin = patternWidth * i;
|
870
|
+
const xMax = xMin + patternWidth;
|
870
871
|
|
871
|
-
for (y = 0; y < patternHeight; y++) {
|
872
|
+
for (let y = 0; y < patternHeight; y++) {
|
872
873
|
patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
|
873
874
|
}
|
874
875
|
|
875
876
|
patterns.push(patternBitmap);
|
876
|
-
i++;
|
877
877
|
}
|
878
878
|
|
879
879
|
return patterns;
|
880
880
|
}
|
881
881
|
|
882
882
|
function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
|
883
|
-
|
883
|
+
const skip = null;
|
884
884
|
|
885
885
|
if (enableSkip) {
|
886
|
-
throw new Jbig2Error(
|
886
|
+
throw new Jbig2Error("skip is not supported");
|
887
887
|
}
|
888
888
|
|
889
889
|
if (combinationOperator !== 0) {
|
890
|
-
throw new Jbig2Error(
|
890
|
+
throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region");
|
891
891
|
}
|
892
892
|
|
893
|
-
|
894
|
-
|
893
|
+
const regionBitmap = [];
|
894
|
+
let i, j, row;
|
895
895
|
|
896
896
|
for (i = 0; i < regionHeight; i++) {
|
897
897
|
row = new Uint8Array(regionWidth);
|
@@ -905,12 +905,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
905
905
|
regionBitmap.push(row);
|
906
906
|
}
|
907
907
|
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
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 = [];
|
914
914
|
|
915
915
|
if (!mmr) {
|
916
916
|
at.push({
|
@@ -934,9 +934,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
934
934
|
}
|
935
935
|
}
|
936
936
|
|
937
|
-
|
938
|
-
|
939
|
-
bitmap;
|
937
|
+
const grayScaleBitPlanes = [];
|
938
|
+
let mmrInput, bitmap;
|
940
939
|
|
941
940
|
if (mmr) {
|
942
941
|
mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
|
@@ -952,7 +951,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
952
951
|
grayScaleBitPlanes[i] = bitmap;
|
953
952
|
}
|
954
953
|
|
955
|
-
|
954
|
+
let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
|
956
955
|
|
957
956
|
for (mg = 0; mg < gridHeight; mg++) {
|
958
957
|
for (ng = 0; ng < gridWidth; ng++) {
|
@@ -978,8 +977,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
978
977
|
}
|
979
978
|
}
|
980
979
|
} else {
|
981
|
-
|
982
|
-
regionY = void 0;
|
980
|
+
let regionX, regionY;
|
983
981
|
|
984
982
|
for (i = 0; i < patternHeight; i++) {
|
985
983
|
regionY = y + i;
|
@@ -1008,12 +1006,12 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1008
1006
|
|
1009
1007
|
function readSegmentHeader(data, start) {
|
1010
1008
|
var segmentHeader = {};
|
1011
|
-
segmentHeader.number = (0,
|
1009
|
+
segmentHeader.number = (0, _core_utils.readUint32)(data, start);
|
1012
1010
|
var flags = data[start + 4];
|
1013
|
-
var segmentType = flags &
|
1011
|
+
var segmentType = flags & 0x3f;
|
1014
1012
|
|
1015
1013
|
if (!SegmentTypes[segmentType]) {
|
1016
|
-
throw new Jbig2Error(
|
1014
|
+
throw new Jbig2Error("invalid segment type: " + segmentType);
|
1017
1015
|
}
|
1018
1016
|
|
1019
1017
|
segmentHeader.type = segmentType;
|
@@ -1026,7 +1024,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1026
1024
|
var position = start + 6;
|
1027
1025
|
|
1028
1026
|
if (referredFlags === 7) {
|
1029
|
-
referredToCount = (0,
|
1027
|
+
referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
|
1030
1028
|
position += 3;
|
1031
1029
|
var bytes = referredToCount + 7 >> 3;
|
1032
1030
|
retainBits[0] = data[position++];
|
@@ -1035,16 +1033,32 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1035
1033
|
retainBits.push(data[position++]);
|
1036
1034
|
}
|
1037
1035
|
} else if (referredFlags === 5 || referredFlags === 6) {
|
1038
|
-
throw new Jbig2Error(
|
1036
|
+
throw new Jbig2Error("invalid referred-to flags");
|
1039
1037
|
}
|
1040
1038
|
|
1041
1039
|
segmentHeader.retainBits = retainBits;
|
1042
|
-
|
1040
|
+
let referredToSegmentNumberSize = 4;
|
1041
|
+
|
1042
|
+
if (segmentHeader.number <= 256) {
|
1043
|
+
referredToSegmentNumberSize = 1;
|
1044
|
+
} else if (segmentHeader.number <= 65536) {
|
1045
|
+
referredToSegmentNumberSize = 2;
|
1046
|
+
}
|
1047
|
+
|
1043
1048
|
var referredTo = [];
|
1044
1049
|
var i, ii;
|
1045
1050
|
|
1046
1051
|
for (i = 0; i < referredToCount; i++) {
|
1047
|
-
|
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
|
+
|
1048
1062
|
referredTo.push(number);
|
1049
1063
|
position += referredToSegmentNumberSize;
|
1050
1064
|
}
|
@@ -1054,14 +1068,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1054
1068
|
if (!pageAssociationFieldSize) {
|
1055
1069
|
segmentHeader.pageAssociation = data[position++];
|
1056
1070
|
} else {
|
1057
|
-
segmentHeader.pageAssociation = (0,
|
1071
|
+
segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
|
1058
1072
|
position += 4;
|
1059
1073
|
}
|
1060
1074
|
|
1061
|
-
segmentHeader.length = (0,
|
1075
|
+
segmentHeader.length = (0, _core_utils.readUint32)(data, position);
|
1062
1076
|
position += 4;
|
1063
1077
|
|
1064
|
-
if (segmentHeader.length ===
|
1078
|
+
if (segmentHeader.length === 0xffffffff) {
|
1065
1079
|
if (segmentType === 38) {
|
1066
1080
|
var genericRegionInfo = readRegionSegmentInformation(data, position);
|
1067
1081
|
var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
|
@@ -1070,14 +1084,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1070
1084
|
var searchPattern = new Uint8Array(searchPatternLength);
|
1071
1085
|
|
1072
1086
|
if (!genericRegionMmr) {
|
1073
|
-
searchPattern[0] =
|
1074
|
-
searchPattern[1] =
|
1087
|
+
searchPattern[0] = 0xff;
|
1088
|
+
searchPattern[1] = 0xac;
|
1075
1089
|
}
|
1076
1090
|
|
1077
|
-
searchPattern[2] = genericRegionInfo.height >>> 24 &
|
1078
|
-
searchPattern[3] = genericRegionInfo.height >> 16 &
|
1079
|
-
searchPattern[4] = genericRegionInfo.height >> 8 &
|
1080
|
-
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;
|
1081
1095
|
|
1082
1096
|
for (i = position, ii = data.length; i < ii; i++) {
|
1083
1097
|
var j = 0;
|
@@ -1092,11 +1106,11 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1092
1106
|
}
|
1093
1107
|
}
|
1094
1108
|
|
1095
|
-
if (segmentHeader.length ===
|
1096
|
-
throw new Jbig2Error(
|
1109
|
+
if (segmentHeader.length === 0xffffffff) {
|
1110
|
+
throw new Jbig2Error("segment end was not found");
|
1097
1111
|
}
|
1098
1112
|
} else {
|
1099
|
-
throw new Jbig2Error(
|
1113
|
+
throw new Jbig2Error("invalid unknown segment length");
|
1100
1114
|
}
|
1101
1115
|
}
|
1102
1116
|
|
@@ -1113,7 +1127,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1113
1127
|
position = segmentHeader.headerEnd;
|
1114
1128
|
var segment = {
|
1115
1129
|
header: segmentHeader,
|
1116
|
-
data
|
1130
|
+
data
|
1117
1131
|
};
|
1118
1132
|
|
1119
1133
|
if (!header.randomAccess) {
|
@@ -1142,10 +1156,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1142
1156
|
|
1143
1157
|
function readRegionSegmentInformation(data, start) {
|
1144
1158
|
return {
|
1145
|
-
width: (0,
|
1146
|
-
height: (0,
|
1147
|
-
x: (0,
|
1148
|
-
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),
|
1149
1163
|
combinationOperator: data[start + 16] & 7
|
1150
1164
|
};
|
1151
1165
|
}
|
@@ -1162,7 +1176,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1162
1176
|
switch (header.type) {
|
1163
1177
|
case 0:
|
1164
1178
|
var dictionary = {};
|
1165
|
-
var dictionaryFlags = (0,
|
1179
|
+
var dictionaryFlags = (0, _core_utils.readUint16)(data, position);
|
1166
1180
|
dictionary.huffman = !!(dictionaryFlags & 1);
|
1167
1181
|
dictionary.refinement = !!(dictionaryFlags & 2);
|
1168
1182
|
dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
|
@@ -1181,8 +1195,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1181
1195
|
|
1182
1196
|
for (i = 0; i < atLength; i++) {
|
1183
1197
|
at.push({
|
1184
|
-
x: (0,
|
1185
|
-
y: (0,
|
1198
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1199
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1186
1200
|
});
|
1187
1201
|
position += 2;
|
1188
1202
|
}
|
@@ -1195,8 +1209,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1195
1209
|
|
1196
1210
|
for (i = 0; i < 2; i++) {
|
1197
1211
|
at.push({
|
1198
|
-
x: (0,
|
1199
|
-
y: (0,
|
1212
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1213
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1200
1214
|
});
|
1201
1215
|
position += 2;
|
1202
1216
|
}
|
@@ -1204,9 +1218,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1204
1218
|
dictionary.refinementAt = at;
|
1205
1219
|
}
|
1206
1220
|
|
1207
|
-
dictionary.numberOfExportedSymbols = (0,
|
1221
|
+
dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
|
1208
1222
|
position += 4;
|
1209
|
-
dictionary.numberOfNewSymbols = (0,
|
1223
|
+
dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
|
1210
1224
|
position += 4;
|
1211
1225
|
args = [dictionary, header.number, header.referredTo, data, position, end];
|
1212
1226
|
break;
|
@@ -1216,7 +1230,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1216
1230
|
var textRegion = {};
|
1217
1231
|
textRegion.info = readRegionSegmentInformation(data, position);
|
1218
1232
|
position += RegionSegmentInformationFieldLength;
|
1219
|
-
var textRegionSegmentFlags = (0,
|
1233
|
+
var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
|
1220
1234
|
position += 2;
|
1221
1235
|
textRegion.huffman = !!(textRegionSegmentFlags & 1);
|
1222
1236
|
textRegion.refinement = !!(textRegionSegmentFlags & 2);
|
@@ -1230,7 +1244,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1230
1244
|
textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
|
1231
1245
|
|
1232
1246
|
if (textRegion.huffman) {
|
1233
|
-
var textRegionHuffmanFlags = (0,
|
1247
|
+
var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
|
1234
1248
|
position += 2;
|
1235
1249
|
textRegion.huffmanFS = textRegionHuffmanFlags & 3;
|
1236
1250
|
textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
|
@@ -1247,8 +1261,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1247
1261
|
|
1248
1262
|
for (i = 0; i < 2; i++) {
|
1249
1263
|
at.push({
|
1250
|
-
x: (0,
|
1251
|
-
y: (0,
|
1264
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1265
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1252
1266
|
});
|
1253
1267
|
position += 2;
|
1254
1268
|
}
|
@@ -1256,45 +1270,45 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1256
1270
|
textRegion.refinementAt = at;
|
1257
1271
|
}
|
1258
1272
|
|
1259
|
-
textRegion.numberOfSymbolInstances = (0,
|
1273
|
+
textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
|
1260
1274
|
position += 4;
|
1261
1275
|
args = [textRegion, header.referredTo, data, position, end];
|
1262
1276
|
break;
|
1263
1277
|
|
1264
1278
|
case 16:
|
1265
|
-
|
1266
|
-
|
1279
|
+
const patternDictionary = {};
|
1280
|
+
const patternDictionaryFlags = data[position++];
|
1267
1281
|
patternDictionary.mmr = !!(patternDictionaryFlags & 1);
|
1268
1282
|
patternDictionary.template = patternDictionaryFlags >> 1 & 3;
|
1269
1283
|
patternDictionary.patternWidth = data[position++];
|
1270
1284
|
patternDictionary.patternHeight = data[position++];
|
1271
|
-
patternDictionary.maxPatternIndex = (0,
|
1285
|
+
patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
|
1272
1286
|
position += 4;
|
1273
1287
|
args = [patternDictionary, header.number, data, position, end];
|
1274
1288
|
break;
|
1275
1289
|
|
1276
1290
|
case 22:
|
1277
1291
|
case 23:
|
1278
|
-
|
1292
|
+
const halftoneRegion = {};
|
1279
1293
|
halftoneRegion.info = readRegionSegmentInformation(data, position);
|
1280
1294
|
position += RegionSegmentInformationFieldLength;
|
1281
|
-
|
1295
|
+
const halftoneRegionFlags = data[position++];
|
1282
1296
|
halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
|
1283
1297
|
halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
|
1284
1298
|
halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
|
1285
1299
|
halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
|
1286
1300
|
halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
|
1287
|
-
halftoneRegion.gridWidth = (0,
|
1301
|
+
halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
|
1288
1302
|
position += 4;
|
1289
|
-
halftoneRegion.gridHeight = (0,
|
1303
|
+
halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
|
1290
1304
|
position += 4;
|
1291
|
-
halftoneRegion.gridOffsetX = (0,
|
1305
|
+
halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
|
1292
1306
|
position += 4;
|
1293
|
-
halftoneRegion.gridOffsetY = (0,
|
1307
|
+
halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
|
1294
1308
|
position += 4;
|
1295
|
-
halftoneRegion.gridVectorX = (0,
|
1309
|
+
halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
|
1296
1310
|
position += 2;
|
1297
|
-
halftoneRegion.gridVectorY = (0,
|
1311
|
+
halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
|
1298
1312
|
position += 2;
|
1299
1313
|
args = [halftoneRegion, header.referredTo, data, position, end];
|
1300
1314
|
break;
|
@@ -1315,8 +1329,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1315
1329
|
|
1316
1330
|
for (i = 0; i < atLength; i++) {
|
1317
1331
|
at.push({
|
1318
|
-
x: (0,
|
1319
|
-
y: (0,
|
1332
|
+
x: (0, _core_utils.readInt8)(data, position),
|
1333
|
+
y: (0, _core_utils.readInt8)(data, position + 1)
|
1320
1334
|
});
|
1321
1335
|
position += 2;
|
1322
1336
|
}
|
@@ -1329,18 +1343,18 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1329
1343
|
|
1330
1344
|
case 48:
|
1331
1345
|
var pageInfo = {
|
1332
|
-
width: (0,
|
1333
|
-
height: (0,
|
1334
|
-
resolutionX: (0,
|
1335
|
-
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)
|
1336
1350
|
};
|
1337
1351
|
|
1338
|
-
if (pageInfo.height ===
|
1352
|
+
if (pageInfo.height === 0xffffffff) {
|
1339
1353
|
delete pageInfo.height;
|
1340
1354
|
}
|
1341
1355
|
|
1342
1356
|
var pageSegmentFlags = data[position + 16];
|
1343
|
-
(0,
|
1357
|
+
(0, _core_utils.readUint16)(data, position + 17);
|
1344
1358
|
pageInfo.lossless = !!(pageSegmentFlags & 1);
|
1345
1359
|
pageInfo.refinement = !!(pageSegmentFlags & 2);
|
1346
1360
|
pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
|
@@ -1367,10 +1381,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1367
1381
|
break;
|
1368
1382
|
|
1369
1383
|
default:
|
1370
|
-
throw new Jbig2Error(
|
1384
|
+
throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented");
|
1371
1385
|
}
|
1372
1386
|
|
1373
|
-
var callbackName =
|
1387
|
+
var callbackName = "on" + header.typeName;
|
1374
1388
|
|
1375
1389
|
if (callbackName in visitor) {
|
1376
1390
|
visitor[callbackName].apply(visitor, args);
|
@@ -1396,39 +1410,40 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1396
1410
|
}
|
1397
1411
|
|
1398
1412
|
function parseJbig2(data) {
|
1399
|
-
|
1400
|
-
|
1413
|
+
const end = data.length;
|
1414
|
+
let position = 0;
|
1401
1415
|
|
1402
|
-
if (data[position] !== 0x97 || data[position + 1] !==
|
1403
|
-
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.");
|
1404
1418
|
}
|
1405
1419
|
|
1406
|
-
|
1420
|
+
const header = Object.create(null);
|
1407
1421
|
position += 8;
|
1408
|
-
|
1422
|
+
const flags = data[position++];
|
1409
1423
|
header.randomAccess = !(flags & 1);
|
1410
1424
|
|
1411
1425
|
if (!(flags & 2)) {
|
1412
|
-
header.numberOfPages = (0,
|
1426
|
+
header.numberOfPages = (0, _core_utils.readUint32)(data, position);
|
1413
1427
|
position += 4;
|
1414
1428
|
}
|
1415
1429
|
|
1416
|
-
|
1417
|
-
|
1430
|
+
const segments = readSegments(header, data, position, end);
|
1431
|
+
const visitor = new SimpleSegmentVisitor();
|
1418
1432
|
processSegments(segments, visitor);
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
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,
|
1425
1440
|
k = 0;
|
1426
1441
|
|
1427
|
-
for (
|
1428
|
-
|
1429
|
-
buffer
|
1442
|
+
for (let i = 0; i < height; i++) {
|
1443
|
+
let mask = 0,
|
1444
|
+
buffer;
|
1430
1445
|
|
1431
|
-
for (
|
1446
|
+
for (let j = 0; j < width; j++) {
|
1432
1447
|
if (!mask) {
|
1433
1448
|
mask = 128;
|
1434
1449
|
buffer = bitPacked[k++];
|
@@ -1440,9 +1455,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1440
1455
|
}
|
1441
1456
|
|
1442
1457
|
return {
|
1443
|
-
imgData
|
1444
|
-
width
|
1445
|
-
height
|
1458
|
+
imgData,
|
1459
|
+
width,
|
1460
|
+
height
|
1446
1461
|
};
|
1447
1462
|
}
|
1448
1463
|
|
@@ -1456,7 +1471,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1456
1471
|
|
1457
1472
|
if (info.defaultPixelValue) {
|
1458
1473
|
for (var i = 0, ii = buffer.length; i < ii; i++) {
|
1459
|
-
buffer[i] =
|
1474
|
+
buffer[i] = 0xff;
|
1460
1475
|
}
|
1461
1476
|
}
|
1462
1477
|
|
@@ -1521,7 +1536,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1521
1536
|
break;
|
1522
1537
|
|
1523
1538
|
default:
|
1524
|
-
throw new Jbig2Error(
|
1539
|
+
throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
|
1525
1540
|
}
|
1526
1541
|
},
|
1527
1542
|
onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
|
@@ -1534,7 +1549,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1534
1549
|
this.onImmediateGenericRegion.apply(this, arguments);
|
1535
1550
|
},
|
1536
1551
|
onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
|
1537
|
-
|
1552
|
+
let huffmanTables, huffmanInput;
|
1538
1553
|
|
1539
1554
|
if (dictionary.huffman) {
|
1540
1555
|
huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
|
@@ -1550,7 +1565,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1550
1565
|
var inputSymbols = [];
|
1551
1566
|
|
1552
1567
|
for (var i = 0, ii = referredSegments.length; i < ii; i++) {
|
1553
|
-
|
1568
|
+
const referredSymbols = symbols[referredSegments[i]];
|
1554
1569
|
|
1555
1570
|
if (referredSymbols) {
|
1556
1571
|
inputSymbols = inputSymbols.concat(referredSymbols);
|
@@ -1562,19 +1577,19 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1562
1577
|
},
|
1563
1578
|
onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
|
1564
1579
|
var regionInfo = region.info;
|
1565
|
-
|
1580
|
+
let huffmanTables, huffmanInput;
|
1566
1581
|
var symbols = this.symbols;
|
1567
1582
|
var inputSymbols = [];
|
1568
1583
|
|
1569
1584
|
for (var i = 0, ii = referredSegments.length; i < ii; i++) {
|
1570
|
-
|
1585
|
+
const referredSymbols = symbols[referredSegments[i]];
|
1571
1586
|
|
1572
1587
|
if (referredSymbols) {
|
1573
1588
|
inputSymbols = inputSymbols.concat(referredSymbols);
|
1574
1589
|
}
|
1575
1590
|
}
|
1576
1591
|
|
1577
|
-
var symbolCodeLength = (0,
|
1592
|
+
var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
|
1578
1593
|
|
1579
1594
|
if (region.huffman) {
|
1580
1595
|
huffmanInput = new Reader(data, start, end);
|
@@ -1588,28 +1603,32 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1588
1603
|
onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
|
1589
1604
|
this.onImmediateTextRegion.apply(this, arguments);
|
1590
1605
|
},
|
1591
|
-
|
1592
|
-
|
1606
|
+
|
1607
|
+
onPatternDictionary(dictionary, currentSegment, data, start, end) {
|
1608
|
+
let patterns = this.patterns;
|
1593
1609
|
|
1594
1610
|
if (!patterns) {
|
1595
1611
|
this.patterns = patterns = {};
|
1596
1612
|
}
|
1597
1613
|
|
1598
|
-
|
1614
|
+
const decodingContext = new DecodingContext(data, start, end);
|
1599
1615
|
patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
|
1600
1616
|
},
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
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);
|
1606
1623
|
this.drawBitmap(regionInfo, bitmap);
|
1607
1624
|
},
|
1608
|
-
|
1625
|
+
|
1626
|
+
onImmediateLosslessHalftoneRegion() {
|
1609
1627
|
this.onImmediateHalftoneRegion.apply(this, arguments);
|
1610
1628
|
},
|
1611
|
-
|
1612
|
-
|
1629
|
+
|
1630
|
+
onTables(currentSegment, data, start, end) {
|
1631
|
+
let customTables = this.customTables;
|
1613
1632
|
|
1614
1633
|
if (!customTables) {
|
1615
1634
|
this.customTables = customTables = {};
|
@@ -1617,6 +1636,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1617
1636
|
|
1618
1637
|
customTables[currentSegment] = decodeTablesSegment(data, start, end);
|
1619
1638
|
}
|
1639
|
+
|
1620
1640
|
};
|
1621
1641
|
|
1622
1642
|
function HuffmanLine(lineData) {
|
@@ -1633,7 +1653,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1633
1653
|
this.prefixLength = lineData[1];
|
1634
1654
|
this.rangeLength = lineData[2];
|
1635
1655
|
this.prefixCode = lineData[3];
|
1636
|
-
this.isLowerRange = lineData[4] ===
|
1656
|
+
this.isLowerRange = lineData[4] === "lower";
|
1637
1657
|
}
|
1638
1658
|
}
|
1639
1659
|
|
@@ -1652,13 +1672,13 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1652
1672
|
}
|
1653
1673
|
|
1654
1674
|
HuffmanTreeNode.prototype = {
|
1655
|
-
buildTree
|
1656
|
-
|
1675
|
+
buildTree(line, shift) {
|
1676
|
+
const bit = line.prefixCode >> shift & 1;
|
1657
1677
|
|
1658
1678
|
if (shift <= 0) {
|
1659
1679
|
this.children[bit] = new HuffmanTreeNode(line);
|
1660
1680
|
} else {
|
1661
|
-
|
1681
|
+
let node = this.children[bit];
|
1662
1682
|
|
1663
1683
|
if (!node) {
|
1664
1684
|
this.children[bit] = node = new HuffmanTreeNode(null);
|
@@ -1667,24 +1687,26 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1667
1687
|
node.buildTree(line, shift - 1);
|
1668
1688
|
}
|
1669
1689
|
},
|
1670
|
-
|
1690
|
+
|
1691
|
+
decodeNode(reader) {
|
1671
1692
|
if (this.isLeaf) {
|
1672
1693
|
if (this.isOOB) {
|
1673
1694
|
return null;
|
1674
1695
|
}
|
1675
1696
|
|
1676
|
-
|
1697
|
+
const htOffset = reader.readBits(this.rangeLength);
|
1677
1698
|
return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
|
1678
1699
|
}
|
1679
1700
|
|
1680
|
-
|
1701
|
+
const node = this.children[reader.readBit()];
|
1681
1702
|
|
1682
1703
|
if (!node) {
|
1683
|
-
throw new Jbig2Error(
|
1704
|
+
throw new Jbig2Error("invalid Huffman data");
|
1684
1705
|
}
|
1685
1706
|
|
1686
1707
|
return node.decodeNode(reader);
|
1687
1708
|
}
|
1709
|
+
|
1688
1710
|
};
|
1689
1711
|
|
1690
1712
|
function HuffmanTable(lines, prefixCodesDone) {
|
@@ -1693,12 +1715,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1693
1715
|
}
|
1694
1716
|
|
1695
1717
|
this.rootNode = new HuffmanTreeNode(null);
|
1696
|
-
var i,
|
1697
|
-
ii = lines.length,
|
1698
|
-
line;
|
1699
1718
|
|
1700
|
-
for (i = 0; i < ii; i++) {
|
1701
|
-
line = lines[i];
|
1719
|
+
for (let i = 0, ii = lines.length; i < ii; i++) {
|
1720
|
+
const line = lines[i];
|
1702
1721
|
|
1703
1722
|
if (line.prefixLength > 0) {
|
1704
1723
|
this.rootNode.buildTree(line, line.prefixLength - 1);
|
@@ -1707,25 +1726,25 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1707
1726
|
}
|
1708
1727
|
|
1709
1728
|
HuffmanTable.prototype = {
|
1710
|
-
decode
|
1729
|
+
decode(reader) {
|
1711
1730
|
return this.rootNode.decodeNode(reader);
|
1712
1731
|
},
|
1713
|
-
assignPrefixCodes: function assignPrefixCodes(lines) {
|
1714
|
-
var linesLength = lines.length,
|
1715
|
-
prefixLengthMax = 0,
|
1716
|
-
i;
|
1717
1732
|
|
1718
|
-
|
1733
|
+
assignPrefixCodes(lines) {
|
1734
|
+
const linesLength = lines.length;
|
1735
|
+
let prefixLengthMax = 0;
|
1736
|
+
|
1737
|
+
for (let i = 0; i < linesLength; i++) {
|
1719
1738
|
prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
|
1720
1739
|
}
|
1721
1740
|
|
1722
|
-
|
1741
|
+
const histogram = new Uint32Array(prefixLengthMax + 1);
|
1723
1742
|
|
1724
|
-
for (i = 0; i < linesLength; i++) {
|
1743
|
+
for (let i = 0; i < linesLength; i++) {
|
1725
1744
|
histogram[lines[i].prefixLength]++;
|
1726
1745
|
}
|
1727
1746
|
|
1728
|
-
|
1747
|
+
let currentLength = 1,
|
1729
1748
|
firstCode = 0,
|
1730
1749
|
currentCode,
|
1731
1750
|
currentTemp,
|
@@ -1751,17 +1770,18 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1751
1770
|
currentLength++;
|
1752
1771
|
}
|
1753
1772
|
}
|
1773
|
+
|
1754
1774
|
};
|
1755
1775
|
|
1756
1776
|
function decodeTablesSegment(data, start, end) {
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
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,
|
1765
1785
|
rangeLength,
|
1766
1786
|
currentRangeLow = lowestValue;
|
1767
1787
|
|
@@ -1773,7 +1793,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1773
1793
|
} while (currentRangeLow < highestValue);
|
1774
1794
|
|
1775
1795
|
prefixLength = reader.readBits(prefixSizeBits);
|
1776
|
-
lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0,
|
1796
|
+
lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
|
1777
1797
|
prefixLength = reader.readBits(prefixSizeBits);
|
1778
1798
|
lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
|
1779
1799
|
|
@@ -1785,16 +1805,16 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1785
1805
|
return new HuffmanTable(lines, false);
|
1786
1806
|
}
|
1787
1807
|
|
1788
|
-
|
1808
|
+
const standardTablesCache = {};
|
1789
1809
|
|
1790
1810
|
function getStandardTable(number) {
|
1791
|
-
|
1811
|
+
let table = standardTablesCache[number];
|
1792
1812
|
|
1793
1813
|
if (table) {
|
1794
1814
|
return table;
|
1795
1815
|
}
|
1796
1816
|
|
1797
|
-
|
1817
|
+
let lines;
|
1798
1818
|
|
1799
1819
|
switch (number) {
|
1800
1820
|
case 1:
|
@@ -1802,51 +1822,51 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1802
1822
|
break;
|
1803
1823
|
|
1804
1824
|
case 2:
|
1805
|
-
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]];
|
1806
1826
|
break;
|
1807
1827
|
|
1808
1828
|
case 3:
|
1809
|
-
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]];
|
1810
1830
|
break;
|
1811
1831
|
|
1812
1832
|
case 4:
|
1813
|
-
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]];
|
1814
1834
|
break;
|
1815
1835
|
|
1816
1836
|
case 5:
|
1817
|
-
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]];
|
1818
1838
|
break;
|
1819
1839
|
|
1820
1840
|
case 6:
|
1821
|
-
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]];
|
1822
1842
|
break;
|
1823
1843
|
|
1824
1844
|
case 7:
|
1825
|
-
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]];
|
1826
1846
|
break;
|
1827
1847
|
|
1828
1848
|
case 8:
|
1829
|
-
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]];
|
1830
1850
|
break;
|
1831
1851
|
|
1832
1852
|
case 9:
|
1833
|
-
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]];
|
1834
1854
|
break;
|
1835
1855
|
|
1836
1856
|
case 10:
|
1837
|
-
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]];
|
1838
1858
|
break;
|
1839
1859
|
|
1840
1860
|
case 11:
|
1841
|
-
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]];
|
1842
1862
|
break;
|
1843
1863
|
|
1844
1864
|
case 12:
|
1845
|
-
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]];
|
1846
1866
|
break;
|
1847
1867
|
|
1848
1868
|
case 13:
|
1849
|
-
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]];
|
1850
1870
|
break;
|
1851
1871
|
|
1852
1872
|
case 14:
|
@@ -1854,17 +1874,14 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1854
1874
|
break;
|
1855
1875
|
|
1856
1876
|
case 15:
|
1857
|
-
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]];
|
1858
1878
|
break;
|
1859
1879
|
|
1860
1880
|
default:
|
1861
|
-
throw new Jbig2Error(
|
1881
|
+
throw new Jbig2Error(`standard table B.${number} does not exist`);
|
1862
1882
|
}
|
1863
1883
|
|
1864
|
-
|
1865
|
-
i;
|
1866
|
-
|
1867
|
-
for (i = 0; i < length; i++) {
|
1884
|
+
for (let i = 0, ii = lines.length; i < ii; i++) {
|
1868
1885
|
lines[i] = new HuffmanLine(lines[i]);
|
1869
1886
|
}
|
1870
1887
|
|
@@ -1883,22 +1900,23 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1883
1900
|
}
|
1884
1901
|
|
1885
1902
|
Reader.prototype = {
|
1886
|
-
readBit
|
1903
|
+
readBit() {
|
1887
1904
|
if (this.shift < 0) {
|
1888
1905
|
if (this.position >= this.end) {
|
1889
|
-
throw new Jbig2Error(
|
1906
|
+
throw new Jbig2Error("end of data while reading bit");
|
1890
1907
|
}
|
1891
1908
|
|
1892
1909
|
this.currentByte = this.data[this.position++];
|
1893
1910
|
this.shift = 7;
|
1894
1911
|
}
|
1895
1912
|
|
1896
|
-
|
1913
|
+
const bit = this.currentByte >> this.shift & 1;
|
1897
1914
|
this.shift--;
|
1898
1915
|
return bit;
|
1899
1916
|
},
|
1900
|
-
|
1901
|
-
|
1917
|
+
|
1918
|
+
readBits(numBits) {
|
1919
|
+
let result = 0,
|
1902
1920
|
i;
|
1903
1921
|
|
1904
1922
|
for (i = numBits - 1; i >= 0; i--) {
|
@@ -1907,26 +1925,26 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1907
1925
|
|
1908
1926
|
return result;
|
1909
1927
|
},
|
1910
|
-
|
1928
|
+
|
1929
|
+
byteAlign() {
|
1911
1930
|
this.shift = -1;
|
1912
1931
|
},
|
1913
|
-
|
1932
|
+
|
1933
|
+
next() {
|
1914
1934
|
if (this.position >= this.end) {
|
1915
1935
|
return -1;
|
1916
1936
|
}
|
1917
1937
|
|
1918
1938
|
return this.data[this.position++];
|
1919
1939
|
}
|
1940
|
+
|
1920
1941
|
};
|
1921
1942
|
|
1922
1943
|
function getCustomHuffmanTable(index, referredTo, customTables) {
|
1923
|
-
|
1924
|
-
i,
|
1925
|
-
ii = referredTo.length,
|
1926
|
-
table;
|
1944
|
+
let currentIndex = 0;
|
1927
1945
|
|
1928
|
-
for (i = 0; i < ii; i++) {
|
1929
|
-
table = customTables[referredTo[i]];
|
1946
|
+
for (let i = 0, ii = referredTo.length; i < ii; i++) {
|
1947
|
+
const table = customTables[referredTo[i]];
|
1930
1948
|
|
1931
1949
|
if (table) {
|
1932
1950
|
if (index === currentIndex) {
|
@@ -1937,34 +1955,30 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1937
1955
|
}
|
1938
1956
|
}
|
1939
1957
|
|
1940
|
-
throw new Jbig2Error(
|
1958
|
+
throw new Jbig2Error("can't find custom Huffman table");
|
1941
1959
|
}
|
1942
1960
|
|
1943
1961
|
function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
|
1944
|
-
|
1945
|
-
i,
|
1946
|
-
codeLength;
|
1962
|
+
const codes = [];
|
1947
1963
|
|
1948
|
-
for (i = 0; i <= 34; i++) {
|
1949
|
-
codeLength = reader.readBits(4);
|
1964
|
+
for (let i = 0; i <= 34; i++) {
|
1965
|
+
const codeLength = reader.readBits(4);
|
1950
1966
|
codes.push(new HuffmanLine([i, codeLength, 0, 0]));
|
1951
1967
|
}
|
1952
1968
|
|
1953
|
-
|
1969
|
+
const runCodesTable = new HuffmanTable(codes, false);
|
1954
1970
|
codes.length = 0;
|
1955
1971
|
|
1956
|
-
for (i = 0; i < numberOfSymbols;) {
|
1957
|
-
codeLength = runCodesTable.decode(reader);
|
1972
|
+
for (let i = 0; i < numberOfSymbols;) {
|
1973
|
+
const codeLength = runCodesTable.decode(reader);
|
1958
1974
|
|
1959
1975
|
if (codeLength >= 32) {
|
1960
|
-
|
1961
|
-
numberOfRepeats = void 0,
|
1962
|
-
j = void 0;
|
1976
|
+
let repeatedLength, numberOfRepeats, j;
|
1963
1977
|
|
1964
1978
|
switch (codeLength) {
|
1965
1979
|
case 32:
|
1966
1980
|
if (i === 0) {
|
1967
|
-
throw new Jbig2Error(
|
1981
|
+
throw new Jbig2Error("no previous value in symbol ID table");
|
1968
1982
|
}
|
1969
1983
|
|
1970
1984
|
numberOfRepeats = reader.readBits(2) + 3;
|
@@ -1982,7 +1996,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1982
1996
|
break;
|
1983
1997
|
|
1984
1998
|
default:
|
1985
|
-
throw new Jbig2Error(
|
1999
|
+
throw new Jbig2Error("invalid code length in symbol ID table");
|
1986
2000
|
}
|
1987
2001
|
|
1988
2002
|
for (j = 0; j < numberOfRepeats; j++) {
|
@@ -1996,8 +2010,8 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
1996
2010
|
}
|
1997
2011
|
|
1998
2012
|
reader.byteAlign();
|
1999
|
-
|
2000
|
-
|
2013
|
+
const symbolIDTable = new HuffmanTable(codes, false);
|
2014
|
+
let customIndex = 0,
|
2001
2015
|
tableFirstS,
|
2002
2016
|
tableDeltaS,
|
2003
2017
|
tableDeltaT;
|
@@ -2014,7 +2028,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2014
2028
|
break;
|
2015
2029
|
|
2016
2030
|
default:
|
2017
|
-
throw new Jbig2Error(
|
2031
|
+
throw new Jbig2Error("invalid Huffman FS selector");
|
2018
2032
|
}
|
2019
2033
|
|
2020
2034
|
switch (textRegion.huffmanDS) {
|
@@ -2030,7 +2044,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2030
2044
|
break;
|
2031
2045
|
|
2032
2046
|
default:
|
2033
|
-
throw new Jbig2Error(
|
2047
|
+
throw new Jbig2Error("invalid Huffman DS selector");
|
2034
2048
|
}
|
2035
2049
|
|
2036
2050
|
switch (textRegion.huffmanDT) {
|
@@ -2046,23 +2060,23 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2046
2060
|
break;
|
2047
2061
|
|
2048
2062
|
default:
|
2049
|
-
throw new Jbig2Error(
|
2063
|
+
throw new Jbig2Error("invalid Huffman DT selector");
|
2050
2064
|
}
|
2051
2065
|
|
2052
2066
|
if (textRegion.refinement) {
|
2053
|
-
throw new Jbig2Error(
|
2067
|
+
throw new Jbig2Error("refinement with Huffman is not supported");
|
2054
2068
|
}
|
2055
2069
|
|
2056
2070
|
return {
|
2057
|
-
symbolIDTable
|
2058
|
-
tableFirstS
|
2059
|
-
tableDeltaS
|
2060
|
-
tableDeltaT
|
2071
|
+
symbolIDTable,
|
2072
|
+
tableFirstS,
|
2073
|
+
tableDeltaS,
|
2074
|
+
tableDeltaT
|
2061
2075
|
};
|
2062
2076
|
}
|
2063
2077
|
|
2064
2078
|
function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
|
2065
|
-
|
2079
|
+
let customIndex = 0,
|
2066
2080
|
tableDeltaHeight,
|
2067
2081
|
tableDeltaWidth;
|
2068
2082
|
|
@@ -2078,7 +2092,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2078
2092
|
break;
|
2079
2093
|
|
2080
2094
|
default:
|
2081
|
-
throw new Jbig2Error(
|
2095
|
+
throw new Jbig2Error("invalid Huffman DH selector");
|
2082
2096
|
}
|
2083
2097
|
|
2084
2098
|
switch (dictionary.huffmanDWSelector) {
|
@@ -2093,10 +2107,10 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2093
2107
|
break;
|
2094
2108
|
|
2095
2109
|
default:
|
2096
|
-
throw new Jbig2Error(
|
2110
|
+
throw new Jbig2Error("invalid Huffman DW selector");
|
2097
2111
|
}
|
2098
2112
|
|
2099
|
-
|
2113
|
+
let tableBitmapSize, tableAggregateInstances;
|
2100
2114
|
|
2101
2115
|
if (dictionary.bitmapSizeSelector) {
|
2102
2116
|
tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
|
@@ -2112,24 +2126,21 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2112
2126
|
}
|
2113
2127
|
|
2114
2128
|
return {
|
2115
|
-
tableDeltaHeight
|
2116
|
-
tableDeltaWidth
|
2117
|
-
tableBitmapSize
|
2118
|
-
tableAggregateInstances
|
2129
|
+
tableDeltaHeight,
|
2130
|
+
tableDeltaWidth,
|
2131
|
+
tableBitmapSize,
|
2132
|
+
tableAggregateInstances
|
2119
2133
|
};
|
2120
2134
|
}
|
2121
2135
|
|
2122
2136
|
function readUncompressedBitmap(reader, width, height) {
|
2123
|
-
|
2124
|
-
x,
|
2125
|
-
y,
|
2126
|
-
row;
|
2137
|
+
const bitmap = [];
|
2127
2138
|
|
2128
|
-
for (y = 0; y < height; y++) {
|
2129
|
-
row = new Uint8Array(width);
|
2139
|
+
for (let y = 0; y < height; y++) {
|
2140
|
+
const row = new Uint8Array(width);
|
2130
2141
|
bitmap.push(row);
|
2131
2142
|
|
2132
|
-
for (x = 0; x < width; x++) {
|
2143
|
+
for (let x = 0; x < width; x++) {
|
2133
2144
|
row[x] = reader.readBit();
|
2134
2145
|
}
|
2135
2146
|
|
@@ -2140,28 +2151,24 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2140
2151
|
}
|
2141
2152
|
|
2142
2153
|
function decodeMMRBitmap(input, width, height, endOfBlock) {
|
2143
|
-
|
2154
|
+
const params = {
|
2144
2155
|
K: -1,
|
2145
2156
|
Columns: width,
|
2146
2157
|
Rows: height,
|
2147
2158
|
BlackIs1: true,
|
2148
2159
|
EndOfBlock: endOfBlock
|
2149
2160
|
};
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2153
|
-
y,
|
2154
|
-
row,
|
2155
|
-
currentByte,
|
2156
|
-
shift,
|
2161
|
+
const decoder = new _ccitt.CCITTFaxDecoder(input, params);
|
2162
|
+
const bitmap = [];
|
2163
|
+
let currentByte,
|
2157
2164
|
eof = false;
|
2158
2165
|
|
2159
|
-
for (y = 0; y < height; y++) {
|
2160
|
-
row = new Uint8Array(width);
|
2166
|
+
for (let y = 0; y < height; y++) {
|
2167
|
+
const row = new Uint8Array(width);
|
2161
2168
|
bitmap.push(row);
|
2162
|
-
shift = -1;
|
2169
|
+
let shift = -1;
|
2163
2170
|
|
2164
|
-
for (x = 0; x < width; x++) {
|
2171
|
+
for (let x = 0; x < width; x++) {
|
2165
2172
|
if (shift < 0) {
|
2166
2173
|
currentByte = decoder.readNextChar();
|
2167
2174
|
|
@@ -2179,9 +2186,9 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2179
2186
|
}
|
2180
2187
|
|
2181
2188
|
if (endOfBlock && !eof) {
|
2182
|
-
|
2189
|
+
const lookForEOFLimit = 5;
|
2183
2190
|
|
2184
|
-
for (
|
2191
|
+
for (let i = 0; i < lookForEOFLimit; i++) {
|
2185
2192
|
if (decoder.readNextChar() === -1) {
|
2186
2193
|
break;
|
2187
2194
|
}
|
@@ -2194,19 +2201,21 @@ var Jbig2Image = function Jbig2ImageClosure() {
|
|
2194
2201
|
function Jbig2Image() {}
|
2195
2202
|
|
2196
2203
|
Jbig2Image.prototype = {
|
2197
|
-
parseChunks
|
2204
|
+
parseChunks(chunks) {
|
2198
2205
|
return parseJbig2Chunks(chunks);
|
2199
2206
|
},
|
2200
|
-
parse: function parse(data) {
|
2201
|
-
var _parseJbig = parseJbig2(data),
|
2202
|
-
imgData = _parseJbig.imgData,
|
2203
|
-
width = _parseJbig.width,
|
2204
|
-
height = _parseJbig.height;
|
2205
2207
|
|
2208
|
+
parse(data) {
|
2209
|
+
const {
|
2210
|
+
imgData,
|
2211
|
+
width,
|
2212
|
+
height
|
2213
|
+
} = parseJbig2(data);
|
2206
2214
|
this.width = width;
|
2207
2215
|
this.height = height;
|
2208
2216
|
return imgData;
|
2209
2217
|
}
|
2218
|
+
|
2210
2219
|
};
|
2211
2220
|
return Jbig2Image;
|
2212
2221
|
}();
|