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.
- package/bower.json +1 -1
- package/build/pdf.js +867 -216
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +10214 -8547
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/es5/build/pdf.js +2023 -1046
- package/es5/build/pdf.js.map +1 -1
- package/es5/build/pdf.min.js +22 -0
- package/es5/build/pdf.worker.js +11136 -8144
- package/es5/build/pdf.worker.js.map +1 -1
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/pdf_viewer.css +8 -5
- package/es5/web/pdf_viewer.js +195 -51
- package/es5/web/pdf_viewer.js.map +1 -1
- package/image_decoders/pdf.image_decoders.js +24 -16
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +1 -1
- package/lib/core/annotation.js +479 -43
- package/lib/core/cff_parser.js +643 -615
- package/lib/core/chunked_stream.js +64 -50
- package/lib/core/colorspace.js +126 -104
- package/lib/core/crypto.js +37 -0
- package/lib/core/document.js +128 -75
- package/lib/core/evaluator.js +3015 -2754
- package/lib/core/fonts.js +47 -46
- package/lib/core/function.js +79 -6
- package/lib/core/image.js +364 -357
- package/lib/core/image_utils.js +109 -8
- package/lib/core/jpg.js +8 -3
- package/lib/core/obj.js +255 -34
- package/lib/core/operator_list.js +17 -15
- package/lib/core/parser.js +40 -3
- package/lib/core/pattern.js +24 -11
- package/lib/core/primitives.js +112 -53
- package/lib/core/type1_parser.js +2 -0
- package/lib/core/worker.js +102 -37
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +51 -10
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +140 -54
- package/lib/display/canvas.js +215 -46
- package/lib/display/display_utils.js +55 -18
- package/lib/display/fetch_stream.js +6 -0
- package/lib/display/font_loader.js +26 -15
- package/lib/display/metadata.js +1 -7
- package/lib/display/network.js +0 -14
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/svg.js +1 -1
- package/lib/display/text_layer.js +4 -1
- package/lib/pdf.js +2 -2
- package/lib/pdf.worker.js +2 -2
- package/lib/shared/is_node.js +1 -1
- package/lib/shared/util.js +13 -10
- package/lib/test/unit/annotation_spec.js +520 -50
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +16 -6
- package/lib/test/unit/cmap_spec.js +4 -4
- package/lib/test/unit/colorspace_spec.js +216 -24
- package/lib/test/unit/crypto_spec.js +51 -4
- package/lib/test/unit/custom_spec.js +129 -1
- package/lib/test/unit/document_spec.js +112 -1
- package/lib/test/unit/evaluator_spec.js +29 -10
- package/lib/test/unit/jasmine-boot.js +1 -1
- package/lib/test/unit/metadata_spec.js +3 -3
- package/lib/test/unit/primitives_spec.js +242 -63
- package/lib/test/unit/test_utils.js +42 -89
- package/lib/test/unit/testreporter.js +17 -6
- package/lib/test/unit/util_spec.js +13 -12
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +13 -9
- package/lib/web/app.js +231 -26
- package/lib/web/app_options.js +1 -6
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +53 -4
- package/lib/web/download_manager.js +3 -10
- package/lib/web/firefox_print_service.js +32 -12
- package/lib/web/firefoxcom.js +20 -6
- package/lib/web/interfaces.js +1 -1
- package/lib/web/pdf_attachment_viewer.js +80 -38
- package/lib/web/pdf_find_controller.js +2 -1
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_outline_viewer.js +24 -57
- package/lib/web/pdf_page_view.js +29 -6
- package/lib/web/pdf_print_service.js +13 -11
- package/lib/web/pdf_sidebar.js +46 -25
- package/lib/web/pdf_thumbnail_view.js +16 -3
- package/lib/web/pdf_thumbnail_viewer.js +17 -1
- package/lib/web/pdf_viewer.component.js +2 -2
- package/lib/web/preferences.js +1 -1
- package/lib/web/toolbar.js +1 -1
- package/lib/web/ui_utils.js +7 -1
- package/package.json +3 -1
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +8 -5
- package/web/pdf_viewer.js +109 -33
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +1 -9
- package/es5/web/images/texture.png +0 -0
- package/web/images/texture.png +0 -0
package/lib/core/cff_parser.js
CHANGED
@@ -248,14 +248,14 @@ var CFFParser = function CFFParserClosure() {
|
|
248
248
|
resetStack: true
|
249
249
|
}];
|
250
250
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
976
|
-
|
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
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
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
|
-
|
998
|
-
|
1009
|
+
var glyphZero = this.charStrings.get(0);
|
1010
|
+
this.charStrings.add(glyphZero);
|
999
1011
|
|
1000
|
-
|
1001
|
-
|
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
|
-
|
1010
|
-
|
1017
|
+
hasGlyphId(id) {
|
1018
|
+
if (id < 0 || id >= this.charStrings.count) {
|
1019
|
+
return false;
|
1011
1020
|
}
|
1012
|
-
|
1013
|
-
|
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
|
-
|
1019
|
-
|
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
|
-
|
1027
|
-
}();
|
1038
|
+
}
|
1028
1039
|
|
1029
1040
|
exports.CFFHeader = CFFHeader;
|
1030
1041
|
|
1031
|
-
|
1032
|
-
|
1042
|
+
class CFFStrings {
|
1043
|
+
constructor() {
|
1033
1044
|
this.strings = [];
|
1034
1045
|
}
|
1035
1046
|
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
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
|
-
|
1047
|
-
|
1048
|
-
|
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
|
-
|
1052
|
-
|
1053
|
-
}
|
1056
|
+
return CFFStandardStrings[0];
|
1057
|
+
}
|
1054
1058
|
|
1055
|
-
|
1059
|
+
getSID(str) {
|
1060
|
+
let index = CFFStandardStrings.indexOf(str);
|
1056
1061
|
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1062
|
+
if (index !== -1) {
|
1063
|
+
return index;
|
1064
|
+
}
|
1060
1065
|
|
1061
|
-
|
1062
|
-
},
|
1063
|
-
add: function CFFStrings_add(value) {
|
1064
|
-
this.strings.push(value);
|
1065
|
-
},
|
1066
|
+
index = this.strings.indexOf(str);
|
1066
1067
|
|
1067
|
-
|
1068
|
-
return
|
1068
|
+
if (index !== -1) {
|
1069
|
+
return index + NUM_STANDARD_CFF_STRINGS;
|
1069
1070
|
}
|
1070
1071
|
|
1071
|
-
|
1072
|
-
|
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
|
-
|
1078
|
-
|
1087
|
+
class CFFIndex {
|
1088
|
+
constructor() {
|
1079
1089
|
this.objects = [];
|
1080
1090
|
this.length = 0;
|
1081
1091
|
}
|
1082
1092
|
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
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
|
-
|
1107
|
-
|
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
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
}
|
1127
|
+
setByKey(key, value) {
|
1128
|
+
if (!(key in this.keyToNameMap)) {
|
1129
|
+
return false;
|
1130
|
+
}
|
1123
1131
|
|
1124
|
-
|
1132
|
+
var valueLength = value.length;
|
1125
1133
|
|
1126
|
-
|
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
|
-
|
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
|
-
|
1147
|
+
if (type === "num" || type === "sid" || type === "offset") {
|
1148
|
+
value = value[0];
|
1149
|
+
}
|
1138
1150
|
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1151
|
+
this.values[key] = value;
|
1152
|
+
return true;
|
1153
|
+
}
|
1142
1154
|
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
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
|
-
|
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
|
-
|
1163
|
+
hasName(name) {
|
1164
|
+
return this.nameToKeyMap[name] in this.values;
|
1165
|
+
}
|
1162
1166
|
|
1163
|
-
|
1164
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
1206
|
-
|
1207
|
-
tables
|
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
|
-
|
1225
|
-
|
1226
|
-
tables
|
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
|
-
|
1245
|
-
|
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
|
-
|
1253
|
-
}();
|
1266
|
+
}
|
1254
1267
|
|
1255
1268
|
exports.CFFCharset = CFFCharset;
|
1256
1269
|
|
1257
|
-
|
1258
|
-
|
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
|
-
|
1266
|
-
}();
|
1278
|
+
}
|
1267
1279
|
|
1268
|
-
|
1269
|
-
|
1280
|
+
class CFFFDSelect {
|
1281
|
+
constructor(format, fdSelect) {
|
1270
1282
|
this.format = format;
|
1271
1283
|
this.fdSelect = fdSelect;
|
1272
1284
|
}
|
1273
1285
|
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
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
|
-
|
1284
|
-
}
|
1290
|
+
|
1291
|
+
return this.fdSelect[glyphIndex];
|
1292
|
+
}
|
1293
|
+
|
1294
|
+
}
|
1285
1295
|
|
1286
1296
|
exports.CFFFDSelect = CFFFDSelect;
|
1287
1297
|
|
1288
|
-
|
1289
|
-
|
1298
|
+
class CFFOffsetTracker {
|
1299
|
+
constructor() {
|
1290
1300
|
this.offsets = Object.create(null);
|
1291
1301
|
}
|
1292
1302
|
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
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
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
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
|
-
|
1315
|
-
|
1316
|
-
var size = 5;
|
1312
|
+
this.offsets[key] = location;
|
1313
|
+
}
|
1317
1314
|
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
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
|
-
|
1326
|
-
|
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
|
-
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
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
|
-
|
1339
|
-
}
|
1348
|
+
}
|
1349
|
+
|
1350
|
+
}
|
1340
1351
|
|
1341
|
-
|
1342
|
-
|
1352
|
+
class CFFCompiler {
|
1353
|
+
constructor(cff) {
|
1343
1354
|
this.cff = cff;
|
1344
1355
|
}
|
1345
1356
|
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1354
|
-
|
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
|
-
|
1358
|
-
output.add(header);
|
1359
|
-
var nameIndex = this.compileNameIndex(cff.names);
|
1360
|
-
output.add(nameIndex);
|
1387
|
+
}
|
1388
|
+
}
|
1361
1389
|
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
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
|
-
|
1368
|
-
|
1369
|
-
|
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
|
-
|
1372
|
-
|
1373
|
-
|
1427
|
+
this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
|
1428
|
+
output.add([0]);
|
1429
|
+
return output.data;
|
1430
|
+
}
|
1374
1431
|
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1432
|
+
encodeNumber(value) {
|
1433
|
+
if (Number.isInteger(value)) {
|
1434
|
+
return this.encodeInteger(value);
|
1435
|
+
}
|
1379
1436
|
|
1380
|
-
|
1381
|
-
|
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
|
-
|
1400
|
-
|
1401
|
-
|
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
|
-
|
1407
|
-
|
1408
|
-
|
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
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
}
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
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
|
-
|
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 (
|
1433
|
-
|
1434
|
-
|
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
|
-
|
1438
|
-
|
1470
|
+
nibbles += nibbles.length & 1 ? "f" : "ff";
|
1471
|
+
var out = [30];
|
1439
1472
|
|
1440
|
-
|
1441
|
-
|
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
|
-
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
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
|
-
|
1455
|
-
var out = [30];
|
1522
|
+
sanitizedName = sanitizedName.join("");
|
1456
1523
|
|
1457
|
-
|
1458
|
-
|
1524
|
+
if (sanitizedName === "") {
|
1525
|
+
sanitizedName = "Bad_Font_Name";
|
1459
1526
|
}
|
1460
1527
|
|
1461
|
-
|
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
|
-
|
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
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
var sanitizedName = new Array(length);
|
1534
|
+
compileTopDicts(dicts, length, removeCidKeys) {
|
1535
|
+
var fontDictTrackers = [];
|
1536
|
+
var fdArrayIndex = new CFFIndex();
|
1492
1537
|
|
1493
|
-
|
1494
|
-
|
1538
|
+
for (var i = 0, ii = dicts.length; i < ii; ++i) {
|
1539
|
+
var fontDict = dicts[i];
|
1495
1540
|
|
1496
|
-
|
1497
|
-
|
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
|
-
|
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
|
-
|
1556
|
+
fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
|
1557
|
+
return {
|
1558
|
+
trackers: fontDictTrackers,
|
1559
|
+
output: fdArrayIndex
|
1560
|
+
};
|
1561
|
+
}
|
1504
1562
|
|
1505
|
-
|
1506
|
-
|
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
|
-
|
1568
|
+
if (!privateDict || !fontDict.hasName("Private")) {
|
1569
|
+
throw new _util.FormatError("There must be a private dictionary.");
|
1510
1570
|
}
|
1511
1571
|
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
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
|
-
|
1530
|
-
|
1531
|
-
fontDictTrackers.push(fontDictTracker);
|
1532
|
-
fdArrayIndex.add(fontDictData);
|
1533
|
-
fontDictTracker.offset(length);
|
1577
|
+
if (!privateDictData.length) {
|
1578
|
+
outputLength = 0;
|
1534
1579
|
}
|
1535
1580
|
|
1536
|
-
|
1537
|
-
|
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
|
-
|
1552
|
-
var
|
1553
|
-
|
1554
|
-
|
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
|
-
|
1557
|
-
|
1558
|
-
|
1592
|
+
compileDict(dict, offsetTracker) {
|
1593
|
+
var out = [];
|
1594
|
+
var order = dict.order;
|
1559
1595
|
|
1560
|
-
|
1561
|
-
|
1596
|
+
for (var i = 0; i < order.length; ++i) {
|
1597
|
+
var key = order[i];
|
1562
1598
|
|
1563
|
-
|
1564
|
-
|
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
|
-
|
1575
|
-
|
1603
|
+
var values = dict.values[key];
|
1604
|
+
var types = dict.types[key];
|
1576
1605
|
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1606
|
+
if (!Array.isArray(types)) {
|
1607
|
+
types = [types];
|
1608
|
+
}
|
1580
1609
|
|
1581
|
-
|
1582
|
-
|
1610
|
+
if (!Array.isArray(values)) {
|
1611
|
+
values = [values];
|
1612
|
+
}
|
1583
1613
|
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1614
|
+
if (values.length === 0) {
|
1615
|
+
continue;
|
1616
|
+
}
|
1587
1617
|
|
1588
|
-
|
1589
|
-
|
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
|
-
|
1593
|
-
|
1594
|
-
|
1622
|
+
switch (type) {
|
1623
|
+
case "num":
|
1624
|
+
case "sid":
|
1625
|
+
out = out.concat(this.encodeNumber(value));
|
1626
|
+
break;
|
1595
1627
|
|
1596
|
-
|
1597
|
-
|
1598
|
-
var value = values[j];
|
1628
|
+
case "offset":
|
1629
|
+
var name = dict.keyToNameMap[key];
|
1599
1630
|
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
out = out.concat(this.encodeNumber(value));
|
1604
|
-
break;
|
1631
|
+
if (!offsetTracker.isTracking(name)) {
|
1632
|
+
offsetTracker.track(name, out.length);
|
1633
|
+
}
|
1605
1634
|
|
1606
|
-
|
1607
|
-
|
1635
|
+
out = out.concat([0x1d, 0, 0, 0, 0]);
|
1636
|
+
break;
|
1608
1637
|
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1638
|
+
case "array":
|
1639
|
+
case "delta":
|
1640
|
+
out = out.concat(this.encodeNumber(value));
|
1612
1641
|
|
1613
|
-
|
1614
|
-
|
1642
|
+
for (var k = 1, kk = values.length; k < kk; ++k) {
|
1643
|
+
out = out.concat(this.encodeNumber(values[k]));
|
1644
|
+
}
|
1615
1645
|
|
1616
|
-
|
1617
|
-
case "delta":
|
1618
|
-
out = out.concat(this.encodeNumber(value));
|
1646
|
+
break;
|
1619
1647
|
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1648
|
+
default:
|
1649
|
+
throw new _util.FormatError(`Unknown data type of ${type}`);
|
1650
|
+
}
|
1651
|
+
}
|
1623
1652
|
|
1624
|
-
|
1653
|
+
out = out.concat(dict.opcodes[key]);
|
1654
|
+
}
|
1625
1655
|
|
1626
|
-
|
1627
|
-
|
1628
|
-
}
|
1629
|
-
}
|
1656
|
+
return out;
|
1657
|
+
}
|
1630
1658
|
|
1631
|
-
|
1632
|
-
|
1659
|
+
compileStringIndex(strings) {
|
1660
|
+
var stringIndex = new CFFIndex();
|
1633
1661
|
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
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
|
-
|
1640
|
-
|
1641
|
-
}
|
1666
|
+
return this.compileIndex(stringIndex);
|
1667
|
+
}
|
1642
1668
|
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
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
|
-
|
1653
|
-
|
1674
|
+
compileCharStrings(charStrings) {
|
1675
|
+
var charStringsIndex = new CFFIndex();
|
1654
1676
|
|
1655
|
-
|
1656
|
-
|
1657
|
-
continue;
|
1658
|
-
}
|
1677
|
+
for (var i = 0; i < charStrings.count; i++) {
|
1678
|
+
var glyph = charStrings.get(i);
|
1659
1679
|
|
1660
|
-
|
1680
|
+
if (glyph.length === 0) {
|
1681
|
+
charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
|
1682
|
+
continue;
|
1661
1683
|
}
|
1662
1684
|
|
1663
|
-
|
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
|
-
|
1670
|
-
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
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
|
-
|
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
|
-
|
1711
|
-
|
1712
|
-
|
1713
|
-
out[0] = format;
|
1730
|
+
compileEncoding(encoding) {
|
1731
|
+
return this.compileTypedArray(encoding.raw);
|
1732
|
+
}
|
1714
1733
|
|
1715
|
-
|
1716
|
-
|
1717
|
-
|
1734
|
+
compileFDSelect(fdSelect) {
|
1735
|
+
const format = fdSelect.format;
|
1736
|
+
let out, i;
|
1718
1737
|
|
1719
|
-
|
1738
|
+
switch (format) {
|
1739
|
+
case 0:
|
1740
|
+
out = new Uint8Array(1 + fdSelect.fdSelect.length);
|
1741
|
+
out[0] = format;
|
1720
1742
|
|
1721
|
-
|
1722
|
-
|
1723
|
-
|
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
|
-
|
1727
|
-
const currentFD = fdSelect.fdSelect[i];
|
1747
|
+
break;
|
1728
1748
|
|
1729
|
-
|
1730
|
-
|
1731
|
-
|
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
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
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
|
-
|
1744
|
-
|
1745
|
-
compileTypedArray: function CFFCompiler_compileTypedArray(data) {
|
1746
|
-
var out = [];
|
1771
|
+
return this.compileTypedArray(out);
|
1772
|
+
}
|
1747
1773
|
|
1748
|
-
|
1749
|
-
|
1750
|
-
}
|
1774
|
+
compileTypedArray(data) {
|
1775
|
+
var out = [];
|
1751
1776
|
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
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
|
-
|
1760
|
-
|
1761
|
-
}
|
1781
|
+
return out;
|
1782
|
+
}
|
1762
1783
|
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1784
|
+
compileIndex(index, trackers = []) {
|
1785
|
+
var objects = index.objects;
|
1786
|
+
var count = objects.length;
|
1766
1787
|
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1788
|
+
if (count === 0) {
|
1789
|
+
return [0, 0, 0];
|
1790
|
+
}
|
1770
1791
|
|
1771
|
-
|
1792
|
+
var data = [count >> 8 & 0xff, count & 0xff];
|
1793
|
+
var lastOffset = 1,
|
1794
|
+
i;
|
1772
1795
|
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
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
|
-
|
1784
|
-
var relativeOffset = 1;
|
1800
|
+
var offsetSize;
|
1785
1801
|
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1789
|
-
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
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
|
-
|
1798
|
-
|
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
|
-
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1826
|
+
if (objects[i]) {
|
1827
|
+
relativeOffset += objects[i].length;
|
1828
|
+
}
|
1829
|
+
}
|
1806
1830
|
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1831
|
+
for (i = 0; i < count; i++) {
|
1832
|
+
if (trackers[i]) {
|
1833
|
+
trackers[i].offset(data.length);
|
1810
1834
|
}
|
1811
1835
|
|
1812
|
-
|
1836
|
+
for (var j = 0, jj = objects[i].length; j < jj; j++) {
|
1837
|
+
data.push(objects[i][j]);
|
1838
|
+
}
|
1813
1839
|
}
|
1814
|
-
|
1815
|
-
|
1816
|
-
}
|
1840
|
+
|
1841
|
+
return data;
|
1842
|
+
}
|
1843
|
+
|
1844
|
+
}
|
1817
1845
|
|
1818
1846
|
exports.CFFCompiler = CFFCompiler;
|