pdfjs-dist 2.5.207 → 2.6.347

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 (133) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +867 -216
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +10214 -8547
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/es5/build/pdf.js +2023 -1046
  9. package/es5/build/pdf.js.map +1 -1
  10. package/es5/build/pdf.min.js +22 -0
  11. package/es5/build/pdf.worker.js +11136 -8144
  12. package/es5/build/pdf.worker.js.map +1 -1
  13. package/es5/build/pdf.worker.min.js +22 -0
  14. package/es5/image_decoders/pdf.image_decoders.js +12529 -0
  15. package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
  16. package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
  17. package/es5/web/images/shadow.png +0 -0
  18. package/es5/web/pdf_viewer.css +8 -5
  19. package/es5/web/pdf_viewer.js +195 -51
  20. package/es5/web/pdf_viewer.js.map +1 -1
  21. package/image_decoders/pdf.image_decoders.js +24 -16
  22. package/image_decoders/pdf.image_decoders.js.map +1 -1
  23. package/image_decoders/pdf.image_decoders.min.js +1 -1
  24. package/lib/core/annotation.js +479 -43
  25. package/lib/core/cff_parser.js +643 -615
  26. package/lib/core/chunked_stream.js +64 -50
  27. package/lib/core/colorspace.js +126 -104
  28. package/lib/core/crypto.js +37 -0
  29. package/lib/core/document.js +128 -75
  30. package/lib/core/evaluator.js +3015 -2754
  31. package/lib/core/fonts.js +47 -46
  32. package/lib/core/function.js +79 -6
  33. package/lib/core/image.js +364 -357
  34. package/lib/core/image_utils.js +109 -8
  35. package/lib/core/jpg.js +8 -3
  36. package/lib/core/obj.js +255 -34
  37. package/lib/core/operator_list.js +17 -15
  38. package/lib/core/parser.js +40 -3
  39. package/lib/core/pattern.js +24 -11
  40. package/lib/core/primitives.js +112 -53
  41. package/lib/core/type1_parser.js +2 -0
  42. package/lib/core/worker.js +102 -37
  43. package/lib/core/writer.js +242 -0
  44. package/lib/display/annotation_layer.js +51 -10
  45. package/lib/display/annotation_storage.js +89 -0
  46. package/lib/display/api.js +140 -54
  47. package/lib/display/canvas.js +215 -46
  48. package/lib/display/display_utils.js +55 -18
  49. package/lib/display/fetch_stream.js +6 -0
  50. package/lib/display/font_loader.js +26 -15
  51. package/lib/display/metadata.js +1 -7
  52. package/lib/display/network.js +0 -14
  53. package/lib/display/node_utils.js +87 -0
  54. package/lib/display/optional_content_config.js +184 -0
  55. package/lib/display/svg.js +1 -1
  56. package/lib/display/text_layer.js +4 -1
  57. package/lib/pdf.js +2 -2
  58. package/lib/pdf.worker.js +2 -2
  59. package/lib/shared/is_node.js +1 -1
  60. package/lib/shared/util.js +13 -10
  61. package/lib/test/unit/annotation_spec.js +520 -50
  62. package/lib/test/unit/annotation_storage_spec.js +83 -0
  63. package/lib/test/unit/api_spec.js +16 -6
  64. package/lib/test/unit/cmap_spec.js +4 -4
  65. package/lib/test/unit/colorspace_spec.js +216 -24
  66. package/lib/test/unit/crypto_spec.js +51 -4
  67. package/lib/test/unit/custom_spec.js +129 -1
  68. package/lib/test/unit/document_spec.js +112 -1
  69. package/lib/test/unit/evaluator_spec.js +29 -10
  70. package/lib/test/unit/jasmine-boot.js +1 -1
  71. package/lib/test/unit/metadata_spec.js +3 -3
  72. package/lib/test/unit/primitives_spec.js +242 -63
  73. package/lib/test/unit/test_utils.js +42 -89
  74. package/lib/test/unit/testreporter.js +17 -6
  75. package/lib/test/unit/util_spec.js +13 -12
  76. package/lib/test/unit/writer_spec.js +84 -0
  77. package/lib/web/annotation_layer_builder.js +13 -9
  78. package/lib/web/app.js +231 -26
  79. package/lib/web/app_options.js +1 -6
  80. package/lib/web/base_tree_viewer.js +100 -0
  81. package/lib/web/base_viewer.js +53 -4
  82. package/lib/web/download_manager.js +3 -10
  83. package/lib/web/firefox_print_service.js +32 -12
  84. package/lib/web/firefoxcom.js +20 -6
  85. package/lib/web/interfaces.js +1 -1
  86. package/lib/web/pdf_attachment_viewer.js +80 -38
  87. package/lib/web/pdf_find_controller.js +2 -1
  88. package/lib/web/pdf_layer_viewer.js +208 -0
  89. package/lib/web/pdf_outline_viewer.js +24 -57
  90. package/lib/web/pdf_page_view.js +29 -6
  91. package/lib/web/pdf_print_service.js +13 -11
  92. package/lib/web/pdf_sidebar.js +46 -25
  93. package/lib/web/pdf_thumbnail_view.js +16 -3
  94. package/lib/web/pdf_thumbnail_viewer.js +17 -1
  95. package/lib/web/pdf_viewer.component.js +2 -2
  96. package/lib/web/preferences.js +1 -1
  97. package/lib/web/toolbar.js +1 -1
  98. package/lib/web/ui_utils.js +7 -1
  99. package/package.json +3 -1
  100. package/types/display/annotation_layer.d.ts +61 -0
  101. package/types/display/annotation_storage.d.ts +36 -0
  102. package/types/display/api.d.ts +1107 -0
  103. package/types/display/api_compatibility.d.ts +1 -0
  104. package/types/display/canvas.d.ts +4 -0
  105. package/types/display/content_disposition.d.ts +7 -0
  106. package/types/display/display_utils.d.ts +243 -0
  107. package/types/display/fetch_stream.d.ts +67 -0
  108. package/types/display/font_loader.d.ts +19 -0
  109. package/types/display/metadata.d.ts +9 -0
  110. package/types/display/network.d.ts +80 -0
  111. package/types/display/network_utils.d.ts +14 -0
  112. package/types/display/node_stream.d.ts +72 -0
  113. package/types/display/node_utils.d.ts +6 -0
  114. package/types/display/optional_content_config.d.ts +12 -0
  115. package/types/display/pattern_helper.d.ts +5 -0
  116. package/types/display/svg.d.ts +2 -0
  117. package/types/display/text_layer.d.ts +83 -0
  118. package/types/display/transport_stream.d.ts +57 -0
  119. package/types/display/webgl.d.ts +20 -0
  120. package/types/display/worker_options.d.ts +27 -0
  121. package/types/display/xml_parser.d.ts +35 -0
  122. package/types/pdf.d.ts +33 -0
  123. package/types/shared/compatibility.d.ts +1 -0
  124. package/types/shared/is_node.d.ts +1 -0
  125. package/types/shared/message_handler.d.ts +62 -0
  126. package/types/shared/util.d.ts +421 -0
  127. package/web/images/shadow.png +0 -0
  128. package/web/pdf_viewer.css +8 -5
  129. package/web/pdf_viewer.js +109 -33
  130. package/web/pdf_viewer.js.map +1 -1
  131. package/webpack.js +1 -9
  132. package/es5/web/images/texture.png +0 -0
  133. package/web/images/texture.png +0 -0
@@ -248,14 +248,14 @@ var CFFParser = function CFFParserClosure() {
248
248
  resetStack: true
249
249
  }];
250
250
 
251
- function CFFParser(file, properties, seacAnalysisEnabled) {
252
- this.bytes = file.getBytes();
253
- this.properties = properties;
254
- this.seacAnalysisEnabled = !!seacAnalysisEnabled;
255
- }
251
+ class CFFParser {
252
+ constructor(file, properties, seacAnalysisEnabled) {
253
+ this.bytes = file.getBytes();
254
+ this.properties = properties;
255
+ this.seacAnalysisEnabled = !!seacAnalysisEnabled;
256
+ }
256
257
 
257
- CFFParser.prototype = {
258
- parse: function CFFParser_parse() {
258
+ parse() {
259
259
  var properties = this.properties;
260
260
  var cff = new CFF();
261
261
  this.cff = cff;
@@ -323,8 +323,9 @@ var CFFParser = function CFFParserClosure() {
323
323
  cff.seacs = charStringsAndSeacs.seacs;
324
324
  cff.widths = charStringsAndSeacs.widths;
325
325
  return cff;
326
- },
327
- parseHeader: function CFFParser_parseHeader() {
326
+ }
327
+
328
+ parseHeader() {
328
329
  var bytes = this.bytes;
329
330
  var bytesLength = bytes.length;
330
331
  var offset = 0;
@@ -352,8 +353,9 @@ var CFFParser = function CFFParserClosure() {
352
353
  obj: header,
353
354
  endPos: hdrSize
354
355
  };
355
- },
356
- parseDict: function CFFParser_parseDict(dict) {
356
+ }
357
+
358
+ parseDict(dict) {
357
359
  var pos = 0;
358
360
 
359
361
  function parseOperand() {
@@ -432,8 +434,9 @@ var CFFParser = function CFFParserClosure() {
432
434
  }
433
435
 
434
436
  return entries;
435
- },
436
- parseIndex: function CFFParser_parseIndex(pos) {
437
+ }
438
+
439
+ parseIndex(pos) {
437
440
  var cffIndex = new CFFIndex();
438
441
  var bytes = this.bytes;
439
442
  var count = bytes[pos++] << 8 | bytes[pos++];
@@ -469,8 +472,9 @@ var CFFParser = function CFFParserClosure() {
469
472
  obj: cffIndex,
470
473
  endPos: end
471
474
  };
472
- },
473
- parseNameIndex: function CFFParser_parseNameIndex(index) {
475
+ }
476
+
477
+ parseNameIndex(index) {
474
478
  var names = [];
475
479
 
476
480
  for (var i = 0, ii = index.count; i < ii; ++i) {
@@ -479,8 +483,9 @@ var CFFParser = function CFFParserClosure() {
479
483
  }
480
484
 
481
485
  return names;
482
- },
483
- parseStringIndex: function CFFParser_parseStringIndex(index) {
486
+ }
487
+
488
+ parseStringIndex(index) {
484
489
  var strings = new CFFStrings();
485
490
 
486
491
  for (var i = 0, ii = index.count; i < ii; ++i) {
@@ -489,8 +494,9 @@ var CFFParser = function CFFParserClosure() {
489
494
  }
490
495
 
491
496
  return strings;
492
- },
493
- createDict: function CFFParser_createDict(Type, dict, strings) {
497
+ }
498
+
499
+ createDict(Type, dict, strings) {
494
500
  var cffDict = new Type(strings);
495
501
 
496
502
  for (var i = 0, ii = dict.length; i < ii; ++i) {
@@ -501,8 +507,9 @@ var CFFParser = function CFFParserClosure() {
501
507
  }
502
508
 
503
509
  return cffDict;
504
- },
505
- parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) {
510
+ }
511
+
512
+ parseCharString(state, data, localSubrIndex, globalSubrIndex) {
506
513
  if (!data || state.callDepth > MAX_SUBR_NESTING) {
507
514
  return false;
508
515
  }
@@ -660,7 +667,7 @@ var CFFParser = function CFFParserClosure() {
660
667
 
661
668
  state.stackSize = stackSize;
662
669
  return true;
663
- },
670
+ }
664
671
 
665
672
  parseCharStrings({
666
673
  charStrings,
@@ -738,14 +745,15 @@ var CFFParser = function CFFParserClosure() {
738
745
  seacs,
739
746
  widths
740
747
  };
741
- },
748
+ }
742
749
 
743
- emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) {
750
+ emptyPrivateDictionary(parentDict) {
744
751
  var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
745
752
  parentDict.setByKey(18, [0, 0]);
746
753
  parentDict.privateDict = privateDict;
747
- },
748
- parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) {
754
+ }
755
+
756
+ parsePrivateDict(parentDict) {
749
757
  if (!parentDict.hasName("Private")) {
750
758
  this.emptyPrivateDictionary(parentDict);
751
759
  return;
@@ -786,8 +794,9 @@ var CFFParser = function CFFParserClosure() {
786
794
 
787
795
  var subrsIndex = this.parseIndex(relativeOffset);
788
796
  privateDict.subrsIndex = subrsIndex.obj;
789
- },
790
- parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) {
797
+ }
798
+
799
+ parseCharsets(pos, length, strings, cid) {
791
800
  if (pos === 0) {
792
801
  return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset);
793
802
  } else if (pos === 1) {
@@ -843,8 +852,9 @@ var CFFParser = function CFFParserClosure() {
843
852
  var end = pos;
844
853
  var raw = bytes.subarray(start, end);
845
854
  return new CFFCharset(false, format, charset, raw);
846
- },
847
- parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) {
855
+ }
856
+
857
+ parseEncoding(pos, properties, strings, charset) {
848
858
  var encoding = Object.create(null);
849
859
  var bytes = this.bytes;
850
860
  var predefined = false;
@@ -918,8 +928,9 @@ var CFFParser = function CFFParserClosure() {
918
928
 
919
929
  format = format & 0x7f;
920
930
  return new CFFEncoding(predefined, format, encoding, raw);
921
- },
922
- parseFDSelect: function CFFParser_parseFDSelect(pos, length) {
931
+ }
932
+
933
+ parseFDSelect(pos, length) {
923
934
  var bytes = this.bytes;
924
935
  var format = bytes[pos++];
925
936
  var fdSelect = [];
@@ -966,14 +977,16 @@ var CFFParser = function CFFParserClosure() {
966
977
 
967
978
  return new CFFFDSelect(format, fdSelect);
968
979
  }
969
- };
980
+
981
+ }
982
+
970
983
  return CFFParser;
971
984
  }();
972
985
 
973
986
  exports.CFFParser = CFFParser;
974
987
 
975
- var CFF = function CFFClosure() {
976
- function CFF() {
988
+ class CFF {
989
+ constructor() {
977
990
  this.header = null;
978
991
  this.names = [];
979
992
  this.topDict = null;
@@ -987,124 +1000,120 @@ var CFF = function CFFClosure() {
987
1000
  this.isCIDFont = false;
988
1001
  }
989
1002
 
990
- CFF.prototype = {
991
- duplicateFirstGlyph: function CFF_duplicateFirstGlyph() {
992
- if (this.charStrings.count >= 65535) {
993
- (0, _util.warn)("Not enough space in charstrings to duplicate first glyph.");
994
- return;
995
- }
1003
+ duplicateFirstGlyph() {
1004
+ if (this.charStrings.count >= 65535) {
1005
+ (0, _util.warn)("Not enough space in charstrings to duplicate first glyph.");
1006
+ return;
1007
+ }
996
1008
 
997
- var glyphZero = this.charStrings.get(0);
998
- this.charStrings.add(glyphZero);
1009
+ var glyphZero = this.charStrings.get(0);
1010
+ this.charStrings.add(glyphZero);
999
1011
 
1000
- if (this.isCIDFont) {
1001
- this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
1002
- }
1003
- },
1004
- hasGlyphId: function CFF_hasGlyphID(id) {
1005
- if (id < 0 || id >= this.charStrings.count) {
1006
- return false;
1007
- }
1012
+ if (this.isCIDFont) {
1013
+ this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
1014
+ }
1015
+ }
1008
1016
 
1009
- var glyph = this.charStrings.get(id);
1010
- return glyph.length > 0;
1017
+ hasGlyphId(id) {
1018
+ if (id < 0 || id >= this.charStrings.count) {
1019
+ return false;
1011
1020
  }
1012
- };
1013
- return CFF;
1014
- }();
1021
+
1022
+ var glyph = this.charStrings.get(id);
1023
+ return glyph.length > 0;
1024
+ }
1025
+
1026
+ }
1015
1027
 
1016
1028
  exports.CFF = CFF;
1017
1029
 
1018
- var CFFHeader = function CFFHeaderClosure() {
1019
- function CFFHeader(major, minor, hdrSize, offSize) {
1030
+ class CFFHeader {
1031
+ constructor(major, minor, hdrSize, offSize) {
1020
1032
  this.major = major;
1021
1033
  this.minor = minor;
1022
1034
  this.hdrSize = hdrSize;
1023
1035
  this.offSize = offSize;
1024
1036
  }
1025
1037
 
1026
- return CFFHeader;
1027
- }();
1038
+ }
1028
1039
 
1029
1040
  exports.CFFHeader = CFFHeader;
1030
1041
 
1031
- var CFFStrings = function CFFStringsClosure() {
1032
- function CFFStrings() {
1042
+ class CFFStrings {
1043
+ constructor() {
1033
1044
  this.strings = [];
1034
1045
  }
1035
1046
 
1036
- CFFStrings.prototype = {
1037
- get: function CFFStrings_get(index) {
1038
- if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {
1039
- return CFFStandardStrings[index];
1040
- }
1041
-
1042
- if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {
1043
- return this.strings[index - NUM_STANDARD_CFF_STRINGS];
1044
- }
1047
+ get(index) {
1048
+ if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {
1049
+ return CFFStandardStrings[index];
1050
+ }
1045
1051
 
1046
- return CFFStandardStrings[0];
1047
- },
1048
- getSID: function CFFStrings_getSID(str) {
1049
- let index = CFFStandardStrings.indexOf(str);
1052
+ if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {
1053
+ return this.strings[index - NUM_STANDARD_CFF_STRINGS];
1054
+ }
1050
1055
 
1051
- if (index !== -1) {
1052
- return index;
1053
- }
1056
+ return CFFStandardStrings[0];
1057
+ }
1054
1058
 
1055
- index = this.strings.indexOf(str);
1059
+ getSID(str) {
1060
+ let index = CFFStandardStrings.indexOf(str);
1056
1061
 
1057
- if (index !== -1) {
1058
- return index + NUM_STANDARD_CFF_STRINGS;
1059
- }
1062
+ if (index !== -1) {
1063
+ return index;
1064
+ }
1060
1065
 
1061
- return -1;
1062
- },
1063
- add: function CFFStrings_add(value) {
1064
- this.strings.push(value);
1065
- },
1066
+ index = this.strings.indexOf(str);
1066
1067
 
1067
- get count() {
1068
- return this.strings.length;
1068
+ if (index !== -1) {
1069
+ return index + NUM_STANDARD_CFF_STRINGS;
1069
1070
  }
1070
1071
 
1071
- };
1072
- return CFFStrings;
1073
- }();
1072
+ return -1;
1073
+ }
1074
+
1075
+ add(value) {
1076
+ this.strings.push(value);
1077
+ }
1078
+
1079
+ get count() {
1080
+ return this.strings.length;
1081
+ }
1082
+
1083
+ }
1074
1084
 
1075
1085
  exports.CFFStrings = CFFStrings;
1076
1086
 
1077
- var CFFIndex = function CFFIndexClosure() {
1078
- function CFFIndex() {
1087
+ class CFFIndex {
1088
+ constructor() {
1079
1089
  this.objects = [];
1080
1090
  this.length = 0;
1081
1091
  }
1082
1092
 
1083
- CFFIndex.prototype = {
1084
- add: function CFFIndex_add(data) {
1085
- this.length += data.length;
1086
- this.objects.push(data);
1087
- },
1088
- set: function CFFIndex_set(index, data) {
1089
- this.length += data.length - this.objects[index].length;
1090
- this.objects[index] = data;
1091
- },
1092
- get: function CFFIndex_get(index) {
1093
- return this.objects[index];
1094
- },
1095
-
1096
- get count() {
1097
- return this.objects.length;
1098
- }
1099
-
1100
- };
1101
- return CFFIndex;
1102
- }();
1093
+ add(data) {
1094
+ this.length += data.length;
1095
+ this.objects.push(data);
1096
+ }
1097
+
1098
+ set(index, data) {
1099
+ this.length += data.length - this.objects[index].length;
1100
+ this.objects[index] = data;
1101
+ }
1102
+
1103
+ get(index) {
1104
+ return this.objects[index];
1105
+ }
1106
+
1107
+ get count() {
1108
+ return this.objects.length;
1109
+ }
1110
+
1111
+ }
1103
1112
 
1104
1113
  exports.CFFIndex = CFFIndex;
1105
1114
 
1106
- var CFFDict = function CFFDictClosure() {
1107
- function CFFDict(tables, strings) {
1115
+ class CFFDict {
1116
+ constructor(tables, strings) {
1108
1117
  this.keyToNameMap = tables.keyToNameMap;
1109
1118
  this.nameToKeyMap = tables.nameToKeyMap;
1110
1119
  this.defaults = tables.defaults;
@@ -1115,63 +1124,65 @@ var CFFDict = function CFFDictClosure() {
1115
1124
  this.values = Object.create(null);
1116
1125
  }
1117
1126
 
1118
- CFFDict.prototype = {
1119
- setByKey: function CFFDict_setByKey(key, value) {
1120
- if (!(key in this.keyToNameMap)) {
1121
- return false;
1122
- }
1127
+ setByKey(key, value) {
1128
+ if (!(key in this.keyToNameMap)) {
1129
+ return false;
1130
+ }
1123
1131
 
1124
- var valueLength = value.length;
1132
+ var valueLength = value.length;
1125
1133
 
1126
- if (valueLength === 0) {
1134
+ if (valueLength === 0) {
1135
+ return true;
1136
+ }
1137
+
1138
+ for (var i = 0; i < valueLength; i++) {
1139
+ if (isNaN(value[i])) {
1140
+ (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
1127
1141
  return true;
1128
1142
  }
1143
+ }
1129
1144
 
1130
- for (var i = 0; i < valueLength; i++) {
1131
- if (isNaN(value[i])) {
1132
- (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
1133
- return true;
1134
- }
1135
- }
1145
+ var type = this.types[key];
1136
1146
 
1137
- var type = this.types[key];
1147
+ if (type === "num" || type === "sid" || type === "offset") {
1148
+ value = value[0];
1149
+ }
1138
1150
 
1139
- if (type === "num" || type === "sid" || type === "offset") {
1140
- value = value[0];
1141
- }
1151
+ this.values[key] = value;
1152
+ return true;
1153
+ }
1142
1154
 
1143
- this.values[key] = value;
1144
- return true;
1145
- },
1146
- setByName: function CFFDict_setByName(name, value) {
1147
- if (!(name in this.nameToKeyMap)) {
1148
- throw new _util.FormatError(`Invalid dictionary name "${name}"`);
1149
- }
1155
+ setByName(name, value) {
1156
+ if (!(name in this.nameToKeyMap)) {
1157
+ throw new _util.FormatError(`Invalid dictionary name "${name}"`);
1158
+ }
1150
1159
 
1151
- this.values[this.nameToKeyMap[name]] = value;
1152
- },
1153
- hasName: function CFFDict_hasName(name) {
1154
- return this.nameToKeyMap[name] in this.values;
1155
- },
1156
- getByName: function CFFDict_getByName(name) {
1157
- if (!(name in this.nameToKeyMap)) {
1158
- throw new _util.FormatError(`Invalid dictionary name ${name}"`);
1159
- }
1160
+ this.values[this.nameToKeyMap[name]] = value;
1161
+ }
1160
1162
 
1161
- var key = this.nameToKeyMap[name];
1163
+ hasName(name) {
1164
+ return this.nameToKeyMap[name] in this.values;
1165
+ }
1162
1166
 
1163
- if (!(key in this.values)) {
1164
- return this.defaults[key];
1165
- }
1167
+ getByName(name) {
1168
+ if (!(name in this.nameToKeyMap)) {
1169
+ throw new _util.FormatError(`Invalid dictionary name ${name}"`);
1170
+ }
1171
+
1172
+ var key = this.nameToKeyMap[name];
1166
1173
 
1167
- return this.values[key];
1168
- },
1169
- removeByName: function CFFDict_removeByName(name) {
1170
- delete this.values[this.nameToKeyMap[name]];
1174
+ if (!(key in this.values)) {
1175
+ return this.defaults[key];
1171
1176
  }
1172
- };
1173
1177
 
1174
- CFFDict.createTables = function CFFDict_createTables(layout) {
1178
+ return this.values[key];
1179
+ }
1180
+
1181
+ removeByName(name) {
1182
+ delete this.values[this.nameToKeyMap[name]];
1183
+ }
1184
+
1185
+ static createTables(layout) {
1175
1186
  var tables = {
1176
1187
  keyToNameMap: {},
1177
1188
  nameToKeyMap: {},
@@ -1193,25 +1204,26 @@ var CFFDict = function CFFDictClosure() {
1193
1204
  }
1194
1205
 
1195
1206
  return tables;
1196
- };
1207
+ }
1197
1208
 
1198
- return CFFDict;
1199
- }();
1209
+ }
1200
1210
 
1201
1211
  var CFFTopDict = function CFFTopDictClosure() {
1202
1212
  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]];
1203
1213
  var tables = null;
1204
1214
 
1205
- function CFFTopDict(strings) {
1206
- if (tables === null) {
1207
- tables = CFFDict.createTables(layout);
1215
+ class CFFTopDict extends CFFDict {
1216
+ constructor(strings) {
1217
+ if (tables === null) {
1218
+ tables = CFFDict.createTables(layout);
1219
+ }
1220
+
1221
+ super(tables, strings);
1222
+ this.privateDict = null;
1208
1223
  }
1209
1224
 
1210
- CFFDict.call(this, tables, strings);
1211
- this.privateDict = null;
1212
1225
  }
1213
1226
 
1214
- CFFTopDict.prototype = Object.create(CFFDict.prototype);
1215
1227
  return CFFTopDict;
1216
1228
  }();
1217
1229
 
@@ -1221,16 +1233,18 @@ var CFFPrivateDict = function CFFPrivateDictClosure() {
1221
1233
  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]];
1222
1234
  var tables = null;
1223
1235
 
1224
- function CFFPrivateDict(strings) {
1225
- if (tables === null) {
1226
- tables = CFFDict.createTables(layout);
1236
+ class CFFPrivateDict extends CFFDict {
1237
+ constructor(strings) {
1238
+ if (tables === null) {
1239
+ tables = CFFDict.createTables(layout);
1240
+ }
1241
+
1242
+ super(tables, strings);
1243
+ this.subrsIndex = null;
1227
1244
  }
1228
1245
 
1229
- CFFDict.call(this, tables, strings);
1230
- this.subrsIndex = null;
1231
1246
  }
1232
1247
 
1233
- CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
1234
1248
  return CFFPrivateDict;
1235
1249
  }();
1236
1250
 
@@ -1241,578 +1255,592 @@ var CFFCharsetPredefinedTypes = {
1241
1255
  EXPERT_SUBSET: 2
1242
1256
  };
1243
1257
 
1244
- var CFFCharset = function CFFCharsetClosure() {
1245
- function CFFCharset(predefined, format, charset, raw) {
1258
+ class CFFCharset {
1259
+ constructor(predefined, format, charset, raw) {
1246
1260
  this.predefined = predefined;
1247
1261
  this.format = format;
1248
1262
  this.charset = charset;
1249
1263
  this.raw = raw;
1250
1264
  }
1251
1265
 
1252
- return CFFCharset;
1253
- }();
1266
+ }
1254
1267
 
1255
1268
  exports.CFFCharset = CFFCharset;
1256
1269
 
1257
- var CFFEncoding = function CFFEncodingClosure() {
1258
- function CFFEncoding(predefined, format, encoding, raw) {
1270
+ class CFFEncoding {
1271
+ constructor(predefined, format, encoding, raw) {
1259
1272
  this.predefined = predefined;
1260
1273
  this.format = format;
1261
1274
  this.encoding = encoding;
1262
1275
  this.raw = raw;
1263
1276
  }
1264
1277
 
1265
- return CFFEncoding;
1266
- }();
1278
+ }
1267
1279
 
1268
- var CFFFDSelect = function CFFFDSelectClosure() {
1269
- function CFFFDSelect(format, fdSelect) {
1280
+ class CFFFDSelect {
1281
+ constructor(format, fdSelect) {
1270
1282
  this.format = format;
1271
1283
  this.fdSelect = fdSelect;
1272
1284
  }
1273
1285
 
1274
- CFFFDSelect.prototype = {
1275
- getFDIndex: function CFFFDSelect_get(glyphIndex) {
1276
- if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
1277
- return -1;
1278
- }
1279
-
1280
- return this.fdSelect[glyphIndex];
1286
+ getFDIndex(glyphIndex) {
1287
+ if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
1288
+ return -1;
1281
1289
  }
1282
- };
1283
- return CFFFDSelect;
1284
- }();
1290
+
1291
+ return this.fdSelect[glyphIndex];
1292
+ }
1293
+
1294
+ }
1285
1295
 
1286
1296
  exports.CFFFDSelect = CFFFDSelect;
1287
1297
 
1288
- var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
1289
- function CFFOffsetTracker() {
1298
+ class CFFOffsetTracker {
1299
+ constructor() {
1290
1300
  this.offsets = Object.create(null);
1291
1301
  }
1292
1302
 
1293
- CFFOffsetTracker.prototype = {
1294
- isTracking: function CFFOffsetTracker_isTracking(key) {
1295
- return key in this.offsets;
1296
- },
1297
- track: function CFFOffsetTracker_track(key, location) {
1298
- if (key in this.offsets) {
1299
- throw new _util.FormatError(`Already tracking location of ${key}`);
1300
- }
1303
+ isTracking(key) {
1304
+ return key in this.offsets;
1305
+ }
1301
1306
 
1302
- this.offsets[key] = location;
1303
- },
1304
- offset: function CFFOffsetTracker_offset(value) {
1305
- for (var key in this.offsets) {
1306
- this.offsets[key] += value;
1307
- }
1308
- },
1309
- setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) {
1310
- if (!(key in this.offsets)) {
1311
- throw new _util.FormatError(`Not tracking location of ${key}`);
1312
- }
1307
+ track(key, location) {
1308
+ if (key in this.offsets) {
1309
+ throw new _util.FormatError(`Already tracking location of ${key}`);
1310
+ }
1313
1311
 
1314
- var data = output.data;
1315
- var dataOffset = this.offsets[key];
1316
- var size = 5;
1312
+ this.offsets[key] = location;
1313
+ }
1317
1314
 
1318
- for (var i = 0, ii = values.length; i < ii; ++i) {
1319
- var offset0 = i * size + dataOffset;
1320
- var offset1 = offset0 + 1;
1321
- var offset2 = offset0 + 2;
1322
- var offset3 = offset0 + 3;
1323
- var offset4 = offset0 + 4;
1315
+ offset(value) {
1316
+ for (var key in this.offsets) {
1317
+ this.offsets[key] += value;
1318
+ }
1319
+ }
1324
1320
 
1325
- if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
1326
- throw new _util.FormatError("writing to an offset that is not empty");
1327
- }
1321
+ setEntryLocation(key, values, output) {
1322
+ if (!(key in this.offsets)) {
1323
+ throw new _util.FormatError(`Not tracking location of ${key}`);
1324
+ }
1328
1325
 
1329
- var value = values[i];
1330
- data[offset0] = 0x1d;
1331
- data[offset1] = value >> 24 & 0xff;
1332
- data[offset2] = value >> 16 & 0xff;
1333
- data[offset3] = value >> 8 & 0xff;
1334
- data[offset4] = value & 0xff;
1326
+ var data = output.data;
1327
+ var dataOffset = this.offsets[key];
1328
+ var size = 5;
1329
+
1330
+ for (var i = 0, ii = values.length; i < ii; ++i) {
1331
+ var offset0 = i * size + dataOffset;
1332
+ var offset1 = offset0 + 1;
1333
+ var offset2 = offset0 + 2;
1334
+ var offset3 = offset0 + 3;
1335
+ var offset4 = offset0 + 4;
1336
+
1337
+ if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
1338
+ throw new _util.FormatError("writing to an offset that is not empty");
1335
1339
  }
1340
+
1341
+ var value = values[i];
1342
+ data[offset0] = 0x1d;
1343
+ data[offset1] = value >> 24 & 0xff;
1344
+ data[offset2] = value >> 16 & 0xff;
1345
+ data[offset3] = value >> 8 & 0xff;
1346
+ data[offset4] = value & 0xff;
1336
1347
  }
1337
- };
1338
- return CFFOffsetTracker;
1339
- }();
1348
+ }
1349
+
1350
+ }
1340
1351
 
1341
- var CFFCompiler = function CFFCompilerClosure() {
1342
- function CFFCompiler(cff) {
1352
+ class CFFCompiler {
1353
+ constructor(cff) {
1343
1354
  this.cff = cff;
1344
1355
  }
1345
1356
 
1346
- CFFCompiler.prototype = {
1347
- compile: function CFFCompiler_compile() {
1348
- var cff = this.cff;
1349
- var output = {
1350
- data: [],
1351
- length: 0,
1352
- add: function CFFCompiler_add(data) {
1353
- this.data = this.data.concat(data);
1354
- this.length = this.data.length;
1357
+ compile() {
1358
+ var cff = this.cff;
1359
+ var output = {
1360
+ data: [],
1361
+ length: 0,
1362
+ add: function CFFCompiler_add(data) {
1363
+ this.data = this.data.concat(data);
1364
+ this.length = this.data.length;
1365
+ }
1366
+ };
1367
+ var header = this.compileHeader(cff.header);
1368
+ output.add(header);
1369
+ var nameIndex = this.compileNameIndex(cff.names);
1370
+ output.add(nameIndex);
1371
+
1372
+ if (cff.isCIDFont) {
1373
+ if (cff.topDict.hasName("FontMatrix")) {
1374
+ var base = cff.topDict.getByName("FontMatrix");
1375
+ cff.topDict.removeByName("FontMatrix");
1376
+
1377
+ for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
1378
+ var subDict = cff.fdArray[i];
1379
+ var matrix = base.slice(0);
1380
+
1381
+ if (subDict.hasName("FontMatrix")) {
1382
+ matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
1383
+ }
1384
+
1385
+ subDict.setByName("FontMatrix", matrix);
1355
1386
  }
1356
- };
1357
- var header = this.compileHeader(cff.header);
1358
- output.add(header);
1359
- var nameIndex = this.compileNameIndex(cff.names);
1360
- output.add(nameIndex);
1387
+ }
1388
+ }
1361
1389
 
1362
- if (cff.isCIDFont) {
1363
- if (cff.topDict.hasName("FontMatrix")) {
1364
- var base = cff.topDict.getByName("FontMatrix");
1365
- cff.topDict.removeByName("FontMatrix");
1390
+ cff.topDict.setByName("charset", 0);
1391
+ var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
1392
+ output.add(compiled.output);
1393
+ var topDictTracker = compiled.trackers[0];
1394
+ var stringIndex = this.compileStringIndex(cff.strings.strings);
1395
+ output.add(stringIndex);
1396
+ var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
1397
+ output.add(globalSubrIndex);
1398
+
1399
+ if (cff.encoding && cff.topDict.hasName("Encoding")) {
1400
+ if (cff.encoding.predefined) {
1401
+ topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
1402
+ } else {
1403
+ var encoding = this.compileEncoding(cff.encoding);
1404
+ topDictTracker.setEntryLocation("Encoding", [output.length], output);
1405
+ output.add(encoding);
1406
+ }
1407
+ }
1366
1408
 
1367
- for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
1368
- var subDict = cff.fdArray[i];
1369
- var matrix = base.slice(0);
1409
+ var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
1410
+ topDictTracker.setEntryLocation("charset", [output.length], output);
1411
+ output.add(charset);
1412
+ var charStrings = this.compileCharStrings(cff.charStrings);
1413
+ topDictTracker.setEntryLocation("CharStrings", [output.length], output);
1414
+ output.add(charStrings);
1415
+
1416
+ if (cff.isCIDFont) {
1417
+ topDictTracker.setEntryLocation("FDSelect", [output.length], output);
1418
+ var fdSelect = this.compileFDSelect(cff.fdSelect);
1419
+ output.add(fdSelect);
1420
+ compiled = this.compileTopDicts(cff.fdArray, output.length, true);
1421
+ topDictTracker.setEntryLocation("FDArray", [output.length], output);
1422
+ output.add(compiled.output);
1423
+ var fontDictTrackers = compiled.trackers;
1424
+ this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
1425
+ }
1370
1426
 
1371
- if (subDict.hasName("FontMatrix")) {
1372
- matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
1373
- }
1427
+ this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
1428
+ output.add([0]);
1429
+ return output.data;
1430
+ }
1374
1431
 
1375
- subDict.setByName("FontMatrix", matrix);
1376
- }
1377
- }
1378
- }
1432
+ encodeNumber(value) {
1433
+ if (Number.isInteger(value)) {
1434
+ return this.encodeInteger(value);
1435
+ }
1379
1436
 
1380
- cff.topDict.setByName("charset", 0);
1381
- var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
1382
- output.add(compiled.output);
1383
- var topDictTracker = compiled.trackers[0];
1384
- var stringIndex = this.compileStringIndex(cff.strings.strings);
1385
- output.add(stringIndex);
1386
- var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
1387
- output.add(globalSubrIndex);
1388
-
1389
- if (cff.encoding && cff.topDict.hasName("Encoding")) {
1390
- if (cff.encoding.predefined) {
1391
- topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
1392
- } else {
1393
- var encoding = this.compileEncoding(cff.encoding);
1394
- topDictTracker.setEntryLocation("Encoding", [output.length], output);
1395
- output.add(encoding);
1396
- }
1397
- }
1437
+ return this.encodeFloat(value);
1438
+ }
1398
1439
 
1399
- var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
1400
- topDictTracker.setEntryLocation("charset", [output.length], output);
1401
- output.add(charset);
1402
- var charStrings = this.compileCharStrings(cff.charStrings);
1403
- topDictTracker.setEntryLocation("CharStrings", [output.length], output);
1404
- output.add(charStrings);
1440
+ static get EncodeFloatRegExp() {
1441
+ return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/);
1442
+ }
1405
1443
 
1406
- if (cff.isCIDFont) {
1407
- topDictTracker.setEntryLocation("FDSelect", [output.length], output);
1408
- var fdSelect = this.compileFDSelect(cff.fdSelect);
1409
- output.add(fdSelect);
1410
- compiled = this.compileTopDicts(cff.fdArray, output.length, true);
1411
- topDictTracker.setEntryLocation("FDArray", [output.length], output);
1412
- output.add(compiled.output);
1413
- var fontDictTrackers = compiled.trackers;
1414
- this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
1415
- }
1444
+ encodeFloat(num) {
1445
+ var value = num.toString();
1446
+ var m = CFFCompiler.EncodeFloatRegExp.exec(value);
1416
1447
 
1417
- this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
1418
- output.add([0]);
1419
- return output.data;
1420
- },
1421
- encodeNumber: function CFFCompiler_encodeNumber(value) {
1422
- if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {
1423
- return this.encodeInteger(value);
1424
- }
1448
+ if (m) {
1449
+ var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
1450
+ value = (Math.round(num * epsilon) / epsilon).toString();
1451
+ }
1452
+
1453
+ var nibbles = "";
1454
+ var i, ii;
1425
1455
 
1426
- return this.encodeFloat(value);
1427
- },
1428
- encodeFloat: function CFFCompiler_encodeFloat(num) {
1429
- var value = num.toString();
1430
- var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
1456
+ for (i = 0, ii = value.length; i < ii; ++i) {
1457
+ var a = value[i];
1431
1458
 
1432
- if (m) {
1433
- var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
1434
- value = (Math.round(num * epsilon) / epsilon).toString();
1459
+ if (a === "e") {
1460
+ nibbles += value[++i] === "-" ? "c" : "b";
1461
+ } else if (a === ".") {
1462
+ nibbles += "a";
1463
+ } else if (a === "-") {
1464
+ nibbles += "e";
1465
+ } else {
1466
+ nibbles += a;
1435
1467
  }
1468
+ }
1436
1469
 
1437
- var nibbles = "";
1438
- var i, ii;
1470
+ nibbles += nibbles.length & 1 ? "f" : "ff";
1471
+ var out = [30];
1439
1472
 
1440
- for (i = 0, ii = value.length; i < ii; ++i) {
1441
- var a = value[i];
1473
+ for (i = 0, ii = nibbles.length; i < ii; i += 2) {
1474
+ out.push(parseInt(nibbles.substring(i, i + 2), 16));
1475
+ }
1442
1476
 
1443
- if (a === "e") {
1444
- nibbles += value[++i] === "-" ? "c" : "b";
1445
- } else if (a === ".") {
1446
- nibbles += "a";
1447
- } else if (a === "-") {
1448
- nibbles += "e";
1449
- } else {
1450
- nibbles += a;
1477
+ return out;
1478
+ }
1479
+
1480
+ encodeInteger(value) {
1481
+ var code;
1482
+
1483
+ if (value >= -107 && value <= 107) {
1484
+ code = [value + 139];
1485
+ } else if (value >= 108 && value <= 1131) {
1486
+ value = value - 108;
1487
+ code = [(value >> 8) + 247, value & 0xff];
1488
+ } else if (value >= -1131 && value <= -108) {
1489
+ value = -value - 108;
1490
+ code = [(value >> 8) + 251, value & 0xff];
1491
+ } else if (value >= -32768 && value <= 32767) {
1492
+ code = [0x1c, value >> 8 & 0xff, value & 0xff];
1493
+ } else {
1494
+ code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];
1495
+ }
1496
+
1497
+ return code;
1498
+ }
1499
+
1500
+ compileHeader(header) {
1501
+ return [header.major, header.minor, header.hdrSize, header.offSize];
1502
+ }
1503
+
1504
+ compileNameIndex(names) {
1505
+ var nameIndex = new CFFIndex();
1506
+
1507
+ for (var i = 0, ii = names.length; i < ii; ++i) {
1508
+ var name = names[i];
1509
+ var length = Math.min(name.length, 127);
1510
+ var sanitizedName = new Array(length);
1511
+
1512
+ for (var j = 0; j < length; j++) {
1513
+ var char = name[j];
1514
+
1515
+ if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
1516
+ char = "_";
1451
1517
  }
1518
+
1519
+ sanitizedName[j] = char;
1452
1520
  }
1453
1521
 
1454
- nibbles += nibbles.length & 1 ? "f" : "ff";
1455
- var out = [30];
1522
+ sanitizedName = sanitizedName.join("");
1456
1523
 
1457
- for (i = 0, ii = nibbles.length; i < ii; i += 2) {
1458
- out.push(parseInt(nibbles.substring(i, i + 2), 16));
1524
+ if (sanitizedName === "") {
1525
+ sanitizedName = "Bad_Font_Name";
1459
1526
  }
1460
1527
 
1461
- return out;
1462
- },
1463
- encodeInteger: function CFFCompiler_encodeInteger(value) {
1464
- var code;
1465
-
1466
- if (value >= -107 && value <= 107) {
1467
- code = [value + 139];
1468
- } else if (value >= 108 && value <= 1131) {
1469
- value = value - 108;
1470
- code = [(value >> 8) + 247, value & 0xff];
1471
- } else if (value >= -1131 && value <= -108) {
1472
- value = -value - 108;
1473
- code = [(value >> 8) + 251, value & 0xff];
1474
- } else if (value >= -32768 && value <= 32767) {
1475
- code = [0x1c, value >> 8 & 0xff, value & 0xff];
1476
- } else {
1477
- code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];
1478
- }
1528
+ nameIndex.add((0, _util.stringToBytes)(sanitizedName));
1529
+ }
1479
1530
 
1480
- return code;
1481
- },
1482
- compileHeader: function CFFCompiler_compileHeader(header) {
1483
- return [header.major, header.minor, header.hdrSize, header.offSize];
1484
- },
1485
- compileNameIndex: function CFFCompiler_compileNameIndex(names) {
1486
- var nameIndex = new CFFIndex();
1531
+ return this.compileIndex(nameIndex);
1532
+ }
1487
1533
 
1488
- for (var i = 0, ii = names.length; i < ii; ++i) {
1489
- var name = names[i];
1490
- var length = Math.min(name.length, 127);
1491
- var sanitizedName = new Array(length);
1534
+ compileTopDicts(dicts, length, removeCidKeys) {
1535
+ var fontDictTrackers = [];
1536
+ var fdArrayIndex = new CFFIndex();
1492
1537
 
1493
- for (var j = 0; j < length; j++) {
1494
- var char = name[j];
1538
+ for (var i = 0, ii = dicts.length; i < ii; ++i) {
1539
+ var fontDict = dicts[i];
1495
1540
 
1496
- if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
1497
- char = "_";
1498
- }
1541
+ if (removeCidKeys) {
1542
+ fontDict.removeByName("CIDFontVersion");
1543
+ fontDict.removeByName("CIDFontRevision");
1544
+ fontDict.removeByName("CIDFontType");
1545
+ fontDict.removeByName("CIDCount");
1546
+ fontDict.removeByName("UIDBase");
1547
+ }
1499
1548
 
1500
- sanitizedName[j] = char;
1501
- }
1549
+ var fontDictTracker = new CFFOffsetTracker();
1550
+ var fontDictData = this.compileDict(fontDict, fontDictTracker);
1551
+ fontDictTrackers.push(fontDictTracker);
1552
+ fdArrayIndex.add(fontDictData);
1553
+ fontDictTracker.offset(length);
1554
+ }
1502
1555
 
1503
- sanitizedName = sanitizedName.join("");
1556
+ fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
1557
+ return {
1558
+ trackers: fontDictTrackers,
1559
+ output: fdArrayIndex
1560
+ };
1561
+ }
1504
1562
 
1505
- if (sanitizedName === "") {
1506
- sanitizedName = "Bad_Font_Name";
1507
- }
1563
+ compilePrivateDicts(dicts, trackers, output) {
1564
+ for (var i = 0, ii = dicts.length; i < ii; ++i) {
1565
+ var fontDict = dicts[i];
1566
+ var privateDict = fontDict.privateDict;
1508
1567
 
1509
- nameIndex.add((0, _util.stringToBytes)(sanitizedName));
1568
+ if (!privateDict || !fontDict.hasName("Private")) {
1569
+ throw new _util.FormatError("There must be a private dictionary.");
1510
1570
  }
1511
1571
 
1512
- return this.compileIndex(nameIndex);
1513
- },
1514
- compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) {
1515
- var fontDictTrackers = [];
1516
- var fdArrayIndex = new CFFIndex();
1517
-
1518
- for (var i = 0, ii = dicts.length; i < ii; ++i) {
1519
- var fontDict = dicts[i];
1520
-
1521
- if (removeCidKeys) {
1522
- fontDict.removeByName("CIDFontVersion");
1523
- fontDict.removeByName("CIDFontRevision");
1524
- fontDict.removeByName("CIDFontType");
1525
- fontDict.removeByName("CIDCount");
1526
- fontDict.removeByName("UIDBase");
1527
- }
1572
+ var privateDictTracker = new CFFOffsetTracker();
1573
+ var privateDictData = this.compileDict(privateDict, privateDictTracker);
1574
+ var outputLength = output.length;
1575
+ privateDictTracker.offset(outputLength);
1528
1576
 
1529
- var fontDictTracker = new CFFOffsetTracker();
1530
- var fontDictData = this.compileDict(fontDict, fontDictTracker);
1531
- fontDictTrackers.push(fontDictTracker);
1532
- fdArrayIndex.add(fontDictData);
1533
- fontDictTracker.offset(length);
1577
+ if (!privateDictData.length) {
1578
+ outputLength = 0;
1534
1579
  }
1535
1580
 
1536
- fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
1537
- return {
1538
- trackers: fontDictTrackers,
1539
- output: fdArrayIndex
1540
- };
1541
- },
1542
- compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) {
1543
- for (var i = 0, ii = dicts.length; i < ii; ++i) {
1544
- var fontDict = dicts[i];
1545
- var privateDict = fontDict.privateDict;
1546
-
1547
- if (!privateDict || !fontDict.hasName("Private")) {
1548
- throw new _util.FormatError("There must be a private dictionary.");
1549
- }
1581
+ trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output);
1582
+ output.add(privateDictData);
1550
1583
 
1551
- var privateDictTracker = new CFFOffsetTracker();
1552
- var privateDictData = this.compileDict(privateDict, privateDictTracker);
1553
- var outputLength = output.length;
1554
- privateDictTracker.offset(outputLength);
1584
+ if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
1585
+ var subrs = this.compileIndex(privateDict.subrsIndex);
1586
+ privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
1587
+ output.add(subrs);
1588
+ }
1589
+ }
1590
+ }
1555
1591
 
1556
- if (!privateDictData.length) {
1557
- outputLength = 0;
1558
- }
1592
+ compileDict(dict, offsetTracker) {
1593
+ var out = [];
1594
+ var order = dict.order;
1559
1595
 
1560
- trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output);
1561
- output.add(privateDictData);
1596
+ for (var i = 0; i < order.length; ++i) {
1597
+ var key = order[i];
1562
1598
 
1563
- if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
1564
- var subrs = this.compileIndex(privateDict.subrsIndex);
1565
- privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
1566
- output.add(subrs);
1567
- }
1599
+ if (!(key in dict.values)) {
1600
+ continue;
1568
1601
  }
1569
- },
1570
- compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {
1571
- var out = [];
1572
- var order = dict.order;
1573
1602
 
1574
- for (var i = 0; i < order.length; ++i) {
1575
- var key = order[i];
1603
+ var values = dict.values[key];
1604
+ var types = dict.types[key];
1576
1605
 
1577
- if (!(key in dict.values)) {
1578
- continue;
1579
- }
1606
+ if (!Array.isArray(types)) {
1607
+ types = [types];
1608
+ }
1580
1609
 
1581
- var values = dict.values[key];
1582
- var types = dict.types[key];
1610
+ if (!Array.isArray(values)) {
1611
+ values = [values];
1612
+ }
1583
1613
 
1584
- if (!Array.isArray(types)) {
1585
- types = [types];
1586
- }
1614
+ if (values.length === 0) {
1615
+ continue;
1616
+ }
1587
1617
 
1588
- if (!Array.isArray(values)) {
1589
- values = [values];
1590
- }
1618
+ for (var j = 0, jj = types.length; j < jj; ++j) {
1619
+ var type = types[j];
1620
+ var value = values[j];
1591
1621
 
1592
- if (values.length === 0) {
1593
- continue;
1594
- }
1622
+ switch (type) {
1623
+ case "num":
1624
+ case "sid":
1625
+ out = out.concat(this.encodeNumber(value));
1626
+ break;
1595
1627
 
1596
- for (var j = 0, jj = types.length; j < jj; ++j) {
1597
- var type = types[j];
1598
- var value = values[j];
1628
+ case "offset":
1629
+ var name = dict.keyToNameMap[key];
1599
1630
 
1600
- switch (type) {
1601
- case "num":
1602
- case "sid":
1603
- out = out.concat(this.encodeNumber(value));
1604
- break;
1631
+ if (!offsetTracker.isTracking(name)) {
1632
+ offsetTracker.track(name, out.length);
1633
+ }
1605
1634
 
1606
- case "offset":
1607
- var name = dict.keyToNameMap[key];
1635
+ out = out.concat([0x1d, 0, 0, 0, 0]);
1636
+ break;
1608
1637
 
1609
- if (!offsetTracker.isTracking(name)) {
1610
- offsetTracker.track(name, out.length);
1611
- }
1638
+ case "array":
1639
+ case "delta":
1640
+ out = out.concat(this.encodeNumber(value));
1612
1641
 
1613
- out = out.concat([0x1d, 0, 0, 0, 0]);
1614
- break;
1642
+ for (var k = 1, kk = values.length; k < kk; ++k) {
1643
+ out = out.concat(this.encodeNumber(values[k]));
1644
+ }
1615
1645
 
1616
- case "array":
1617
- case "delta":
1618
- out = out.concat(this.encodeNumber(value));
1646
+ break;
1619
1647
 
1620
- for (var k = 1, kk = values.length; k < kk; ++k) {
1621
- out = out.concat(this.encodeNumber(values[k]));
1622
- }
1648
+ default:
1649
+ throw new _util.FormatError(`Unknown data type of ${type}`);
1650
+ }
1651
+ }
1623
1652
 
1624
- break;
1653
+ out = out.concat(dict.opcodes[key]);
1654
+ }
1625
1655
 
1626
- default:
1627
- throw new _util.FormatError(`Unknown data type of ${type}`);
1628
- }
1629
- }
1656
+ return out;
1657
+ }
1630
1658
 
1631
- out = out.concat(dict.opcodes[key]);
1632
- }
1659
+ compileStringIndex(strings) {
1660
+ var stringIndex = new CFFIndex();
1633
1661
 
1634
- return out;
1635
- },
1636
- compileStringIndex: function CFFCompiler_compileStringIndex(strings) {
1637
- var stringIndex = new CFFIndex();
1662
+ for (var i = 0, ii = strings.length; i < ii; ++i) {
1663
+ stringIndex.add((0, _util.stringToBytes)(strings[i]));
1664
+ }
1638
1665
 
1639
- for (var i = 0, ii = strings.length; i < ii; ++i) {
1640
- stringIndex.add((0, _util.stringToBytes)(strings[i]));
1641
- }
1666
+ return this.compileIndex(stringIndex);
1667
+ }
1642
1668
 
1643
- return this.compileIndex(stringIndex);
1644
- },
1645
- compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {
1646
- var globalSubrIndex = this.cff.globalSubrIndex;
1647
- this.out.writeByteArray(this.compileIndex(globalSubrIndex));
1648
- },
1649
- compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {
1650
- var charStringsIndex = new CFFIndex();
1669
+ compileGlobalSubrIndex() {
1670
+ var globalSubrIndex = this.cff.globalSubrIndex;
1671
+ this.out.writeByteArray(this.compileIndex(globalSubrIndex));
1672
+ }
1651
1673
 
1652
- for (var i = 0; i < charStrings.count; i++) {
1653
- var glyph = charStrings.get(i);
1674
+ compileCharStrings(charStrings) {
1675
+ var charStringsIndex = new CFFIndex();
1654
1676
 
1655
- if (glyph.length === 0) {
1656
- charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
1657
- continue;
1658
- }
1677
+ for (var i = 0; i < charStrings.count; i++) {
1678
+ var glyph = charStrings.get(i);
1659
1679
 
1660
- charStringsIndex.add(glyph);
1680
+ if (glyph.length === 0) {
1681
+ charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
1682
+ continue;
1661
1683
  }
1662
1684
 
1663
- return this.compileIndex(charStringsIndex);
1664
- },
1665
- compileCharset: function CFFCompiler_compileCharset(charset, numGlyphs, strings, isCIDFont) {
1666
- let out;
1667
- const numGlyphsLessNotDef = numGlyphs - 1;
1685
+ charStringsIndex.add(glyph);
1686
+ }
1668
1687
 
1669
- if (isCIDFont) {
1670
- out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);
1671
- } else {
1672
- const length = 1 + numGlyphsLessNotDef * 2;
1673
- out = new Uint8Array(length);
1674
- out[0] = 0;
1675
- let charsetIndex = 0;
1676
- const numCharsets = charset.charset.length;
1677
- let warned = false;
1678
-
1679
- for (let i = 1; i < out.length; i += 2) {
1680
- let sid = 0;
1681
-
1682
- if (charsetIndex < numCharsets) {
1683
- const name = charset.charset[charsetIndex++];
1684
- sid = strings.getSID(name);
1685
-
1686
- if (sid === -1) {
1687
- sid = 0;
1688
-
1689
- if (!warned) {
1690
- warned = true;
1691
- (0, _util.warn)(`Couldn't find ${name} in CFF strings`);
1692
- }
1688
+ return this.compileIndex(charStringsIndex);
1689
+ }
1690
+
1691
+ compileCharset(charset, numGlyphs, strings, isCIDFont) {
1692
+ let out;
1693
+ const numGlyphsLessNotDef = numGlyphs - 1;
1694
+
1695
+ if (isCIDFont) {
1696
+ out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);
1697
+ } else {
1698
+ const length = 1 + numGlyphsLessNotDef * 2;
1699
+ out = new Uint8Array(length);
1700
+ out[0] = 0;
1701
+ let charsetIndex = 0;
1702
+ const numCharsets = charset.charset.length;
1703
+ let warned = false;
1704
+
1705
+ for (let i = 1; i < out.length; i += 2) {
1706
+ let sid = 0;
1707
+
1708
+ if (charsetIndex < numCharsets) {
1709
+ const name = charset.charset[charsetIndex++];
1710
+ sid = strings.getSID(name);
1711
+
1712
+ if (sid === -1) {
1713
+ sid = 0;
1714
+
1715
+ if (!warned) {
1716
+ warned = true;
1717
+ (0, _util.warn)(`Couldn't find ${name} in CFF strings`);
1693
1718
  }
1694
1719
  }
1695
-
1696
- out[i] = sid >> 8 & 0xff;
1697
- out[i + 1] = sid & 0xff;
1698
1720
  }
1721
+
1722
+ out[i] = sid >> 8 & 0xff;
1723
+ out[i + 1] = sid & 0xff;
1699
1724
  }
1725
+ }
1700
1726
 
1701
- return this.compileTypedArray(out);
1702
- },
1703
- compileEncoding: function CFFCompiler_compileEncoding(encoding) {
1704
- return this.compileTypedArray(encoding.raw);
1705
- },
1706
- compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {
1707
- const format = fdSelect.format;
1708
- let out, i;
1727
+ return this.compileTypedArray(out);
1728
+ }
1709
1729
 
1710
- switch (format) {
1711
- case 0:
1712
- out = new Uint8Array(1 + fdSelect.fdSelect.length);
1713
- out[0] = format;
1730
+ compileEncoding(encoding) {
1731
+ return this.compileTypedArray(encoding.raw);
1732
+ }
1714
1733
 
1715
- for (i = 0; i < fdSelect.fdSelect.length; i++) {
1716
- out[i + 1] = fdSelect.fdSelect[i];
1717
- }
1734
+ compileFDSelect(fdSelect) {
1735
+ const format = fdSelect.format;
1736
+ let out, i;
1718
1737
 
1719
- break;
1738
+ switch (format) {
1739
+ case 0:
1740
+ out = new Uint8Array(1 + fdSelect.fdSelect.length);
1741
+ out[0] = format;
1720
1742
 
1721
- case 3:
1722
- const start = 0;
1723
- let lastFD = fdSelect.fdSelect[0];
1724
- const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];
1743
+ for (i = 0; i < fdSelect.fdSelect.length; i++) {
1744
+ out[i + 1] = fdSelect.fdSelect[i];
1745
+ }
1725
1746
 
1726
- for (i = 1; i < fdSelect.fdSelect.length; i++) {
1727
- const currentFD = fdSelect.fdSelect[i];
1747
+ break;
1728
1748
 
1729
- if (currentFD !== lastFD) {
1730
- ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);
1731
- lastFD = currentFD;
1732
- }
1749
+ case 3:
1750
+ const start = 0;
1751
+ let lastFD = fdSelect.fdSelect[0];
1752
+ const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];
1753
+
1754
+ for (i = 1; i < fdSelect.fdSelect.length; i++) {
1755
+ const currentFD = fdSelect.fdSelect[i];
1756
+
1757
+ if (currentFD !== lastFD) {
1758
+ ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);
1759
+ lastFD = currentFD;
1733
1760
  }
1761
+ }
1734
1762
 
1735
- const numRanges = (ranges.length - 3) / 3;
1736
- ranges[1] = numRanges >> 8 & 0xff;
1737
- ranges[2] = numRanges & 0xff;
1738
- ranges.push(i >> 8 & 0xff, i & 0xff);
1739
- out = new Uint8Array(ranges);
1740
- break;
1741
- }
1763
+ const numRanges = (ranges.length - 3) / 3;
1764
+ ranges[1] = numRanges >> 8 & 0xff;
1765
+ ranges[2] = numRanges & 0xff;
1766
+ ranges.push(i >> 8 & 0xff, i & 0xff);
1767
+ out = new Uint8Array(ranges);
1768
+ break;
1769
+ }
1742
1770
 
1743
- return this.compileTypedArray(out);
1744
- },
1745
- compileTypedArray: function CFFCompiler_compileTypedArray(data) {
1746
- var out = [];
1771
+ return this.compileTypedArray(out);
1772
+ }
1747
1773
 
1748
- for (var i = 0, ii = data.length; i < ii; ++i) {
1749
- out[i] = data[i];
1750
- }
1774
+ compileTypedArray(data) {
1775
+ var out = [];
1751
1776
 
1752
- return out;
1753
- },
1754
- compileIndex: function CFFCompiler_compileIndex(index, trackers) {
1755
- trackers = trackers || [];
1756
- var objects = index.objects;
1757
- var count = objects.length;
1777
+ for (var i = 0, ii = data.length; i < ii; ++i) {
1778
+ out[i] = data[i];
1779
+ }
1758
1780
 
1759
- if (count === 0) {
1760
- return [0, 0, 0];
1761
- }
1781
+ return out;
1782
+ }
1762
1783
 
1763
- var data = [count >> 8 & 0xff, count & 0xff];
1764
- var lastOffset = 1,
1765
- i;
1784
+ compileIndex(index, trackers = []) {
1785
+ var objects = index.objects;
1786
+ var count = objects.length;
1766
1787
 
1767
- for (i = 0; i < count; ++i) {
1768
- lastOffset += objects[i].length;
1769
- }
1788
+ if (count === 0) {
1789
+ return [0, 0, 0];
1790
+ }
1770
1791
 
1771
- var offsetSize;
1792
+ var data = [count >> 8 & 0xff, count & 0xff];
1793
+ var lastOffset = 1,
1794
+ i;
1772
1795
 
1773
- if (lastOffset < 0x100) {
1774
- offsetSize = 1;
1775
- } else if (lastOffset < 0x10000) {
1776
- offsetSize = 2;
1777
- } else if (lastOffset < 0x1000000) {
1778
- offsetSize = 3;
1779
- } else {
1780
- offsetSize = 4;
1781
- }
1796
+ for (i = 0; i < count; ++i) {
1797
+ lastOffset += objects[i].length;
1798
+ }
1782
1799
 
1783
- data.push(offsetSize);
1784
- var relativeOffset = 1;
1800
+ var offsetSize;
1785
1801
 
1786
- for (i = 0; i < count + 1; i++) {
1787
- if (offsetSize === 1) {
1788
- data.push(relativeOffset & 0xff);
1789
- } else if (offsetSize === 2) {
1790
- data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
1791
- } else if (offsetSize === 3) {
1792
- data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
1793
- } else {
1794
- data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
1795
- }
1802
+ if (lastOffset < 0x100) {
1803
+ offsetSize = 1;
1804
+ } else if (lastOffset < 0x10000) {
1805
+ offsetSize = 2;
1806
+ } else if (lastOffset < 0x1000000) {
1807
+ offsetSize = 3;
1808
+ } else {
1809
+ offsetSize = 4;
1810
+ }
1796
1811
 
1797
- if (objects[i]) {
1798
- relativeOffset += objects[i].length;
1799
- }
1812
+ data.push(offsetSize);
1813
+ var relativeOffset = 1;
1814
+
1815
+ for (i = 0; i < count + 1; i++) {
1816
+ if (offsetSize === 1) {
1817
+ data.push(relativeOffset & 0xff);
1818
+ } else if (offsetSize === 2) {
1819
+ data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
1820
+ } else if (offsetSize === 3) {
1821
+ data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
1822
+ } else {
1823
+ data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
1800
1824
  }
1801
1825
 
1802
- for (i = 0; i < count; i++) {
1803
- if (trackers[i]) {
1804
- trackers[i].offset(data.length);
1805
- }
1826
+ if (objects[i]) {
1827
+ relativeOffset += objects[i].length;
1828
+ }
1829
+ }
1806
1830
 
1807
- for (var j = 0, jj = objects[i].length; j < jj; j++) {
1808
- data.push(objects[i][j]);
1809
- }
1831
+ for (i = 0; i < count; i++) {
1832
+ if (trackers[i]) {
1833
+ trackers[i].offset(data.length);
1810
1834
  }
1811
1835
 
1812
- return data;
1836
+ for (var j = 0, jj = objects[i].length; j < jj; j++) {
1837
+ data.push(objects[i][j]);
1838
+ }
1813
1839
  }
1814
- };
1815
- return CFFCompiler;
1816
- }();
1840
+
1841
+ return data;
1842
+ }
1843
+
1844
+ }
1817
1845
 
1818
1846
  exports.CFFCompiler = CFFCompiler;