pdfjs-dist 2.0.943 → 2.1.266

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (159) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +15329 -11095
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +12497 -4184
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/image_decoders/pdf.image_decoders.js +3438 -1209
  9. package/image_decoders/pdf.image_decoders.js.map +1 -1
  10. package/image_decoders/pdf.image_decoders.min.js +1 -1
  11. package/lib/core/annotation.js +335 -109
  12. package/lib/core/arithmetic_decoder.js +274 -244
  13. package/lib/core/bidi.js +64 -5
  14. package/lib/core/ccitt.js +172 -17
  15. package/lib/core/ccitt_stream.js +14 -5
  16. package/lib/core/cff_parser.js +304 -28
  17. package/lib/core/charsets.js +4 -3
  18. package/lib/core/chunked_stream.js +379 -149
  19. package/lib/core/cmap.js +210 -40
  20. package/lib/core/colorspace.js +332 -187
  21. package/lib/core/crypto.js +289 -44
  22. package/lib/core/document.js +508 -249
  23. package/lib/core/encodings.js +18 -9
  24. package/lib/core/evaluator.js +657 -119
  25. package/lib/core/font_renderer.js +217 -34
  26. package/lib/core/fonts.js +632 -41
  27. package/lib/core/function.js +252 -26
  28. package/lib/core/glyphlist.js +2 -1
  29. package/lib/core/image.js +124 -27
  30. package/lib/core/jbig2.js +425 -65
  31. package/lib/core/jbig2_stream.js +18 -7
  32. package/lib/core/jpeg_stream.js +24 -8
  33. package/lib/core/jpg.js +208 -16
  34. package/lib/core/jpx.js +395 -5
  35. package/lib/core/jpx_stream.js +17 -5
  36. package/lib/core/metrics.js +3 -3
  37. package/lib/core/murmurhash3.js +23 -5
  38. package/lib/core/obj.js +625 -132
  39. package/lib/core/operator_list.js +104 -3
  40. package/lib/core/parser.js +262 -25
  41. package/lib/core/pattern.js +144 -12
  42. package/lib/core/pdf_manager.js +104 -70
  43. package/lib/core/primitives.js +74 -21
  44. package/lib/core/ps_parser.js +133 -44
  45. package/lib/core/standard_fonts.js +9 -9
  46. package/lib/core/stream.js +283 -31
  47. package/lib/core/type1_parser.js +138 -6
  48. package/lib/core/unicode.js +28 -1
  49. package/lib/core/worker.js +192 -57
  50. package/lib/display/annotation_layer.js +303 -123
  51. package/lib/display/api.js +1073 -574
  52. package/lib/display/api_compatibility.js +4 -1
  53. package/lib/display/canvas.js +314 -18
  54. package/lib/display/content_disposition.js +70 -23
  55. package/lib/display/dom_utils.js +112 -59
  56. package/lib/display/fetch_stream.js +95 -50
  57. package/lib/display/font_loader.js +250 -132
  58. package/lib/display/metadata.js +37 -15
  59. package/lib/display/network.js +123 -34
  60. package/lib/display/network_utils.js +23 -10
  61. package/lib/display/node_stream.js +162 -65
  62. package/lib/display/pattern_helper.js +57 -6
  63. package/lib/display/svg.js +194 -18
  64. package/lib/display/text_layer.js +128 -14
  65. package/lib/display/transport_stream.js +83 -27
  66. package/lib/display/webgl.js +63 -17
  67. package/lib/display/worker_options.js +4 -3
  68. package/lib/display/xml_parser.js +162 -52
  69. package/lib/examples/node/domstubs.js +56 -3
  70. package/lib/pdf.js +15 -2
  71. package/lib/pdf.worker.js +4 -2
  72. package/lib/shared/compatibility.js +129 -26
  73. package/lib/shared/global_scope.js +1 -1
  74. package/lib/shared/is_node.js +3 -3
  75. package/lib/shared/message_handler.js +103 -45
  76. package/lib/shared/streams_polyfill.js +20 -16
  77. package/lib/shared/url_polyfill.js +8 -2
  78. package/lib/shared/util.js +246 -84
  79. package/lib/test/unit/annotation_spec.js +99 -73
  80. package/lib/test/unit/api_spec.js +347 -113
  81. package/lib/test/unit/bidi_spec.js +6 -6
  82. package/lib/test/unit/cff_parser_spec.js +17 -5
  83. package/lib/test/unit/clitests_helper.js +7 -8
  84. package/lib/test/unit/cmap_spec.js +79 -25
  85. package/lib/test/unit/colorspace_spec.js +65 -18
  86. package/lib/test/unit/crypto_spec.js +16 -4
  87. package/lib/test/unit/custom_spec.js +40 -52
  88. package/lib/test/unit/display_svg_spec.js +32 -16
  89. package/lib/test/unit/document_spec.js +2 -2
  90. package/lib/test/unit/dom_utils_spec.js +8 -8
  91. package/lib/test/unit/encodings_spec.js +24 -44
  92. package/lib/test/unit/evaluator_spec.js +15 -8
  93. package/lib/test/unit/function_spec.js +16 -4
  94. package/lib/test/unit/jasmine-boot.js +29 -16
  95. package/lib/test/unit/message_handler_spec.js +19 -6
  96. package/lib/test/unit/metadata_spec.js +64 -11
  97. package/lib/test/unit/murmurhash3_spec.js +2 -2
  98. package/lib/test/unit/network_spec.js +19 -4
  99. package/lib/test/unit/network_utils_spec.js +6 -4
  100. package/lib/test/unit/node_stream_spec.js +50 -26
  101. package/lib/test/unit/parser_spec.js +13 -29
  102. package/lib/test/unit/pdf_find_controller_spec.js +144 -32
  103. package/lib/test/unit/pdf_find_utils_spec.js +10 -9
  104. package/lib/test/unit/pdf_history_spec.js +20 -8
  105. package/lib/test/unit/primitives_spec.js +23 -3
  106. package/lib/test/unit/stream_spec.js +8 -3
  107. package/lib/test/unit/test_utils.js +89 -26
  108. package/lib/test/unit/testreporter.js +19 -1
  109. package/lib/test/unit/type1_parser_spec.js +7 -5
  110. package/lib/test/unit/ui_utils_spec.js +162 -38
  111. package/lib/test/unit/unicode_spec.js +13 -10
  112. package/lib/test/unit/util_spec.js +89 -9
  113. package/lib/web/annotation_layer_builder.js +38 -21
  114. package/lib/web/app.js +610 -245
  115. package/lib/web/app_options.js +54 -34
  116. package/lib/web/base_viewer.js +359 -162
  117. package/lib/web/chromecom.js +159 -80
  118. package/lib/web/debugger.js +161 -17
  119. package/lib/web/download_manager.js +29 -11
  120. package/lib/web/firefox_print_service.js +16 -8
  121. package/lib/web/firefoxcom.js +127 -91
  122. package/lib/web/genericcom.js +50 -31
  123. package/lib/web/genericl10n.js +46 -34
  124. package/lib/web/grab_to_pan.js +25 -3
  125. package/lib/web/interfaces.js +108 -61
  126. package/lib/web/overlay_manager.js +67 -45
  127. package/lib/web/password_prompt.js +20 -12
  128. package/lib/web/pdf_attachment_viewer.js +37 -17
  129. package/lib/web/pdf_cursor_tools.js +38 -15
  130. package/lib/web/pdf_document_properties.js +65 -24
  131. package/lib/web/pdf_find_bar.js +48 -20
  132. package/lib/web/pdf_find_controller.js +290 -89
  133. package/lib/web/pdf_find_utils.js +19 -3
  134. package/lib/web/pdf_history.js +186 -49
  135. package/lib/web/pdf_link_service.js +127 -52
  136. package/lib/web/pdf_outline_viewer.js +71 -21
  137. package/lib/web/pdf_page_view.js +188 -63
  138. package/lib/web/pdf_presentation_mode.js +98 -33
  139. package/lib/web/pdf_print_service.js +54 -10
  140. package/lib/web/pdf_rendering_queue.js +26 -4
  141. package/lib/web/pdf_sidebar.js +116 -62
  142. package/lib/web/pdf_sidebar_resizer.js +41 -15
  143. package/lib/web/pdf_single_page_viewer.js +65 -68
  144. package/lib/web/pdf_thumbnail_view.js +102 -31
  145. package/lib/web/pdf_thumbnail_viewer.js +62 -22
  146. package/lib/web/pdf_viewer.component.js +111 -31
  147. package/lib/web/pdf_viewer.js +80 -60
  148. package/lib/web/preferences.js +61 -39
  149. package/lib/web/secondary_toolbar.js +101 -82
  150. package/lib/web/text_layer_builder.js +124 -69
  151. package/lib/web/toolbar.js +67 -27
  152. package/lib/web/ui_utils.js +284 -128
  153. package/lib/web/view_history.js +75 -51
  154. package/lib/web/viewer_compatibility.js +2 -1
  155. package/package.json +1 -1
  156. package/web/pdf_viewer.css +1 -1
  157. package/web/pdf_viewer.js +2200 -973
  158. package/web/pdf_viewer.js.map +1 -1
  159. package/lib/web/dom_events.js +0 -140
@@ -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,28 +505,37 @@ 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();
@@ -444,18 +544,23 @@ var Type1Parser = function Type1ParserClosure() {
444
544
  encoded = this.readCharStrings(data, lenIV);
445
545
  this.nextChar();
446
546
  token = this.getToken();
547
+
447
548
  if (token === 'noaccess') {
448
549
  this.getToken();
449
550
  }
551
+
450
552
  charstrings.push({
451
553
  glyph: glyph,
452
554
  encoded: encoded
453
555
  });
454
556
  }
557
+
455
558
  break;
559
+
456
560
  case 'Subrs':
457
561
  this.readInt();
458
562
  this.getToken();
563
+
459
564
  while (this.getToken() === 'dup') {
460
565
  var index = this.readInt();
461
566
  length = this.readInt();
@@ -465,29 +570,38 @@ var Type1Parser = function Type1ParserClosure() {
465
570
  encoded = this.readCharStrings(data, lenIV);
466
571
  this.nextChar();
467
572
  token = this.getToken();
573
+
468
574
  if (token === 'noaccess') {
469
575
  this.getToken();
470
576
  }
577
+
471
578
  subrs[index] = encoded;
472
579
  }
580
+
473
581
  break;
582
+
474
583
  case 'BlueValues':
475
584
  case 'OtherBlues':
476
585
  case 'FamilyBlues':
477
586
  case 'FamilyOtherBlues':
478
587
  var blueArray = this.readNumberArray();
588
+
479
589
  if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
480
590
  program.properties.privateData[token] = blueArray;
481
591
  }
592
+
482
593
  break;
594
+
483
595
  case 'StemSnapH':
484
596
  case 'StemSnapV':
485
597
  program.properties.privateData[token] = this.readNumberArray();
486
598
  break;
599
+
487
600
  case 'StdHW':
488
601
  case 'StdVW':
489
602
  program.properties.privateData[token] = this.readNumberArray()[0];
490
603
  break;
604
+
491
605
  case 'BlueShift':
492
606
  case 'lenIV':
493
607
  case 'BlueFuzz':
@@ -496,20 +610,24 @@ var Type1Parser = function Type1ParserClosure() {
496
610
  case 'ExpansionFactor':
497
611
  program.properties.privateData[token] = this.readNumber();
498
612
  break;
613
+
499
614
  case 'ForceBold':
500
615
  program.properties.privateData[token] = this.readBoolean();
501
616
  break;
502
617
  }
503
618
  }
619
+
504
620
  for (var i = 0; i < charstrings.length; i++) {
505
621
  glyph = charstrings[i].glyph;
506
622
  encoded = charstrings[i].encoded;
507
623
  var charString = new Type1CharString();
508
624
  var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
509
625
  var output = charString.output;
626
+
510
627
  if (error) {
511
628
  output = [14];
512
629
  }
630
+
513
631
  program.charstrings.push({
514
632
  glyphName: glyph,
515
633
  charstring: output,
@@ -518,40 +636,51 @@ var Type1Parser = function Type1ParserClosure() {
518
636
  seac: charString.seac
519
637
  });
520
638
  }
639
+
521
640
  return program;
522
641
  },
523
642
  extractFontHeader: function Type1Parser_extractFontHeader(properties) {
524
643
  var token;
644
+
525
645
  while ((token = this.getToken()) !== null) {
526
646
  if (token !== '/') {
527
647
  continue;
528
648
  }
649
+
529
650
  token = this.getToken();
651
+
530
652
  switch (token) {
531
653
  case 'FontMatrix':
532
654
  var matrix = this.readNumberArray();
533
655
  properties.fontMatrix = matrix;
534
656
  break;
657
+
535
658
  case 'Encoding':
536
659
  var encodingArg = this.getToken();
537
660
  var encoding;
661
+
538
662
  if (!/^\d+$/.test(encodingArg)) {
539
663
  encoding = (0, _encodings.getEncoding)(encodingArg);
540
664
  } else {
541
665
  encoding = [];
542
666
  var size = parseInt(encodingArg, 10) | 0;
543
667
  this.getToken();
668
+
544
669
  for (var j = 0; j < size; j++) {
545
670
  token = this.getToken();
671
+
546
672
  while (token !== 'dup' && token !== 'def') {
547
673
  token = this.getToken();
674
+
548
675
  if (token === null) {
549
676
  return;
550
677
  }
551
678
  }
679
+
552
680
  if (token === 'def') {
553
681
  break;
554
682
  }
683
+
555
684
  var index = this.readInt();
556
685
  this.getToken();
557
686
  var glyph = this.getToken();
@@ -559,8 +688,10 @@ var Type1Parser = function Type1ParserClosure() {
559
688
  this.getToken();
560
689
  }
561
690
  }
691
+
562
692
  properties.builtInEncoding = encoding;
563
693
  break;
694
+
564
695
  case 'FontBBox':
565
696
  var fontBBox = this.readNumberArray();
566
697
  properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
@@ -573,4 +704,5 @@ var Type1Parser = function Type1ParserClosure() {
573
704
  };
574
705
  return Type1Parser;
575
706
  }();
707
+
576
708
  exports.Type1Parser = Type1Parser;