pdfjs-dist 2.0.943 → 2.1.266
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/bower.json +1 -1
- package/build/pdf.js +15329 -11095
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +12497 -4184
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/image_decoders/pdf.image_decoders.js +3438 -1209
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +1 -1
- package/lib/core/annotation.js +335 -109
- package/lib/core/arithmetic_decoder.js +274 -244
- package/lib/core/bidi.js +64 -5
- package/lib/core/ccitt.js +172 -17
- package/lib/core/ccitt_stream.js +14 -5
- package/lib/core/cff_parser.js +304 -28
- package/lib/core/charsets.js +4 -3
- package/lib/core/chunked_stream.js +379 -149
- package/lib/core/cmap.js +210 -40
- package/lib/core/colorspace.js +332 -187
- package/lib/core/crypto.js +289 -44
- package/lib/core/document.js +508 -249
- package/lib/core/encodings.js +18 -9
- package/lib/core/evaluator.js +657 -119
- package/lib/core/font_renderer.js +217 -34
- package/lib/core/fonts.js +632 -41
- package/lib/core/function.js +252 -26
- package/lib/core/glyphlist.js +2 -1
- package/lib/core/image.js +124 -27
- package/lib/core/jbig2.js +425 -65
- package/lib/core/jbig2_stream.js +18 -7
- package/lib/core/jpeg_stream.js +24 -8
- package/lib/core/jpg.js +208 -16
- package/lib/core/jpx.js +395 -5
- package/lib/core/jpx_stream.js +17 -5
- package/lib/core/metrics.js +3 -3
- package/lib/core/murmurhash3.js +23 -5
- package/lib/core/obj.js +625 -132
- package/lib/core/operator_list.js +104 -3
- package/lib/core/parser.js +262 -25
- package/lib/core/pattern.js +144 -12
- package/lib/core/pdf_manager.js +104 -70
- package/lib/core/primitives.js +74 -21
- package/lib/core/ps_parser.js +133 -44
- package/lib/core/standard_fonts.js +9 -9
- package/lib/core/stream.js +283 -31
- package/lib/core/type1_parser.js +138 -6
- package/lib/core/unicode.js +28 -1
- package/lib/core/worker.js +192 -57
- package/lib/display/annotation_layer.js +303 -123
- package/lib/display/api.js +1073 -574
- package/lib/display/api_compatibility.js +4 -1
- package/lib/display/canvas.js +314 -18
- package/lib/display/content_disposition.js +70 -23
- package/lib/display/dom_utils.js +112 -59
- package/lib/display/fetch_stream.js +95 -50
- package/lib/display/font_loader.js +250 -132
- package/lib/display/metadata.js +37 -15
- package/lib/display/network.js +123 -34
- package/lib/display/network_utils.js +23 -10
- package/lib/display/node_stream.js +162 -65
- package/lib/display/pattern_helper.js +57 -6
- package/lib/display/svg.js +194 -18
- package/lib/display/text_layer.js +128 -14
- package/lib/display/transport_stream.js +83 -27
- package/lib/display/webgl.js +63 -17
- package/lib/display/worker_options.js +4 -3
- package/lib/display/xml_parser.js +162 -52
- package/lib/examples/node/domstubs.js +56 -3
- package/lib/pdf.js +15 -2
- package/lib/pdf.worker.js +4 -2
- package/lib/shared/compatibility.js +129 -26
- package/lib/shared/global_scope.js +1 -1
- package/lib/shared/is_node.js +3 -3
- package/lib/shared/message_handler.js +103 -45
- package/lib/shared/streams_polyfill.js +20 -16
- package/lib/shared/url_polyfill.js +8 -2
- package/lib/shared/util.js +246 -84
- package/lib/test/unit/annotation_spec.js +99 -73
- package/lib/test/unit/api_spec.js +347 -113
- package/lib/test/unit/bidi_spec.js +6 -6
- package/lib/test/unit/cff_parser_spec.js +17 -5
- package/lib/test/unit/clitests_helper.js +7 -8
- package/lib/test/unit/cmap_spec.js +79 -25
- package/lib/test/unit/colorspace_spec.js +65 -18
- package/lib/test/unit/crypto_spec.js +16 -4
- package/lib/test/unit/custom_spec.js +40 -52
- package/lib/test/unit/display_svg_spec.js +32 -16
- package/lib/test/unit/document_spec.js +2 -2
- package/lib/test/unit/dom_utils_spec.js +8 -8
- package/lib/test/unit/encodings_spec.js +24 -44
- package/lib/test/unit/evaluator_spec.js +15 -8
- package/lib/test/unit/function_spec.js +16 -4
- package/lib/test/unit/jasmine-boot.js +29 -16
- package/lib/test/unit/message_handler_spec.js +19 -6
- package/lib/test/unit/metadata_spec.js +64 -11
- package/lib/test/unit/murmurhash3_spec.js +2 -2
- package/lib/test/unit/network_spec.js +19 -4
- package/lib/test/unit/network_utils_spec.js +6 -4
- package/lib/test/unit/node_stream_spec.js +50 -26
- package/lib/test/unit/parser_spec.js +13 -29
- package/lib/test/unit/pdf_find_controller_spec.js +144 -32
- package/lib/test/unit/pdf_find_utils_spec.js +10 -9
- package/lib/test/unit/pdf_history_spec.js +20 -8
- package/lib/test/unit/primitives_spec.js +23 -3
- package/lib/test/unit/stream_spec.js +8 -3
- package/lib/test/unit/test_utils.js +89 -26
- package/lib/test/unit/testreporter.js +19 -1
- package/lib/test/unit/type1_parser_spec.js +7 -5
- package/lib/test/unit/ui_utils_spec.js +162 -38
- package/lib/test/unit/unicode_spec.js +13 -10
- package/lib/test/unit/util_spec.js +89 -9
- package/lib/web/annotation_layer_builder.js +38 -21
- package/lib/web/app.js +610 -245
- package/lib/web/app_options.js +54 -34
- package/lib/web/base_viewer.js +359 -162
- package/lib/web/chromecom.js +159 -80
- package/lib/web/debugger.js +161 -17
- package/lib/web/download_manager.js +29 -11
- package/lib/web/firefox_print_service.js +16 -8
- package/lib/web/firefoxcom.js +127 -91
- package/lib/web/genericcom.js +50 -31
- package/lib/web/genericl10n.js +46 -34
- package/lib/web/grab_to_pan.js +25 -3
- package/lib/web/interfaces.js +108 -61
- package/lib/web/overlay_manager.js +67 -45
- package/lib/web/password_prompt.js +20 -12
- package/lib/web/pdf_attachment_viewer.js +37 -17
- package/lib/web/pdf_cursor_tools.js +38 -15
- package/lib/web/pdf_document_properties.js +65 -24
- package/lib/web/pdf_find_bar.js +48 -20
- package/lib/web/pdf_find_controller.js +290 -89
- package/lib/web/pdf_find_utils.js +19 -3
- package/lib/web/pdf_history.js +186 -49
- package/lib/web/pdf_link_service.js +127 -52
- package/lib/web/pdf_outline_viewer.js +71 -21
- package/lib/web/pdf_page_view.js +188 -63
- package/lib/web/pdf_presentation_mode.js +98 -33
- package/lib/web/pdf_print_service.js +54 -10
- package/lib/web/pdf_rendering_queue.js +26 -4
- package/lib/web/pdf_sidebar.js +116 -62
- package/lib/web/pdf_sidebar_resizer.js +41 -15
- package/lib/web/pdf_single_page_viewer.js +65 -68
- package/lib/web/pdf_thumbnail_view.js +102 -31
- package/lib/web/pdf_thumbnail_viewer.js +62 -22
- package/lib/web/pdf_viewer.component.js +111 -31
- package/lib/web/pdf_viewer.js +80 -60
- package/lib/web/preferences.js +61 -39
- package/lib/web/secondary_toolbar.js +101 -82
- package/lib/web/text_layer_builder.js +124 -69
- package/lib/web/toolbar.js +67 -27
- package/lib/web/ui_utils.js +284 -128
- package/lib/web/view_history.js +75 -51
- package/lib/web/viewer_compatibility.js +2 -1
- package/package.json +1 -1
- package/web/pdf_viewer.css +1 -1
- package/web/pdf_viewer.js +2200 -973
- package/web/pdf_viewer.js.map +1 -1
- package/lib/web/dom_events.js +0 -140
package/lib/core/pattern.js
CHANGED
@@ -19,18 +19,19 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.getTilingPatternIR =
|
27
|
+
exports.getTilingPatternIR = getTilingPatternIR;
|
28
|
+
exports.Pattern = void 0;
|
28
29
|
|
29
|
-
var _util = require(
|
30
|
+
var _util = require("../shared/util");
|
30
31
|
|
31
|
-
var _colorspace = require(
|
32
|
+
var _colorspace = require("./colorspace");
|
32
33
|
|
33
|
-
var _primitives = require(
|
34
|
+
var _primitives = require("./primitives");
|
34
35
|
|
35
36
|
var ShadingType = {
|
36
37
|
FUNCTION_BASED: 1,
|
@@ -41,28 +42,34 @@ var ShadingType = {
|
|
41
42
|
COONS_PATCH_MESH: 6,
|
42
43
|
TENSOR_PATCH_MESH: 7
|
43
44
|
};
|
45
|
+
|
44
46
|
var Pattern = function PatternClosure() {
|
45
47
|
function Pattern() {
|
46
48
|
(0, _util.unreachable)('should not call Pattern constructor');
|
47
49
|
}
|
50
|
+
|
48
51
|
Pattern.prototype = {
|
49
52
|
getPattern: function Pattern_getPattern(ctx) {
|
50
|
-
(0, _util.unreachable)(
|
53
|
+
(0, _util.unreachable)("Should not call Pattern.getStyle: ".concat(ctx));
|
51
54
|
}
|
52
55
|
};
|
56
|
+
|
53
57
|
Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory) {
|
54
58
|
var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
|
55
59
|
var type = dict.get('ShadingType');
|
60
|
+
|
56
61
|
try {
|
57
62
|
switch (type) {
|
58
63
|
case ShadingType.AXIAL:
|
59
64
|
case ShadingType.RADIAL:
|
60
65
|
return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory);
|
66
|
+
|
61
67
|
case ShadingType.FREE_FORM_MESH:
|
62
68
|
case ShadingType.LATTICE_FORM_MESH:
|
63
69
|
case ShadingType.COONS_PATCH_MESH:
|
64
70
|
case ShadingType.TENSOR_PATCH_MESH:
|
65
71
|
return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory);
|
72
|
+
|
66
73
|
default:
|
67
74
|
throw new _util.FormatError('Unsupported ShadingType: ' + type);
|
68
75
|
}
|
@@ -70,15 +77,22 @@ var Pattern = function PatternClosure() {
|
|
70
77
|
if (ex instanceof _util.MissingDataException) {
|
71
78
|
throw ex;
|
72
79
|
}
|
73
|
-
|
80
|
+
|
81
|
+
handler.send('UnsupportedFeature', {
|
82
|
+
featureId: _util.UNSUPPORTED_FEATURES.shadingPattern
|
83
|
+
});
|
74
84
|
(0, _util.warn)(ex);
|
75
85
|
return new Shadings.Dummy();
|
76
86
|
}
|
77
87
|
};
|
88
|
+
|
78
89
|
return Pattern;
|
79
90
|
}();
|
91
|
+
|
92
|
+
exports.Pattern = Pattern;
|
80
93
|
var Shadings = {};
|
81
94
|
Shadings.SMALL_NUMBER = 1e-6;
|
95
|
+
|
82
96
|
Shadings.RadialAxial = function RadialAxialClosure() {
|
83
97
|
function RadialAxial(dict, matrix, xref, res, pdfFunctionFactory) {
|
84
98
|
this.matrix = matrix;
|
@@ -90,18 +104,22 @@ Shadings.RadialAxial = function RadialAxialClosure() {
|
|
90
104
|
this.cs = cs;
|
91
105
|
var t0 = 0.0,
|
92
106
|
t1 = 1.0;
|
107
|
+
|
93
108
|
if (dict.has('Domain')) {
|
94
109
|
var domainArr = dict.getArray('Domain');
|
95
110
|
t0 = domainArr[0];
|
96
111
|
t1 = domainArr[1];
|
97
112
|
}
|
113
|
+
|
98
114
|
var extendStart = false,
|
99
115
|
extendEnd = false;
|
116
|
+
|
100
117
|
if (dict.has('Extend')) {
|
101
118
|
var extendArr = dict.getArray('Extend');
|
102
119
|
extendStart = extendArr[0];
|
103
120
|
extendEnd = extendArr[1];
|
104
121
|
}
|
122
|
+
|
105
123
|
if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {
|
106
124
|
var x1 = this.coordsArr[0];
|
107
125
|
var y1 = this.coordsArr[1];
|
@@ -110,10 +128,12 @@ Shadings.RadialAxial = function RadialAxialClosure() {
|
|
110
128
|
var y2 = this.coordsArr[4];
|
111
129
|
var r2 = this.coordsArr[5];
|
112
130
|
var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
|
131
|
+
|
113
132
|
if (r1 <= r2 + distance && r2 <= r1 + distance) {
|
114
133
|
(0, _util.warn)('Unsupported radial gradient.');
|
115
134
|
}
|
116
135
|
}
|
136
|
+
|
117
137
|
this.extendStart = extendStart;
|
118
138
|
this.extendEnd = extendEnd;
|
119
139
|
var fnObj = dict.get('Function');
|
@@ -121,40 +141,52 @@ Shadings.RadialAxial = function RadialAxialClosure() {
|
|
121
141
|
var diff = t1 - t0;
|
122
142
|
var step = diff / 10;
|
123
143
|
var colorStops = this.colorStops = [];
|
144
|
+
|
124
145
|
if (t0 >= t1 || step <= 0) {
|
125
146
|
(0, _util.info)('Bad shading domain.');
|
126
147
|
return;
|
127
148
|
}
|
149
|
+
|
128
150
|
var color = new Float32Array(cs.numComps),
|
129
151
|
ratio = new Float32Array(1);
|
130
152
|
var rgbColor;
|
153
|
+
|
131
154
|
for (var i = t0; i <= t1; i += step) {
|
132
155
|
ratio[0] = i;
|
133
156
|
fn(ratio, 0, color, 0);
|
134
157
|
rgbColor = cs.getRgb(color, 0);
|
158
|
+
|
135
159
|
var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
|
160
|
+
|
136
161
|
colorStops.push([(i - t0) / diff, cssColor]);
|
137
162
|
}
|
163
|
+
|
138
164
|
var background = 'transparent';
|
165
|
+
|
139
166
|
if (dict.has('Background')) {
|
140
167
|
rgbColor = cs.getRgb(dict.get('Background'), 0);
|
141
168
|
background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
|
142
169
|
}
|
170
|
+
|
143
171
|
if (!extendStart) {
|
144
172
|
colorStops.unshift([0, background]);
|
145
173
|
colorStops[1][0] += Shadings.SMALL_NUMBER;
|
146
174
|
}
|
175
|
+
|
147
176
|
if (!extendEnd) {
|
148
177
|
colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
|
149
178
|
colorStops.push([1, background]);
|
150
179
|
}
|
180
|
+
|
151
181
|
this.colorStops = colorStops;
|
152
182
|
}
|
183
|
+
|
153
184
|
RadialAxial.prototype = {
|
154
185
|
getIR: function RadialAxial_getIR() {
|
155
186
|
var coordsArr = this.coordsArr;
|
156
187
|
var shadingType = this.shadingType;
|
157
188
|
var type, p0, p1, r0, r1;
|
189
|
+
|
158
190
|
if (shadingType === ShadingType.AXIAL) {
|
159
191
|
p0 = [coordsArr[0], coordsArr[1]];
|
160
192
|
p1 = [coordsArr[2], coordsArr[3]];
|
@@ -168,23 +200,29 @@ Shadings.RadialAxial = function RadialAxialClosure() {
|
|
168
200
|
r1 = coordsArr[5];
|
169
201
|
type = 'radial';
|
170
202
|
} else {
|
171
|
-
(0, _util.unreachable)(
|
203
|
+
(0, _util.unreachable)("getPattern type unknown: ".concat(shadingType));
|
172
204
|
}
|
205
|
+
|
173
206
|
var matrix = this.matrix;
|
207
|
+
|
174
208
|
if (matrix) {
|
175
209
|
p0 = _util.Util.applyTransform(p0, matrix);
|
176
210
|
p1 = _util.Util.applyTransform(p1, matrix);
|
211
|
+
|
177
212
|
if (shadingType === ShadingType.RADIAL) {
|
178
213
|
var scale = _util.Util.singularValueDecompose2dScale(matrix);
|
214
|
+
|
179
215
|
r0 *= scale[0];
|
180
216
|
r1 *= scale[1];
|
181
217
|
}
|
182
218
|
}
|
219
|
+
|
183
220
|
return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1];
|
184
221
|
}
|
185
222
|
};
|
186
223
|
return RadialAxial;
|
187
224
|
}();
|
225
|
+
|
188
226
|
Shadings.Mesh = function MeshClosure() {
|
189
227
|
function MeshStreamReader(stream, context) {
|
190
228
|
this.stream = stream;
|
@@ -196,41 +234,52 @@ Shadings.Mesh = function MeshClosure() {
|
|
196
234
|
var csNumComps = context.colorSpace.numComps;
|
197
235
|
this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;
|
198
236
|
}
|
237
|
+
|
199
238
|
MeshStreamReader.prototype = {
|
200
239
|
get hasData() {
|
201
240
|
if (this.stream.end) {
|
202
241
|
return this.stream.pos < this.stream.end;
|
203
242
|
}
|
243
|
+
|
204
244
|
if (this.bufferLength > 0) {
|
205
245
|
return true;
|
206
246
|
}
|
247
|
+
|
207
248
|
var nextByte = this.stream.getByte();
|
249
|
+
|
208
250
|
if (nextByte < 0) {
|
209
251
|
return false;
|
210
252
|
}
|
253
|
+
|
211
254
|
this.buffer = nextByte;
|
212
255
|
this.bufferLength = 8;
|
213
256
|
return true;
|
214
257
|
},
|
258
|
+
|
215
259
|
readBits: function MeshStreamReader_readBits(n) {
|
216
260
|
var buffer = this.buffer;
|
217
261
|
var bufferLength = this.bufferLength;
|
262
|
+
|
218
263
|
if (n === 32) {
|
219
264
|
if (bufferLength === 0) {
|
220
265
|
return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;
|
221
266
|
}
|
267
|
+
|
222
268
|
buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();
|
223
269
|
var nextByte = this.stream.getByte();
|
224
270
|
this.buffer = nextByte & (1 << bufferLength) - 1;
|
225
271
|
return (buffer << 8 - bufferLength | (nextByte & 0xFF) >> bufferLength) >>> 0;
|
226
272
|
}
|
273
|
+
|
227
274
|
if (n === 8 && bufferLength === 0) {
|
228
275
|
return this.stream.getByte();
|
229
276
|
}
|
277
|
+
|
230
278
|
while (bufferLength < n) {
|
231
279
|
buffer = buffer << 8 | this.stream.getByte();
|
232
280
|
bufferLength += 8;
|
233
281
|
}
|
282
|
+
|
234
283
|
bufferLength -= n;
|
235
284
|
this.bufferLength = bufferLength;
|
236
285
|
this.buffer = buffer & (1 << bufferLength) - 1;
|
@@ -257,62 +306,77 @@ Shadings.Mesh = function MeshClosure() {
|
|
257
306
|
var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
|
258
307
|
var decode = this.context.decode;
|
259
308
|
var components = this.tmpCompsBuf;
|
309
|
+
|
260
310
|
for (var i = 0, j = 4; i < numComps; i++, j += 2) {
|
261
311
|
var ci = this.readBits(bitsPerComponent);
|
262
312
|
components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
|
263
313
|
}
|
314
|
+
|
264
315
|
var color = this.tmpCsCompsBuf;
|
316
|
+
|
265
317
|
if (this.context.colorFn) {
|
266
318
|
this.context.colorFn(components, 0, color, 0);
|
267
319
|
}
|
320
|
+
|
268
321
|
return this.context.colorSpace.getRgb(color, 0);
|
269
322
|
}
|
270
323
|
};
|
324
|
+
|
271
325
|
function decodeType4Shading(mesh, reader) {
|
272
326
|
var coords = mesh.coords;
|
273
327
|
var colors = mesh.colors;
|
274
328
|
var operators = [];
|
275
329
|
var ps = [];
|
276
330
|
var verticesLeft = 0;
|
331
|
+
|
277
332
|
while (reader.hasData) {
|
278
333
|
var f = reader.readFlag();
|
279
334
|
var coord = reader.readCoordinate();
|
280
335
|
var color = reader.readComponents();
|
336
|
+
|
281
337
|
if (verticesLeft === 0) {
|
282
338
|
if (!(0 <= f && f <= 2)) {
|
283
339
|
throw new _util.FormatError('Unknown type4 flag');
|
284
340
|
}
|
341
|
+
|
285
342
|
switch (f) {
|
286
343
|
case 0:
|
287
344
|
verticesLeft = 3;
|
288
345
|
break;
|
346
|
+
|
289
347
|
case 1:
|
290
348
|
ps.push(ps[ps.length - 2], ps[ps.length - 1]);
|
291
349
|
verticesLeft = 1;
|
292
350
|
break;
|
351
|
+
|
293
352
|
case 2:
|
294
353
|
ps.push(ps[ps.length - 3], ps[ps.length - 1]);
|
295
354
|
verticesLeft = 1;
|
296
355
|
break;
|
297
356
|
}
|
357
|
+
|
298
358
|
operators.push(f);
|
299
359
|
}
|
360
|
+
|
300
361
|
ps.push(coords.length);
|
301
362
|
coords.push(coord);
|
302
363
|
colors.push(color);
|
303
364
|
verticesLeft--;
|
304
365
|
reader.align();
|
305
366
|
}
|
367
|
+
|
306
368
|
mesh.figures.push({
|
307
369
|
type: 'triangles',
|
308
370
|
coords: new Int32Array(ps),
|
309
371
|
colors: new Int32Array(ps)
|
310
372
|
});
|
311
373
|
}
|
374
|
+
|
312
375
|
function decodeType5Shading(mesh, reader, verticesPerRow) {
|
313
376
|
var coords = mesh.coords;
|
314
377
|
var colors = mesh.colors;
|
315
378
|
var ps = [];
|
379
|
+
|
316
380
|
while (reader.hasData) {
|
317
381
|
var coord = reader.readCoordinate();
|
318
382
|
var color = reader.readComponents();
|
@@ -320,6 +384,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
320
384
|
coords.push(coord);
|
321
385
|
colors.push(color);
|
322
386
|
}
|
387
|
+
|
323
388
|
mesh.figures.push({
|
324
389
|
type: 'lattice',
|
325
390
|
coords: new Int32Array(ps),
|
@@ -327,27 +392,34 @@ Shadings.Mesh = function MeshClosure() {
|
|
327
392
|
verticesPerRow: verticesPerRow
|
328
393
|
});
|
329
394
|
}
|
395
|
+
|
330
396
|
var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
|
331
397
|
var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
|
332
398
|
var TRIANGLE_DENSITY = 20;
|
399
|
+
|
333
400
|
var getB = function getBClosure() {
|
334
401
|
function buildB(count) {
|
335
402
|
var lut = [];
|
403
|
+
|
336
404
|
for (var i = 0; i <= count; i++) {
|
337
405
|
var t = i / count,
|
338
406
|
t_ = 1 - t;
|
339
407
|
lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));
|
340
408
|
}
|
409
|
+
|
341
410
|
return lut;
|
342
411
|
}
|
412
|
+
|
343
413
|
var cache = [];
|
344
414
|
return function getB(count) {
|
345
415
|
if (!cache[count]) {
|
346
416
|
cache[count] = buildB(count);
|
347
417
|
}
|
418
|
+
|
348
419
|
return cache[count];
|
349
420
|
};
|
350
421
|
}();
|
422
|
+
|
351
423
|
function buildFigureFromPatch(mesh, index) {
|
352
424
|
var figure = mesh.figures[index];
|
353
425
|
(0, _util.assert)(figure.type === 'patch', 'Unexpected patch mesh figure');
|
@@ -375,6 +447,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
375
447
|
c3 = colors[ci[3]];
|
376
448
|
var bRow = getB(splitYBy),
|
377
449
|
bCol = getB(splitXBy);
|
450
|
+
|
378
451
|
for (var row = 0; row <= splitYBy; row++) {
|
379
452
|
cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;
|
380
453
|
cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;
|
@@ -382,13 +455,16 @@ Shadings.Mesh = function MeshClosure() {
|
|
382
455
|
cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;
|
383
456
|
cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;
|
384
457
|
cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;
|
458
|
+
|
385
459
|
for (var col = 0; col <= splitXBy; col++, k++) {
|
386
460
|
if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
|
387
461
|
continue;
|
388
462
|
}
|
463
|
+
|
389
464
|
var x = 0,
|
390
465
|
y = 0;
|
391
466
|
var q = 0;
|
467
|
+
|
392
468
|
for (var i = 0; i <= 3; i++) {
|
393
469
|
for (var j = 0; j <= 3; j++, q++) {
|
394
470
|
var m = bRow[row][i] * bCol[col][j];
|
@@ -396,6 +472,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
396
472
|
y += coords[pi[q]][1] * m;
|
397
473
|
}
|
398
474
|
}
|
475
|
+
|
399
476
|
figureCoords[k] = coords.length;
|
400
477
|
coords.push([x, y]);
|
401
478
|
figureColors[k] = colors.length;
|
@@ -406,6 +483,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
406
483
|
colors.push(newColor);
|
407
484
|
}
|
408
485
|
}
|
486
|
+
|
409
487
|
figureCoords[0] = pi[0];
|
410
488
|
figureColors[0] = ci[0];
|
411
489
|
figureCoords[splitXBy] = pi[3];
|
@@ -421,26 +499,35 @@ Shadings.Mesh = function MeshClosure() {
|
|
421
499
|
verticesPerRow: verticesPerRow
|
422
500
|
};
|
423
501
|
}
|
502
|
+
|
424
503
|
function decodeType6Shading(mesh, reader) {
|
425
504
|
var coords = mesh.coords;
|
426
505
|
var colors = mesh.colors;
|
427
506
|
var ps = new Int32Array(16);
|
428
507
|
var cs = new Int32Array(4);
|
508
|
+
|
429
509
|
while (reader.hasData) {
|
430
510
|
var f = reader.readFlag();
|
511
|
+
|
431
512
|
if (!(0 <= f && f <= 3)) {
|
432
513
|
throw new _util.FormatError('Unknown type6 flag');
|
433
514
|
}
|
515
|
+
|
434
516
|
var i, ii;
|
435
517
|
var pi = coords.length;
|
518
|
+
|
436
519
|
for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
|
437
520
|
coords.push(reader.readCoordinate());
|
438
521
|
}
|
522
|
+
|
439
523
|
var ci = colors.length;
|
524
|
+
|
440
525
|
for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
|
441
526
|
colors.push(reader.readComponents());
|
442
527
|
}
|
528
|
+
|
443
529
|
var tmp1, tmp2, tmp3, tmp4;
|
530
|
+
|
444
531
|
switch (f) {
|
445
532
|
case 0:
|
446
533
|
ps[12] = pi + 3;
|
@@ -460,6 +547,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
460
547
|
cs[0] = ci;
|
461
548
|
cs[1] = ci + 3;
|
462
549
|
break;
|
550
|
+
|
463
551
|
case 1:
|
464
552
|
tmp1 = ps[12];
|
465
553
|
tmp2 = ps[13];
|
@@ -484,6 +572,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
484
572
|
cs[0] = tmp1;
|
485
573
|
cs[1] = ci + 1;
|
486
574
|
break;
|
575
|
+
|
487
576
|
case 2:
|
488
577
|
tmp1 = ps[15];
|
489
578
|
tmp2 = ps[11];
|
@@ -505,6 +594,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
505
594
|
cs[0] = tmp1;
|
506
595
|
cs[1] = ci + 1;
|
507
596
|
break;
|
597
|
+
|
508
598
|
case 3:
|
509
599
|
ps[12] = ps[0];
|
510
600
|
ps[13] = pi + 0;
|
@@ -524,6 +614,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
524
614
|
cs[1] = ci + 1;
|
525
615
|
break;
|
526
616
|
}
|
617
|
+
|
527
618
|
ps[5] = coords.length;
|
528
619
|
coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);
|
529
620
|
ps[6] = coords.length;
|
@@ -539,26 +630,35 @@ Shadings.Mesh = function MeshClosure() {
|
|
539
630
|
});
|
540
631
|
}
|
541
632
|
}
|
633
|
+
|
542
634
|
function decodeType7Shading(mesh, reader) {
|
543
635
|
var coords = mesh.coords;
|
544
636
|
var colors = mesh.colors;
|
545
637
|
var ps = new Int32Array(16);
|
546
638
|
var cs = new Int32Array(4);
|
639
|
+
|
547
640
|
while (reader.hasData) {
|
548
641
|
var f = reader.readFlag();
|
642
|
+
|
549
643
|
if (!(0 <= f && f <= 3)) {
|
550
644
|
throw new _util.FormatError('Unknown type7 flag');
|
551
645
|
}
|
646
|
+
|
552
647
|
var i, ii;
|
553
648
|
var pi = coords.length;
|
649
|
+
|
554
650
|
for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
|
555
651
|
coords.push(reader.readCoordinate());
|
556
652
|
}
|
653
|
+
|
557
654
|
var ci = colors.length;
|
655
|
+
|
558
656
|
for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
|
559
657
|
colors.push(reader.readComponents());
|
560
658
|
}
|
659
|
+
|
561
660
|
var tmp1, tmp2, tmp3, tmp4;
|
661
|
+
|
562
662
|
switch (f) {
|
563
663
|
case 0:
|
564
664
|
ps[12] = pi + 3;
|
@@ -582,6 +682,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
582
682
|
cs[0] = ci;
|
583
683
|
cs[1] = ci + 3;
|
584
684
|
break;
|
685
|
+
|
585
686
|
case 1:
|
586
687
|
tmp1 = ps[12];
|
587
688
|
tmp2 = ps[13];
|
@@ -610,6 +711,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
610
711
|
cs[0] = tmp1;
|
611
712
|
cs[1] = ci + 1;
|
612
713
|
break;
|
714
|
+
|
613
715
|
case 2:
|
614
716
|
tmp1 = ps[15];
|
615
717
|
tmp2 = ps[11];
|
@@ -635,6 +737,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
635
737
|
cs[0] = tmp1;
|
636
738
|
cs[1] = ci + 1;
|
637
739
|
break;
|
740
|
+
|
638
741
|
case 3:
|
639
742
|
ps[12] = ps[0];
|
640
743
|
ps[13] = pi + 0;
|
@@ -658,6 +761,7 @@ Shadings.Mesh = function MeshClosure() {
|
|
658
761
|
cs[1] = ci + 1;
|
659
762
|
break;
|
660
763
|
}
|
764
|
+
|
661
765
|
mesh.figures.push({
|
662
766
|
type: 'patch',
|
663
767
|
coords: new Int32Array(ps),
|
@@ -665,11 +769,13 @@ Shadings.Mesh = function MeshClosure() {
|
|
665
769
|
});
|
666
770
|
}
|
667
771
|
}
|
772
|
+
|
668
773
|
function updateBounds(mesh) {
|
669
774
|
var minX = mesh.coords[0][0],
|
670
775
|
minY = mesh.coords[0][1],
|
671
776
|
maxX = minX,
|
672
777
|
maxY = minY;
|
778
|
+
|
673
779
|
for (var i = 1, ii = mesh.coords.length; i < ii; i++) {
|
674
780
|
var x = mesh.coords[i][0],
|
675
781
|
y = mesh.coords[i][1];
|
@@ -678,42 +784,52 @@ Shadings.Mesh = function MeshClosure() {
|
|
678
784
|
maxX = maxX < x ? x : maxX;
|
679
785
|
maxY = maxY < y ? y : maxY;
|
680
786
|
}
|
787
|
+
|
681
788
|
mesh.bounds = [minX, minY, maxX, maxY];
|
682
789
|
}
|
790
|
+
|
683
791
|
function packData(mesh) {
|
684
792
|
var i, ii, j, jj;
|
685
793
|
var coords = mesh.coords;
|
686
794
|
var coordsPacked = new Float32Array(coords.length * 2);
|
795
|
+
|
687
796
|
for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
|
688
797
|
var xy = coords[i];
|
689
798
|
coordsPacked[j++] = xy[0];
|
690
799
|
coordsPacked[j++] = xy[1];
|
691
800
|
}
|
801
|
+
|
692
802
|
mesh.coords = coordsPacked;
|
693
803
|
var colors = mesh.colors;
|
694
804
|
var colorsPacked = new Uint8Array(colors.length * 3);
|
805
|
+
|
695
806
|
for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
|
696
807
|
var c = colors[i];
|
697
808
|
colorsPacked[j++] = c[0];
|
698
809
|
colorsPacked[j++] = c[1];
|
699
810
|
colorsPacked[j++] = c[2];
|
700
811
|
}
|
812
|
+
|
701
813
|
mesh.colors = colorsPacked;
|
702
814
|
var figures = mesh.figures;
|
815
|
+
|
703
816
|
for (i = 0, ii = figures.length; i < ii; i++) {
|
704
817
|
var figure = figures[i],
|
705
818
|
ps = figure.coords,
|
706
819
|
cs = figure.colors;
|
820
|
+
|
707
821
|
for (j = 0, jj = ps.length; j < jj; j++) {
|
708
822
|
ps[j] *= 2;
|
709
823
|
cs[j] *= 3;
|
710
824
|
}
|
711
825
|
}
|
712
826
|
}
|
827
|
+
|
713
828
|
function Mesh(stream, matrix, xref, res, pdfFunctionFactory) {
|
714
829
|
if (!(0, _primitives.isStream)(stream)) {
|
715
830
|
throw new _util.FormatError('Mesh data is not a stream');
|
716
831
|
}
|
832
|
+
|
717
833
|
var dict = stream.dict;
|
718
834
|
this.matrix = matrix;
|
719
835
|
this.shadingType = dict.get('ShadingType');
|
@@ -739,38 +855,49 @@ Shadings.Mesh = function MeshClosure() {
|
|
739
855
|
};
|
740
856
|
var reader = new MeshStreamReader(stream, decodeContext);
|
741
857
|
var patchMesh = false;
|
858
|
+
|
742
859
|
switch (this.shadingType) {
|
743
860
|
case ShadingType.FREE_FORM_MESH:
|
744
861
|
decodeType4Shading(this, reader);
|
745
862
|
break;
|
863
|
+
|
746
864
|
case ShadingType.LATTICE_FORM_MESH:
|
747
865
|
var verticesPerRow = dict.get('VerticesPerRow') | 0;
|
866
|
+
|
748
867
|
if (verticesPerRow < 2) {
|
749
868
|
throw new _util.FormatError('Invalid VerticesPerRow');
|
750
869
|
}
|
870
|
+
|
751
871
|
decodeType5Shading(this, reader, verticesPerRow);
|
752
872
|
break;
|
873
|
+
|
753
874
|
case ShadingType.COONS_PATCH_MESH:
|
754
875
|
decodeType6Shading(this, reader);
|
755
876
|
patchMesh = true;
|
756
877
|
break;
|
878
|
+
|
757
879
|
case ShadingType.TENSOR_PATCH_MESH:
|
758
880
|
decodeType7Shading(this, reader);
|
759
881
|
patchMesh = true;
|
760
882
|
break;
|
883
|
+
|
761
884
|
default:
|
762
885
|
(0, _util.unreachable)('Unsupported mesh type.');
|
763
886
|
break;
|
764
887
|
}
|
888
|
+
|
765
889
|
if (patchMesh) {
|
766
890
|
updateBounds(this);
|
891
|
+
|
767
892
|
for (var i = 0, ii = this.figures.length; i < ii; i++) {
|
768
893
|
buildFigureFromPatch(this, i);
|
769
894
|
}
|
770
895
|
}
|
896
|
+
|
771
897
|
updateBounds(this);
|
772
898
|
packData(this);
|
773
899
|
}
|
900
|
+
|
774
901
|
Mesh.prototype = {
|
775
902
|
getIR: function Mesh_getIR() {
|
776
903
|
return ['Mesh', this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];
|
@@ -778,10 +905,12 @@ Shadings.Mesh = function MeshClosure() {
|
|
778
905
|
};
|
779
906
|
return Mesh;
|
780
907
|
}();
|
908
|
+
|
781
909
|
Shadings.Dummy = function DummyClosure() {
|
782
910
|
function Dummy() {
|
783
911
|
this.type = 'Pattern';
|
784
912
|
}
|
913
|
+
|
785
914
|
Dummy.prototype = {
|
786
915
|
getIR: function Dummy_getIR() {
|
787
916
|
return ['Dummy'];
|
@@ -789,17 +918,20 @@ Shadings.Dummy = function DummyClosure() {
|
|
789
918
|
};
|
790
919
|
return Dummy;
|
791
920
|
}();
|
921
|
+
|
792
922
|
function getTilingPatternIR(operatorList, dict, args) {
|
793
923
|
var matrix = dict.getArray('Matrix');
|
924
|
+
|
794
925
|
var bbox = _util.Util.normalizeRect(dict.getArray('BBox'));
|
926
|
+
|
795
927
|
var xstep = dict.get('XStep');
|
796
928
|
var ystep = dict.get('YStep');
|
797
929
|
var paintType = dict.get('PaintType');
|
798
930
|
var tilingType = dict.get('TilingType');
|
931
|
+
|
799
932
|
if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {
|
800
|
-
throw new _util.FormatError(
|
933
|
+
throw new _util.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(bbox, "]."));
|
801
934
|
}
|
935
|
+
|
802
936
|
return ['TilingPattern', args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
|
803
|
-
}
|
804
|
-
exports.Pattern = Pattern;
|
805
|
-
exports.getTilingPatternIR = getTilingPatternIR;
|
937
|
+
}
|