pdfjs-dist 2.0.489 → 2.2.228
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/bower.json +1 -1
- package/build/pdf.js +18515 -11402
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +48266 -37137
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/external/url/url-lib.js +627 -0
- package/image_decoders/pdf.image_decoders.js +11350 -0
- package/image_decoders/pdf.image_decoders.js.map +1 -0
- package/image_decoders/pdf.image_decoders.min.js +1 -0
- package/lib/core/annotation.js +587 -242
- package/lib/core/arithmetic_decoder.js +275 -245
- package/lib/core/bidi.js +65 -6
- package/lib/core/ccitt.js +173 -18
- package/lib/core/ccitt_stream.js +15 -6
- package/lib/core/cff_parser.js +433 -61
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +400 -152
- package/lib/core/cmap.js +326 -87
- package/lib/core/colorspace.js +874 -594
- package/lib/core/core_utils.js +147 -0
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +560 -268
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +1005 -360
- package/lib/core/font_renderer.js +331 -97
- package/lib/core/fonts.js +812 -195
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +4 -3
- package/lib/core/image.js +169 -62
- package/lib/core/image_utils.js +111 -0
- package/lib/core/jbig2.js +479 -66
- package/lib/core/jbig2_stream.js +19 -8
- package/lib/core/jpeg_stream.js +38 -13
- package/lib/core/jpg.js +253 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +15 -15
- package/lib/core/murmurhash3.js +56 -34
- package/lib/core/obj.js +1354 -488
- package/lib/core/operator_list.js +144 -31
- package/lib/core/parser.js +539 -191
- package/lib/core/pattern.js +148 -14
- package/lib/core/pdf_manager.js +323 -133
- package/lib/core/primitives.js +111 -24
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +17 -17
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +32 -5
- package/lib/core/worker.js +217 -190
- package/lib/core/worker_stream.js +277 -0
- package/lib/display/annotation_layer.js +450 -133
- package/lib/display/api.js +1597 -784
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +360 -44
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/display_utils.js +747 -0
- package/lib/display/fetch_stream.js +221 -90
- package/lib/display/font_loader.js +468 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +635 -428
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +367 -175
- package/lib/display/pattern_helper.js +81 -31
- package/lib/display/svg.js +1235 -519
- package/lib/display/text_layer.js +153 -29
- package/lib/display/transport_stream.js +345 -94
- package/lib/display/webgl.js +64 -18
- package/lib/display/worker_options.js +5 -4
- package/lib/display/xml_parser.js +166 -53
- package/lib/examples/node/domstubs.js +60 -4
- package/lib/pdf.js +36 -14
- package/lib/pdf.worker.js +5 -3
- package/lib/shared/compatibility.js +158 -564
- package/lib/shared/global_scope.js +2 -2
- package/lib/shared/is_node.js +4 -4
- package/lib/shared/message_handler.js +521 -0
- package/lib/shared/streams_polyfill.js +21 -17
- package/lib/shared/url_polyfill.js +56 -0
- package/lib/shared/util.js +243 -710
- package/lib/test/unit/annotation_spec.js +870 -401
- package/lib/test/unit/api_spec.js +657 -345
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +54 -11
- package/lib/test/unit/clitests_helper.js +10 -8
- package/lib/test/unit/cmap_spec.js +95 -41
- package/lib/test/unit/colorspace_spec.js +115 -63
- package/lib/test/unit/core_utils_spec.js +191 -0
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +43 -55
- package/lib/test/unit/display_svg_spec.js +34 -18
- package/lib/test/unit/display_utils_spec.js +273 -0
- package/lib/test/unit/document_spec.js +8 -13
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +38 -15
- package/lib/test/unit/fetch_stream_spec.js +109 -0
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +33 -20
- package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
- package/lib/test/unit/metadata_spec.js +71 -11
- package/lib/test/unit/murmurhash3_spec.js +3 -3
- package/lib/test/unit/network_spec.js +19 -54
- package/lib/test/unit/network_utils_spec.js +91 -14
- package/lib/test/unit/node_stream_spec.js +56 -32
- package/lib/test/unit/parser_spec.js +162 -71
- package/lib/test/unit/pdf_find_controller_spec.js +230 -0
- package/lib/test/unit/pdf_find_utils_spec.js +63 -0
- package/lib/test/unit/pdf_history_spec.js +21 -9
- package/lib/test/unit/primitives_spec.js +53 -20
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +273 -56
- package/lib/test/unit/testreporter.js +21 -3
- package/lib/test/unit/type1_parser_spec.js +8 -6
- package/lib/test/unit/ui_utils_spec.js +454 -16
- package/lib/test/unit/unicode_spec.js +18 -15
- package/lib/test/unit/util_spec.js +87 -128
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1290 -588
- package/lib/web/app_options.js +100 -62
- package/lib/web/base_viewer.js +511 -182
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +32 -13
- package/lib/web/firefox_print_service.js +20 -10
- package/lib/web/firefoxcom.js +315 -80
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +28 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +22 -14
- package/lib/web/pdf_attachment_viewer.js +38 -18
- package/lib/web/pdf_cursor_tools.js +39 -16
- package/lib/web/pdf_document_properties.js +255 -136
- package/lib/web/pdf_find_bar.js +84 -40
- package/lib/web/pdf_find_controller.js +495 -184
- package/lib/web/pdf_find_utils.js +111 -0
- package/lib/web/pdf_history.js +190 -53
- package/lib/web/pdf_link_service.js +138 -77
- package/lib/web/pdf_outline_viewer.js +122 -46
- package/lib/web/pdf_page_view.js +191 -67
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +61 -13
- package/lib/web/pdf_rendering_queue.js +28 -9
- package/lib/web/pdf_sidebar.js +141 -81
- package/lib/web/pdf_sidebar_resizer.js +42 -16
- package/lib/web/pdf_single_page_viewer.js +74 -66
- package/lib/web/pdf_thumbnail_view.js +104 -33
- package/lib/web/pdf_thumbnail_viewer.js +66 -26
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +284 -89
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +134 -59
- package/lib/web/toolbar.js +78 -43
- package/lib/web/ui_utils.js +462 -136
- package/lib/web/view_history.js +215 -67
- package/lib/web/viewer_compatibility.js +4 -13
- package/package.json +5 -4
- package/web/pdf_viewer.css +79 -11
- package/web/pdf_viewer.js +6107 -3748
- package/web/pdf_viewer.js.map +1 -1
- package/lib/display/dom_utils.js +0 -309
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/test/unit/fonts_spec.js +0 -81
- package/lib/web/dom_events.js +0 -137
package/lib/core/primitives.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 2019 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.
|
@@ -19,43 +19,79 @@
|
|
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.clearPrimitiveCaches = clearPrimitiveCaches;
|
28
|
+
exports.isEOF = isEOF;
|
29
|
+
exports.isCmd = isCmd;
|
30
|
+
exports.isDict = isDict;
|
31
|
+
exports.isName = isName;
|
32
|
+
exports.isRef = isRef;
|
33
|
+
exports.isRefsEqual = isRefsEqual;
|
34
|
+
exports.isStream = isStream;
|
35
|
+
exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0;
|
36
|
+
|
37
|
+
var _util = require("../shared/util");
|
27
38
|
|
28
|
-
|
39
|
+
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
29
40
|
|
30
41
|
var EOF = {};
|
42
|
+
exports.EOF = EOF;
|
43
|
+
|
31
44
|
var Name = function NameClosure() {
|
45
|
+
var nameCache = Object.create(null);
|
46
|
+
|
32
47
|
function Name(name) {
|
33
48
|
this.name = name;
|
34
49
|
}
|
50
|
+
|
35
51
|
Name.prototype = {};
|
36
|
-
|
52
|
+
|
37
53
|
Name.get = function Name_get(name) {
|
38
54
|
var nameValue = nameCache[name];
|
39
55
|
return nameValue ? nameValue : nameCache[name] = new Name(name);
|
40
56
|
};
|
57
|
+
|
58
|
+
Name._clearCache = function () {
|
59
|
+
nameCache = Object.create(null);
|
60
|
+
};
|
61
|
+
|
41
62
|
return Name;
|
42
63
|
}();
|
64
|
+
|
65
|
+
exports.Name = Name;
|
66
|
+
|
43
67
|
var Cmd = function CmdClosure() {
|
68
|
+
var cmdCache = Object.create(null);
|
69
|
+
|
44
70
|
function Cmd(cmd) {
|
45
71
|
this.cmd = cmd;
|
46
72
|
}
|
73
|
+
|
47
74
|
Cmd.prototype = {};
|
48
|
-
|
75
|
+
|
49
76
|
Cmd.get = function Cmd_get(cmd) {
|
50
77
|
var cmdValue = cmdCache[cmd];
|
51
78
|
return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);
|
52
79
|
};
|
80
|
+
|
81
|
+
Cmd._clearCache = function () {
|
82
|
+
cmdCache = Object.create(null);
|
83
|
+
};
|
84
|
+
|
53
85
|
return Cmd;
|
54
86
|
}();
|
87
|
+
|
88
|
+
exports.Cmd = Cmd;
|
89
|
+
|
55
90
|
var Dict = function DictClosure() {
|
56
91
|
var nonSerializable = function nonSerializableClosure() {
|
57
92
|
return nonSerializable;
|
58
93
|
};
|
94
|
+
|
59
95
|
function Dict(xref) {
|
60
96
|
this._map = Object.create(null);
|
61
97
|
this.xref = xref;
|
@@ -63,6 +99,7 @@ var Dict = function DictClosure() {
|
|
63
99
|
this.suppressEncryption = false;
|
64
100
|
this.__nonSerializable__ = nonSerializable;
|
65
101
|
}
|
102
|
+
|
66
103
|
Dict.prototype = {
|
67
104
|
assignXref: function Dict_assignXref(newXref) {
|
68
105
|
this.xref = newXref;
|
@@ -71,12 +108,15 @@ var Dict = function DictClosure() {
|
|
71
108
|
var value;
|
72
109
|
var xref = this.xref,
|
73
110
|
suppressEncryption = this.suppressEncryption;
|
111
|
+
|
74
112
|
if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') {
|
75
113
|
return xref ? xref.fetchIfRef(value, suppressEncryption) : value;
|
76
114
|
}
|
115
|
+
|
77
116
|
if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') {
|
78
117
|
return xref ? xref.fetchIfRef(value, suppressEncryption) : value;
|
79
118
|
}
|
119
|
+
|
80
120
|
value = this._map[key3] || null;
|
81
121
|
return xref ? xref.fetchIfRef(value, suppressEncryption) : value;
|
82
122
|
},
|
@@ -84,38 +124,50 @@ var Dict = function DictClosure() {
|
|
84
124
|
var value;
|
85
125
|
var xref = this.xref,
|
86
126
|
suppressEncryption = this.suppressEncryption;
|
127
|
+
|
87
128
|
if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') {
|
88
129
|
if (xref) {
|
89
130
|
return xref.fetchIfRefAsync(value, suppressEncryption);
|
90
131
|
}
|
132
|
+
|
91
133
|
return Promise.resolve(value);
|
92
134
|
}
|
135
|
+
|
93
136
|
if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') {
|
94
137
|
if (xref) {
|
95
138
|
return xref.fetchIfRefAsync(value, suppressEncryption);
|
96
139
|
}
|
140
|
+
|
97
141
|
return Promise.resolve(value);
|
98
142
|
}
|
143
|
+
|
99
144
|
value = this._map[key3] || null;
|
145
|
+
|
100
146
|
if (xref) {
|
101
147
|
return xref.fetchIfRefAsync(value, suppressEncryption);
|
102
148
|
}
|
149
|
+
|
103
150
|
return Promise.resolve(value);
|
104
151
|
},
|
105
152
|
getArray: function Dict_getArray(key1, key2, key3) {
|
106
153
|
var value = this.get(key1, key2, key3);
|
107
154
|
var xref = this.xref,
|
108
155
|
suppressEncryption = this.suppressEncryption;
|
156
|
+
|
109
157
|
if (!Array.isArray(value) || !xref) {
|
110
158
|
return value;
|
111
159
|
}
|
160
|
+
|
112
161
|
value = value.slice();
|
162
|
+
|
113
163
|
for (var i = 0, ii = value.length; i < ii; i++) {
|
114
164
|
if (!isRef(value[i])) {
|
115
165
|
continue;
|
116
166
|
}
|
167
|
+
|
117
168
|
value[i] = xref.fetch(value[i], suppressEncryption);
|
118
169
|
}
|
170
|
+
|
119
171
|
return value;
|
120
172
|
},
|
121
173
|
getRaw: function Dict_getRaw(key) {
|
@@ -137,44 +189,72 @@ var Dict = function DictClosure() {
|
|
137
189
|
}
|
138
190
|
};
|
139
191
|
Dict.empty = new Dict(null);
|
192
|
+
|
140
193
|
Dict.merge = function (xref, dictArray) {
|
141
194
|
var mergedDict = new Dict(xref);
|
195
|
+
|
142
196
|
for (var i = 0, ii = dictArray.length; i < ii; i++) {
|
143
197
|
var dict = dictArray[i];
|
198
|
+
|
144
199
|
if (!isDict(dict)) {
|
145
200
|
continue;
|
146
201
|
}
|
202
|
+
|
147
203
|
for (var keyName in dict._map) {
|
148
204
|
if (mergedDict._map[keyName] !== undefined) {
|
149
205
|
continue;
|
150
206
|
}
|
207
|
+
|
151
208
|
mergedDict._map[keyName] = dict._map[keyName];
|
152
209
|
}
|
153
210
|
}
|
211
|
+
|
154
212
|
return mergedDict;
|
155
213
|
};
|
214
|
+
|
156
215
|
return Dict;
|
157
216
|
}();
|
217
|
+
|
218
|
+
exports.Dict = Dict;
|
219
|
+
|
158
220
|
var Ref = function RefClosure() {
|
221
|
+
var refCache = Object.create(null);
|
222
|
+
|
159
223
|
function Ref(num, gen) {
|
160
224
|
this.num = num;
|
161
225
|
this.gen = gen;
|
162
226
|
}
|
227
|
+
|
163
228
|
Ref.prototype = {
|
164
229
|
toString: function Ref_toString() {
|
165
|
-
|
166
|
-
|
167
|
-
str += this.gen;
|
230
|
+
if (this.gen === 0) {
|
231
|
+
return "".concat(this.num, "R");
|
168
232
|
}
|
169
|
-
|
233
|
+
|
234
|
+
return "".concat(this.num, "R").concat(this.gen);
|
170
235
|
}
|
171
236
|
};
|
237
|
+
|
238
|
+
Ref.get = function (num, gen) {
|
239
|
+
var key = gen === 0 ? "".concat(num, "R") : "".concat(num, "R").concat(gen);
|
240
|
+
var refValue = refCache[key];
|
241
|
+
return refValue ? refValue : refCache[key] = new Ref(num, gen);
|
242
|
+
};
|
243
|
+
|
244
|
+
Ref._clearCache = function () {
|
245
|
+
refCache = Object.create(null);
|
246
|
+
};
|
247
|
+
|
172
248
|
return Ref;
|
173
249
|
}();
|
250
|
+
|
251
|
+
exports.Ref = Ref;
|
252
|
+
|
174
253
|
var RefSet = function RefSetClosure() {
|
175
254
|
function RefSet() {
|
176
255
|
this.dict = Object.create(null);
|
177
256
|
}
|
257
|
+
|
178
258
|
RefSet.prototype = {
|
179
259
|
has: function RefSet_has(ref) {
|
180
260
|
return ref.toString() in this.dict;
|
@@ -188,10 +268,14 @@ var RefSet = function RefSetClosure() {
|
|
188
268
|
};
|
189
269
|
return RefSet;
|
190
270
|
}();
|
271
|
+
|
272
|
+
exports.RefSet = RefSet;
|
273
|
+
|
191
274
|
var RefSetCache = function RefSetCacheClosure() {
|
192
275
|
function RefSetCache() {
|
193
276
|
this.dict = Object.create(null);
|
194
277
|
}
|
278
|
+
|
195
279
|
RefSetCache.prototype = {
|
196
280
|
get: function RefSetCache_get(ref) {
|
197
281
|
return this.dict[ref.toString()];
|
@@ -216,38 +300,41 @@ var RefSetCache = function RefSetCacheClosure() {
|
|
216
300
|
};
|
217
301
|
return RefSetCache;
|
218
302
|
}();
|
303
|
+
|
304
|
+
exports.RefSetCache = RefSetCache;
|
305
|
+
|
219
306
|
function isEOF(v) {
|
220
307
|
return v === EOF;
|
221
308
|
}
|
309
|
+
|
222
310
|
function isName(v, name) {
|
223
311
|
return v instanceof Name && (name === undefined || v.name === name);
|
224
312
|
}
|
313
|
+
|
225
314
|
function isCmd(v, cmd) {
|
226
315
|
return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
|
227
316
|
}
|
317
|
+
|
228
318
|
function isDict(v, type) {
|
229
319
|
return v instanceof Dict && (type === undefined || isName(v.get('Type'), type));
|
230
320
|
}
|
321
|
+
|
231
322
|
function isRef(v) {
|
232
323
|
return v instanceof Ref;
|
233
324
|
}
|
325
|
+
|
234
326
|
function isRefsEqual(v1, v2) {
|
235
327
|
return v1.num === v2.num && v1.gen === v2.gen;
|
236
328
|
}
|
329
|
+
|
237
330
|
function isStream(v) {
|
238
|
-
return
|
331
|
+
return _typeof(v) === 'object' && v !== null && v.getBytes !== undefined;
|
239
332
|
}
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
exports.isCmd = isCmd;
|
249
|
-
exports.isDict = isDict;
|
250
|
-
exports.isName = isName;
|
251
|
-
exports.isRef = isRef;
|
252
|
-
exports.isRefsEqual = isRefsEqual;
|
253
|
-
exports.isStream = isStream;
|
333
|
+
|
334
|
+
function clearPrimitiveCaches() {
|
335
|
+
Cmd._clearCache();
|
336
|
+
|
337
|
+
Name._clearCache();
|
338
|
+
|
339
|
+
Ref._clearCache();
|
340
|
+
}
|
package/lib/core/ps_parser.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 2019 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.
|
@@ -19,50 +19,72 @@
|
|
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.PostScriptParser = exports.PostScriptLexer =
|
27
|
+
exports.PostScriptParser = exports.PostScriptLexer = void 0;
|
28
28
|
|
29
|
-
var _util = require(
|
29
|
+
var _util = require("../shared/util");
|
30
30
|
|
31
|
-
var _primitives = require(
|
31
|
+
var _primitives = require("./primitives");
|
32
32
|
|
33
|
-
|
33
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
34
|
+
|
35
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
36
|
+
|
37
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
38
|
+
|
39
|
+
var PostScriptParser =
|
40
|
+
/*#__PURE__*/
|
41
|
+
function () {
|
34
42
|
function PostScriptParser(lexer) {
|
43
|
+
_classCallCheck(this, PostScriptParser);
|
44
|
+
|
35
45
|
this.lexer = lexer;
|
36
46
|
this.operators = [];
|
37
47
|
this.token = null;
|
38
48
|
this.prev = null;
|
39
49
|
}
|
40
|
-
|
41
|
-
|
50
|
+
|
51
|
+
_createClass(PostScriptParser, [{
|
52
|
+
key: "nextToken",
|
53
|
+
value: function nextToken() {
|
42
54
|
this.prev = this.token;
|
43
55
|
this.token = this.lexer.getToken();
|
44
|
-
}
|
45
|
-
|
56
|
+
}
|
57
|
+
}, {
|
58
|
+
key: "accept",
|
59
|
+
value: function accept(type) {
|
46
60
|
if (this.token.type === type) {
|
47
61
|
this.nextToken();
|
48
62
|
return true;
|
49
63
|
}
|
64
|
+
|
50
65
|
return false;
|
51
|
-
}
|
52
|
-
|
66
|
+
}
|
67
|
+
}, {
|
68
|
+
key: "expect",
|
69
|
+
value: function expect(type) {
|
53
70
|
if (this.accept(type)) {
|
54
71
|
return true;
|
55
72
|
}
|
56
|
-
|
57
|
-
|
58
|
-
|
73
|
+
|
74
|
+
throw new _util.FormatError("Unexpected symbol: found ".concat(this.token.type, " expected ").concat(type, "."));
|
75
|
+
}
|
76
|
+
}, {
|
77
|
+
key: "parse",
|
78
|
+
value: function parse() {
|
59
79
|
this.nextToken();
|
60
80
|
this.expect(PostScriptTokenTypes.LBRACE);
|
61
81
|
this.parseBlock();
|
62
82
|
this.expect(PostScriptTokenTypes.RBRACE);
|
63
83
|
return this.operators;
|
64
|
-
}
|
65
|
-
|
84
|
+
}
|
85
|
+
}, {
|
86
|
+
key: "parseBlock",
|
87
|
+
value: function parseBlock() {
|
66
88
|
while (true) {
|
67
89
|
if (this.accept(PostScriptTokenTypes.NUMBER)) {
|
68
90
|
this.operators.push(this.prev.value);
|
@@ -74,12 +96,15 @@ var PostScriptParser = function PostScriptParserClosure() {
|
|
74
96
|
return;
|
75
97
|
}
|
76
98
|
}
|
77
|
-
}
|
78
|
-
|
99
|
+
}
|
100
|
+
}, {
|
101
|
+
key: "parseCondition",
|
102
|
+
value: function parseCondition() {
|
79
103
|
var conditionLocation = this.operators.length;
|
80
104
|
this.operators.push(null, null);
|
81
105
|
this.parseBlock();
|
82
106
|
this.expect(PostScriptTokenTypes.RBRACE);
|
107
|
+
|
83
108
|
if (this.accept(PostScriptTokenTypes.IF)) {
|
84
109
|
this.operators[conditionLocation] = this.operators.length;
|
85
110
|
this.operators[conditionLocation + 1] = 'jz';
|
@@ -98,9 +123,12 @@ var PostScriptParser = function PostScriptParserClosure() {
|
|
98
123
|
throw new _util.FormatError('PS Function: error parsing conditional.');
|
99
124
|
}
|
100
125
|
}
|
101
|
-
};
|
126
|
+
}]);
|
127
|
+
|
102
128
|
return PostScriptParser;
|
103
129
|
}();
|
130
|
+
|
131
|
+
exports.PostScriptParser = PostScriptParser;
|
104
132
|
var PostScriptTokenTypes = {
|
105
133
|
LBRACE: 0,
|
106
134
|
RBRACE: 1,
|
@@ -109,42 +137,86 @@ var PostScriptTokenTypes = {
|
|
109
137
|
IF: 4,
|
110
138
|
IFELSE: 5
|
111
139
|
};
|
140
|
+
|
112
141
|
var PostScriptToken = function PostScriptTokenClosure() {
|
113
|
-
function PostScriptToken(type, value) {
|
114
|
-
this.type = type;
|
115
|
-
this.value = value;
|
116
|
-
}
|
117
142
|
var opCache = Object.create(null);
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
143
|
+
|
144
|
+
var PostScriptToken =
|
145
|
+
/*#__PURE__*/
|
146
|
+
function () {
|
147
|
+
function PostScriptToken(type, value) {
|
148
|
+
_classCallCheck(this, PostScriptToken);
|
149
|
+
|
150
|
+
this.type = type;
|
151
|
+
this.value = value;
|
122
152
|
}
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
153
|
+
|
154
|
+
_createClass(PostScriptToken, null, [{
|
155
|
+
key: "getOperator",
|
156
|
+
value: function getOperator(op) {
|
157
|
+
var opValue = opCache[op];
|
158
|
+
|
159
|
+
if (opValue) {
|
160
|
+
return opValue;
|
161
|
+
}
|
162
|
+
|
163
|
+
return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
|
164
|
+
}
|
165
|
+
}, {
|
166
|
+
key: "LBRACE",
|
167
|
+
get: function get() {
|
168
|
+
return (0, _util.shadow)(this, 'LBRACE', new PostScriptToken(PostScriptTokenTypes.LBRACE, '{'));
|
169
|
+
}
|
170
|
+
}, {
|
171
|
+
key: "RBRACE",
|
172
|
+
get: function get() {
|
173
|
+
return (0, _util.shadow)(this, 'RBRACE', new PostScriptToken(PostScriptTokenTypes.RBRACE, '}'));
|
174
|
+
}
|
175
|
+
}, {
|
176
|
+
key: "IF",
|
177
|
+
get: function get() {
|
178
|
+
return (0, _util.shadow)(this, 'IF', new PostScriptToken(PostScriptTokenTypes.IF, 'IF'));
|
179
|
+
}
|
180
|
+
}, {
|
181
|
+
key: "IFELSE",
|
182
|
+
get: function get() {
|
183
|
+
return (0, _util.shadow)(this, 'IFELSE', new PostScriptToken(PostScriptTokenTypes.IFELSE, 'IFELSE'));
|
184
|
+
}
|
185
|
+
}]);
|
186
|
+
|
187
|
+
return PostScriptToken;
|
188
|
+
}();
|
189
|
+
|
129
190
|
return PostScriptToken;
|
130
191
|
}();
|
131
|
-
|
192
|
+
|
193
|
+
var PostScriptLexer =
|
194
|
+
/*#__PURE__*/
|
195
|
+
function () {
|
132
196
|
function PostScriptLexer(stream) {
|
197
|
+
_classCallCheck(this, PostScriptLexer);
|
198
|
+
|
133
199
|
this.stream = stream;
|
134
200
|
this.nextChar();
|
135
201
|
this.strBuf = [];
|
136
202
|
}
|
137
|
-
|
138
|
-
|
203
|
+
|
204
|
+
_createClass(PostScriptLexer, [{
|
205
|
+
key: "nextChar",
|
206
|
+
value: function nextChar() {
|
139
207
|
return this.currentChar = this.stream.getByte();
|
140
|
-
}
|
141
|
-
|
208
|
+
}
|
209
|
+
}, {
|
210
|
+
key: "getToken",
|
211
|
+
value: function getToken() {
|
142
212
|
var comment = false;
|
143
213
|
var ch = this.currentChar;
|
214
|
+
|
144
215
|
while (true) {
|
145
216
|
if (ch < 0) {
|
146
217
|
return _primitives.EOF;
|
147
218
|
}
|
219
|
+
|
148
220
|
if (comment) {
|
149
221
|
if (ch === 0x0A || ch === 0x0D) {
|
150
222
|
comment = false;
|
@@ -154,8 +226,10 @@ var PostScriptLexer = function PostScriptLexerClosure() {
|
|
154
226
|
} else if (!(0, _util.isSpace)(ch)) {
|
155
227
|
break;
|
156
228
|
}
|
229
|
+
|
157
230
|
ch = this.nextChar();
|
158
231
|
}
|
232
|
+
|
159
233
|
switch (ch | 0) {
|
160
234
|
case 0x30:
|
161
235
|
case 0x31:
|
@@ -171,34 +245,45 @@ var PostScriptLexer = function PostScriptLexerClosure() {
|
|
171
245
|
case 0x2D:
|
172
246
|
case 0x2E:
|
173
247
|
return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());
|
248
|
+
|
174
249
|
case 0x7B:
|
175
250
|
this.nextChar();
|
176
251
|
return PostScriptToken.LBRACE;
|
252
|
+
|
177
253
|
case 0x7D:
|
178
254
|
this.nextChar();
|
179
255
|
return PostScriptToken.RBRACE;
|
180
256
|
}
|
257
|
+
|
181
258
|
var strBuf = this.strBuf;
|
182
259
|
strBuf.length = 0;
|
183
260
|
strBuf[0] = String.fromCharCode(ch);
|
261
|
+
|
184
262
|
while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A)) {
|
185
263
|
strBuf.push(String.fromCharCode(ch));
|
186
264
|
}
|
265
|
+
|
187
266
|
var str = strBuf.join('');
|
267
|
+
|
188
268
|
switch (str.toLowerCase()) {
|
189
269
|
case 'if':
|
190
270
|
return PostScriptToken.IF;
|
271
|
+
|
191
272
|
case 'ifelse':
|
192
273
|
return PostScriptToken.IFELSE;
|
274
|
+
|
193
275
|
default:
|
194
276
|
return PostScriptToken.getOperator(str);
|
195
277
|
}
|
196
|
-
}
|
197
|
-
|
278
|
+
}
|
279
|
+
}, {
|
280
|
+
key: "getNumber",
|
281
|
+
value: function getNumber() {
|
198
282
|
var ch = this.currentChar;
|
199
283
|
var strBuf = this.strBuf;
|
200
284
|
strBuf.length = 0;
|
201
285
|
strBuf[0] = String.fromCharCode(ch);
|
286
|
+
|
202
287
|
while ((ch = this.nextChar()) >= 0) {
|
203
288
|
if (ch >= 0x30 && ch <= 0x39 || ch === 0x2D || ch === 0x2E) {
|
204
289
|
strBuf.push(String.fromCharCode(ch));
|
@@ -206,14 +291,18 @@ var PostScriptLexer = function PostScriptLexerClosure() {
|
|
206
291
|
break;
|
207
292
|
}
|
208
293
|
}
|
294
|
+
|
209
295
|
var value = parseFloat(strBuf.join(''));
|
296
|
+
|
210
297
|
if (isNaN(value)) {
|
211
|
-
throw new _util.FormatError(
|
298
|
+
throw new _util.FormatError("Invalid floating point number: ".concat(value));
|
212
299
|
}
|
300
|
+
|
213
301
|
return value;
|
214
302
|
}
|
215
|
-
};
|
303
|
+
}]);
|
304
|
+
|
216
305
|
return PostScriptLexer;
|
217
306
|
}();
|
218
|
-
|
219
|
-
exports.
|
307
|
+
|
308
|
+
exports.PostScriptLexer = PostScriptLexer;
|