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.

Files changed (169) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +18515 -11402
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +48266 -37137
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/external/url/url-lib.js +627 -0
  10. package/image_decoders/pdf.image_decoders.js +11350 -0
  11. package/image_decoders/pdf.image_decoders.js.map +1 -0
  12. package/image_decoders/pdf.image_decoders.min.js +1 -0
  13. package/lib/core/annotation.js +587 -242
  14. package/lib/core/arithmetic_decoder.js +275 -245
  15. package/lib/core/bidi.js +65 -6
  16. package/lib/core/ccitt.js +173 -18
  17. package/lib/core/ccitt_stream.js +15 -6
  18. package/lib/core/cff_parser.js +433 -61
  19. package/lib/core/charsets.js +5 -4
  20. package/lib/core/chunked_stream.js +400 -152
  21. package/lib/core/cmap.js +326 -87
  22. package/lib/core/colorspace.js +874 -594
  23. package/lib/core/core_utils.js +147 -0
  24. package/lib/core/crypto.js +290 -45
  25. package/lib/core/document.js +560 -268
  26. package/lib/core/encodings.js +19 -10
  27. package/lib/core/evaluator.js +1005 -360
  28. package/lib/core/font_renderer.js +331 -97
  29. package/lib/core/fonts.js +812 -195
  30. package/lib/core/function.js +284 -71
  31. package/lib/core/glyphlist.js +4 -3
  32. package/lib/core/image.js +169 -62
  33. package/lib/core/image_utils.js +111 -0
  34. package/lib/core/jbig2.js +479 -66
  35. package/lib/core/jbig2_stream.js +19 -8
  36. package/lib/core/jpeg_stream.js +38 -13
  37. package/lib/core/jpg.js +253 -29
  38. package/lib/core/jpx.js +396 -6
  39. package/lib/core/jpx_stream.js +18 -6
  40. package/lib/core/metrics.js +15 -15
  41. package/lib/core/murmurhash3.js +56 -34
  42. package/lib/core/obj.js +1354 -488
  43. package/lib/core/operator_list.js +144 -31
  44. package/lib/core/parser.js +539 -191
  45. package/lib/core/pattern.js +148 -14
  46. package/lib/core/pdf_manager.js +323 -133
  47. package/lib/core/primitives.js +111 -24
  48. package/lib/core/ps_parser.js +134 -45
  49. package/lib/core/standard_fonts.js +17 -17
  50. package/lib/core/stream.js +313 -34
  51. package/lib/core/type1_parser.js +143 -13
  52. package/lib/core/unicode.js +32 -5
  53. package/lib/core/worker.js +217 -190
  54. package/lib/core/worker_stream.js +277 -0
  55. package/lib/display/annotation_layer.js +450 -133
  56. package/lib/display/api.js +1597 -784
  57. package/lib/display/api_compatibility.js +11 -13
  58. package/lib/display/canvas.js +360 -44
  59. package/lib/display/content_disposition.js +83 -32
  60. package/lib/display/display_utils.js +747 -0
  61. package/lib/display/fetch_stream.js +221 -90
  62. package/lib/display/font_loader.js +468 -236
  63. package/lib/display/metadata.js +38 -16
  64. package/lib/display/network.js +635 -428
  65. package/lib/display/network_utils.js +32 -19
  66. package/lib/display/node_stream.js +367 -175
  67. package/lib/display/pattern_helper.js +81 -31
  68. package/lib/display/svg.js +1235 -519
  69. package/lib/display/text_layer.js +153 -29
  70. package/lib/display/transport_stream.js +345 -94
  71. package/lib/display/webgl.js +64 -18
  72. package/lib/display/worker_options.js +5 -4
  73. package/lib/display/xml_parser.js +166 -53
  74. package/lib/examples/node/domstubs.js +60 -4
  75. package/lib/pdf.js +36 -14
  76. package/lib/pdf.worker.js +5 -3
  77. package/lib/shared/compatibility.js +158 -564
  78. package/lib/shared/global_scope.js +2 -2
  79. package/lib/shared/is_node.js +4 -4
  80. package/lib/shared/message_handler.js +521 -0
  81. package/lib/shared/streams_polyfill.js +21 -17
  82. package/lib/shared/url_polyfill.js +56 -0
  83. package/lib/shared/util.js +243 -710
  84. package/lib/test/unit/annotation_spec.js +870 -401
  85. package/lib/test/unit/api_spec.js +657 -345
  86. package/lib/test/unit/bidi_spec.js +7 -7
  87. package/lib/test/unit/cff_parser_spec.js +54 -11
  88. package/lib/test/unit/clitests_helper.js +10 -8
  89. package/lib/test/unit/cmap_spec.js +95 -41
  90. package/lib/test/unit/colorspace_spec.js +115 -63
  91. package/lib/test/unit/core_utils_spec.js +191 -0
  92. package/lib/test/unit/crypto_spec.js +17 -5
  93. package/lib/test/unit/custom_spec.js +43 -55
  94. package/lib/test/unit/display_svg_spec.js +34 -18
  95. package/lib/test/unit/display_utils_spec.js +273 -0
  96. package/lib/test/unit/document_spec.js +8 -13
  97. package/lib/test/unit/encodings_spec.js +25 -45
  98. package/lib/test/unit/evaluator_spec.js +38 -15
  99. package/lib/test/unit/fetch_stream_spec.js +109 -0
  100. package/lib/test/unit/function_spec.js +17 -5
  101. package/lib/test/unit/jasmine-boot.js +33 -20
  102. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  103. package/lib/test/unit/metadata_spec.js +71 -11
  104. package/lib/test/unit/murmurhash3_spec.js +3 -3
  105. package/lib/test/unit/network_spec.js +19 -54
  106. package/lib/test/unit/network_utils_spec.js +91 -14
  107. package/lib/test/unit/node_stream_spec.js +56 -32
  108. package/lib/test/unit/parser_spec.js +162 -71
  109. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  110. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  111. package/lib/test/unit/pdf_history_spec.js +21 -9
  112. package/lib/test/unit/primitives_spec.js +53 -20
  113. package/lib/test/unit/stream_spec.js +12 -4
  114. package/lib/test/unit/test_utils.js +273 -56
  115. package/lib/test/unit/testreporter.js +21 -3
  116. package/lib/test/unit/type1_parser_spec.js +8 -6
  117. package/lib/test/unit/ui_utils_spec.js +454 -16
  118. package/lib/test/unit/unicode_spec.js +18 -15
  119. package/lib/test/unit/util_spec.js +87 -128
  120. package/lib/web/annotation_layer_builder.js +39 -22
  121. package/lib/web/app.js +1290 -588
  122. package/lib/web/app_options.js +100 -62
  123. package/lib/web/base_viewer.js +511 -182
  124. package/lib/web/chromecom.js +261 -117
  125. package/lib/web/debugger.js +166 -22
  126. package/lib/web/download_manager.js +32 -13
  127. package/lib/web/firefox_print_service.js +20 -10
  128. package/lib/web/firefoxcom.js +315 -80
  129. package/lib/web/genericcom.js +89 -30
  130. package/lib/web/genericl10n.js +142 -30
  131. package/lib/web/grab_to_pan.js +28 -4
  132. package/lib/web/interfaces.js +170 -47
  133. package/lib/web/overlay_manager.js +235 -85
  134. package/lib/web/password_prompt.js +22 -14
  135. package/lib/web/pdf_attachment_viewer.js +38 -18
  136. package/lib/web/pdf_cursor_tools.js +39 -16
  137. package/lib/web/pdf_document_properties.js +255 -136
  138. package/lib/web/pdf_find_bar.js +84 -40
  139. package/lib/web/pdf_find_controller.js +495 -184
  140. package/lib/web/pdf_find_utils.js +111 -0
  141. package/lib/web/pdf_history.js +190 -53
  142. package/lib/web/pdf_link_service.js +138 -77
  143. package/lib/web/pdf_outline_viewer.js +122 -46
  144. package/lib/web/pdf_page_view.js +191 -67
  145. package/lib/web/pdf_presentation_mode.js +99 -34
  146. package/lib/web/pdf_print_service.js +61 -13
  147. package/lib/web/pdf_rendering_queue.js +28 -9
  148. package/lib/web/pdf_sidebar.js +141 -81
  149. package/lib/web/pdf_sidebar_resizer.js +42 -16
  150. package/lib/web/pdf_single_page_viewer.js +74 -66
  151. package/lib/web/pdf_thumbnail_view.js +104 -33
  152. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  153. package/lib/web/pdf_viewer.component.js +112 -32
  154. package/lib/web/pdf_viewer.js +91 -52
  155. package/lib/web/preferences.js +284 -89
  156. package/lib/web/secondary_toolbar.js +165 -40
  157. package/lib/web/text_layer_builder.js +134 -59
  158. package/lib/web/toolbar.js +78 -43
  159. package/lib/web/ui_utils.js +462 -136
  160. package/lib/web/view_history.js +215 -67
  161. package/lib/web/viewer_compatibility.js +4 -13
  162. package/package.json +5 -4
  163. package/web/pdf_viewer.css +79 -11
  164. package/web/pdf_viewer.js +6107 -3748
  165. package/web/pdf_viewer.js.map +1 -1
  166. package/lib/display/dom_utils.js +0 -309
  167. package/lib/test/unit/dom_utils_spec.js +0 -89
  168. package/lib/test/unit/fonts_spec.js +0 -81
  169. package/lib/web/dom_events.js +0 -137
@@ -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 2017 Mozilla Foundation
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,20 +19,21 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.Type1Parser = undefined;
27
+ exports.Type1Parser = void 0;
28
28
 
29
- var _util = require('../shared/util');
29
+ var _util = require("../shared/util");
30
30
 
31
- var _encodings = require('./encodings');
31
+ var _encodings = require("./encodings");
32
32
 
33
- var _stream = require('./stream');
33
+ var _stream = require("./stream");
34
34
 
35
35
  var HINTING_ENABLED = false;
36
+
36
37
  var Type1CharString = function Type1CharStringClosure() {
37
38
  var COMMAND_MAP = {
38
39
  'hstem': [1],
@@ -51,6 +52,7 @@ var Type1CharString = function Type1CharStringClosure() {
51
52
  'vhcurveto': [30],
52
53
  'hvcurveto': [31]
53
54
  };
55
+
54
56
  function Type1CharString() {
55
57
  this.width = 0;
56
58
  this.lsb = 0;
@@ -58,78 +60,100 @@ var Type1CharString = function Type1CharStringClosure() {
58
60
  this.output = [];
59
61
  this.stack = [];
60
62
  }
63
+
61
64
  Type1CharString.prototype = {
62
65
  convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {
63
66
  var count = encoded.length;
64
67
  var error = false;
65
68
  var wx, sbx, subrNumber;
69
+
66
70
  for (var i = 0; i < count; i++) {
67
71
  var value = encoded[i];
72
+
68
73
  if (value < 32) {
69
74
  if (value === 12) {
70
75
  value = (value << 8) + encoded[++i];
71
76
  }
77
+
72
78
  switch (value) {
73
79
  case 1:
74
80
  if (!HINTING_ENABLED) {
75
81
  this.stack = [];
76
82
  break;
77
83
  }
84
+
78
85
  error = this.executeCommand(2, COMMAND_MAP.hstem);
79
86
  break;
87
+
80
88
  case 3:
81
89
  if (!HINTING_ENABLED) {
82
90
  this.stack = [];
83
91
  break;
84
92
  }
93
+
85
94
  error = this.executeCommand(2, COMMAND_MAP.vstem);
86
95
  break;
96
+
87
97
  case 4:
88
98
  if (this.flexing) {
89
99
  if (this.stack.length < 1) {
90
100
  error = true;
91
101
  break;
92
102
  }
103
+
93
104
  var dy = this.stack.pop();
94
105
  this.stack.push(0, dy);
95
106
  break;
96
107
  }
108
+
97
109
  error = this.executeCommand(1, COMMAND_MAP.vmoveto);
98
110
  break;
111
+
99
112
  case 5:
100
113
  error = this.executeCommand(2, COMMAND_MAP.rlineto);
101
114
  break;
115
+
102
116
  case 6:
103
117
  error = this.executeCommand(1, COMMAND_MAP.hlineto);
104
118
  break;
119
+
105
120
  case 7:
106
121
  error = this.executeCommand(1, COMMAND_MAP.vlineto);
107
122
  break;
123
+
108
124
  case 8:
109
125
  error = this.executeCommand(6, COMMAND_MAP.rrcurveto);
110
126
  break;
127
+
111
128
  case 9:
112
129
  this.stack = [];
113
130
  break;
131
+
114
132
  case 10:
115
133
  if (this.stack.length < 1) {
116
134
  error = true;
117
135
  break;
118
136
  }
137
+
119
138
  subrNumber = this.stack.pop();
139
+
120
140
  if (!subrs[subrNumber]) {
121
141
  error = true;
122
142
  break;
123
143
  }
144
+
124
145
  error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);
125
146
  break;
147
+
126
148
  case 11:
127
149
  return error;
150
+
128
151
  case 13:
129
152
  if (this.stack.length < 2) {
130
153
  error = true;
131
154
  break;
132
155
  }
156
+
133
157
  wx = this.stack.pop();
134
158
  sbx = this.stack.pop();
135
159
  this.lsb = sbx;
@@ -137,45 +161,58 @@ var Type1CharString = function Type1CharStringClosure() {
137
161
  this.stack.push(wx, sbx);
138
162
  error = this.executeCommand(2, COMMAND_MAP.hmoveto);
139
163
  break;
164
+
140
165
  case 14:
141
166
  this.output.push(COMMAND_MAP.endchar[0]);
142
167
  break;
168
+
143
169
  case 21:
144
170
  if (this.flexing) {
145
171
  break;
146
172
  }
173
+
147
174
  error = this.executeCommand(2, COMMAND_MAP.rmoveto);
148
175
  break;
176
+
149
177
  case 22:
150
178
  if (this.flexing) {
151
179
  this.stack.push(0);
152
180
  break;
153
181
  }
182
+
154
183
  error = this.executeCommand(1, COMMAND_MAP.hmoveto);
155
184
  break;
185
+
156
186
  case 30:
157
187
  error = this.executeCommand(4, COMMAND_MAP.vhcurveto);
158
188
  break;
189
+
159
190
  case 31:
160
191
  error = this.executeCommand(4, COMMAND_MAP.hvcurveto);
161
192
  break;
193
+
162
194
  case (12 << 8) + 0:
163
195
  this.stack = [];
164
196
  break;
197
+
165
198
  case (12 << 8) + 1:
166
199
  if (!HINTING_ENABLED) {
167
200
  this.stack = [];
168
201
  break;
169
202
  }
203
+
170
204
  error = this.executeCommand(2, COMMAND_MAP.vstem);
171
205
  break;
206
+
172
207
  case (12 << 8) + 2:
173
208
  if (!HINTING_ENABLED) {
174
209
  this.stack = [];
175
210
  break;
176
211
  }
212
+
177
213
  error = this.executeCommand(2, COMMAND_MAP.hstem);
178
214
  break;
215
+
179
216
  case (12 << 8) + 6:
180
217
  if (seacAnalysisEnabled) {
181
218
  this.seac = this.stack.splice(-4, 4);
@@ -183,12 +220,15 @@ var Type1CharString = function Type1CharStringClosure() {
183
220
  } else {
184
221
  error = this.executeCommand(4, COMMAND_MAP.endchar);
185
222
  }
223
+
186
224
  break;
225
+
187
226
  case (12 << 8) + 7:
188
227
  if (this.stack.length < 4) {
189
228
  error = true;
190
229
  break;
191
230
  }
231
+
192
232
  this.stack.pop();
193
233
  wx = this.stack.pop();
194
234
  var sby = this.stack.pop();
@@ -198,22 +238,27 @@ var Type1CharString = function Type1CharStringClosure() {
198
238
  this.stack.push(wx, sbx, sby);
199
239
  error = this.executeCommand(3, COMMAND_MAP.rmoveto);
200
240
  break;
241
+
201
242
  case (12 << 8) + 12:
202
243
  if (this.stack.length < 2) {
203
244
  error = true;
204
245
  break;
205
246
  }
247
+
206
248
  var num2 = this.stack.pop();
207
249
  var num1 = this.stack.pop();
208
250
  this.stack.push(num1 / num2);
209
251
  break;
252
+
210
253
  case (12 << 8) + 16:
211
254
  if (this.stack.length < 2) {
212
255
  error = true;
213
256
  break;
214
257
  }
258
+
215
259
  subrNumber = this.stack.pop();
216
260
  var numArgs = this.stack.pop();
261
+
217
262
  if (subrNumber === 0 && numArgs === 3) {
218
263
  var flexArgs = this.stack.splice(this.stack.length - 17, 17);
219
264
  this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);
@@ -223,19 +268,25 @@ var Type1CharString = function Type1CharStringClosure() {
223
268
  } else if (subrNumber === 1 && numArgs === 0) {
224
269
  this.flexing = true;
225
270
  }
271
+
226
272
  break;
273
+
227
274
  case (12 << 8) + 17:
228
275
  break;
276
+
229
277
  case (12 << 8) + 33:
230
278
  this.stack = [];
231
279
  break;
280
+
232
281
  default:
233
282
  (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"');
234
283
  break;
235
284
  }
285
+
236
286
  if (error) {
237
287
  break;
238
288
  }
289
+
239
290
  continue;
240
291
  } else if (value <= 246) {
241
292
  value = value - 139;
@@ -246,18 +297,24 @@ var Type1CharString = function Type1CharStringClosure() {
246
297
  } else {
247
298
  value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;
248
299
  }
300
+
249
301
  this.stack.push(value);
250
302
  }
303
+
251
304
  return error;
252
305
  },
253
306
  executeCommand: function executeCommand(howManyArgs, command, keepStack) {
254
307
  var stackLength = this.stack.length;
308
+
255
309
  if (howManyArgs > stackLength) {
256
310
  return true;
257
311
  }
312
+
258
313
  var start = stackLength - howManyArgs;
314
+
259
315
  for (var i = start; i < stackLength; i++) {
260
316
  var value = this.stack[i];
317
+
261
318
  if (Number.isInteger(value)) {
262
319
  this.output.push(28, value >> 8 & 0xff, value & 0xff);
263
320
  } else {
@@ -265,44 +322,56 @@ var Type1CharString = function Type1CharStringClosure() {
265
322
  this.output.push(255, value >> 24 & 0xFF, value >> 16 & 0xFF, value >> 8 & 0xFF, value & 0xFF);
266
323
  }
267
324
  }
325
+
268
326
  this.output.push.apply(this.output, command);
327
+
269
328
  if (keepStack) {
270
329
  this.stack.splice(start, howManyArgs);
271
330
  } else {
272
331
  this.stack.length = 0;
273
332
  }
333
+
274
334
  return false;
275
335
  }
276
336
  };
277
337
  return Type1CharString;
278
338
  }();
339
+
279
340
  var Type1Parser = function Type1ParserClosure() {
280
341
  var EEXEC_ENCRYPT_KEY = 55665;
281
342
  var CHAR_STRS_ENCRYPT_KEY = 4330;
343
+
282
344
  function isHexDigit(code) {
283
345
  return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
284
346
  }
347
+
285
348
  function decrypt(data, key, discardNumber) {
286
349
  if (discardNumber >= data.length) {
287
350
  return new Uint8Array(0);
288
351
  }
352
+
289
353
  var r = key | 0,
290
354
  c1 = 52845,
291
355
  c2 = 22719,
292
356
  i,
293
357
  j;
358
+
294
359
  for (i = 0; i < discardNumber; i++) {
295
360
  r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;
296
361
  }
362
+
297
363
  var count = data.length - discardNumber;
298
364
  var decrypted = new Uint8Array(count);
365
+
299
366
  for (i = discardNumber, j = 0; j < count; i++, j++) {
300
367
  var value = data[i];
301
368
  decrypted[j] = value ^ r >> 8;
302
369
  r = (value + r) * c1 + c2 & (1 << 16) - 1;
303
370
  }
371
+
304
372
  return decrypted;
305
373
  }
374
+
306
375
  function decryptAscii(data, key, discardNumber) {
307
376
  var r = key | 0,
308
377
  c1 = 52845,
@@ -311,48 +380,62 @@ var Type1Parser = function Type1ParserClosure() {
311
380
  maybeLength = count >>> 1;
312
381
  var decrypted = new Uint8Array(maybeLength);
313
382
  var i, j;
383
+
314
384
  for (i = 0, j = 0; i < count; i++) {
315
385
  var digit1 = data[i];
386
+
316
387
  if (!isHexDigit(digit1)) {
317
388
  continue;
318
389
  }
390
+
319
391
  i++;
320
392
  var digit2;
393
+
321
394
  while (i < count && !isHexDigit(digit2 = data[i])) {
322
395
  i++;
323
396
  }
397
+
324
398
  if (i < count) {
325
399
  var value = parseInt(String.fromCharCode(digit1, digit2), 16);
326
400
  decrypted[j++] = value ^ r >> 8;
327
401
  r = (value + r) * c1 + c2 & (1 << 16) - 1;
328
402
  }
329
403
  }
404
+
330
405
  return Array.prototype.slice.call(decrypted, discardNumber, j);
331
406
  }
407
+
332
408
  function isSpecial(c) {
333
409
  return c === 0x2F || c === 0x5B || c === 0x5D || c === 0x7B || c === 0x7D || c === 0x28 || c === 0x29;
334
410
  }
411
+
335
412
  function Type1Parser(stream, encrypted, seacAnalysisEnabled) {
336
413
  if (encrypted) {
337
414
  var data = stream.getBytes();
338
415
  var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]));
339
416
  stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
340
417
  }
418
+
341
419
  this.seacAnalysisEnabled = !!seacAnalysisEnabled;
342
420
  this.stream = stream;
343
421
  this.nextChar();
344
422
  }
423
+
345
424
  Type1Parser.prototype = {
346
425
  readNumberArray: function Type1Parser_readNumberArray() {
347
426
  this.getToken();
348
427
  var array = [];
428
+
349
429
  while (true) {
350
430
  var token = this.getToken();
431
+
351
432
  if (token === null || token === ']' || token === '}') {
352
433
  break;
353
434
  }
435
+
354
436
  array.push(parseFloat(token || 0));
355
437
  }
438
+
356
439
  return array;
357
440
  },
358
441
  readNumber: function Type1Parser_readNumber() {
@@ -373,10 +456,12 @@ var Type1Parser = function Type1ParserClosure() {
373
456
  getToken: function Type1Parser_getToken() {
374
457
  var comment = false;
375
458
  var ch = this.currentChar;
459
+
376
460
  while (true) {
377
461
  if (ch === -1) {
378
462
  return null;
379
463
  }
464
+
380
465
  if (comment) {
381
466
  if (ch === 0x0A || ch === 0x0D) {
382
467
  comment = false;
@@ -386,23 +471,29 @@ var Type1Parser = function Type1ParserClosure() {
386
471
  } else if (!(0, _util.isSpace)(ch)) {
387
472
  break;
388
473
  }
474
+
389
475
  ch = this.nextChar();
390
476
  }
477
+
391
478
  if (isSpecial(ch)) {
392
479
  this.nextChar();
393
480
  return String.fromCharCode(ch);
394
481
  }
482
+
395
483
  var token = '';
484
+
396
485
  do {
397
486
  token += String.fromCharCode(ch);
398
487
  ch = this.nextChar();
399
488
  } while (ch >= 0 && !(0, _util.isSpace)(ch) && !isSpecial(ch));
489
+
400
490
  return token;
401
491
  },
402
492
  readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {
403
493
  if (lenIV === -1) {
404
494
  return bytes;
405
495
  }
496
+
406
497
  return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);
407
498
  },
408
499
  extractFontProgram: function Type1Parser_extractFontProgram() {
@@ -414,82 +505,103 @@ var Type1Parser = function Type1ParserClosure() {
414
505
  var program = {
415
506
  subrs: [],
416
507
  charstrings: [],
417
- properties: { 'privateData': privateData }
508
+ properties: {
509
+ 'privateData': privateData
510
+ }
418
511
  };
419
512
  var token, length, data, lenIV, encoded;
513
+
420
514
  while ((token = this.getToken()) !== null) {
421
515
  if (token !== '/') {
422
516
  continue;
423
517
  }
518
+
424
519
  token = this.getToken();
520
+
425
521
  switch (token) {
426
522
  case 'CharStrings':
427
523
  this.getToken();
428
524
  this.getToken();
429
525
  this.getToken();
430
526
  this.getToken();
527
+
431
528
  while (true) {
432
529
  token = this.getToken();
530
+
433
531
  if (token === null || token === 'end') {
434
532
  break;
435
533
  }
534
+
436
535
  if (token !== '/') {
437
536
  continue;
438
537
  }
538
+
439
539
  var glyph = this.getToken();
440
540
  length = this.readInt();
441
541
  this.getToken();
442
- data = stream.makeSubStream(stream.pos, length);
542
+ data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
443
543
  lenIV = program.properties.privateData['lenIV'];
444
- encoded = this.readCharStrings(data.getBytes(), lenIV);
445
- stream.skip(length);
544
+ encoded = this.readCharStrings(data, lenIV);
446
545
  this.nextChar();
447
546
  token = this.getToken();
547
+
448
548
  if (token === 'noaccess') {
449
549
  this.getToken();
450
550
  }
551
+
451
552
  charstrings.push({
452
553
  glyph: glyph,
453
554
  encoded: encoded
454
555
  });
455
556
  }
557
+
456
558
  break;
559
+
457
560
  case 'Subrs':
458
561
  this.readInt();
459
562
  this.getToken();
563
+
460
564
  while (this.getToken() === 'dup') {
461
565
  var index = this.readInt();
462
566
  length = this.readInt();
463
567
  this.getToken();
464
- data = stream.makeSubStream(stream.pos, length);
568
+ data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
465
569
  lenIV = program.properties.privateData['lenIV'];
466
- encoded = this.readCharStrings(data.getBytes(), lenIV);
467
- stream.skip(length);
570
+ encoded = this.readCharStrings(data, lenIV);
468
571
  this.nextChar();
469
572
  token = this.getToken();
573
+
470
574
  if (token === 'noaccess') {
471
575
  this.getToken();
472
576
  }
577
+
473
578
  subrs[index] = encoded;
474
579
  }
580
+
475
581
  break;
582
+
476
583
  case 'BlueValues':
477
584
  case 'OtherBlues':
478
585
  case 'FamilyBlues':
479
586
  case 'FamilyOtherBlues':
480
587
  var blueArray = this.readNumberArray();
588
+
481
589
  if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
482
590
  program.properties.privateData[token] = blueArray;
483
591
  }
592
+
484
593
  break;
594
+
485
595
  case 'StemSnapH':
486
596
  case 'StemSnapV':
487
597
  program.properties.privateData[token] = this.readNumberArray();
488
598
  break;
599
+
489
600
  case 'StdHW':
490
601
  case 'StdVW':
491
602
  program.properties.privateData[token] = this.readNumberArray()[0];
492
603
  break;
604
+
493
605
  case 'BlueShift':
494
606
  case 'lenIV':
495
607
  case 'BlueFuzz':
@@ -498,20 +610,24 @@ var Type1Parser = function Type1ParserClosure() {
498
610
  case 'ExpansionFactor':
499
611
  program.properties.privateData[token] = this.readNumber();
500
612
  break;
613
+
501
614
  case 'ForceBold':
502
615
  program.properties.privateData[token] = this.readBoolean();
503
616
  break;
504
617
  }
505
618
  }
619
+
506
620
  for (var i = 0; i < charstrings.length; i++) {
507
621
  glyph = charstrings[i].glyph;
508
622
  encoded = charstrings[i].encoded;
509
623
  var charString = new Type1CharString();
510
624
  var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
511
625
  var output = charString.output;
626
+
512
627
  if (error) {
513
628
  output = [14];
514
629
  }
630
+
515
631
  program.charstrings.push({
516
632
  glyphName: glyph,
517
633
  charstring: output,
@@ -520,40 +636,51 @@ var Type1Parser = function Type1ParserClosure() {
520
636
  seac: charString.seac
521
637
  });
522
638
  }
639
+
523
640
  return program;
524
641
  },
525
642
  extractFontHeader: function Type1Parser_extractFontHeader(properties) {
526
643
  var token;
644
+
527
645
  while ((token = this.getToken()) !== null) {
528
646
  if (token !== '/') {
529
647
  continue;
530
648
  }
649
+
531
650
  token = this.getToken();
651
+
532
652
  switch (token) {
533
653
  case 'FontMatrix':
534
654
  var matrix = this.readNumberArray();
535
655
  properties.fontMatrix = matrix;
536
656
  break;
657
+
537
658
  case 'Encoding':
538
659
  var encodingArg = this.getToken();
539
660
  var encoding;
661
+
540
662
  if (!/^\d+$/.test(encodingArg)) {
541
663
  encoding = (0, _encodings.getEncoding)(encodingArg);
542
664
  } else {
543
665
  encoding = [];
544
666
  var size = parseInt(encodingArg, 10) | 0;
545
667
  this.getToken();
668
+
546
669
  for (var j = 0; j < size; j++) {
547
670
  token = this.getToken();
671
+
548
672
  while (token !== 'dup' && token !== 'def') {
549
673
  token = this.getToken();
674
+
550
675
  if (token === null) {
551
676
  return;
552
677
  }
553
678
  }
679
+
554
680
  if (token === 'def') {
555
681
  break;
556
682
  }
683
+
557
684
  var index = this.readInt();
558
685
  this.getToken();
559
686
  var glyph = this.getToken();
@@ -561,8 +688,10 @@ var Type1Parser = function Type1ParserClosure() {
561
688
  this.getToken();
562
689
  }
563
690
  }
691
+
564
692
  properties.builtInEncoding = encoding;
565
693
  break;
694
+
566
695
  case 'FontBBox':
567
696
  var fontBBox = this.readNumberArray();
568
697
  properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
@@ -575,4 +704,5 @@ var Type1Parser = function Type1ParserClosure() {
575
704
  };
576
705
  return Type1Parser;
577
706
  }();
707
+
578
708
  exports.Type1Parser = Type1Parser;