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,21 +19,23 @@
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.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = undefined;
27
+ exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0;
28
28
 
29
- var _util = require('../shared/util');
29
+ var _util = require("../shared/util");
30
30
 
31
- var _charsets = require('./charsets');
31
+ var _charsets = require("./charsets");
32
32
 
33
- var _encodings = require('./encodings');
33
+ var _encodings = require("./encodings");
34
34
 
35
35
  var MAX_SUBR_NESTING = 10;
36
36
  var CFFStandardStrings = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold'];
37
+ exports.CFFStandardStrings = CFFStandardStrings;
38
+
37
39
  var CFFParser = function CFFParserClosure() {
38
40
  var CharstringValidationData = [null, {
39
41
  id: 'hstem',
@@ -244,11 +246,13 @@ var CFFParser = function CFFParserClosure() {
244
246
  min: 11,
245
247
  resetStack: true
246
248
  }];
249
+
247
250
  function CFFParser(file, properties, seacAnalysisEnabled) {
248
251
  this.bytes = file.getBytes();
249
252
  this.properties = properties;
250
253
  this.seacAnalysisEnabled = !!seacAnalysisEnabled;
251
254
  }
255
+
252
256
  CFFParser.prototype = {
253
257
  parse: function CFFParser_parse() {
254
258
  var properties = this.properties;
@@ -271,24 +275,31 @@ var CFFParser = function CFFParserClosure() {
271
275
  var charStringOffset = topDict.getByName('CharStrings');
272
276
  var charStringIndex = this.parseIndex(charStringOffset).obj;
273
277
  var fontMatrix = topDict.getByName('FontMatrix');
278
+
274
279
  if (fontMatrix) {
275
280
  properties.fontMatrix = fontMatrix;
276
281
  }
282
+
277
283
  var fontBBox = topDict.getByName('FontBBox');
284
+
278
285
  if (fontBBox) {
279
286
  properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
280
287
  properties.descent = Math.min(fontBBox[1], fontBBox[3]);
281
288
  properties.ascentScaled = true;
282
289
  }
290
+
283
291
  var charset, encoding;
292
+
284
293
  if (cff.isCIDFont) {
285
294
  var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj;
295
+
286
296
  for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
287
297
  var dictRaw = fdArrayIndex.get(i);
288
298
  var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
289
299
  this.parsePrivateDict(fontDict);
290
300
  cff.fdArray.push(fontDict);
291
301
  }
302
+
292
303
  encoding = null;
293
304
  charset = this.parseCharsets(topDict.getByName('charset'), charStringIndex.count, cff.strings, true);
294
305
  cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'), charStringIndex.count);
@@ -296,6 +307,7 @@ var CFFParser = function CFFParserClosure() {
296
307
  charset = this.parseCharsets(topDict.getByName('charset'), charStringIndex.count, cff.strings, false);
297
308
  encoding = this.parseEncoding(topDict.getByName('Encoding'), properties, cff.strings, charset.charset);
298
309
  }
310
+
299
311
  cff.charset = charset;
300
312
  cff.encoding = encoding;
301
313
  var charStringsAndSeacs = this.parseCharStrings({
@@ -315,17 +327,21 @@ var CFFParser = function CFFParserClosure() {
315
327
  var bytes = this.bytes;
316
328
  var bytesLength = bytes.length;
317
329
  var offset = 0;
330
+
318
331
  while (offset < bytesLength && bytes[offset] !== 1) {
319
332
  ++offset;
320
333
  }
334
+
321
335
  if (offset >= bytesLength) {
322
336
  throw new _util.FormatError('Invalid CFF header');
323
337
  }
338
+
324
339
  if (offset !== 0) {
325
340
  (0, _util.info)('cff data is shifted');
326
341
  bytes = bytes.subarray(offset);
327
342
  this.bytes = bytes;
328
343
  }
344
+
329
345
  var major = bytes[0];
330
346
  var minor = bytes[1];
331
347
  var hdrSize = bytes[2];
@@ -338,8 +354,10 @@ var CFFParser = function CFFParserClosure() {
338
354
  },
339
355
  parseDict: function CFFParser_parseDict(dict) {
340
356
  var pos = 0;
357
+
341
358
  function parseOperand() {
342
359
  var value = dict[pos++];
360
+
343
361
  if (value === 30) {
344
362
  return parseFloatOperand();
345
363
  } else if (value === 28) {
@@ -359,39 +377,51 @@ var CFFParser = function CFFParserClosure() {
359
377
  } else if (value >= 251 && value <= 254) {
360
378
  return -((value - 251) * 256) - dict[pos++] - 108;
361
379
  }
380
+
362
381
  (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.');
363
382
  return NaN;
364
383
  }
384
+
365
385
  function parseFloatOperand() {
366
386
  var str = '';
367
387
  var eof = 15;
368
388
  var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];
369
389
  var length = dict.length;
390
+
370
391
  while (pos < length) {
371
392
  var b = dict[pos++];
372
393
  var b1 = b >> 4;
373
394
  var b2 = b & 15;
395
+
374
396
  if (b1 === eof) {
375
397
  break;
376
398
  }
399
+
377
400
  str += lookup[b1];
401
+
378
402
  if (b2 === eof) {
379
403
  break;
380
404
  }
405
+
381
406
  str += lookup[b2];
382
407
  }
408
+
383
409
  return parseFloat(str);
384
410
  }
411
+
385
412
  var operands = [];
386
413
  var entries = [];
387
414
  pos = 0;
388
415
  var end = dict.length;
416
+
389
417
  while (pos < end) {
390
418
  var b = dict[pos];
419
+
391
420
  if (b <= 21) {
392
421
  if (b === 12) {
393
422
  b = b << 8 | dict[++pos];
394
423
  }
424
+
395
425
  entries.push([b, operands]);
396
426
  operands = [];
397
427
  ++pos;
@@ -399,6 +429,7 @@ var CFFParser = function CFFParserClosure() {
399
429
  operands.push(parseOperand());
400
430
  }
401
431
  }
432
+
402
433
  return entries;
403
434
  },
404
435
  parseIndex: function CFFParser_parseIndex(pos) {
@@ -408,24 +439,31 @@ var CFFParser = function CFFParserClosure() {
408
439
  var offsets = [];
409
440
  var end = pos;
410
441
  var i, ii;
442
+
411
443
  if (count !== 0) {
412
444
  var offsetSize = bytes[pos++];
413
445
  var startPos = pos + (count + 1) * offsetSize - 1;
446
+
414
447
  for (i = 0, ii = count + 1; i < ii; ++i) {
415
448
  var offset = 0;
449
+
416
450
  for (var j = 0; j < offsetSize; ++j) {
417
451
  offset <<= 8;
418
452
  offset += bytes[pos++];
419
453
  }
454
+
420
455
  offsets.push(startPos + offset);
421
456
  }
457
+
422
458
  end = offsets[count];
423
459
  }
460
+
424
461
  for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
425
462
  var offsetStart = offsets[i];
426
463
  var offsetEnd = offsets[i + 1];
427
464
  cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
428
465
  }
466
+
429
467
  return {
430
468
  obj: cffIndex,
431
469
  endPos: end
@@ -433,42 +471,52 @@ var CFFParser = function CFFParserClosure() {
433
471
  },
434
472
  parseNameIndex: function CFFParser_parseNameIndex(index) {
435
473
  var names = [];
474
+
436
475
  for (var i = 0, ii = index.count; i < ii; ++i) {
437
476
  var name = index.get(i);
438
477
  names.push((0, _util.bytesToString)(name));
439
478
  }
479
+
440
480
  return names;
441
481
  },
442
482
  parseStringIndex: function CFFParser_parseStringIndex(index) {
443
483
  var strings = new CFFStrings();
484
+
444
485
  for (var i = 0, ii = index.count; i < ii; ++i) {
445
486
  var data = index.get(i);
446
487
  strings.add((0, _util.bytesToString)(data));
447
488
  }
489
+
448
490
  return strings;
449
491
  },
450
492
  createDict: function CFFParser_createDict(Type, dict, strings) {
451
493
  var cffDict = new Type(strings);
494
+
452
495
  for (var i = 0, ii = dict.length; i < ii; ++i) {
453
496
  var pair = dict[i];
454
497
  var key = pair[0];
455
498
  var value = pair[1];
456
499
  cffDict.setByKey(key, value);
457
500
  }
501
+
458
502
  return cffDict;
459
503
  },
460
504
  parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) {
461
505
  if (!data || state.callDepth > MAX_SUBR_NESTING) {
462
506
  return false;
463
507
  }
508
+
464
509
  var stackSize = state.stackSize;
465
510
  var stack = state.stack;
466
511
  var length = data.length;
512
+
467
513
  for (var j = 0; j < length;) {
468
514
  var value = data[j++];
469
515
  var validationCommand = null;
516
+
470
517
  if (value === 12) {
471
518
  var q = data[j++];
519
+
472
520
  if (q === 0) {
473
521
  data[j - 2] = 139;
474
522
  data[j - 1] = 22;
@@ -483,11 +531,13 @@ var CFFParser = function CFFParserClosure() {
483
531
  } else if (value === 14) {
484
532
  if (stackSize >= 4) {
485
533
  stackSize -= 4;
534
+
486
535
  if (this.seacAnalysisEnabled) {
487
536
  state.seac = stack.slice(stackSize, stackSize + 4);
488
537
  return false;
489
538
  }
490
539
  }
540
+
491
541
  validationCommand = CharstringValidationData[value];
492
542
  } else if (value >= 32 && value <= 246) {
493
543
  stack[stackSize] = value - 139;
@@ -507,34 +557,43 @@ var CFFParser = function CFFParserClosure() {
507
557
  validationCommand = CharstringValidationData[value];
508
558
  } else if (value === 10 || value === 29) {
509
559
  var subrsIndex;
560
+
510
561
  if (value === 10) {
511
562
  subrsIndex = localSubrIndex;
512
563
  } else {
513
564
  subrsIndex = globalSubrIndex;
514
565
  }
566
+
515
567
  if (!subrsIndex) {
516
568
  validationCommand = CharstringValidationData[value];
517
569
  (0, _util.warn)('Missing subrsIndex for ' + validationCommand.id);
518
570
  return false;
519
571
  }
572
+
520
573
  var bias = 32768;
574
+
521
575
  if (subrsIndex.count < 1240) {
522
576
  bias = 107;
523
577
  } else if (subrsIndex.count < 33900) {
524
578
  bias = 1131;
525
579
  }
580
+
526
581
  var subrNumber = stack[--stackSize] + bias;
582
+
527
583
  if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {
528
584
  validationCommand = CharstringValidationData[value];
529
585
  (0, _util.warn)('Out of bounds subrIndex for ' + validationCommand.id);
530
586
  return false;
531
587
  }
588
+
532
589
  state.stackSize = stackSize;
533
590
  state.callDepth++;
534
591
  var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);
592
+
535
593
  if (!valid) {
536
594
  return false;
537
595
  }
596
+
538
597
  state.callDepth--;
539
598
  stackSize = state.stackSize;
540
599
  continue;
@@ -544,32 +603,46 @@ var CFFParser = function CFFParserClosure() {
544
603
  } else {
545
604
  validationCommand = CharstringValidationData[value];
546
605
  }
606
+
547
607
  if (validationCommand) {
548
608
  if (validationCommand.stem) {
549
609
  state.hints += stackSize >> 1;
610
+
611
+ if (value === 3 || value === 23) {
612
+ state.hasVStems = true;
613
+ } else if (state.hasVStems && (value === 1 || value === 18)) {
614
+ (0, _util.warn)('CFF stem hints are in wrong order');
615
+ data[j - 1] = value === 1 ? 3 : 23;
616
+ }
550
617
  }
618
+
551
619
  if ('min' in validationCommand) {
552
620
  if (!state.undefStack && stackSize < validationCommand.min) {
553
621
  (0, _util.warn)('Not enough parameters for ' + validationCommand.id + '; actual: ' + stackSize + ', expected: ' + validationCommand.min);
554
622
  return false;
555
623
  }
556
624
  }
625
+
557
626
  if (state.firstStackClearing && validationCommand.stackClearing) {
558
627
  state.firstStackClearing = false;
559
628
  stackSize -= validationCommand.min;
629
+
560
630
  if (stackSize >= 2 && validationCommand.stem) {
561
631
  stackSize %= 2;
562
632
  } else if (stackSize > 1) {
563
633
  (0, _util.warn)('Found too many parameters for stack-clearing command');
564
634
  }
635
+
565
636
  if (stackSize > 0 && stack[stackSize - 1] >= 0) {
566
637
  state.width = stack[stackSize - 1];
567
638
  }
568
639
  }
640
+
569
641
  if ('stackDelta' in validationCommand) {
570
642
  if ('stackFn' in validationCommand) {
571
643
  validationCommand.stackFn(stack, stackSize);
572
644
  }
645
+
573
646
  stackSize += validationCommand.stackDelta;
574
647
  } else if (validationCommand.stackClearing) {
575
648
  stackSize = 0;
@@ -583,6 +656,7 @@ var CFFParser = function CFFParserClosure() {
583
656
  }
584
657
  }
585
658
  }
659
+
586
660
  state.stackSize = stackSize;
587
661
  return true;
588
662
  },
@@ -593,10 +667,10 @@ var CFFParser = function CFFParserClosure() {
593
667
  fdSelect = _ref.fdSelect,
594
668
  fdArray = _ref.fdArray,
595
669
  privateDict = _ref.privateDict;
596
-
597
670
  var seacs = [];
598
671
  var widths = [];
599
672
  var count = charStrings.count;
673
+
600
674
  for (var i = 0; i < count; i++) {
601
675
  var charstring = charStrings.get(i);
602
676
  var state = {
@@ -607,21 +681,26 @@ var CFFParser = function CFFParserClosure() {
607
681
  hints: 0,
608
682
  firstStackClearing: true,
609
683
  seac: null,
610
- width: null
684
+ width: null,
685
+ hasVStems: false
611
686
  };
612
687
  var valid = true;
613
688
  var localSubrToUse = null;
614
689
  var privateDictToUse = privateDict;
690
+
615
691
  if (fdSelect && fdArray.length) {
616
692
  var fdIndex = fdSelect.getFDIndex(i);
693
+
617
694
  if (fdIndex === -1) {
618
695
  (0, _util.warn)('Glyph index is not in fd select.');
619
696
  valid = false;
620
697
  }
698
+
621
699
  if (fdIndex >= fdArray.length) {
622
700
  (0, _util.warn)('Invalid fd index for glyph index.');
623
701
  valid = false;
624
702
  }
703
+
625
704
  if (valid) {
626
705
  privateDictToUse = fdArray[fdIndex].privateDict;
627
706
  localSubrToUse = privateDictToUse.subrsIndex;
@@ -629,9 +708,11 @@ var CFFParser = function CFFParserClosure() {
629
708
  } else if (localSubrIndex) {
630
709
  localSubrToUse = localSubrIndex;
631
710
  }
711
+
632
712
  if (valid) {
633
713
  valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);
634
714
  }
715
+
635
716
  if (state.width !== null) {
636
717
  var nominalWidth = privateDictToUse.getByName('nominalWidthX');
637
718
  widths[i] = nominalWidth + state.width;
@@ -639,20 +720,22 @@ var CFFParser = function CFFParserClosure() {
639
720
  var defaultWidth = privateDictToUse.getByName('defaultWidthX');
640
721
  widths[i] = defaultWidth;
641
722
  }
723
+
642
724
  if (state.seac !== null) {
643
725
  seacs[i] = state.seac;
644
726
  }
727
+
645
728
  if (!valid) {
646
729
  charStrings.set(i, new Uint8Array([14]));
647
730
  }
648
731
  }
732
+
649
733
  return {
650
734
  charStrings: charStrings,
651
735
  seacs: seacs,
652
736
  widths: widths
653
737
  };
654
738
  },
655
-
656
739
  emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) {
657
740
  var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
658
741
  parentDict.setByKey(18, [0, 0]);
@@ -663,31 +746,40 @@ var CFFParser = function CFFParserClosure() {
663
746
  this.emptyPrivateDictionary(parentDict);
664
747
  return;
665
748
  }
749
+
666
750
  var privateOffset = parentDict.getByName('Private');
751
+
667
752
  if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {
668
753
  parentDict.removeByName('Private');
669
754
  return;
670
755
  }
756
+
671
757
  var size = privateOffset[0];
672
758
  var offset = privateOffset[1];
759
+
673
760
  if (size === 0 || offset >= this.bytes.length) {
674
761
  this.emptyPrivateDictionary(parentDict);
675
762
  return;
676
763
  }
764
+
677
765
  var privateDictEnd = offset + size;
678
766
  var dictData = this.bytes.subarray(offset, privateDictEnd);
679
767
  var dict = this.parseDict(dictData);
680
768
  var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
681
769
  parentDict.privateDict = privateDict;
770
+
682
771
  if (!privateDict.getByName('Subrs')) {
683
772
  return;
684
773
  }
774
+
685
775
  var subrsOffset = privateDict.getByName('Subrs');
686
776
  var relativeOffset = offset + subrsOffset;
777
+
687
778
  if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
688
779
  this.emptyPrivateDictionary(parentDict);
689
780
  return;
690
781
  }
782
+
691
783
  var subrsIndex = this.parseIndex(relativeOffset);
692
784
  privateDict.subrsIndex = subrsIndex.obj;
693
785
  },
@@ -699,40 +791,51 @@ var CFFParser = function CFFParserClosure() {
699
791
  } else if (pos === 2) {
700
792
  return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);
701
793
  }
794
+
702
795
  var bytes = this.bytes;
703
796
  var start = pos;
704
797
  var format = bytes[pos++];
705
798
  var charset = ['.notdef'];
706
799
  var id, count, i;
707
800
  length -= 1;
801
+
708
802
  switch (format) {
709
803
  case 0:
710
804
  for (i = 0; i < length; i++) {
711
805
  id = bytes[pos++] << 8 | bytes[pos++];
712
806
  charset.push(cid ? id : strings.get(id));
713
807
  }
808
+
714
809
  break;
810
+
715
811
  case 1:
716
812
  while (charset.length <= length) {
717
813
  id = bytes[pos++] << 8 | bytes[pos++];
718
814
  count = bytes[pos++];
815
+
719
816
  for (i = 0; i <= count; i++) {
720
817
  charset.push(cid ? id++ : strings.get(id++));
721
818
  }
722
819
  }
820
+
723
821
  break;
822
+
724
823
  case 2:
725
824
  while (charset.length <= length) {
726
825
  id = bytes[pos++] << 8 | bytes[pos++];
727
826
  count = bytes[pos++] << 8 | bytes[pos++];
827
+
728
828
  for (i = 0; i <= count; i++) {
729
829
  charset.push(cid ? id++ : strings.get(id++));
730
830
  }
731
831
  }
832
+
732
833
  break;
834
+
733
835
  default:
734
836
  throw new _util.FormatError('Unknown charset format');
735
837
  }
838
+
736
839
  var end = pos;
737
840
  var raw = bytes.subarray(start, end);
738
841
  return new CFFCharset(false, format, charset, raw);
@@ -743,20 +846,25 @@ var CFFParser = function CFFParserClosure() {
743
846
  var predefined = false;
744
847
  var format, i, ii;
745
848
  var raw = null;
849
+
746
850
  function readSupplement() {
747
851
  var supplementsCount = bytes[pos++];
852
+
748
853
  for (i = 0; i < supplementsCount; i++) {
749
854
  var code = bytes[pos++];
750
855
  var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
751
856
  encoding[code] = charset.indexOf(strings.get(sid));
752
857
  }
753
858
  }
859
+
754
860
  if (pos === 0 || pos === 1) {
755
861
  predefined = true;
756
862
  format = pos;
757
863
  var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
864
+
758
865
  for (i = 0, ii = charset.length; i < ii; i++) {
759
866
  var index = baseEncoding.indexOf(charset[i]);
867
+
760
868
  if (index !== -1) {
761
869
  encoding[index] = i;
762
870
  }
@@ -764,34 +872,46 @@ var CFFParser = function CFFParserClosure() {
764
872
  } else {
765
873
  var dataStart = pos;
766
874
  format = bytes[pos++];
875
+
767
876
  switch (format & 0x7f) {
768
877
  case 0:
769
878
  var glyphsCount = bytes[pos++];
879
+
770
880
  for (i = 1; i <= glyphsCount; i++) {
771
881
  encoding[bytes[pos++]] = i;
772
882
  }
883
+
773
884
  break;
885
+
774
886
  case 1:
775
887
  var rangesCount = bytes[pos++];
776
888
  var gid = 1;
889
+
777
890
  for (i = 0; i < rangesCount; i++) {
778
891
  var start = bytes[pos++];
779
892
  var left = bytes[pos++];
893
+
780
894
  for (var j = start; j <= start + left; j++) {
781
895
  encoding[j] = gid++;
782
896
  }
783
897
  }
898
+
784
899
  break;
900
+
785
901
  default:
786
- throw new _util.FormatError('Unknown encoding format: ' + format + ' in CFF');
902
+ throw new _util.FormatError("Unknown encoding format: ".concat(format, " in CFF"));
787
903
  }
904
+
788
905
  var dataEnd = pos;
906
+
789
907
  if (format & 0x80) {
790
908
  bytes[dataStart] &= 0x7f;
791
909
  readSupplement();
792
910
  }
911
+
793
912
  raw = bytes.subarray(dataStart, dataEnd);
794
913
  }
914
+
795
915
  format = format & 0x7f;
796
916
  return new CFFEncoding(predefined, format, encoding, raw);
797
917
  },
@@ -800,40 +920,54 @@ var CFFParser = function CFFParserClosure() {
800
920
  var format = bytes[pos++];
801
921
  var fdSelect = [];
802
922
  var i;
923
+
803
924
  switch (format) {
804
925
  case 0:
805
926
  for (i = 0; i < length; ++i) {
806
927
  var id = bytes[pos++];
807
928
  fdSelect.push(id);
808
929
  }
930
+
809
931
  break;
932
+
810
933
  case 3:
811
934
  var rangesCount = bytes[pos++] << 8 | bytes[pos++];
935
+
812
936
  for (i = 0; i < rangesCount; ++i) {
813
937
  var first = bytes[pos++] << 8 | bytes[pos++];
938
+
814
939
  if (i === 0 && first !== 0) {
815
940
  (0, _util.warn)('parseFDSelect: The first range must have a first GID of 0' + ' -- trying to recover.');
816
941
  first = 0;
817
942
  }
943
+
818
944
  var fdIndex = bytes[pos++];
819
945
  var next = bytes[pos] << 8 | bytes[pos + 1];
946
+
820
947
  for (var j = first; j < next; ++j) {
821
948
  fdSelect.push(fdIndex);
822
949
  }
823
950
  }
951
+
824
952
  pos += 2;
825
953
  break;
954
+
826
955
  default:
827
- throw new _util.FormatError('parseFDSelect: Unknown format "' + format + '".');
956
+ throw new _util.FormatError("parseFDSelect: Unknown format \"".concat(format, "\"."));
828
957
  }
958
+
829
959
  if (fdSelect.length !== length) {
830
960
  throw new _util.FormatError('parseFDSelect: Invalid font data.');
831
961
  }
962
+
832
963
  return new CFFFDSelect(format, fdSelect);
833
964
  }
834
965
  };
835
966
  return CFFParser;
836
967
  }();
968
+
969
+ exports.CFFParser = CFFParser;
970
+
837
971
  var CFF = function CFFClosure() {
838
972
  function CFF() {
839
973
  this.header = null;
@@ -848,14 +982,17 @@ var CFF = function CFFClosure() {
848
982
  this.fdSelect = null;
849
983
  this.isCIDFont = false;
850
984
  }
985
+
851
986
  CFF.prototype = {
852
987
  duplicateFirstGlyph: function CFF_duplicateFirstGlyph() {
853
988
  if (this.charStrings.count >= 65535) {
854
989
  (0, _util.warn)('Not enough space in charstrings to duplicate first glyph.');
855
990
  return;
856
991
  }
992
+
857
993
  var glyphZero = this.charStrings.get(0);
858
994
  this.charStrings.add(glyphZero);
995
+
859
996
  if (this.isCIDFont) {
860
997
  this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
861
998
  }
@@ -864,12 +1001,16 @@ var CFF = function CFFClosure() {
864
1001
  if (id < 0 || id >= this.charStrings.count) {
865
1002
  return false;
866
1003
  }
1004
+
867
1005
  var glyph = this.charStrings.get(id);
868
1006
  return glyph.length > 0;
869
1007
  }
870
1008
  };
871
1009
  return CFF;
872
1010
  }();
1011
+
1012
+ exports.CFF = CFF;
1013
+
873
1014
  var CFFHeader = function CFFHeaderClosure() {
874
1015
  function CFFHeader(major, minor, hdrSize, offSize) {
875
1016
  this.major = major;
@@ -877,36 +1018,49 @@ var CFFHeader = function CFFHeaderClosure() {
877
1018
  this.hdrSize = hdrSize;
878
1019
  this.offSize = offSize;
879
1020
  }
1021
+
880
1022
  return CFFHeader;
881
1023
  }();
1024
+
1025
+ exports.CFFHeader = CFFHeader;
1026
+
882
1027
  var CFFStrings = function CFFStringsClosure() {
883
1028
  function CFFStrings() {
884
1029
  this.strings = [];
885
1030
  }
1031
+
886
1032
  CFFStrings.prototype = {
887
1033
  get: function CFFStrings_get(index) {
888
1034
  if (index >= 0 && index <= 390) {
889
1035
  return CFFStandardStrings[index];
890
1036
  }
1037
+
891
1038
  if (index - 391 <= this.strings.length) {
892
1039
  return this.strings[index - 391];
893
1040
  }
1041
+
894
1042
  return CFFStandardStrings[0];
895
1043
  },
896
1044
  add: function CFFStrings_add(value) {
897
1045
  this.strings.push(value);
898
1046
  },
1047
+
899
1048
  get count() {
900
1049
  return this.strings.length;
901
1050
  }
1051
+
902
1052
  };
903
1053
  return CFFStrings;
904
1054
  }();
1055
+
1056
+ exports.CFFStrings = CFFStrings;
1057
+
905
1058
  var CFFIndex = function CFFIndexClosure() {
906
1059
  function CFFIndex() {
907
1060
  this.objects = [];
908
1061
  this.length = 0;
909
1062
  }
1063
+
910
1064
  CFFIndex.prototype = {
911
1065
  add: function CFFIndex_add(data) {
912
1066
  this.length += data.length;
@@ -919,12 +1073,17 @@ var CFFIndex = function CFFIndexClosure() {
919
1073
  get: function CFFIndex_get(index) {
920
1074
  return this.objects[index];
921
1075
  },
1076
+
922
1077
  get count() {
923
1078
  return this.objects.length;
924
1079
  }
1080
+
925
1081
  };
926
1082
  return CFFIndex;
927
1083
  }();
1084
+
1085
+ exports.CFFIndex = CFFIndex;
1086
+
928
1087
  var CFFDict = function CFFDictClosure() {
929
1088
  function CFFDict(tables, strings) {
930
1089
  this.keyToNameMap = tables.keyToNameMap;
@@ -936,32 +1095,40 @@ var CFFDict = function CFFDictClosure() {
936
1095
  this.strings = strings;
937
1096
  this.values = Object.create(null);
938
1097
  }
1098
+
939
1099
  CFFDict.prototype = {
940
1100
  setByKey: function CFFDict_setByKey(key, value) {
941
1101
  if (!(key in this.keyToNameMap)) {
942
1102
  return false;
943
1103
  }
1104
+
944
1105
  var valueLength = value.length;
1106
+
945
1107
  if (valueLength === 0) {
946
1108
  return true;
947
1109
  }
1110
+
948
1111
  for (var i = 0; i < valueLength; i++) {
949
1112
  if (isNaN(value[i])) {
950
1113
  (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
951
1114
  return true;
952
1115
  }
953
1116
  }
1117
+
954
1118
  var type = this.types[key];
1119
+
955
1120
  if (type === 'num' || type === 'sid' || type === 'offset') {
956
1121
  value = value[0];
957
1122
  }
1123
+
958
1124
  this.values[key] = value;
959
1125
  return true;
960
1126
  },
961
1127
  setByName: function CFFDict_setByName(name, value) {
962
1128
  if (!(name in this.nameToKeyMap)) {
963
- throw new _util.FormatError('Invalid dictionary name "' + name + '"');
1129
+ throw new _util.FormatError("Invalid dictionary name \"".concat(name, "\""));
964
1130
  }
1131
+
965
1132
  this.values[this.nameToKeyMap[name]] = value;
966
1133
  },
967
1134
  hasName: function CFFDict_hasName(name) {
@@ -969,18 +1136,22 @@ var CFFDict = function CFFDictClosure() {
969
1136
  },
970
1137
  getByName: function CFFDict_getByName(name) {
971
1138
  if (!(name in this.nameToKeyMap)) {
972
- throw new _util.FormatError('Invalid dictionary name ' + name + '"');
1139
+ throw new _util.FormatError("Invalid dictionary name ".concat(name, "\""));
973
1140
  }
1141
+
974
1142
  var key = this.nameToKeyMap[name];
1143
+
975
1144
  if (!(key in this.values)) {
976
1145
  return this.defaults[key];
977
1146
  }
1147
+
978
1148
  return this.values[key];
979
1149
  },
980
1150
  removeByName: function CFFDict_removeByName(name) {
981
1151
  delete this.values[this.nameToKeyMap[name]];
982
1152
  }
983
1153
  };
1154
+
984
1155
  CFFDict.createTables = function CFFDict_createTables(layout) {
985
1156
  var tables = {
986
1157
  keyToNameMap: {},
@@ -990,6 +1161,7 @@ var CFFDict = function CFFDictClosure() {
990
1161
  opcodes: {},
991
1162
  order: []
992
1163
  };
1164
+
993
1165
  for (var i = 0, ii = layout.length; i < ii; ++i) {
994
1166
  var entry = layout[i];
995
1167
  var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
@@ -1000,41 +1172,56 @@ var CFFDict = function CFFDictClosure() {
1000
1172
  tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];
1001
1173
  tables.order.push(key);
1002
1174
  }
1175
+
1003
1176
  return tables;
1004
1177
  };
1178
+
1005
1179
  return CFFDict;
1006
1180
  }();
1181
+
1007
1182
  var CFFTopDict = function CFFTopDictClosure() {
1008
1183
  var layout = [[[12, 30], 'ROS', ['sid', 'sid', 'num'], null], [[12, 20], 'SyntheticBase', 'num', null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'num', 0], [[12, 2], 'ItalicAngle', 'num', 0], [[12, 3], 'UnderlinePosition', 'num', -100], [[12, 4], 'UnderlineThickness', 'num', 50], [[12, 5], 'PaintType', 'num', 0], [[12, 6], 'CharstringType', 'num', 2], [[12, 7], 'FontMatrix', ['num', 'num', 'num', 'num', 'num', 'num'], [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'num', null], [5, 'FontBBox', ['num', 'num', 'num', 'num'], [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'num', 0], [14, 'XUID', 'array', null], [15, 'charset', 'offset', 0], [16, 'Encoding', 'offset', 0], [17, 'CharStrings', 'offset', 0], [18, 'Private', ['offset', 'offset'], null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null], [[12, 31], 'CIDFontVersion', 'num', 0], [[12, 32], 'CIDFontRevision', 'num', 0], [[12, 33], 'CIDFontType', 'num', 0], [[12, 34], 'CIDCount', 'num', 8720], [[12, 35], 'UIDBase', 'num', null], [[12, 37], 'FDSelect', 'offset', null], [[12, 36], 'FDArray', 'offset', null], [[12, 38], 'FontName', 'sid', null]];
1009
1184
  var tables = null;
1185
+
1010
1186
  function CFFTopDict(strings) {
1011
1187
  if (tables === null) {
1012
1188
  tables = CFFDict.createTables(layout);
1013
1189
  }
1190
+
1014
1191
  CFFDict.call(this, tables, strings);
1015
1192
  this.privateDict = null;
1016
1193
  }
1194
+
1017
1195
  CFFTopDict.prototype = Object.create(CFFDict.prototype);
1018
1196
  return CFFTopDict;
1019
1197
  }();
1198
+
1199
+ exports.CFFTopDict = CFFTopDict;
1200
+
1020
1201
  var CFFPrivateDict = function CFFPrivateDictClosure() {
1021
1202
  var layout = [[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'num', 0.039625], [[12, 10], 'BlueShift', 'num', 7], [[12, 11], 'BlueFuzz', 'num', 1], [10, 'StdHW', 'num', null], [11, 'StdVW', 'num', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'num', 0], [[12, 17], 'LanguageGroup', 'num', 0], [[12, 18], 'ExpansionFactor', 'num', 0.06], [[12, 19], 'initialRandomSeed', 'num', 0], [20, 'defaultWidthX', 'num', 0], [21, 'nominalWidthX', 'num', 0], [19, 'Subrs', 'offset', null]];
1022
1203
  var tables = null;
1204
+
1023
1205
  function CFFPrivateDict(strings) {
1024
1206
  if (tables === null) {
1025
1207
  tables = CFFDict.createTables(layout);
1026
1208
  }
1209
+
1027
1210
  CFFDict.call(this, tables, strings);
1028
1211
  this.subrsIndex = null;
1029
1212
  }
1213
+
1030
1214
  CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
1031
1215
  return CFFPrivateDict;
1032
1216
  }();
1217
+
1218
+ exports.CFFPrivateDict = CFFPrivateDict;
1033
1219
  var CFFCharsetPredefinedTypes = {
1034
1220
  ISO_ADOBE: 0,
1035
1221
  EXPERT: 1,
1036
1222
  EXPERT_SUBSET: 2
1037
1223
  };
1224
+
1038
1225
  var CFFCharset = function CFFCharsetClosure() {
1039
1226
  function CFFCharset(predefined, format, charset, raw) {
1040
1227
  this.predefined = predefined;
@@ -1042,8 +1229,12 @@ var CFFCharset = function CFFCharsetClosure() {
1042
1229
  this.charset = charset;
1043
1230
  this.raw = raw;
1044
1231
  }
1232
+
1045
1233
  return CFFCharset;
1046
1234
  }();
1235
+
1236
+ exports.CFFCharset = CFFCharset;
1237
+
1047
1238
  var CFFEncoding = function CFFEncodingClosure() {
1048
1239
  function CFFEncoding(predefined, format, encoding, raw) {
1049
1240
  this.predefined = predefined;
@@ -1051,35 +1242,44 @@ var CFFEncoding = function CFFEncodingClosure() {
1051
1242
  this.encoding = encoding;
1052
1243
  this.raw = raw;
1053
1244
  }
1245
+
1054
1246
  return CFFEncoding;
1055
1247
  }();
1248
+
1056
1249
  var CFFFDSelect = function CFFFDSelectClosure() {
1057
1250
  function CFFFDSelect(format, fdSelect) {
1058
1251
  this.format = format;
1059
1252
  this.fdSelect = fdSelect;
1060
1253
  }
1254
+
1061
1255
  CFFFDSelect.prototype = {
1062
1256
  getFDIndex: function CFFFDSelect_get(glyphIndex) {
1063
1257
  if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
1064
1258
  return -1;
1065
1259
  }
1260
+
1066
1261
  return this.fdSelect[glyphIndex];
1067
1262
  }
1068
1263
  };
1069
1264
  return CFFFDSelect;
1070
1265
  }();
1266
+
1267
+ exports.CFFFDSelect = CFFFDSelect;
1268
+
1071
1269
  var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
1072
1270
  function CFFOffsetTracker() {
1073
1271
  this.offsets = Object.create(null);
1074
1272
  }
1273
+
1075
1274
  CFFOffsetTracker.prototype = {
1076
1275
  isTracking: function CFFOffsetTracker_isTracking(key) {
1077
1276
  return key in this.offsets;
1078
1277
  },
1079
1278
  track: function CFFOffsetTracker_track(key, location) {
1080
1279
  if (key in this.offsets) {
1081
- throw new _util.FormatError('Already tracking location of ' + key);
1280
+ throw new _util.FormatError("Already tracking location of ".concat(key));
1082
1281
  }
1282
+
1083
1283
  this.offsets[key] = location;
1084
1284
  },
1085
1285
  offset: function CFFOffsetTracker_offset(value) {
@@ -1089,20 +1289,24 @@ var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
1089
1289
  },
1090
1290
  setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) {
1091
1291
  if (!(key in this.offsets)) {
1092
- throw new _util.FormatError('Not tracking location of ' + key);
1292
+ throw new _util.FormatError("Not tracking location of ".concat(key));
1093
1293
  }
1294
+
1094
1295
  var data = output.data;
1095
1296
  var dataOffset = this.offsets[key];
1096
1297
  var size = 5;
1298
+
1097
1299
  for (var i = 0, ii = values.length; i < ii; ++i) {
1098
1300
  var offset0 = i * size + dataOffset;
1099
1301
  var offset1 = offset0 + 1;
1100
1302
  var offset2 = offset0 + 2;
1101
1303
  var offset3 = offset0 + 3;
1102
1304
  var offset4 = offset0 + 4;
1305
+
1103
1306
  if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
1104
1307
  throw new _util.FormatError('writing to an offset that is not empty');
1105
1308
  }
1309
+
1106
1310
  var value = values[i];
1107
1311
  data[offset0] = 0x1d;
1108
1312
  data[offset1] = value >> 24 & 0xFF;
@@ -1114,10 +1318,12 @@ var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
1114
1318
  };
1115
1319
  return CFFOffsetTracker;
1116
1320
  }();
1321
+
1117
1322
  var CFFCompiler = function CFFCompilerClosure() {
1118
1323
  function CFFCompiler(cff) {
1119
1324
  this.cff = cff;
1120
1325
  }
1326
+
1121
1327
  CFFCompiler.prototype = {
1122
1328
  compile: function CFFCompiler_compile() {
1123
1329
  var cff = this.cff;
@@ -1133,20 +1339,25 @@ var CFFCompiler = function CFFCompilerClosure() {
1133
1339
  output.add(header);
1134
1340
  var nameIndex = this.compileNameIndex(cff.names);
1135
1341
  output.add(nameIndex);
1342
+
1136
1343
  if (cff.isCIDFont) {
1137
1344
  if (cff.topDict.hasName('FontMatrix')) {
1138
1345
  var base = cff.topDict.getByName('FontMatrix');
1139
1346
  cff.topDict.removeByName('FontMatrix');
1347
+
1140
1348
  for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
1141
1349
  var subDict = cff.fdArray[i];
1142
1350
  var matrix = base.slice(0);
1351
+
1143
1352
  if (subDict.hasName('FontMatrix')) {
1144
1353
  matrix = _util.Util.transform(matrix, subDict.getByName('FontMatrix'));
1145
1354
  }
1355
+
1146
1356
  subDict.setByName('FontMatrix', matrix);
1147
1357
  }
1148
1358
  }
1149
1359
  }
1360
+
1150
1361
  cff.topDict.setByName('charset', 0);
1151
1362
  var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
1152
1363
  output.add(compiled.output);
@@ -1155,6 +1366,7 @@ var CFFCompiler = function CFFCompilerClosure() {
1155
1366
  output.add(stringIndex);
1156
1367
  var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
1157
1368
  output.add(globalSubrIndex);
1369
+
1158
1370
  if (cff.encoding && cff.topDict.hasName('Encoding')) {
1159
1371
  if (cff.encoding.predefined) {
1160
1372
  topDictTracker.setEntryLocation('Encoding', [cff.encoding.format], output);
@@ -1164,12 +1376,14 @@ var CFFCompiler = function CFFCompilerClosure() {
1164
1376
  output.add(encoding);
1165
1377
  }
1166
1378
  }
1379
+
1167
1380
  var charset = this.compileCharset(cff.charset);
1168
1381
  topDictTracker.setEntryLocation('charset', [output.length], output);
1169
1382
  output.add(charset);
1170
1383
  var charStrings = this.compileCharStrings(cff.charStrings);
1171
1384
  topDictTracker.setEntryLocation('CharStrings', [output.length], output);
1172
1385
  output.add(charStrings);
1386
+
1173
1387
  if (cff.isCIDFont) {
1174
1388
  topDictTracker.setEntryLocation('FDSelect', [output.length], output);
1175
1389
  var fdSelect = this.compileFDSelect(cff.fdSelect);
@@ -1180,6 +1394,7 @@ var CFFCompiler = function CFFCompilerClosure() {
1180
1394
  var fontDictTrackers = compiled.trackers;
1181
1395
  this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
1182
1396
  }
1397
+
1183
1398
  this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
1184
1399
  output.add([0]);
1185
1400
  return output.data;
@@ -1188,19 +1403,24 @@ var CFFCompiler = function CFFCompilerClosure() {
1188
1403
  if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {
1189
1404
  return this.encodeInteger(value);
1190
1405
  }
1406
+
1191
1407
  return this.encodeFloat(value);
1192
1408
  },
1193
1409
  encodeFloat: function CFFCompiler_encodeFloat(num) {
1194
1410
  var value = num.toString();
1195
1411
  var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
1412
+
1196
1413
  if (m) {
1197
1414
  var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length));
1198
1415
  value = (Math.round(num * epsilon) / epsilon).toString();
1199
1416
  }
1417
+
1200
1418
  var nibbles = '';
1201
1419
  var i, ii;
1420
+
1202
1421
  for (i = 0, ii = value.length; i < ii; ++i) {
1203
1422
  var a = value[i];
1423
+
1204
1424
  if (a === 'e') {
1205
1425
  nibbles += value[++i] === '-' ? 'c' : 'b';
1206
1426
  } else if (a === '.') {
@@ -1211,15 +1431,19 @@ var CFFCompiler = function CFFCompilerClosure() {
1211
1431
  nibbles += a;
1212
1432
  }
1213
1433
  }
1434
+
1214
1435
  nibbles += nibbles.length & 1 ? 'f' : 'ff';
1215
1436
  var out = [30];
1437
+
1216
1438
  for (i = 0, ii = nibbles.length; i < ii; i += 2) {
1217
1439
  out.push(parseInt(nibbles.substring(i, i + 2), 16));
1218
1440
  }
1441
+
1219
1442
  return out;
1220
1443
  },
1221
1444
  encodeInteger: function CFFCompiler_encodeInteger(value) {
1222
1445
  var code;
1446
+
1223
1447
  if (value >= -107 && value <= 107) {
1224
1448
  code = [value + 139];
1225
1449
  } else if (value >= 108 && value <= 1131) {
@@ -1233,6 +1457,7 @@ var CFFCompiler = function CFFCompilerClosure() {
1233
1457
  } else {
1234
1458
  code = [0x1d, value >> 24 & 0xFF, value >> 16 & 0xFF, value >> 8 & 0xFF, value & 0xFF];
1235
1459
  }
1460
+
1236
1461
  return code;
1237
1462
  },
1238
1463
  compileHeader: function CFFCompiler_compileHeader(header) {
@@ -1240,30 +1465,40 @@ var CFFCompiler = function CFFCompilerClosure() {
1240
1465
  },
1241
1466
  compileNameIndex: function CFFCompiler_compileNameIndex(names) {
1242
1467
  var nameIndex = new CFFIndex();
1468
+
1243
1469
  for (var i = 0, ii = names.length; i < ii; ++i) {
1244
1470
  var name = names[i];
1245
1471
  var length = Math.min(name.length, 127);
1246
1472
  var sanitizedName = new Array(length);
1473
+
1247
1474
  for (var j = 0; j < length; j++) {
1248
1475
  var char = name[j];
1476
+
1249
1477
  if (char < '!' || char > '~' || char === '[' || char === ']' || char === '(' || char === ')' || char === '{' || char === '}' || char === '<' || char === '>' || char === '/' || char === '%') {
1250
1478
  char = '_';
1251
1479
  }
1480
+
1252
1481
  sanitizedName[j] = char;
1253
1482
  }
1483
+
1254
1484
  sanitizedName = sanitizedName.join('');
1485
+
1255
1486
  if (sanitizedName === '') {
1256
1487
  sanitizedName = 'Bad_Font_Name';
1257
1488
  }
1489
+
1258
1490
  nameIndex.add((0, _util.stringToBytes)(sanitizedName));
1259
1491
  }
1492
+
1260
1493
  return this.compileIndex(nameIndex);
1261
1494
  },
1262
1495
  compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) {
1263
1496
  var fontDictTrackers = [];
1264
1497
  var fdArrayIndex = new CFFIndex();
1498
+
1265
1499
  for (var i = 0, ii = dicts.length; i < ii; ++i) {
1266
1500
  var fontDict = dicts[i];
1501
+
1267
1502
  if (removeCidKeys) {
1268
1503
  fontDict.removeByName('CIDFontVersion');
1269
1504
  fontDict.removeByName('CIDFontRevision');
@@ -1271,12 +1506,14 @@ var CFFCompiler = function CFFCompilerClosure() {
1271
1506
  fontDict.removeByName('CIDCount');
1272
1507
  fontDict.removeByName('UIDBase');
1273
1508
  }
1509
+
1274
1510
  var fontDictTracker = new CFFOffsetTracker();
1275
1511
  var fontDictData = this.compileDict(fontDict, fontDictTracker);
1276
1512
  fontDictTrackers.push(fontDictTracker);
1277
1513
  fdArrayIndex.add(fontDictData);
1278
1514
  fontDictTracker.offset(length);
1279
1515
  }
1516
+
1280
1517
  fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
1281
1518
  return {
1282
1519
  trackers: fontDictTrackers,
@@ -1287,18 +1524,23 @@ var CFFCompiler = function CFFCompilerClosure() {
1287
1524
  for (var i = 0, ii = dicts.length; i < ii; ++i) {
1288
1525
  var fontDict = dicts[i];
1289
1526
  var privateDict = fontDict.privateDict;
1527
+
1290
1528
  if (!privateDict || !fontDict.hasName('Private')) {
1291
1529
  throw new _util.FormatError('There must be a private dictionary.');
1292
1530
  }
1531
+
1293
1532
  var privateDictTracker = new CFFOffsetTracker();
1294
1533
  var privateDictData = this.compileDict(privateDict, privateDictTracker);
1295
1534
  var outputLength = output.length;
1296
1535
  privateDictTracker.offset(outputLength);
1536
+
1297
1537
  if (!privateDictData.length) {
1298
1538
  outputLength = 0;
1299
1539
  }
1540
+
1300
1541
  trackers[i].setEntryLocation('Private', [privateDictData.length, outputLength], output);
1301
1542
  output.add(privateDictData);
1543
+
1302
1544
  if (privateDict.subrsIndex && privateDict.hasName('Subrs')) {
1303
1545
  var subrs = this.compileIndex(privateDict.subrsIndex);
1304
1546
  privateDictTracker.setEntryLocation('Subrs', [privateDictData.length], output);
@@ -1309,57 +1551,76 @@ var CFFCompiler = function CFFCompilerClosure() {
1309
1551
  compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {
1310
1552
  var out = [];
1311
1553
  var order = dict.order;
1554
+
1312
1555
  for (var i = 0; i < order.length; ++i) {
1313
1556
  var key = order[i];
1557
+
1314
1558
  if (!(key in dict.values)) {
1315
1559
  continue;
1316
1560
  }
1561
+
1317
1562
  var values = dict.values[key];
1318
1563
  var types = dict.types[key];
1564
+
1319
1565
  if (!Array.isArray(types)) {
1320
1566
  types = [types];
1321
1567
  }
1568
+
1322
1569
  if (!Array.isArray(values)) {
1323
1570
  values = [values];
1324
1571
  }
1572
+
1325
1573
  if (values.length === 0) {
1326
1574
  continue;
1327
1575
  }
1576
+
1328
1577
  for (var j = 0, jj = types.length; j < jj; ++j) {
1329
1578
  var type = types[j];
1330
1579
  var value = values[j];
1580
+
1331
1581
  switch (type) {
1332
1582
  case 'num':
1333
1583
  case 'sid':
1334
1584
  out = out.concat(this.encodeNumber(value));
1335
1585
  break;
1586
+
1336
1587
  case 'offset':
1337
1588
  var name = dict.keyToNameMap[key];
1589
+
1338
1590
  if (!offsetTracker.isTracking(name)) {
1339
1591
  offsetTracker.track(name, out.length);
1340
1592
  }
1593
+
1341
1594
  out = out.concat([0x1d, 0, 0, 0, 0]);
1342
1595
  break;
1596
+
1343
1597
  case 'array':
1344
1598
  case 'delta':
1345
1599
  out = out.concat(this.encodeNumber(value));
1600
+
1346
1601
  for (var k = 1, kk = values.length; k < kk; ++k) {
1347
1602
  out = out.concat(this.encodeNumber(values[k]));
1348
1603
  }
1604
+
1349
1605
  break;
1606
+
1350
1607
  default:
1351
- throw new _util.FormatError('Unknown data type of ' + type);
1608
+ throw new _util.FormatError("Unknown data type of ".concat(type));
1352
1609
  }
1353
1610
  }
1611
+
1354
1612
  out = out.concat(dict.opcodes[key]);
1355
1613
  }
1614
+
1356
1615
  return out;
1357
1616
  },
1358
1617
  compileStringIndex: function CFFCompiler_compileStringIndex(strings) {
1359
1618
  var stringIndex = new CFFIndex();
1619
+
1360
1620
  for (var i = 0, ii = strings.length; i < ii; ++i) {
1361
1621
  stringIndex.add((0, _util.stringToBytes)(strings[i]));
1362
1622
  }
1623
+
1363
1624
  return this.compileIndex(stringIndex);
1364
1625
  },
1365
1626
  compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {
@@ -1368,14 +1629,18 @@ var CFFCompiler = function CFFCompilerClosure() {
1368
1629
  },
1369
1630
  compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {
1370
1631
  var charStringsIndex = new CFFIndex();
1632
+
1371
1633
  for (var i = 0; i < charStrings.count; i++) {
1372
1634
  var glyph = charStrings.get(i);
1635
+
1373
1636
  if (glyph.length === 0) {
1374
1637
  charStringsIndex.add(new Uint8Array([0x8B, 0x0E]));
1375
1638
  continue;
1376
1639
  }
1640
+
1377
1641
  charStringsIndex.add(glyph);
1378
1642
  }
1643
+
1379
1644
  return this.compileIndex(charStringsIndex);
1380
1645
  },
1381
1646
  compileCharset: function CFFCompiler_compileCharset(charset) {
@@ -1388,27 +1653,33 @@ var CFFCompiler = function CFFCompilerClosure() {
1388
1653
  },
1389
1654
  compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {
1390
1655
  var format = fdSelect.format;
1391
- var out = void 0,
1392
- i = void 0;
1656
+ var out, i;
1657
+
1393
1658
  switch (format) {
1394
1659
  case 0:
1395
1660
  out = new Uint8Array(1 + fdSelect.fdSelect.length);
1396
1661
  out[0] = format;
1662
+
1397
1663
  for (i = 0; i < fdSelect.fdSelect.length; i++) {
1398
1664
  out[i + 1] = fdSelect.fdSelect[i];
1399
1665
  }
1666
+
1400
1667
  break;
1668
+
1401
1669
  case 3:
1402
1670
  var start = 0;
1403
1671
  var lastFD = fdSelect.fdSelect[0];
1404
1672
  var ranges = [format, 0, 0, start >> 8 & 0xFF, start & 0xFF, lastFD];
1673
+
1405
1674
  for (i = 1; i < fdSelect.fdSelect.length; i++) {
1406
1675
  var currentFD = fdSelect.fdSelect[i];
1676
+
1407
1677
  if (currentFD !== lastFD) {
1408
1678
  ranges.push(i >> 8 & 0xFF, i & 0xFF, currentFD);
1409
1679
  lastFD = currentFD;
1410
1680
  }
1411
1681
  }
1682
+
1412
1683
  var numRanges = (ranges.length - 3) / 3;
1413
1684
  ranges[1] = numRanges >> 8 & 0xFF;
1414
1685
  ranges[2] = numRanges & 0xFF;
@@ -1416,29 +1687,37 @@ var CFFCompiler = function CFFCompilerClosure() {
1416
1687
  out = new Uint8Array(ranges);
1417
1688
  break;
1418
1689
  }
1690
+
1419
1691
  return this.compileTypedArray(out);
1420
1692
  },
1421
1693
  compileTypedArray: function CFFCompiler_compileTypedArray(data) {
1422
1694
  var out = [];
1695
+
1423
1696
  for (var i = 0, ii = data.length; i < ii; ++i) {
1424
1697
  out[i] = data[i];
1425
1698
  }
1699
+
1426
1700
  return out;
1427
1701
  },
1428
1702
  compileIndex: function CFFCompiler_compileIndex(index, trackers) {
1429
1703
  trackers = trackers || [];
1430
1704
  var objects = index.objects;
1431
1705
  var count = objects.length;
1706
+
1432
1707
  if (count === 0) {
1433
1708
  return [0, 0, 0];
1434
1709
  }
1710
+
1435
1711
  var data = [count >> 8 & 0xFF, count & 0xff];
1436
1712
  var lastOffset = 1,
1437
1713
  i;
1714
+
1438
1715
  for (i = 0; i < count; ++i) {
1439
1716
  lastOffset += objects[i].length;
1440
1717
  }
1718
+
1441
1719
  var offsetSize;
1720
+
1442
1721
  if (lastOffset < 0x100) {
1443
1722
  offsetSize = 1;
1444
1723
  } else if (lastOffset < 0x10000) {
@@ -1448,8 +1727,10 @@ var CFFCompiler = function CFFCompilerClosure() {
1448
1727
  } else {
1449
1728
  offsetSize = 4;
1450
1729
  }
1730
+
1451
1731
  data.push(offsetSize);
1452
1732
  var relativeOffset = 1;
1733
+
1453
1734
  for (i = 0; i < count + 1; i++) {
1454
1735
  if (offsetSize === 1) {
1455
1736
  data.push(relativeOffset & 0xFF);
@@ -1460,31 +1741,26 @@ var CFFCompiler = function CFFCompilerClosure() {
1460
1741
  } else {
1461
1742
  data.push(relativeOffset >>> 24 & 0xFF, relativeOffset >> 16 & 0xFF, relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF);
1462
1743
  }
1744
+
1463
1745
  if (objects[i]) {
1464
1746
  relativeOffset += objects[i].length;
1465
1747
  }
1466
1748
  }
1749
+
1467
1750
  for (i = 0; i < count; i++) {
1468
1751
  if (trackers[i]) {
1469
1752
  trackers[i].offset(data.length);
1470
1753
  }
1754
+
1471
1755
  for (var j = 0, jj = objects[i].length; j < jj; j++) {
1472
1756
  data.push(objects[i][j]);
1473
1757
  }
1474
1758
  }
1759
+
1475
1760
  return data;
1476
1761
  }
1477
1762
  };
1478
1763
  return CFFCompiler;
1479
1764
  }();
1480
- exports.CFFStandardStrings = CFFStandardStrings;
1481
- exports.CFFParser = CFFParser;
1482
- exports.CFF = CFF;
1483
- exports.CFFHeader = CFFHeader;
1484
- exports.CFFStrings = CFFStrings;
1485
- exports.CFFIndex = CFFIndex;
1486
- exports.CFFCharset = CFFCharset;
1487
- exports.CFFTopDict = CFFTopDict;
1488
- exports.CFFPrivateDict = CFFPrivateDict;
1489
- exports.CFFCompiler = CFFCompiler;
1490
- exports.CFFFDSelect = CFFFDSelect;
1765
+
1766
+ exports.CFFCompiler = CFFCompiler;