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
@@ -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.
|
@@ -21,23 +21,23 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var _function = require("../../core/function");
|
24
|
+
var _function = require("../../core/function.js");
|
25
25
|
|
26
|
-
var _ps_parser = require("../../core/ps_parser");
|
26
|
+
var _ps_parser = require("../../core/ps_parser.js");
|
27
27
|
|
28
|
-
var _stream = require("../../core/stream");
|
28
|
+
var _stream = require("../../core/stream.js");
|
29
29
|
|
30
|
-
describe(
|
30
|
+
describe("function", function () {
|
31
31
|
beforeEach(function () {
|
32
32
|
jasmine.addMatchers({
|
33
|
-
toMatchArray
|
33
|
+
toMatchArray(util, customEqualityTesters) {
|
34
34
|
return {
|
35
|
-
compare
|
35
|
+
compare(actual, expected) {
|
36
36
|
var result = {};
|
37
37
|
|
38
38
|
if (actual.length !== expected.length) {
|
39
39
|
result.pass = false;
|
40
|
-
result.message =
|
40
|
+
result.message = "Array length: " + actual.length + ", expected: " + expected.length;
|
41
41
|
return result;
|
42
42
|
}
|
43
43
|
|
@@ -72,67 +72,69 @@ describe('function', function () {
|
|
72
72
|
|
73
73
|
return result;
|
74
74
|
}
|
75
|
+
|
75
76
|
};
|
76
77
|
}
|
78
|
+
|
77
79
|
});
|
78
80
|
});
|
79
|
-
describe(
|
81
|
+
describe("PostScriptParser", function () {
|
80
82
|
function parse(program) {
|
81
83
|
var stream = new _stream.StringStream(program);
|
82
84
|
var parser = new _ps_parser.PostScriptParser(new _ps_parser.PostScriptLexer(stream));
|
83
85
|
return parser.parse();
|
84
86
|
}
|
85
87
|
|
86
|
-
it(
|
87
|
-
var output = parse(
|
88
|
+
it("parses empty programs", function () {
|
89
|
+
var output = parse("{}");
|
88
90
|
expect(output.length).toEqual(0);
|
89
91
|
});
|
90
|
-
it(
|
92
|
+
it("parses positive numbers", function () {
|
91
93
|
var number = 999;
|
92
|
-
var program = parse(
|
94
|
+
var program = parse("{ " + number + " }");
|
93
95
|
var expectedProgram = [number];
|
94
96
|
expect(program).toMatchArray(expectedProgram);
|
95
97
|
});
|
96
|
-
it(
|
98
|
+
it("parses negative numbers", function () {
|
97
99
|
var number = -999;
|
98
|
-
var program = parse(
|
100
|
+
var program = parse("{ " + number + " }");
|
99
101
|
var expectedProgram = [number];
|
100
102
|
expect(program).toMatchArray(expectedProgram);
|
101
103
|
});
|
102
|
-
it(
|
104
|
+
it("parses negative floats", function () {
|
103
105
|
var number = 3.3;
|
104
|
-
var program = parse(
|
106
|
+
var program = parse("{ " + number + " }");
|
105
107
|
var expectedProgram = [number];
|
106
108
|
expect(program).toMatchArray(expectedProgram);
|
107
109
|
});
|
108
|
-
it(
|
109
|
-
var program = parse(
|
110
|
-
var expectedProgram = [
|
110
|
+
it("parses operators", function () {
|
111
|
+
var program = parse("{ sub }");
|
112
|
+
var expectedProgram = ["sub"];
|
111
113
|
expect(program).toMatchArray(expectedProgram);
|
112
114
|
});
|
113
|
-
it(
|
114
|
-
var program = parse(
|
115
|
-
var expectedProgram = [3,
|
115
|
+
it("parses if statements", function () {
|
116
|
+
var program = parse("{ { 99 } if }");
|
117
|
+
var expectedProgram = [3, "jz", 99];
|
116
118
|
expect(program).toMatchArray(expectedProgram);
|
117
119
|
});
|
118
|
-
it(
|
119
|
-
var program = parse(
|
120
|
-
var expectedProgram = [5,
|
120
|
+
it("parses ifelse statements", function () {
|
121
|
+
var program = parse("{ { 99 } { 44 } ifelse }");
|
122
|
+
var expectedProgram = [5, "jz", 99, 6, "j", 44];
|
121
123
|
expect(program).toMatchArray(expectedProgram);
|
122
124
|
});
|
123
|
-
it(
|
125
|
+
it("handles missing brackets", function () {
|
124
126
|
expect(function () {
|
125
|
-
parse(
|
126
|
-
}).toThrow(new Error(
|
127
|
+
parse("{");
|
128
|
+
}).toThrow(new Error("Unexpected symbol: found undefined expected 1."));
|
127
129
|
});
|
128
|
-
it(
|
130
|
+
it("handles junk after the end", function () {
|
129
131
|
var number = 3.3;
|
130
|
-
var program = parse(
|
132
|
+
var program = parse("{ " + number + " }#");
|
131
133
|
var expectedProgram = [number];
|
132
134
|
expect(program).toMatchArray(expectedProgram);
|
133
135
|
});
|
134
136
|
});
|
135
|
-
describe(
|
137
|
+
describe("PostScriptEvaluator", function () {
|
136
138
|
function evaluate(program) {
|
137
139
|
var stream = new _stream.StringStream(program);
|
138
140
|
var parser = new _ps_parser.PostScriptParser(new _ps_parser.PostScriptLexer(stream));
|
@@ -142,318 +144,318 @@ describe('function', function () {
|
|
142
144
|
return output;
|
143
145
|
}
|
144
146
|
|
145
|
-
it(
|
146
|
-
var stack = evaluate(
|
147
|
+
it("pushes stack", function () {
|
148
|
+
var stack = evaluate("{ 99 }");
|
147
149
|
var expectedStack = [99];
|
148
150
|
expect(stack).toMatchArray(expectedStack);
|
149
151
|
});
|
150
|
-
it(
|
151
|
-
var stack = evaluate(
|
152
|
+
it("handles if with true", function () {
|
153
|
+
var stack = evaluate("{ 1 {99} if }");
|
152
154
|
var expectedStack = [99];
|
153
155
|
expect(stack).toMatchArray(expectedStack);
|
154
156
|
});
|
155
|
-
it(
|
156
|
-
var stack = evaluate(
|
157
|
+
it("handles if with false", function () {
|
158
|
+
var stack = evaluate("{ 0 {99} if }");
|
157
159
|
var expectedStack = [];
|
158
160
|
expect(stack).toMatchArray(expectedStack);
|
159
161
|
});
|
160
|
-
it(
|
161
|
-
var stack = evaluate(
|
162
|
+
it("handles ifelse with true", function () {
|
163
|
+
var stack = evaluate("{ 1 {99} {77} ifelse }");
|
162
164
|
var expectedStack = [99];
|
163
165
|
expect(stack).toMatchArray(expectedStack);
|
164
166
|
});
|
165
|
-
it(
|
166
|
-
var stack = evaluate(
|
167
|
+
it("handles ifelse with false", function () {
|
168
|
+
var stack = evaluate("{ 0 {99} {77} ifelse }");
|
167
169
|
var expectedStack = [77];
|
168
170
|
expect(stack).toMatchArray(expectedStack);
|
169
171
|
});
|
170
|
-
it(
|
171
|
-
var stack = evaluate(
|
172
|
+
it("handles nested if", function () {
|
173
|
+
var stack = evaluate("{ 1 {1 {77} if} if }");
|
172
174
|
var expectedStack = [77];
|
173
175
|
expect(stack).toMatchArray(expectedStack);
|
174
176
|
});
|
175
|
-
it(
|
176
|
-
var stack = evaluate(
|
177
|
+
it("abs", function () {
|
178
|
+
var stack = evaluate("{ -2 abs }");
|
177
179
|
var expectedStack = [2];
|
178
180
|
expect(stack).toMatchArray(expectedStack);
|
179
181
|
});
|
180
|
-
it(
|
181
|
-
var stack = evaluate(
|
182
|
+
it("adds", function () {
|
183
|
+
var stack = evaluate("{ 1 2 add }");
|
182
184
|
var expectedStack = [3];
|
183
185
|
expect(stack).toMatchArray(expectedStack);
|
184
186
|
});
|
185
|
-
it(
|
186
|
-
var stack = evaluate(
|
187
|
+
it("boolean and", function () {
|
188
|
+
var stack = evaluate("{ true false and }");
|
187
189
|
var expectedStack = [false];
|
188
190
|
expect(stack).toMatchArray(expectedStack);
|
189
191
|
});
|
190
|
-
it(
|
191
|
-
var stack = evaluate(
|
192
|
+
it("bitwise and", function () {
|
193
|
+
var stack = evaluate("{ 254 1 and }");
|
192
194
|
var expectedStack = [254 & 1];
|
193
195
|
expect(stack).toMatchArray(expectedStack);
|
194
196
|
});
|
195
|
-
it(
|
196
|
-
var stack = evaluate(
|
197
|
+
it("calculates the inverse tangent of a number", function () {
|
198
|
+
var stack = evaluate("{ 90 atan }");
|
197
199
|
var expectedStack = [Math.atan(90)];
|
198
200
|
expect(stack).toMatchArray(expectedStack);
|
199
201
|
});
|
200
|
-
it(
|
201
|
-
var stack = evaluate(
|
202
|
+
it("handles bitshifting ", function () {
|
203
|
+
var stack = evaluate("{ 50 2 bitshift }");
|
202
204
|
var expectedStack = [200];
|
203
205
|
expect(stack).toMatchArray(expectedStack);
|
204
206
|
});
|
205
|
-
it(
|
206
|
-
var stack = evaluate(
|
207
|
+
it("calculates the ceiling value", function () {
|
208
|
+
var stack = evaluate("{ 9.9 ceiling }");
|
207
209
|
var expectedStack = [10];
|
208
210
|
expect(stack).toMatchArray(expectedStack);
|
209
211
|
});
|
210
|
-
it(
|
211
|
-
var stack = evaluate(
|
212
|
+
it("copies", function () {
|
213
|
+
var stack = evaluate("{ 99 98 2 copy }");
|
212
214
|
var expectedStack = [99, 98, 99, 98];
|
213
215
|
expect(stack).toMatchArray(expectedStack);
|
214
216
|
});
|
215
|
-
it(
|
216
|
-
var stack = evaluate(
|
217
|
+
it("calculates the cosine of a number", function () {
|
218
|
+
var stack = evaluate("{ 90 cos }");
|
217
219
|
var expectedStack = [Math.cos(90)];
|
218
220
|
expect(stack).toMatchArray(expectedStack);
|
219
221
|
});
|
220
|
-
it(
|
221
|
-
var stack = evaluate(
|
222
|
+
it("converts to int", function () {
|
223
|
+
var stack = evaluate("{ 9.9 cvi }");
|
222
224
|
var expectedStack = [9];
|
223
225
|
expect(stack).toMatchArray(expectedStack);
|
224
226
|
});
|
225
|
-
it(
|
226
|
-
var stack = evaluate(
|
227
|
+
it("converts negatives to int", function () {
|
228
|
+
var stack = evaluate("{ -9.9 cvi }");
|
227
229
|
var expectedStack = [-9];
|
228
230
|
expect(stack).toMatchArray(expectedStack);
|
229
231
|
});
|
230
|
-
it(
|
231
|
-
var stack = evaluate(
|
232
|
+
it("converts to real", function () {
|
233
|
+
var stack = evaluate("{ 55.34 cvr }");
|
232
234
|
var expectedStack = [55.34];
|
233
235
|
expect(stack).toMatchArray(expectedStack);
|
234
236
|
});
|
235
|
-
it(
|
236
|
-
var stack = evaluate(
|
237
|
+
it("divides", function () {
|
238
|
+
var stack = evaluate("{ 6 5 div }");
|
237
239
|
var expectedStack = [1.2];
|
238
240
|
expect(stack).toMatchArray(expectedStack);
|
239
241
|
});
|
240
|
-
it(
|
241
|
-
var stack = evaluate(
|
242
|
+
it("maps division by zero to infinity", function () {
|
243
|
+
var stack = evaluate("{ 6 0 div }");
|
242
244
|
var expectedStack = [Infinity];
|
243
245
|
expect(stack).toMatchArray(expectedStack);
|
244
246
|
});
|
245
|
-
it(
|
246
|
-
var stack = evaluate(
|
247
|
+
it("duplicates", function () {
|
248
|
+
var stack = evaluate("{ 99 dup }");
|
247
249
|
var expectedStack = [99, 99];
|
248
250
|
expect(stack).toMatchArray(expectedStack);
|
249
251
|
});
|
250
|
-
it(
|
251
|
-
var stack = evaluate(
|
252
|
+
it("accepts an equality", function () {
|
253
|
+
var stack = evaluate("{ 9 9 eq }");
|
252
254
|
var expectedStack = [true];
|
253
255
|
expect(stack).toMatchArray(expectedStack);
|
254
256
|
});
|
255
|
-
it(
|
256
|
-
var stack = evaluate(
|
257
|
+
it("rejects an inequality", function () {
|
258
|
+
var stack = evaluate("{ 9 8 eq }");
|
257
259
|
var expectedStack = [false];
|
258
260
|
expect(stack).toMatchArray(expectedStack);
|
259
261
|
});
|
260
|
-
it(
|
261
|
-
var stack = evaluate(
|
262
|
+
it("exchanges", function () {
|
263
|
+
var stack = evaluate("{ 44 99 exch }");
|
262
264
|
var expectedStack = [99, 44];
|
263
265
|
expect(stack).toMatchArray(expectedStack);
|
264
266
|
});
|
265
|
-
it(
|
266
|
-
var stack = evaluate(
|
267
|
+
it("handles exponentiation", function () {
|
268
|
+
var stack = evaluate("{ 10 2 exp }");
|
267
269
|
var expectedStack = [100];
|
268
270
|
expect(stack).toMatchArray(expectedStack);
|
269
271
|
});
|
270
|
-
it(
|
271
|
-
var stack = evaluate(
|
272
|
+
it("pushes false onto the stack", function () {
|
273
|
+
var stack = evaluate("{ false }");
|
272
274
|
var expectedStack = [false];
|
273
275
|
expect(stack).toMatchArray(expectedStack);
|
274
276
|
});
|
275
|
-
it(
|
276
|
-
var stack = evaluate(
|
277
|
+
it("calculates the floor value", function () {
|
278
|
+
var stack = evaluate("{ 9.9 floor }");
|
277
279
|
var expectedStack = [9];
|
278
280
|
expect(stack).toMatchArray(expectedStack);
|
279
281
|
});
|
280
|
-
it(
|
281
|
-
var stack = evaluate(
|
282
|
+
it("handles greater than or equal to", function () {
|
283
|
+
var stack = evaluate("{ 10 9 ge }");
|
282
284
|
var expectedStack = [true];
|
283
285
|
expect(stack).toMatchArray(expectedStack);
|
284
286
|
});
|
285
|
-
it(
|
286
|
-
var stack = evaluate(
|
287
|
+
it("rejects less than for greater than or equal to", function () {
|
288
|
+
var stack = evaluate("{ 8 9 ge }");
|
287
289
|
var expectedStack = [false];
|
288
290
|
expect(stack).toMatchArray(expectedStack);
|
289
291
|
});
|
290
|
-
it(
|
291
|
-
var stack = evaluate(
|
292
|
+
it("handles greater than", function () {
|
293
|
+
var stack = evaluate("{ 10 9 gt }");
|
292
294
|
var expectedStack = [true];
|
293
295
|
expect(stack).toMatchArray(expectedStack);
|
294
296
|
});
|
295
|
-
it(
|
296
|
-
var stack = evaluate(
|
297
|
+
it("rejects less than or equal for greater than", function () {
|
298
|
+
var stack = evaluate("{ 9 9 gt }");
|
297
299
|
var expectedStack = [false];
|
298
300
|
expect(stack).toMatchArray(expectedStack);
|
299
301
|
});
|
300
|
-
it(
|
301
|
-
var stack = evaluate(
|
302
|
+
it("divides to integer", function () {
|
303
|
+
var stack = evaluate("{ 2 3 idiv }");
|
302
304
|
var expectedStack = [0];
|
303
305
|
expect(stack).toMatchArray(expectedStack);
|
304
306
|
});
|
305
|
-
it(
|
306
|
-
var stack = evaluate(
|
307
|
+
it("divides to negative integer", function () {
|
308
|
+
var stack = evaluate("{ -2 3 idiv }");
|
307
309
|
var expectedStack = [0];
|
308
310
|
expect(stack).toMatchArray(expectedStack);
|
309
311
|
});
|
310
|
-
it(
|
311
|
-
var stack = evaluate(
|
312
|
+
it("duplicates index", function () {
|
313
|
+
var stack = evaluate("{ 4 3 2 1 2 index }");
|
312
314
|
var expectedStack = [4, 3, 2, 1, 3];
|
313
315
|
expect(stack).toMatchArray(expectedStack);
|
314
316
|
});
|
315
|
-
it(
|
316
|
-
var stack = evaluate(
|
317
|
+
it("handles less than or equal to", function () {
|
318
|
+
var stack = evaluate("{ 9 10 le }");
|
317
319
|
var expectedStack = [true];
|
318
320
|
expect(stack).toMatchArray(expectedStack);
|
319
321
|
});
|
320
|
-
it(
|
321
|
-
var stack = evaluate(
|
322
|
+
it("rejects greater than for less than or equal to", function () {
|
323
|
+
var stack = evaluate("{ 10 9 le }");
|
322
324
|
var expectedStack = [false];
|
323
325
|
expect(stack).toMatchArray(expectedStack);
|
324
326
|
});
|
325
|
-
it(
|
326
|
-
var stack = evaluate(
|
327
|
+
it("calculates the natural logarithm", function () {
|
328
|
+
var stack = evaluate("{ 10 ln }");
|
327
329
|
var expectedStack = [Math.log(10)];
|
328
330
|
expect(stack).toMatchArray(expectedStack);
|
329
331
|
});
|
330
|
-
it(
|
331
|
-
var stack = evaluate(
|
332
|
+
it("calculates the base 10 logarithm", function () {
|
333
|
+
var stack = evaluate("{ 100 log }");
|
332
334
|
var expectedStack = [2];
|
333
335
|
expect(stack).toMatchArray(expectedStack);
|
334
336
|
});
|
335
|
-
it(
|
336
|
-
var stack = evaluate(
|
337
|
+
it("handles less than", function () {
|
338
|
+
var stack = evaluate("{ 9 10 lt }");
|
337
339
|
var expectedStack = [true];
|
338
340
|
expect(stack).toMatchArray(expectedStack);
|
339
341
|
});
|
340
|
-
it(
|
341
|
-
var stack = evaluate(
|
342
|
+
it("rejects greater than or equal to for less than", function () {
|
343
|
+
var stack = evaluate("{ 10 9 lt }");
|
342
344
|
var expectedStack = [false];
|
343
345
|
expect(stack).toMatchArray(expectedStack);
|
344
346
|
});
|
345
|
-
it(
|
346
|
-
var stack = evaluate(
|
347
|
+
it("performs the modulo operation", function () {
|
348
|
+
var stack = evaluate("{ 4 3 mod }");
|
347
349
|
var expectedStack = [1];
|
348
350
|
expect(stack).toMatchArray(expectedStack);
|
349
351
|
});
|
350
|
-
it(
|
351
|
-
var stack = evaluate(
|
352
|
+
it("multiplies two numbers (positive result)", function () {
|
353
|
+
var stack = evaluate("{ 9 8 mul }");
|
352
354
|
var expectedStack = [72];
|
353
355
|
expect(stack).toMatchArray(expectedStack);
|
354
356
|
});
|
355
|
-
it(
|
356
|
-
var stack = evaluate(
|
357
|
+
it("multiplies two numbers (negative result)", function () {
|
358
|
+
var stack = evaluate("{ 9 -8 mul }");
|
357
359
|
var expectedStack = [-72];
|
358
360
|
expect(stack).toMatchArray(expectedStack);
|
359
361
|
});
|
360
|
-
it(
|
361
|
-
var stack = evaluate(
|
362
|
+
it("accepts an inequality", function () {
|
363
|
+
var stack = evaluate("{ 9 8 ne }");
|
362
364
|
var expectedStack = [true];
|
363
365
|
expect(stack).toMatchArray(expectedStack);
|
364
366
|
});
|
365
|
-
it(
|
366
|
-
var stack = evaluate(
|
367
|
+
it("rejects an equality", function () {
|
368
|
+
var stack = evaluate("{ 9 9 ne }");
|
367
369
|
var expectedStack = [false];
|
368
370
|
expect(stack).toMatchArray(expectedStack);
|
369
371
|
});
|
370
|
-
it(
|
371
|
-
var stack = evaluate(
|
372
|
+
it("negates", function () {
|
373
|
+
var stack = evaluate("{ 4.5 neg }");
|
372
374
|
var expectedStack = [-4.5];
|
373
375
|
expect(stack).toMatchArray(expectedStack);
|
374
376
|
});
|
375
|
-
it(
|
376
|
-
var stack = evaluate(
|
377
|
+
it("boolean not", function () {
|
378
|
+
var stack = evaluate("{ true not }");
|
377
379
|
var expectedStack = [false];
|
378
380
|
expect(stack).toMatchArray(expectedStack);
|
379
381
|
});
|
380
|
-
it(
|
381
|
-
var stack = evaluate(
|
382
|
+
it("bitwise not", function () {
|
383
|
+
var stack = evaluate("{ 12 not }");
|
382
384
|
var expectedStack = [-13];
|
383
385
|
expect(stack).toMatchArray(expectedStack);
|
384
386
|
});
|
385
|
-
it(
|
386
|
-
var stack = evaluate(
|
387
|
+
it("boolean or", function () {
|
388
|
+
var stack = evaluate("{ true false or }");
|
387
389
|
var expectedStack = [true];
|
388
390
|
expect(stack).toMatchArray(expectedStack);
|
389
391
|
});
|
390
|
-
it(
|
391
|
-
var stack = evaluate(
|
392
|
+
it("bitwise or", function () {
|
393
|
+
var stack = evaluate("{ 254 1 or }");
|
392
394
|
var expectedStack = [254 | 1];
|
393
395
|
expect(stack).toMatchArray(expectedStack);
|
394
396
|
});
|
395
|
-
it(
|
396
|
-
var stack = evaluate(
|
397
|
+
it("pops stack", function () {
|
398
|
+
var stack = evaluate("{ 1 2 pop }");
|
397
399
|
var expectedStack = [1];
|
398
400
|
expect(stack).toMatchArray(expectedStack);
|
399
401
|
});
|
400
|
-
it(
|
401
|
-
var stack = evaluate(
|
402
|
+
it("rolls stack right", function () {
|
403
|
+
var stack = evaluate("{ 1 3 2 2 4 1 roll }");
|
402
404
|
var expectedStack = [2, 1, 3, 2];
|
403
405
|
expect(stack).toMatchArray(expectedStack);
|
404
406
|
});
|
405
|
-
it(
|
406
|
-
var stack = evaluate(
|
407
|
+
it("rolls stack left", function () {
|
408
|
+
var stack = evaluate("{ 1 3 2 2 4 -1 roll }");
|
407
409
|
var expectedStack = [3, 2, 2, 1];
|
408
410
|
expect(stack).toMatchArray(expectedStack);
|
409
411
|
});
|
410
|
-
it(
|
411
|
-
var stack = evaluate(
|
412
|
+
it("rounds a number", function () {
|
413
|
+
var stack = evaluate("{ 9.52 round }");
|
412
414
|
var expectedStack = [10];
|
413
415
|
expect(stack).toMatchArray(expectedStack);
|
414
416
|
});
|
415
|
-
it(
|
416
|
-
var stack = evaluate(
|
417
|
+
it("calculates the sine of a number", function () {
|
418
|
+
var stack = evaluate("{ 90 sin }");
|
417
419
|
var expectedStack = [Math.sin(90)];
|
418
420
|
expect(stack).toMatchArray(expectedStack);
|
419
421
|
});
|
420
|
-
it(
|
421
|
-
var stack = evaluate(
|
422
|
+
it("calculates a square root (integer)", function () {
|
423
|
+
var stack = evaluate("{ 100 sqrt }");
|
422
424
|
var expectedStack = [10];
|
423
425
|
expect(stack).toMatchArray(expectedStack);
|
424
426
|
});
|
425
|
-
it(
|
426
|
-
var stack = evaluate(
|
427
|
+
it("calculates a square root (float)", function () {
|
428
|
+
var stack = evaluate("{ 99 sqrt }");
|
427
429
|
var expectedStack = [Math.sqrt(99)];
|
428
430
|
expect(stack).toMatchArray(expectedStack);
|
429
431
|
});
|
430
|
-
it(
|
431
|
-
var stack = evaluate(
|
432
|
+
it("subtracts (positive result)", function () {
|
433
|
+
var stack = evaluate("{ 6 4 sub }");
|
432
434
|
var expectedStack = [2];
|
433
435
|
expect(stack).toMatchArray(expectedStack);
|
434
436
|
});
|
435
|
-
it(
|
436
|
-
var stack = evaluate(
|
437
|
+
it("subtracts (negative result)", function () {
|
438
|
+
var stack = evaluate("{ 4 6 sub }");
|
437
439
|
var expectedStack = [-2];
|
438
440
|
expect(stack).toMatchArray(expectedStack);
|
439
441
|
});
|
440
|
-
it(
|
441
|
-
var stack = evaluate(
|
442
|
+
it("pushes true onto the stack", function () {
|
443
|
+
var stack = evaluate("{ true }");
|
442
444
|
var expectedStack = [true];
|
443
445
|
expect(stack).toMatchArray(expectedStack);
|
444
446
|
});
|
445
|
-
it(
|
446
|
-
var stack = evaluate(
|
447
|
+
it("truncates a number", function () {
|
448
|
+
var stack = evaluate("{ 35.004 truncate }");
|
447
449
|
var expectedStack = [35];
|
448
450
|
expect(stack).toMatchArray(expectedStack);
|
449
451
|
});
|
450
|
-
it(
|
451
|
-
var stack = evaluate(
|
452
|
+
it("calculates an exclusive or value", function () {
|
453
|
+
var stack = evaluate("{ 3 9 xor }");
|
452
454
|
var expectedStack = [10];
|
453
455
|
expect(stack).toMatchArray(expectedStack);
|
454
456
|
});
|
455
457
|
});
|
456
|
-
describe(
|
458
|
+
describe("PostScriptCompiler", function () {
|
457
459
|
function check(code, domain, range, samples) {
|
458
460
|
var compiler = new _function.PostScriptCompiler();
|
459
461
|
var compiledCode = compiler.compile(code, domain, range);
|
@@ -462,7 +464,7 @@ describe('function', function () {
|
|
462
464
|
expect(compiledCode).toBeNull();
|
463
465
|
} else {
|
464
466
|
expect(compiledCode).not.toBeNull();
|
465
|
-
var fn = new Function(
|
467
|
+
var fn = new Function("src", "srcOffset", "dest", "destOffset", compiledCode);
|
466
468
|
|
467
469
|
for (var i = 0; i < samples.length; i++) {
|
468
470
|
var out = new Float32Array(samples[i].output.length);
|
@@ -472,132 +474,132 @@ describe('function', function () {
|
|
472
474
|
}
|
473
475
|
}
|
474
476
|
|
475
|
-
it(
|
476
|
-
check([0.25, 0.5,
|
477
|
+
it("check compiled add", function () {
|
478
|
+
check([0.25, 0.5, "add"], [], [0, 1], [{
|
477
479
|
input: [],
|
478
480
|
output: [0.75]
|
479
481
|
}]);
|
480
|
-
check([0,
|
482
|
+
check([0, "add"], [0, 1], [0, 1], [{
|
481
483
|
input: [0.25],
|
482
484
|
output: [0.25]
|
483
485
|
}]);
|
484
|
-
check([0.5,
|
486
|
+
check([0.5, "add"], [0, 1], [0, 1], [{
|
485
487
|
input: [0.25],
|
486
488
|
output: [0.75]
|
487
489
|
}]);
|
488
|
-
check([0,
|
490
|
+
check([0, "exch", "add"], [0, 1], [0, 1], [{
|
489
491
|
input: [0.25],
|
490
492
|
output: [0.25]
|
491
493
|
}]);
|
492
|
-
check([0.5,
|
494
|
+
check([0.5, "exch", "add"], [0, 1], [0, 1], [{
|
493
495
|
input: [0.25],
|
494
496
|
output: [0.75]
|
495
497
|
}]);
|
496
|
-
check([
|
498
|
+
check(["add"], [0, 1, 0, 1], [0, 1], [{
|
497
499
|
input: [0.25, 0.5],
|
498
500
|
output: [0.75]
|
499
501
|
}]);
|
500
|
-
check([
|
502
|
+
check(["add"], [0, 1], [0, 1], null);
|
501
503
|
});
|
502
|
-
it(
|
503
|
-
check([0.5, 0.25,
|
504
|
+
it("check compiled sub", function () {
|
505
|
+
check([0.5, 0.25, "sub"], [], [0, 1], [{
|
504
506
|
input: [],
|
505
507
|
output: [0.25]
|
506
508
|
}]);
|
507
|
-
check([0,
|
509
|
+
check([0, "sub"], [0, 1], [0, 1], [{
|
508
510
|
input: [0.25],
|
509
511
|
output: [0.25]
|
510
512
|
}]);
|
511
|
-
check([0.5,
|
513
|
+
check([0.5, "sub"], [0, 1], [0, 1], [{
|
512
514
|
input: [0.75],
|
513
515
|
output: [0.25]
|
514
516
|
}]);
|
515
|
-
check([0,
|
517
|
+
check([0, "exch", "sub"], [0, 1], [-1, 1], [{
|
516
518
|
input: [0.25],
|
517
519
|
output: [-0.25]
|
518
520
|
}]);
|
519
|
-
check([0.75,
|
521
|
+
check([0.75, "exch", "sub"], [0, 1], [-1, 1], [{
|
520
522
|
input: [0.25],
|
521
523
|
output: [0.5]
|
522
524
|
}]);
|
523
|
-
check([
|
525
|
+
check(["sub"], [0, 1, 0, 1], [-1, 1], [{
|
524
526
|
input: [0.25, 0.5],
|
525
527
|
output: [-0.25]
|
526
528
|
}]);
|
527
|
-
check([
|
528
|
-
check([1,
|
529
|
+
check(["sub"], [0, 1], [0, 1], null);
|
530
|
+
check([1, "dup", 3, 2, "roll", "sub", "sub"], [0, 1], [0, 1], [{
|
529
531
|
input: [0.75],
|
530
532
|
output: [0.75]
|
531
533
|
}]);
|
532
534
|
});
|
533
|
-
it(
|
534
|
-
check([0.25, 0.5,
|
535
|
+
it("check compiled mul", function () {
|
536
|
+
check([0.25, 0.5, "mul"], [], [0, 1], [{
|
535
537
|
input: [],
|
536
538
|
output: [0.125]
|
537
539
|
}]);
|
538
|
-
check([0,
|
540
|
+
check([0, "mul"], [0, 1], [0, 1], [{
|
539
541
|
input: [0.25],
|
540
542
|
output: [0]
|
541
543
|
}]);
|
542
|
-
check([0.5,
|
544
|
+
check([0.5, "mul"], [0, 1], [0, 1], [{
|
543
545
|
input: [0.25],
|
544
546
|
output: [0.125]
|
545
547
|
}]);
|
546
|
-
check([1,
|
548
|
+
check([1, "mul"], [0, 1], [0, 1], [{
|
547
549
|
input: [0.25],
|
548
550
|
output: [0.25]
|
549
551
|
}]);
|
550
|
-
check([0,
|
552
|
+
check([0, "exch", "mul"], [0, 1], [0, 1], [{
|
551
553
|
input: [0.25],
|
552
554
|
output: [0]
|
553
555
|
}]);
|
554
|
-
check([0.5,
|
556
|
+
check([0.5, "exch", "mul"], [0, 1], [0, 1], [{
|
555
557
|
input: [0.25],
|
556
558
|
output: [0.125]
|
557
559
|
}]);
|
558
|
-
check([1,
|
560
|
+
check([1, "exch", "mul"], [0, 1], [0, 1], [{
|
559
561
|
input: [0.25],
|
560
562
|
output: [0.25]
|
561
563
|
}]);
|
562
|
-
check([
|
564
|
+
check(["mul"], [0, 1, 0, 1], [0, 1], [{
|
563
565
|
input: [0.25, 0.5],
|
564
566
|
output: [0.125]
|
565
567
|
}]);
|
566
|
-
check([
|
568
|
+
check(["mul"], [0, 1], [0, 1], null);
|
567
569
|
});
|
568
|
-
it(
|
569
|
-
check([
|
570
|
+
it("check compiled max", function () {
|
571
|
+
check(["dup", 0.75, "gt", 7, "jz", "pop", 0.75], [0, 1], [0, 1], [{
|
570
572
|
input: [0.5],
|
571
573
|
output: [0.5]
|
572
574
|
}]);
|
573
|
-
check([
|
575
|
+
check(["dup", 0.75, "gt", 7, "jz", "pop", 0.75], [0, 1], [0, 1], [{
|
574
576
|
input: [1],
|
575
577
|
output: [0.75]
|
576
578
|
}]);
|
577
|
-
check([
|
579
|
+
check(["dup", 0.75, "gt", 5, "jz", "pop", 0.75], [0, 1], [0, 1], null);
|
578
580
|
});
|
579
|
-
it(
|
580
|
-
check([1,
|
581
|
+
it("check pop/roll/index", function () {
|
582
|
+
check([1, "pop"], [0, 1], [0, 1], [{
|
581
583
|
input: [0.5],
|
582
584
|
output: [0.5]
|
583
585
|
}]);
|
584
|
-
check([1, 3, -1,
|
586
|
+
check([1, 3, -1, "roll"], [0, 1, 0, 1], [0, 1, 0, 1, 0, 1], [{
|
585
587
|
input: [0.25, 0.5],
|
586
588
|
output: [0.5, 1, 0.25]
|
587
589
|
}]);
|
588
|
-
check([1, 3, 1,
|
590
|
+
check([1, 3, 1, "roll"], [0, 1, 0, 1], [0, 1, 0, 1, 0, 1], [{
|
589
591
|
input: [0.25, 0.5],
|
590
592
|
output: [1, 0.25, 0.5]
|
591
593
|
}]);
|
592
|
-
check([1, 3, 1.5,
|
593
|
-
check([1, 1,
|
594
|
+
check([1, 3, 1.5, "roll"], [0, 1, 0, 1], [0, 1, 0, 1, 0, 1], null);
|
595
|
+
check([1, 1, "index"], [0, 1], [0, 1, 0, 1, 0, 1], [{
|
594
596
|
input: [0.5],
|
595
597
|
output: [0.5, 1, 0.5]
|
596
598
|
}]);
|
597
|
-
check([1, 3,
|
598
|
-
check([1, 0.5,
|
599
|
+
check([1, 3, "index", "pop"], [0, 1], [0, 1], null);
|
600
|
+
check([1, 0.5, "index", "pop"], [0, 1], [0, 1], null);
|
599
601
|
});
|
600
|
-
it(
|
602
|
+
it("check input boundaries", function () {
|
601
603
|
check([], [0, 0.5], [0, 1], [{
|
602
604
|
input: [1],
|
603
605
|
output: [0.5]
|
@@ -606,7 +608,7 @@ describe('function', function () {
|
|
606
608
|
input: [0],
|
607
609
|
output: [0.5]
|
608
610
|
}]);
|
609
|
-
check([
|
611
|
+
check(["dup"], [0.5, 0.75], [0, 1, 0, 1], [{
|
610
612
|
input: [0],
|
611
613
|
output: [0.5, 0.5]
|
612
614
|
}]);
|
@@ -615,7 +617,7 @@ describe('function', function () {
|
|
615
617
|
output: [1000]
|
616
618
|
}]);
|
617
619
|
});
|
618
|
-
it(
|
620
|
+
it("check output boundaries", function () {
|
619
621
|
check([], [0, 1], [0, 0.5], [{
|
620
622
|
input: [1],
|
621
623
|
output: [0.5]
|
@@ -624,7 +626,7 @@ describe('function', function () {
|
|
624
626
|
input: [0],
|
625
627
|
output: [0.5]
|
626
628
|
}]);
|
627
|
-
check([
|
629
|
+
check(["dup"], [0, 1], [0.5, 1, 0.75, 1], [{
|
628
630
|
input: [0],
|
629
631
|
output: [0.5, 0.75]
|
630
632
|
}]);
|
@@ -633,11 +635,11 @@ describe('function', function () {
|
|
633
635
|
output: [1000]
|
634
636
|
}]);
|
635
637
|
});
|
636
|
-
it(
|
638
|
+
it("compile optimized", function () {
|
637
639
|
var compiler = new _function.PostScriptCompiler();
|
638
|
-
var code = [0,
|
640
|
+
var code = [0, "add", 1, 1, 3, -1, "roll", "sub", "sub", 1, "mul"];
|
639
641
|
var compiledCode = compiler.compile(code, [0, 1], [0, 1]);
|
640
|
-
expect(compiledCode).toEqual(
|
642
|
+
expect(compiledCode).toEqual("dest[destOffset + 0] = Math.max(0, Math.min(1, src[srcOffset + 0]));");
|
641
643
|
});
|
642
644
|
});
|
643
645
|
});
|