@vaadin-component-factory/vcf-pdf-viewer 0.9.0 → 0.9.4
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.
- package/README.md +1 -1
- package/package.json +33 -18
- package/{src/display → pdfjs/dist}/display_utils.js +344 -139
- package/{src/display → pdfjs/dist}/fetch_stream.js +115 -97
- package/pdfjs/dist/get.js +1857 -0
- package/pdfjs/dist/index.js +767 -0
- package/pdfjs/dist/l10n_utils.js +140 -0
- package/{src/shared → pdfjs/dist}/message_handler.js +243 -259
- package/{src/display → pdfjs/dist}/network.js +149 -87
- package/{src/display/content_disposition.js → pdfjs/dist/network_utils.js} +167 -55
- package/{src/display → pdfjs/dist}/node_stream.js +133 -98
- package/pdfjs/dist/pdf.js +12778 -0
- package/pdfjs/dist/pdf_link_service.js +638 -0
- package/pdfjs/dist/pdf_rendering_queue.js +199 -0
- package/pdfjs/dist/pdf_thumbnail_viewer.js +819 -0
- package/pdfjs/dist/pdf_viewer.js +3598 -0
- package/pdfjs/dist/typeof.js +100 -0
- package/pdfjs/dist/ui_utils.js +1033 -0
- package/{src/shared → pdfjs/dist}/util.js +301 -287
- package/pdfjs/dist/worker.js +62813 -0
- package/src/vcf-pdf-viewer.js +77 -27
- package/theme/lumo/vcf-pdf-viewer-styles.js +1 -1
- package/theme/material/vcf-pdf-viewer.js +2 -2
- package/src/core/.eslintrc +0 -13
- package/src/core/annotation.js +0 -2948
- package/src/core/arithmetic_decoder.js +0 -182
- package/src/core/ascii_85_stream.js +0 -98
- package/src/core/ascii_hex_stream.js +0 -79
- package/src/core/base_stream.js +0 -110
- package/src/core/bidi.js +0 -438
- package/src/core/calibri_factors.js +0 -308
- package/src/core/catalog.js +0 -1459
- package/src/core/ccitt.js +0 -1062
- package/src/core/ccitt_stream.js +0 -60
- package/src/core/cff_font.js +0 -116
- package/src/core/cff_parser.js +0 -1949
- package/src/core/charsets.js +0 -119
- package/src/core/chunked_stream.js +0 -557
- package/src/core/cmap.js +0 -1039
- package/src/core/colorspace.js +0 -1533
- package/src/core/core_utils.js +0 -464
- package/src/core/crypto.js +0 -1900
- package/src/core/decode_stream.js +0 -170
- package/src/core/decrypt_stream.js +0 -59
- package/src/core/default_appearance.js +0 -99
- package/src/core/document.js +0 -1456
- package/src/core/encodings.js +0 -301
- package/src/core/evaluator.js +0 -4601
- package/src/core/file_spec.js +0 -108
- package/src/core/flate_stream.js +0 -402
- package/src/core/font_renderer.js +0 -882
- package/src/core/fonts.js +0 -3260
- package/src/core/fonts_utils.js +0 -221
- package/src/core/function.js +0 -1257
- package/src/core/glyf.js +0 -706
- package/src/core/glyphlist.js +0 -4558
- package/src/core/helvetica_factors.js +0 -353
- package/src/core/image.js +0 -802
- package/src/core/image_utils.js +0 -291
- package/src/core/jbig2.js +0 -2572
- package/src/core/jbig2_stream.js +0 -73
- package/src/core/jpeg_stream.js +0 -105
- package/src/core/jpg.js +0 -1416
- package/src/core/jpx.js +0 -2343
- package/src/core/jpx_stream.js +0 -87
- package/src/core/liberationsans_widths.js +0 -221
- package/src/core/lzw_stream.js +0 -150
- package/src/core/metadata_parser.js +0 -146
- package/src/core/metrics.js +0 -2970
- package/src/core/murmurhash3.js +0 -139
- package/src/core/myriadpro_factors.js +0 -290
- package/src/core/name_number_tree.js +0 -153
- package/src/core/object_loader.js +0 -149
- package/src/core/opentype_file_builder.js +0 -154
- package/src/core/operator_list.js +0 -734
- package/src/core/parser.js +0 -1416
- package/src/core/pattern.js +0 -985
- package/src/core/pdf_manager.js +0 -217
- package/src/core/predictor_stream.js +0 -238
- package/src/core/primitives.js +0 -402
- package/src/core/ps_parser.js +0 -272
- package/src/core/run_length_stream.js +0 -61
- package/src/core/segoeui_factors.js +0 -308
- package/src/core/standard_fonts.js +0 -817
- package/src/core/stream.js +0 -103
- package/src/core/struct_tree.js +0 -335
- package/src/core/to_unicode_map.js +0 -103
- package/src/core/type1_font.js +0 -421
- package/src/core/type1_parser.js +0 -776
- package/src/core/unicode.js +0 -1649
- package/src/core/worker.js +0 -848
- package/src/core/worker_stream.js +0 -135
- package/src/core/writer.js +0 -278
- package/src/core/xfa/bind.js +0 -652
- package/src/core/xfa/builder.js +0 -207
- package/src/core/xfa/config.js +0 -1926
- package/src/core/xfa/connection_set.js +0 -202
- package/src/core/xfa/data.js +0 -82
- package/src/core/xfa/datasets.js +0 -76
- package/src/core/xfa/factory.js +0 -111
- package/src/core/xfa/fonts.js +0 -181
- package/src/core/xfa/formcalc_lexer.js +0 -385
- package/src/core/xfa/formcalc_parser.js +0 -1340
- package/src/core/xfa/html_utils.js +0 -639
- package/src/core/xfa/layout.js +0 -383
- package/src/core/xfa/locale_set.js +0 -345
- package/src/core/xfa/namespaces.js +0 -81
- package/src/core/xfa/parser.js +0 -184
- package/src/core/xfa/setup.js +0 -38
- package/src/core/xfa/signature.js +0 -40
- package/src/core/xfa/som.js +0 -338
- package/src/core/xfa/stylesheet.js +0 -40
- package/src/core/xfa/template.js +0 -6260
- package/src/core/xfa/text.js +0 -290
- package/src/core/xfa/unknown.js +0 -29
- package/src/core/xfa/utils.js +0 -217
- package/src/core/xfa/xdp.js +0 -59
- package/src/core/xfa/xfa_object.js +0 -1130
- package/src/core/xfa/xhtml.js +0 -543
- package/src/core/xfa_fonts.js +0 -208
- package/src/core/xml_parser.js +0 -507
- package/src/core/xref.js +0 -899
- package/src/display/annotation_layer.js +0 -2107
- package/src/display/annotation_storage.js +0 -113
- package/src/display/api.js +0 -3292
- package/src/display/base_factory.js +0 -180
- package/src/display/canvas.js +0 -2828
- package/src/display/font_loader.js +0 -484
- package/src/display/metadata.js +0 -41
- package/src/display/network_utils.js +0 -100
- package/src/display/node_utils.js +0 -83
- package/src/display/optional_content_config.js +0 -189
- package/src/display/pattern_helper.js +0 -659
- package/src/display/svg.js +0 -1709
- package/src/display/text_layer.js +0 -847
- package/src/display/transport_stream.js +0 -303
- package/src/display/worker_options.js +0 -40
- package/src/display/xfa_layer.js +0 -204
- package/src/doc_helper.js +0 -25
- package/src/images/logo.svg +0 -41
- package/src/interfaces.js +0 -169
- package/src/license_header.js +0 -14
- package/src/license_header_libre.js +0 -21
- package/src/pdf.image_decoders.js +0 -46
- package/src/pdf.js +0 -146
- package/src/pdf.sandbox.external.js +0 -181
- package/src/pdf.sandbox.js +0 -151
- package/src/pdf.scripting.js +0 -25
- package/src/pdf.worker.entry.js +0 -19
- package/src/pdf.worker.js +0 -23
- package/src/scripting_api/aform.js +0 -608
- package/src/scripting_api/app.js +0 -621
- package/src/scripting_api/color.js +0 -129
- package/src/scripting_api/common.js +0 -58
- package/src/scripting_api/console.js +0 -38
- package/src/scripting_api/constants.js +0 -208
- package/src/scripting_api/doc.js +0 -1195
- package/src/scripting_api/error.js +0 -23
- package/src/scripting_api/event.js +0 -232
- package/src/scripting_api/field.js +0 -620
- package/src/scripting_api/fullscreen.js +0 -145
- package/src/scripting_api/initialization.js +0 -223
- package/src/scripting_api/pdf_object.js +0 -24
- package/src/scripting_api/print_params.js +0 -146
- package/src/scripting_api/proxy.js +0 -139
- package/src/scripting_api/thermometer.js +0 -69
- package/src/scripting_api/util.js +0 -581
- package/src/shared/.eslintrc +0 -13
- package/src/shared/cffStandardStrings.js +0 -311
- package/src/shared/compatibility.js +0 -114
- package/src/shared/fonts_utils.js +0 -429
- package/src/shared/is_node.js +0 -27
- package/src/shared/scripting_utils.js +0 -85
- package/src/worker_loader.js +0 -32
package/src/core/pdf_manager.js
DELETED
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
/* Copyright 2012 Mozilla Foundation
|
|
2
|
-
*
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { createValidAbsoluteUrl, unreachable, warn } from "../shared/util.js";
|
|
17
|
-
import { ChunkedStreamManager } from "./chunked_stream.js";
|
|
18
|
-
import { MissingDataException } from "./core_utils.js";
|
|
19
|
-
import { PDFDocument } from "./document.js";
|
|
20
|
-
import { Stream } from "./stream.js";
|
|
21
|
-
|
|
22
|
-
function parseDocBaseUrl(url) {
|
|
23
|
-
if (url) {
|
|
24
|
-
const absoluteUrl = createValidAbsoluteUrl(url);
|
|
25
|
-
if (absoluteUrl) {
|
|
26
|
-
return absoluteUrl.href;
|
|
27
|
-
}
|
|
28
|
-
warn(`Invalid absolute docBaseUrl: "${url}".`);
|
|
29
|
-
}
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
class BasePdfManager {
|
|
34
|
-
constructor() {
|
|
35
|
-
if (this.constructor === BasePdfManager) {
|
|
36
|
-
unreachable("Cannot initialize BasePdfManager.");
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
get docId() {
|
|
41
|
-
return this._docId;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
get password() {
|
|
45
|
-
return this._password;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
get docBaseUrl() {
|
|
49
|
-
return this._docBaseUrl;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
onLoadedStream() {
|
|
53
|
-
unreachable("Abstract method `onLoadedStream` called");
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
ensureDoc(prop, args) {
|
|
57
|
-
return this.ensure(this.pdfDocument, prop, args);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
ensureXRef(prop, args) {
|
|
61
|
-
return this.ensure(this.pdfDocument.xref, prop, args);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
ensureCatalog(prop, args) {
|
|
65
|
-
return this.ensure(this.pdfDocument.catalog, prop, args);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
getPage(pageIndex) {
|
|
69
|
-
return this.pdfDocument.getPage(pageIndex);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
fontFallback(id, handler) {
|
|
73
|
-
return this.pdfDocument.fontFallback(id, handler);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
loadXfaFonts(handler, task) {
|
|
77
|
-
return this.pdfDocument.loadXfaFonts(handler, task);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
loadXfaImages() {
|
|
81
|
-
return this.pdfDocument.loadXfaImages();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
serializeXfaData(annotationStorage) {
|
|
85
|
-
return this.pdfDocument.serializeXfaData(annotationStorage);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
cleanup(manuallyTriggered = false) {
|
|
89
|
-
return this.pdfDocument.cleanup(manuallyTriggered);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
async ensure(obj, prop, args) {
|
|
93
|
-
unreachable("Abstract method `ensure` called");
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
requestRange(begin, end) {
|
|
97
|
-
unreachable("Abstract method `requestRange` called");
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
requestLoadedStream() {
|
|
101
|
-
unreachable("Abstract method `requestLoadedStream` called");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
sendProgressiveData(chunk) {
|
|
105
|
-
unreachable("Abstract method `sendProgressiveData` called");
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
updatePassword(password) {
|
|
109
|
-
this._password = password;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
terminate(reason) {
|
|
113
|
-
unreachable("Abstract method `terminate` called");
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
class LocalPdfManager extends BasePdfManager {
|
|
118
|
-
constructor(docId, data, password, evaluatorOptions, enableXfa, docBaseUrl) {
|
|
119
|
-
super();
|
|
120
|
-
|
|
121
|
-
this._docId = docId;
|
|
122
|
-
this._password = password;
|
|
123
|
-
this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
|
|
124
|
-
this.evaluatorOptions = evaluatorOptions;
|
|
125
|
-
this.enableXfa = enableXfa;
|
|
126
|
-
|
|
127
|
-
const stream = new Stream(data);
|
|
128
|
-
this.pdfDocument = new PDFDocument(this, stream);
|
|
129
|
-
this._loadedStreamPromise = Promise.resolve(stream);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
async ensure(obj, prop, args) {
|
|
133
|
-
const value = obj[prop];
|
|
134
|
-
if (typeof value === "function") {
|
|
135
|
-
return value.apply(obj, args);
|
|
136
|
-
}
|
|
137
|
-
return value;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
requestRange(begin, end) {
|
|
141
|
-
return Promise.resolve();
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
requestLoadedStream() {}
|
|
145
|
-
|
|
146
|
-
onLoadedStream() {
|
|
147
|
-
return this._loadedStreamPromise;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
terminate(reason) {}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
class NetworkPdfManager extends BasePdfManager {
|
|
154
|
-
constructor(
|
|
155
|
-
docId,
|
|
156
|
-
pdfNetworkStream,
|
|
157
|
-
args,
|
|
158
|
-
evaluatorOptions,
|
|
159
|
-
enableXfa,
|
|
160
|
-
docBaseUrl
|
|
161
|
-
) {
|
|
162
|
-
super();
|
|
163
|
-
|
|
164
|
-
this._docId = docId;
|
|
165
|
-
this._password = args.password;
|
|
166
|
-
this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
|
|
167
|
-
this.msgHandler = args.msgHandler;
|
|
168
|
-
this.evaluatorOptions = evaluatorOptions;
|
|
169
|
-
this.enableXfa = enableXfa;
|
|
170
|
-
|
|
171
|
-
this.streamManager = new ChunkedStreamManager(pdfNetworkStream, {
|
|
172
|
-
msgHandler: args.msgHandler,
|
|
173
|
-
length: args.length,
|
|
174
|
-
disableAutoFetch: args.disableAutoFetch,
|
|
175
|
-
rangeChunkSize: args.rangeChunkSize,
|
|
176
|
-
});
|
|
177
|
-
this.pdfDocument = new PDFDocument(this, this.streamManager.getStream());
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async ensure(obj, prop, args) {
|
|
181
|
-
try {
|
|
182
|
-
const value = obj[prop];
|
|
183
|
-
if (typeof value === "function") {
|
|
184
|
-
return value.apply(obj, args);
|
|
185
|
-
}
|
|
186
|
-
return value;
|
|
187
|
-
} catch (ex) {
|
|
188
|
-
if (!(ex instanceof MissingDataException)) {
|
|
189
|
-
throw ex;
|
|
190
|
-
}
|
|
191
|
-
await this.requestRange(ex.begin, ex.end);
|
|
192
|
-
return this.ensure(obj, prop, args);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
requestRange(begin, end) {
|
|
197
|
-
return this.streamManager.requestRange(begin, end);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
requestLoadedStream() {
|
|
201
|
-
this.streamManager.requestAllChunks();
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
sendProgressiveData(chunk) {
|
|
205
|
-
this.streamManager.onReceiveData({ chunk });
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
onLoadedStream() {
|
|
209
|
-
return this.streamManager.onLoadedStream();
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
terminate(reason) {
|
|
213
|
-
this.streamManager.abort(reason);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export { LocalPdfManager, NetworkPdfManager };
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
/* Copyright 2012 Mozilla Foundation
|
|
2
|
-
*
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { DecodeStream } from "./decode_stream.js";
|
|
17
|
-
import { FormatError } from "../shared/util.js";
|
|
18
|
-
import { isDict } from "./primitives.js";
|
|
19
|
-
|
|
20
|
-
class PredictorStream extends DecodeStream {
|
|
21
|
-
constructor(str, maybeLength, params) {
|
|
22
|
-
super(maybeLength);
|
|
23
|
-
|
|
24
|
-
if (!isDict(params)) {
|
|
25
|
-
return str; // no prediction
|
|
26
|
-
}
|
|
27
|
-
const predictor = (this.predictor = params.get("Predictor") || 1);
|
|
28
|
-
|
|
29
|
-
if (predictor <= 1) {
|
|
30
|
-
return str; // no prediction
|
|
31
|
-
}
|
|
32
|
-
if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
|
|
33
|
-
throw new FormatError(`Unsupported predictor: ${predictor}`);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (predictor === 2) {
|
|
37
|
-
this.readBlock = this.readBlockTiff;
|
|
38
|
-
} else {
|
|
39
|
-
this.readBlock = this.readBlockPng;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
this.str = str;
|
|
43
|
-
this.dict = str.dict;
|
|
44
|
-
|
|
45
|
-
const colors = (this.colors = params.get("Colors") || 1);
|
|
46
|
-
const bits = (this.bits = params.get("BitsPerComponent") || 8);
|
|
47
|
-
const columns = (this.columns = params.get("Columns") || 1);
|
|
48
|
-
|
|
49
|
-
this.pixBytes = (colors * bits + 7) >> 3;
|
|
50
|
-
this.rowBytes = (columns * colors * bits + 7) >> 3;
|
|
51
|
-
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
readBlockTiff() {
|
|
56
|
-
const rowBytes = this.rowBytes;
|
|
57
|
-
|
|
58
|
-
const bufferLength = this.bufferLength;
|
|
59
|
-
const buffer = this.ensureBuffer(bufferLength + rowBytes);
|
|
60
|
-
|
|
61
|
-
const bits = this.bits;
|
|
62
|
-
const colors = this.colors;
|
|
63
|
-
|
|
64
|
-
const rawBytes = this.str.getBytes(rowBytes);
|
|
65
|
-
this.eof = !rawBytes.length;
|
|
66
|
-
if (this.eof) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
let inbuf = 0,
|
|
71
|
-
outbuf = 0;
|
|
72
|
-
let inbits = 0,
|
|
73
|
-
outbits = 0;
|
|
74
|
-
let pos = bufferLength;
|
|
75
|
-
let i;
|
|
76
|
-
|
|
77
|
-
if (bits === 1 && colors === 1) {
|
|
78
|
-
// Optimized version of the loop in the "else"-branch
|
|
79
|
-
// for 1 bit-per-component and 1 color TIFF images.
|
|
80
|
-
for (i = 0; i < rowBytes; ++i) {
|
|
81
|
-
let c = rawBytes[i] ^ inbuf;
|
|
82
|
-
c ^= c >> 1;
|
|
83
|
-
c ^= c >> 2;
|
|
84
|
-
c ^= c >> 4;
|
|
85
|
-
inbuf = (c & 1) << 7;
|
|
86
|
-
buffer[pos++] = c;
|
|
87
|
-
}
|
|
88
|
-
} else if (bits === 8) {
|
|
89
|
-
for (i = 0; i < colors; ++i) {
|
|
90
|
-
buffer[pos++] = rawBytes[i];
|
|
91
|
-
}
|
|
92
|
-
for (; i < rowBytes; ++i) {
|
|
93
|
-
buffer[pos] = buffer[pos - colors] + rawBytes[i];
|
|
94
|
-
pos++;
|
|
95
|
-
}
|
|
96
|
-
} else if (bits === 16) {
|
|
97
|
-
const bytesPerPixel = colors * 2;
|
|
98
|
-
for (i = 0; i < bytesPerPixel; ++i) {
|
|
99
|
-
buffer[pos++] = rawBytes[i];
|
|
100
|
-
}
|
|
101
|
-
for (; i < rowBytes; i += 2) {
|
|
102
|
-
const sum =
|
|
103
|
-
((rawBytes[i] & 0xff) << 8) +
|
|
104
|
-
(rawBytes[i + 1] & 0xff) +
|
|
105
|
-
((buffer[pos - bytesPerPixel] & 0xff) << 8) +
|
|
106
|
-
(buffer[pos - bytesPerPixel + 1] & 0xff);
|
|
107
|
-
buffer[pos++] = (sum >> 8) & 0xff;
|
|
108
|
-
buffer[pos++] = sum & 0xff;
|
|
109
|
-
}
|
|
110
|
-
} else {
|
|
111
|
-
const compArray = new Uint8Array(colors + 1);
|
|
112
|
-
const bitMask = (1 << bits) - 1;
|
|
113
|
-
let j = 0,
|
|
114
|
-
k = bufferLength;
|
|
115
|
-
const columns = this.columns;
|
|
116
|
-
for (i = 0; i < columns; ++i) {
|
|
117
|
-
for (let kk = 0; kk < colors; ++kk) {
|
|
118
|
-
if (inbits < bits) {
|
|
119
|
-
inbuf = (inbuf << 8) | (rawBytes[j++] & 0xff);
|
|
120
|
-
inbits += 8;
|
|
121
|
-
}
|
|
122
|
-
compArray[kk] =
|
|
123
|
-
(compArray[kk] + (inbuf >> (inbits - bits))) & bitMask;
|
|
124
|
-
inbits -= bits;
|
|
125
|
-
outbuf = (outbuf << bits) | compArray[kk];
|
|
126
|
-
outbits += bits;
|
|
127
|
-
if (outbits >= 8) {
|
|
128
|
-
buffer[k++] = (outbuf >> (outbits - 8)) & 0xff;
|
|
129
|
-
outbits -= 8;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (outbits > 0) {
|
|
134
|
-
buffer[k++] =
|
|
135
|
-
(outbuf << (8 - outbits)) + (inbuf & ((1 << (8 - outbits)) - 1));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
this.bufferLength += rowBytes;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
readBlockPng() {
|
|
142
|
-
const rowBytes = this.rowBytes;
|
|
143
|
-
const pixBytes = this.pixBytes;
|
|
144
|
-
|
|
145
|
-
const predictor = this.str.getByte();
|
|
146
|
-
const rawBytes = this.str.getBytes(rowBytes);
|
|
147
|
-
this.eof = !rawBytes.length;
|
|
148
|
-
if (this.eof) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const bufferLength = this.bufferLength;
|
|
153
|
-
const buffer = this.ensureBuffer(bufferLength + rowBytes);
|
|
154
|
-
|
|
155
|
-
let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
|
|
156
|
-
if (prevRow.length === 0) {
|
|
157
|
-
prevRow = new Uint8Array(rowBytes);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
let i,
|
|
161
|
-
j = bufferLength,
|
|
162
|
-
up,
|
|
163
|
-
c;
|
|
164
|
-
switch (predictor) {
|
|
165
|
-
case 0:
|
|
166
|
-
for (i = 0; i < rowBytes; ++i) {
|
|
167
|
-
buffer[j++] = rawBytes[i];
|
|
168
|
-
}
|
|
169
|
-
break;
|
|
170
|
-
case 1:
|
|
171
|
-
for (i = 0; i < pixBytes; ++i) {
|
|
172
|
-
buffer[j++] = rawBytes[i];
|
|
173
|
-
}
|
|
174
|
-
for (; i < rowBytes; ++i) {
|
|
175
|
-
buffer[j] = (buffer[j - pixBytes] + rawBytes[i]) & 0xff;
|
|
176
|
-
j++;
|
|
177
|
-
}
|
|
178
|
-
break;
|
|
179
|
-
case 2:
|
|
180
|
-
for (i = 0; i < rowBytes; ++i) {
|
|
181
|
-
buffer[j++] = (prevRow[i] + rawBytes[i]) & 0xff;
|
|
182
|
-
}
|
|
183
|
-
break;
|
|
184
|
-
case 3:
|
|
185
|
-
for (i = 0; i < pixBytes; ++i) {
|
|
186
|
-
buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
|
|
187
|
-
}
|
|
188
|
-
for (; i < rowBytes; ++i) {
|
|
189
|
-
buffer[j] =
|
|
190
|
-
(((prevRow[i] + buffer[j - pixBytes]) >> 1) + rawBytes[i]) & 0xff;
|
|
191
|
-
j++;
|
|
192
|
-
}
|
|
193
|
-
break;
|
|
194
|
-
case 4:
|
|
195
|
-
// we need to save the up left pixels values. the simplest way
|
|
196
|
-
// is to create a new buffer
|
|
197
|
-
for (i = 0; i < pixBytes; ++i) {
|
|
198
|
-
up = prevRow[i];
|
|
199
|
-
c = rawBytes[i];
|
|
200
|
-
buffer[j++] = up + c;
|
|
201
|
-
}
|
|
202
|
-
for (; i < rowBytes; ++i) {
|
|
203
|
-
up = prevRow[i];
|
|
204
|
-
const upLeft = prevRow[i - pixBytes];
|
|
205
|
-
const left = buffer[j - pixBytes];
|
|
206
|
-
const p = left + up - upLeft;
|
|
207
|
-
|
|
208
|
-
let pa = p - left;
|
|
209
|
-
if (pa < 0) {
|
|
210
|
-
pa = -pa;
|
|
211
|
-
}
|
|
212
|
-
let pb = p - up;
|
|
213
|
-
if (pb < 0) {
|
|
214
|
-
pb = -pb;
|
|
215
|
-
}
|
|
216
|
-
let pc = p - upLeft;
|
|
217
|
-
if (pc < 0) {
|
|
218
|
-
pc = -pc;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
c = rawBytes[i];
|
|
222
|
-
if (pa <= pb && pa <= pc) {
|
|
223
|
-
buffer[j++] = left + c;
|
|
224
|
-
} else if (pb <= pc) {
|
|
225
|
-
buffer[j++] = up + c;
|
|
226
|
-
} else {
|
|
227
|
-
buffer[j++] = upLeft + c;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
break;
|
|
231
|
-
default:
|
|
232
|
-
throw new FormatError(`Unsupported predictor: ${predictor}`);
|
|
233
|
-
}
|
|
234
|
-
this.bufferLength += rowBytes;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
export { PredictorStream };
|