@cantoo/fontkit 2.0.4 → 2.0.6

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.
Files changed (142) hide show
  1. package/dist/browser-module.mjs +4448 -1142
  2. package/dist/browser-module.mjs.map +1 -1
  3. package/dist/browser.cjs +4449 -1142
  4. package/dist/browser.cjs.map +1 -1
  5. package/dist/main.cjs +4449 -1142
  6. package/dist/main.cjs.map +1 -1
  7. package/dist/module.mjs +4448 -1142
  8. package/dist/module.mjs.map +1 -1
  9. package/package.json +4 -1
  10. package/src/CmapProcessor.js +60 -21
  11. package/src/DFont.js +114 -14
  12. package/src/TTFFont.js +260 -62
  13. package/src/TrueTypeCollection.js +59 -15
  14. package/src/WOFF2Font.js +128 -22
  15. package/src/WOFFFont.js +45 -8
  16. package/src/aat/AATFeatureMap.js +83 -40
  17. package/src/aat/AATLayoutEngine.js +34 -2
  18. package/src/aat/AATLookupTable.js +24 -6
  19. package/src/aat/AATMorxProcessor.js +202 -65
  20. package/src/aat/AATStateMachine.js +35 -3
  21. package/src/base.js +20 -1
  22. package/src/cff/CFFCharsets.js +3 -0
  23. package/src/cff/CFFDict.js +81 -11
  24. package/src/cff/CFFEncodings.js +2 -0
  25. package/src/cff/CFFFont.js +120 -24
  26. package/src/cff/CFFIndex.js +66 -9
  27. package/src/cff/CFFOperand.js +53 -28
  28. package/src/cff/CFFPointer.js +41 -2
  29. package/src/cff/CFFPrivateDict.js +34 -24
  30. package/src/cff/CFFStandardStrings.js +68 -67
  31. package/src/cff/CFFTop.js +161 -68
  32. package/src/decorators.js +34 -15
  33. package/src/encodings.js +133 -116
  34. package/src/fs.js +10 -0
  35. package/src/glyph/BBox.js +14 -0
  36. package/src/glyph/CFFGlyph.js +293 -152
  37. package/src/glyph/COLRGlyph.js +40 -5
  38. package/src/glyph/Glyph.js +72 -13
  39. package/src/glyph/GlyphVariationProcessor.js +158 -62
  40. package/src/glyph/Path.js +119 -32
  41. package/src/glyph/SBIXGlyph.js +57 -8
  42. package/src/glyph/StandardNames.js +1 -0
  43. package/src/glyph/TTFGlyph.js +203 -63
  44. package/src/glyph/TTFGlyphEncoder.js +58 -26
  45. package/src/glyph/WOFF2Glyph.js +25 -6
  46. package/src/layout/GlyphPosition.js +6 -0
  47. package/src/layout/GlyphRun.js +28 -10
  48. package/src/layout/KernProcessor.js +63 -4
  49. package/src/layout/LayoutEngine.js +99 -26
  50. package/src/layout/Script.js +52 -26
  51. package/src/layout/UnicodeLayoutEngine.js +34 -10
  52. package/src/opentype/GPOSProcessor.js +156 -45
  53. package/src/opentype/GSUBProcessor.js +92 -33
  54. package/src/opentype/GlyphInfo.js +53 -5
  55. package/src/opentype/GlyphIterator.js +51 -2
  56. package/src/opentype/OTLayoutEngine.js +66 -8
  57. package/src/opentype/OTProcessor.js +284 -71
  58. package/src/opentype/ShapingPlan.js +52 -5
  59. package/src/opentype/shapers/ArabicShaper.js +27 -8
  60. package/src/opentype/shapers/DefaultShaper.js +54 -10
  61. package/src/opentype/shapers/HangulShaper.js +120 -42
  62. package/src/opentype/shapers/HebrewShaper.js +50 -16
  63. package/src/opentype/shapers/IndicShaper.js +159 -44
  64. package/src/opentype/shapers/ThaiShaper.js +50 -19
  65. package/src/opentype/shapers/UniversalShaper.js +83 -17
  66. package/src/opentype/shapers/index.js +48 -35
  67. package/src/opentype/shapers/indic-data.js +2 -2
  68. package/src/packages/unicode-properties/data-trie.js +2 -1
  69. package/src/packages/unicode-properties/data.js +13 -1
  70. package/src/packages/unicode-properties/dist/index.cjs +23 -10
  71. package/src/packages/unicode-properties/dist/index.cjs.map +2 -2
  72. package/src/packages/unicode-properties/dist/index.mjs +22 -10
  73. package/src/packages/unicode-properties/dist/index.mjs.map +2 -2
  74. package/src/packages/unicode-properties/generate.js +3 -4
  75. package/src/packages/unicode-properties/index.js +95 -30
  76. package/src/packages/unicode-properties/package.json +1 -1
  77. package/src/packages/unicode-trie/builder.js +146 -29
  78. package/src/packages/unicode-trie/dist/builder.cjs +135 -25
  79. package/src/packages/unicode-trie/dist/builder.cjs.map +2 -2
  80. package/src/packages/unicode-trie/dist/builder.mjs +134 -25
  81. package/src/packages/unicode-trie/dist/builder.mjs.map +2 -2
  82. package/src/packages/unicode-trie/dist/index.cjs +22 -9
  83. package/src/packages/unicode-trie/dist/index.cjs.map +2 -2
  84. package/src/packages/unicode-trie/dist/index.mjs +21 -9
  85. package/src/packages/unicode-trie/dist/index.mjs.map +2 -2
  86. package/src/packages/unicode-trie/index.js +63 -12
  87. package/src/packages/unicode-trie/package.json +1 -1
  88. package/src/packages/unicode-trie/swap.js +15 -2
  89. package/src/subset/CFFSubset.js +112 -22
  90. package/src/subset/Subset.js +23 -3
  91. package/src/subset/TTFSubset.js +84 -41
  92. package/src/tables/BASE.js +28 -27
  93. package/src/tables/COLR.js +10 -9
  94. package/src/tables/CPAL.js +2 -1
  95. package/src/tables/DSIG.js +8 -7
  96. package/src/tables/EBDT.js +10 -4
  97. package/src/tables/EBLC.js +70 -10
  98. package/src/tables/GDEF.js +18 -17
  99. package/src/tables/GPOS.js +153 -90
  100. package/src/tables/GSUB.js +50 -39
  101. package/src/tables/HVAR.js +51 -5
  102. package/src/tables/JSTF.js +17 -16
  103. package/src/tables/LTSH.js +4 -3
  104. package/src/tables/OS2.js +50 -49
  105. package/src/tables/PCLT.js +16 -15
  106. package/src/tables/STAT.js +46 -6
  107. package/src/tables/VDMX.js +18 -17
  108. package/src/tables/VORG.js +8 -7
  109. package/src/tables/WOFF2Directory.js +57 -9
  110. package/src/tables/WOFFDirectory.js +32 -20
  111. package/src/tables/aat.js +160 -35
  112. package/src/tables/avar.js +1 -0
  113. package/src/tables/bsln.js +3 -2
  114. package/src/tables/cmap.js +83 -63
  115. package/src/tables/cvt.js +1 -0
  116. package/src/tables/directory.js +56 -28
  117. package/src/tables/feat.js +24 -2
  118. package/src/tables/fpgm.js +1 -0
  119. package/src/tables/fvar.js +32 -4
  120. package/src/tables/gasp.js +6 -5
  121. package/src/tables/glyf.js +2 -1
  122. package/src/tables/gvar.js +29 -2
  123. package/src/tables/hdmx.js +18 -7
  124. package/src/tables/head.js +17 -16
  125. package/src/tables/hhea.js +15 -14
  126. package/src/tables/hmtx.js +18 -2
  127. package/src/tables/index.js +1 -5
  128. package/src/tables/just.js +15 -4
  129. package/src/tables/kern.js +84 -47
  130. package/src/tables/loca.js +23 -10
  131. package/src/tables/maxp.js +16 -15
  132. package/src/tables/morx.js +27 -20
  133. package/src/tables/name.js +120 -39
  134. package/src/tables/opbd.js +2 -1
  135. package/src/tables/opentype.js +126 -91
  136. package/src/tables/post.js +18 -11
  137. package/src/tables/prep.js +1 -0
  138. package/src/tables/sbix.js +12 -1
  139. package/src/tables/variations.js +29 -9
  140. package/src/tables/vhea.js +15 -14
  141. package/src/tables/vmtx.js +20 -4
  142. package/src/utils.js +15 -0
@@ -1,17 +1,31 @@
1
+ /** @typedef {import('restructure').DecodeStream} DecodeStream */
2
+ /** @typedef {import('restructure').EncodeStream} EncodeStream */
3
+
4
+ /**
5
+ * Operand value that may force a 32-bit encoding (e.g. CFF pointer placeholders).
6
+ * @typedef {number | { forceLarge?: boolean, valueOf(): number }} CFFOperandValue
7
+ */
8
+
1
9
  const FLOAT_EOF = 0xf;
2
10
  const FLOAT_LOOKUP = [
3
11
  '0', '1', '2', '3', '4', '5', '6', '7',
4
12
  '8', '9', '.', 'E', 'E-', null, '-'
5
13
  ];
6
14
 
15
+ /** @type {Record<string, number>} */
7
16
  const FLOAT_ENCODE_LOOKUP = {
8
17
  '.': 10,
9
- 'E': 11,
18
+ E: 11,
10
19
  'E-': 12,
11
20
  '-': 14
12
21
  };
13
22
 
14
23
  export default class CFFOperand {
24
+ /**
25
+ * @param {DecodeStream} stream
26
+ * @param {number} value
27
+ * @returns {number | null}
28
+ */
15
29
  static decode(stream, value) {
16
30
  if (32 <= value && value <= 246) {
17
31
  return value - 139;
@@ -53,83 +67,94 @@ export default class CFFOperand {
53
67
  return null;
54
68
  }
55
69
 
70
+ /**
71
+ * @param {CFFOperandValue} value
72
+ * @returns {number}
73
+ */
56
74
  static size(value) {
57
75
  // if the value needs to be forced to the largest size (32 bit)
58
76
  // e.g. for unknown pointers, set to 32768
59
- if (value.forceLarge) {
60
- value = 32768;
77
+ /** @type {number} */
78
+ let n;
79
+ if (value && typeof value === 'object' && value.forceLarge) {
80
+ n = 32768;
81
+ } else {
82
+ n = Number(value);
61
83
  }
62
84
 
63
- if ((value | 0) !== value) { // floating point
64
- let str = '' + value;
85
+ if ((n | 0) !== n) { // floating point
86
+ let str = '' + n;
65
87
  return 1 + Math.ceil((str.length + 1) / 2);
66
-
67
- } else if (-107 <= value && value <= 107) {
88
+ } else if (-107 <= n && n <= 107) {
68
89
  return 1;
69
-
70
- } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {
90
+ } else if (108 <= n && n <= 1131 || -1131 <= n && n <= -108) {
71
91
  return 2;
72
-
73
- } else if (-32768 <= value && value <= 32767) {
92
+ } else if (-32768 <= n && n <= 32767) {
74
93
  return 3;
75
-
76
94
  } else {
77
95
  return 5;
78
96
  }
79
97
  }
80
98
 
99
+ /**
100
+ * @param {EncodeStream} stream
101
+ * @param {CFFOperandValue} value
102
+ * @returns {void}
103
+ */
81
104
  static encode(stream, value) {
82
105
  // if the value needs to be forced to the largest size (32 bit)
83
106
  // e.g. for unknown pointers, save the old value and set to 32768
84
107
  let val = Number(value);
85
108
 
86
- if (value.forceLarge) {
109
+ if (value && typeof value === 'object' && value.forceLarge) {
87
110
  stream.writeUInt8(29);
88
- return stream.writeInt32BE(val);
89
-
111
+ stream.writeInt32BE(val);
112
+ return;
90
113
  } else if ((val | 0) !== val) { // floating point
91
114
  stream.writeUInt8(30);
92
115
 
93
116
  let str = '' + val;
117
+ /** @type {number | undefined} */
94
118
  let n2;
95
119
  for (let i = 0; i < str.length; i += 2) {
96
120
  let c1 = str[i];
97
- let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;
121
+ let n1 = FLOAT_ENCODE_LOOKUP[c1] ?? (+c1);
98
122
 
99
123
  if (i === str.length - 1) {
100
124
  n2 = FLOAT_EOF;
101
125
  } else {
102
126
  let c2 = str[i + 1];
103
- n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;
127
+ n2 = FLOAT_ENCODE_LOOKUP[c2] ?? (+c2);
104
128
  }
105
129
 
106
130
  stream.writeUInt8((n1 << 4) | (n2 & 15));
107
131
  }
108
132
 
109
133
  if (n2 !== FLOAT_EOF) {
110
- return stream.writeUInt8((FLOAT_EOF << 4));
134
+ stream.writeUInt8((FLOAT_EOF << 4));
111
135
  }
112
-
136
+ return;
113
137
  } else if (-107 <= val && val <= 107) {
114
- return stream.writeUInt8(val + 139);
115
-
138
+ stream.writeUInt8(val + 139);
139
+ return;
116
140
  } else if (108 <= val && val <= 1131) {
117
141
  val -= 108;
118
142
  stream.writeUInt8((val >> 8) + 247);
119
- return stream.writeUInt8(val & 0xff);
120
-
143
+ stream.writeUInt8(val & 0xff);
144
+ return;
121
145
  } else if (-1131 <= val && val <= -108) {
122
146
  val = -val - 108;
123
147
  stream.writeUInt8((val >> 8) + 251);
124
- return stream.writeUInt8(val & 0xff);
125
-
148
+ stream.writeUInt8(val & 0xff);
149
+ return;
126
150
  } else if (-32768 <= val && val <= 32767) {
127
151
  stream.writeUInt8(28);
128
- return stream.writeInt16BE(val);
129
-
152
+ stream.writeInt16BE(val);
153
+ return;
130
154
  } else {
131
155
  stream.writeUInt8(29);
132
- return stream.writeInt32BE(val);
156
+ stream.writeInt32BE(val);
157
+ return;
133
158
  }
134
159
  }
135
160
  }
@@ -1,6 +1,20 @@
1
1
  import * as r from 'restructure';
2
2
 
3
+ /** @typedef {import('restructure').BaseType} BaseType */
4
+ /** @typedef {import('restructure').DecodeStream} DecodeStream */
5
+ /** @typedef {import('restructure').EncodeStream} EncodeStream */
6
+ /** @typedef {import('restructure').PointerOptions} PointerOptions */
7
+ /** @typedef {import('restructure').StructValue} StructValue */
8
+
9
+ /**
10
+ * CFF dict pointer: offset comes from a prior operand rather than the stream.
11
+ * Temporary offsetType stubs only implement the method needed for that phase.
12
+ */
3
13
  export default class CFFPointer extends r.Pointer {
14
+ /**
15
+ * @param {BaseType | null} type
16
+ * @param {PointerOptions} [options]
17
+ */
4
18
  constructor(type, options = {}) {
5
19
  if (options.type == null) {
6
20
  options.type = 'global';
@@ -9,6 +23,12 @@ export default class CFFPointer extends r.Pointer {
9
23
  super(null, type, options);
10
24
  }
11
25
 
26
+ /**
27
+ * @param {DecodeStream} stream
28
+ * @param {StructValue | null | undefined} parent
29
+ * @param {number[]} operands
30
+ * @returns {unknown}
31
+ */
12
32
  decode(stream, parent, operands) {
13
33
  this.offsetType = {
14
34
  decode: () => operands[0]
@@ -17,6 +37,12 @@ export default class CFFPointer extends r.Pointer {
17
37
  return super.decode(stream, parent, operands);
18
38
  }
19
39
 
40
+ /**
41
+ * @param {EncodeStream | null} stream
42
+ * @param {unknown} value
43
+ * @param {StructValue | null | undefined} ctx
44
+ * @returns {Ptr[]}
45
+ */
20
46
  encode(stream, value, ctx) {
21
47
  if (!stream) {
22
48
  // compute the size (so ctx.pointerSize is correct)
@@ -28,22 +54,35 @@ export default class CFFPointer extends r.Pointer {
28
54
  return [new Ptr(0)];
29
55
  }
30
56
 
57
+ /** @type {number | null} */
31
58
  let ptr = null;
32
59
  this.offsetType = {
33
- encode: (stream, val) => ptr = val
60
+ /**
61
+ * @param {EncodeStream} _stream
62
+ * @param {number} val
63
+ */
64
+ encode: (_stream, val) => { ptr = val; }
34
65
  };
35
66
 
36
67
  super.encode(stream, value, ctx);
37
- return [new Ptr(ptr)];
68
+ return [new Ptr(ptr ?? 0)];
38
69
  }
39
70
  }
40
71
 
41
72
  class Ptr {
73
+ /**
74
+ * @param {number} val
75
+ */
42
76
  constructor(val) {
77
+ /** @type {number} */
43
78
  this.val = val;
79
+ /** @type {boolean} */
44
80
  this.forceLarge = true;
45
81
  }
46
82
 
83
+ /**
84
+ * @returns {number}
85
+ */
47
86
  valueOf() {
48
87
  return this.val;
49
88
  }
@@ -2,38 +2,48 @@ import CFFDict from './CFFDict';
2
2
  import CFFIndex from './CFFIndex';
3
3
  import CFFPointer from './CFFPointer';
4
4
 
5
- class CFFBlendOp {
6
- static decode(stream, parent, operands) {
5
+ /** @typedef {import('restructure').DecodeStream} DecodeStream */
6
+ /** @typedef {import('restructure').StructValue} StructValue */
7
+
8
+ /** @type {import('../../types/fontkit').CFFOperandType} */
9
+ const CFFBlendOp = {
10
+ /**
11
+ * @param {DecodeStream} _stream
12
+ * @param {StructValue} _parent
13
+ * @param {number[]} operands
14
+ * @returns {void}
15
+ */
16
+ decode(_stream, _parent, operands) {
7
17
  let numBlends = operands.pop();
8
18
 
9
19
  // TODO: actually blend. For now just consume the deltas
10
20
  // since we don't use any of the values anyway.
11
- while (operands.length > numBlends) {
21
+ while (operands.length > /** @type {number} */ (numBlends)) {
12
22
  operands.pop();
13
23
  }
14
24
  }
15
- }
25
+ };
16
26
 
17
27
  export default new CFFDict([
18
28
  // key name type default
19
- [6, 'BlueValues', 'delta', null],
20
- [7, 'OtherBlues', 'delta', null],
21
- [8, 'FamilyBlues', 'delta', null],
22
- [9, 'FamilyOtherBlues', 'delta', null],
23
- [[12, 9], 'BlueScale', 'number', 0.039625],
24
- [[12, 10], 'BlueShift', 'number', 7],
25
- [[12, 11], 'BlueFuzz', 'number', 1],
26
- [10, 'StdHW', 'number', null],
27
- [11, 'StdVW', 'number', null],
28
- [[12, 12], 'StemSnapH', 'delta', null],
29
- [[12, 13], 'StemSnapV', 'delta', null],
30
- [[12, 14], 'ForceBold', 'boolean', false],
31
- [[12, 17], 'LanguageGroup', 'number', 0],
32
- [[12, 18], 'ExpansionFactor', 'number', 0.06],
33
- [[12, 19], 'initialRandomSeed', 'number', 0],
34
- [20, 'defaultWidthX', 'number', 0],
35
- [21, 'nominalWidthX', 'number', 0],
36
- [22, 'vsindex', 'number', 0],
37
- [23, 'blend', CFFBlendOp, null],
38
- [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null]
29
+ [6, 'BlueValues', 'delta', null],
30
+ [7, 'OtherBlues', 'delta', null],
31
+ [8, 'FamilyBlues', 'delta', null],
32
+ [9, 'FamilyOtherBlues', 'delta', null],
33
+ [[12, 9], 'BlueScale', 'number', 0.039625],
34
+ [[12, 10], 'BlueShift', 'number', 7],
35
+ [[12, 11], 'BlueFuzz', 'number', 1],
36
+ [10, 'StdHW', 'number', null],
37
+ [11, 'StdVW', 'number', null],
38
+ [[12, 12], 'StemSnapH', 'delta', null],
39
+ [[12, 13], 'StemSnapV', 'delta', null],
40
+ [[12, 14], 'ForceBold', 'boolean', false],
41
+ [[12, 17], 'LanguageGroup', 'number', 0],
42
+ [[12, 18], 'ExpansionFactor', 'number', 0.06],
43
+ [[12, 19], 'initialRandomSeed', 'number', 0],
44
+ [20, 'defaultWidthX', 'number', 0],
45
+ [21, 'nominalWidthX', 'number', 0],
46
+ [22, 'vsindex', 'number', 0],
47
+ [23, 'blend', CFFBlendOp, null],
48
+ [19, 'Subrs', new CFFPointer(new CFFIndex(), { type: 'local' }), null]
39
49
  ]);
@@ -1,71 +1,72 @@
1
1
  // Automatically generated from Appendix A of the CFF specification; do
2
2
  // not edit. Length should be 391.
3
+ /** @type {string[]} */
3
4
  export default [
4
- ".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar",
5
- "percent", "ampersand", "quoteright", "parenleft", "parenright",
6
- "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one",
7
- "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon",
8
- "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C",
9
- "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
10
- "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash",
11
- "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c",
12
- "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
13
- "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright",
14
- "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen",
15
- "florin", "section", "currency", "quotesingle", "quotedblleft",
16
- "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash",
17
- "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet",
18
- "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright",
19
- "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex",
20
- "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla",
21
- "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash",
22
- "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe",
23
- "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth",
24
- "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar",
25
- "degree", "thorn", "threequarters", "twosuperior", "registered", "minus",
26
- "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex",
27
- "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute",
28
- "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis",
29
- "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve",
30
- "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave",
31
- "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis",
32
- "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex",
33
- "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave",
34
- "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde",
35
- "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute",
36
- "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall",
37
- "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall",
38
- "parenleftsuperior", "parenrightsuperior", "twodotenleader",
39
- "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle",
40
- "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle",
41
- "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior",
42
- "threequartersemdash", "periodsuperior", "questionsmall", "asuperior",
43
- "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior",
44
- "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior",
45
- "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior",
46
- "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall",
47
- "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall",
48
- "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall",
49
- "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall",
50
- "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary",
51
- "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle",
52
- "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall",
53
- "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash",
54
- "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall",
55
- "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths",
56
- "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior",
57
- "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior",
58
- "ninesuperior", "zeroinferior", "oneinferior", "twoinferior",
59
- "threeinferior", "fourinferior", "fiveinferior", "sixinferior",
60
- "seveninferior", "eightinferior", "nineinferior", "centinferior",
61
- "dollarinferior", "periodinferior", "commainferior", "Agravesmall",
62
- "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall",
63
- "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall",
64
- "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall",
65
- "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall",
66
- "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall",
67
- "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall",
68
- "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall",
69
- "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black",
70
- "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"
5
+ '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',
6
+ 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',
7
+ 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one',
8
+ 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon',
9
+ 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C',
10
+ 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
11
+ 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash',
12
+ 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c',
13
+ 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
14
+ 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright',
15
+ 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen',
16
+ 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft',
17
+ 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash',
18
+ 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet',
19
+ 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright',
20
+ 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex',
21
+ 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',
22
+ 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash',
23
+ 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe',
24
+ 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth',
25
+ 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar',
26
+ 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus',
27
+ 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex',
28
+ 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute',
29
+ 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis',
30
+ 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve',
31
+ 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave',
32
+ 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis',
33
+ 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex',
34
+ 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave',
35
+ 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde',
36
+ 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute',
37
+ 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall',
38
+ 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall',
39
+ 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
40
+ 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle',
41
+ 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',
42
+ 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior',
43
+ 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior',
44
+ 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior',
45
+ 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior',
46
+ 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior',
47
+ 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
48
+ 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
49
+ 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
50
+ 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
51
+ 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
52
+ 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',
53
+ 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall',
54
+ 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash',
55
+ 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall',
56
+ 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
57
+ 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'foursuperior',
58
+ 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior',
59
+ 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
60
+ 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
61
+ 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior',
62
+ 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',
63
+ 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
64
+ 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
65
+ 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
66
+ 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
67
+ 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
68
+ 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
69
+ 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
70
+ 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003', 'Black',
71
+ 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold'
71
72
  ];