@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
package/src/encodings.js CHANGED
@@ -1,16 +1,23 @@
1
1
  /**
2
2
  * Gets an encoding name from platform, encoding, and language ids.
3
3
  * Returned encoding names can be used in iconv-lite to decode text.
4
+ * @param {number} platformID
5
+ * @param {number} encodingID
6
+ * @param {number} [languageID]
7
+ * @returns {string | null | undefined}
4
8
  */
5
9
  export function getEncoding(platformID, encodingID, languageID = 0) {
6
10
  if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {
7
11
  return MAC_LANGUAGE_ENCODINGS[languageID];
8
12
  }
9
-
13
+
10
14
  return ENCODINGS[platformID][encodingID];
11
15
  }
12
16
 
17
+ /** @type {Set<string>} */
13
18
  const SINGLE_BYTE_ENCODINGS = new Set(['x-mac-roman', 'x-mac-cyrillic', 'iso-8859-6', 'iso-8859-8']);
19
+
20
+ /** @type {Record<string, string>} */
14
21
  const MAC_ENCODINGS = {
15
22
  'x-mac-croatian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',
16
23
  'x-mac-gaelic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',
@@ -22,8 +29,13 @@ const MAC_ENCODINGS = {
22
29
  'x-mac-turkish': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'
23
30
  };
24
31
 
32
+ /** @type {Map<string, Map<number, number>>} */
25
33
  const encodingCache = new Map();
26
34
 
35
+ /**
36
+ * @param {string} encoding
37
+ * @returns {Map<number, number> | undefined}
38
+ */
27
39
  export function getEncodingMapping(encoding) {
28
40
  let cached = encodingCache.get(encoding);
29
41
  if (cached) {
@@ -47,13 +59,13 @@ export function getEncodingMapping(encoding) {
47
59
  // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings.
48
60
  // Use this to create a mapping of code points.
49
61
  let decoder = new TextDecoder(encoding);
50
- let mapping = new Uint8Array(0x80);
62
+ let bytes = new Uint8Array(0x80);
51
63
  for (let i = 0; i < 0x80; i++) {
52
- mapping[i] = 0x80 + i;
64
+ bytes[i] = 0x80 + i;
53
65
  }
54
66
 
55
67
  let res = new Map();
56
- let s = decoder.decode(mapping);
68
+ let s = decoder.decode(bytes);
57
69
  for (let i = 0; i < 0x80; i++) {
58
70
  res.set(s.charCodeAt(i), 0x80 + i);
59
71
  }
@@ -61,41 +73,44 @@ export function getEncodingMapping(encoding) {
61
73
  encodingCache.set(encoding, res);
62
74
  return res;
63
75
  }
76
+
77
+ return undefined;
64
78
  }
65
79
 
66
80
  // Map of platform ids to encoding ids.
81
+ /** @type {(string | null)[][]} */
67
82
  export const ENCODINGS = [
68
83
  // unicode
69
84
  ['utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be'],
70
-
85
+
71
86
  // macintosh
72
87
  // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/
73
- // 0 Roman 17 Malayalam
74
- // 1 Japanese 18 Sinhalese
75
- // 2 Traditional Chinese 19 Burmese
76
- // 3 Korean 20 Khmer
77
- // 4 Arabic 21 Thai
78
- // 5 Hebrew 22 Laotian
79
- // 6 Greek 23 Georgian
80
- // 7 Russian 24 Armenian
81
- // 8 RSymbol 25 Simplified Chinese
82
- // 9 Devanagari 26 Tibetan
83
- // 10 Gurmukhi 27 Mongolian
84
- // 11 Gujarati 28 Geez
85
- // 12 Oriya 29 Slavic
86
- // 13 Bengali 30 Vietnamese
87
- // 14 Tamil 31 Sindhi
88
- // 15 Telugu 32 (Uninterpreted)
89
- // 16 Kannada
88
+ // 0 Roman 17 Malayalam
89
+ // 1 Japanese 18 Sinhalese
90
+ // 2 Traditional Chinese 19 Burmese
91
+ // 3 Korean 20 Khmer
92
+ // 4 Arabic 21 Thai
93
+ // 5 Hebrew 22 Laotian
94
+ // 6 Greek 23 Georgian
95
+ // 7 Russian 24 Armenian
96
+ // 8 RSymbol 25 Simplified Chinese
97
+ // 9 Devanagari 26 Tibetan
98
+ // 10 Gurmukhi 27 Mongolian
99
+ // 11 Gujarati 28 Geez
100
+ // 12 Oriya 29 Slavic
101
+ // 13 Bengali 30 Vietnamese
102
+ // 14 Tamil 31 Sindhi
103
+ // 15 Telugu 32 (Uninterpreted)
104
+ // 16 Kannada
90
105
  ['x-mac-roman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',
91
- 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati',
92
- 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',
93
- 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk',
94
- 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'],
95
-
106
+ 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati',
107
+ 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',
108
+ 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk',
109
+ 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'],
110
+
96
111
  // ISO (deprecated)
97
112
  ['ascii', null, 'iso-8859-1'],
98
-
113
+
99
114
  // windows
100
115
  // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx
101
116
  ['symbol', 'utf-16be', 'shift-jis', 'gb18030', 'big5', 'euc-kr', 'johab', null, null, null, 'utf-16be']
@@ -103,6 +118,7 @@ export const ENCODINGS = [
103
118
 
104
119
  // Overrides for Mac scripts by language id.
105
120
  // See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
121
+ /** @type {Record<number, string>} */
106
122
  export const MAC_LANGUAGE_ENCODINGS = {
107
123
  15: 'x-mac-icelandic',
108
124
  17: 'x-mac-turkish',
@@ -122,98 +138,99 @@ export const MAC_LANGUAGE_ENCODINGS = {
122
138
  };
123
139
 
124
140
  // Map of platform ids to BCP-47 language codes.
141
+ /** @type {Array<Record<number, string>>} */
125
142
  export const LANGUAGES = [
126
143
  // unicode
127
- [],
128
-
144
+ {},
145
+
129
146
  { // macintosh
130
- 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',
131
- 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',
132
- 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',
133
- 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',
134
- 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',
135
- 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',
136
- 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',
137
- 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',
138
- 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',
139
- 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',
140
- 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',
141
- 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',
142
- 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',
143
- 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',
144
- 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',
145
- 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',
146
- 16: 'mt', 46: 'be', 76: 'si', 139: 'su',
147
- 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',
148
- 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',
149
- 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',
150
- 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',
151
- 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',
152
- 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',
153
- 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',
154
- 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',
155
- 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',
156
- 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',
157
- 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',
158
- 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',
159
- 29: 'se', 59: 'ps', 89: 'sw',
147
+ 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',
148
+ 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',
149
+ 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',
150
+ 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',
151
+ 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',
152
+ 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',
153
+ 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',
154
+ 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',
155
+ 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',
156
+ 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',
157
+ 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',
158
+ 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',
159
+ 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',
160
+ 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',
161
+ 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',
162
+ 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',
163
+ 16: 'mt', 46: 'be', 76: 'si', 139: 'su',
164
+ 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',
165
+ 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',
166
+ 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',
167
+ 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',
168
+ 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',
169
+ 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',
170
+ 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',
171
+ 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',
172
+ 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',
173
+ 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',
174
+ 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',
175
+ 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',
176
+ 29: 'se', 59: 'ps', 89: 'sw'
160
177
  },
161
-
178
+
162
179
  // ISO (deprecated)
163
- [],
164
-
165
- { // windows
166
- 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn',
167
- 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si',
168
- 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk',
169
- 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl',
170
- 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR',
171
- 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO',
172
- 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL',
173
- 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO',
174
- 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR',
175
- 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO',
176
- 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC',
177
- 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV',
178
- 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT',
179
- 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN',
180
- 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX',
181
- 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI',
182
- 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA',
183
- 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY',
184
- 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE',
185
- 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR',
186
- 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es',
187
- 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es',
188
- 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US',
189
- 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY',
190
- 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE',
191
- 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI',
192
- 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv',
193
- 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr',
194
- 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg',
195
- 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm',
196
- 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta',
197
- 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt',
198
- 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te',
199
- 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th',
200
- 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo',
201
- 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr',
202
- 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk',
203
- 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug',
204
- 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk',
205
- 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb',
206
- 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur',
207
- 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl',
208
- 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz',
209
- 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi',
210
- 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy',
211
- 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo',
212
- 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah',
213
- 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii',
214
- 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo',
215
- 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA',
216
- 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn',
217
- 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso',
180
+ {},
181
+
182
+ { // windows
183
+ 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn',
184
+ 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si',
185
+ 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk',
186
+ 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl',
187
+ 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR',
188
+ 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO',
189
+ 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL',
190
+ 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO',
191
+ 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR',
192
+ 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO',
193
+ 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC',
194
+ 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV',
195
+ 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT',
196
+ 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN',
197
+ 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX',
198
+ 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI',
199
+ 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA',
200
+ 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY',
201
+ 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE',
202
+ 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR',
203
+ 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es',
204
+ 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es',
205
+ 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US',
206
+ 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY',
207
+ 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE',
208
+ 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI',
209
+ 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv',
210
+ 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr',
211
+ 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg',
212
+ 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm',
213
+ 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta',
214
+ 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt',
215
+ 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te',
216
+ 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th',
217
+ 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo',
218
+ 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr',
219
+ 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk',
220
+ 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug',
221
+ 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk',
222
+ 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb',
223
+ 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur',
224
+ 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl',
225
+ 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz',
226
+ 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi',
227
+ 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy',
228
+ 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo',
229
+ 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah',
230
+ 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii',
231
+ 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo',
232
+ 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA',
233
+ 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn',
234
+ 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso'
218
235
  }
219
236
  ];
package/src/fs.js CHANGED
@@ -1,11 +1,21 @@
1
1
  import { create } from './base';
2
2
  import fs from 'fs';
3
3
 
4
+ /**
5
+ * @param {string | import('fs').PathLike} filename
6
+ * @param {string | Uint8Array} [postscriptName]
7
+ * @returns {import('../types/fontkit').OpenedFont | null | undefined}
8
+ */
4
9
  export function openSync(filename, postscriptName) {
5
10
  let buffer = fs.readFileSync(filename);
6
11
  return create(buffer, postscriptName);
7
12
  }
8
13
 
14
+ /**
15
+ * @param {string | import('fs').PathLike} filename
16
+ * @param {string | Uint8Array} [postscriptName]
17
+ * @returns {Promise<import('../types/fontkit').OpenedFont | null | undefined>}
18
+ */
9
19
  export async function open(filename, postscriptName) {
10
20
  let buffer = await fs.promises.readFile(filename);
11
21
  return create(buffer, postscriptName);
package/src/glyph/BBox.js CHANGED
@@ -2,6 +2,12 @@
2
2
  * Represents a glyph bounding box
3
3
  */
4
4
  export default class BBox {
5
+ /**
6
+ * @param {number} [minX]
7
+ * @param {number} [minY]
8
+ * @param {number} [maxX]
9
+ * @param {number} [maxY]
10
+ */
5
11
  constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {
6
12
  /**
7
13
  * The minimum X position in the bounding box
@@ -44,6 +50,11 @@ export default class BBox {
44
50
  return this.maxY - this.minY;
45
51
  }
46
52
 
53
+ /**
54
+ * @param {number} x
55
+ * @param {number} y
56
+ * @returns {void}
57
+ */
47
58
  addPoint(x, y) {
48
59
  if (Math.abs(x) !== Infinity) {
49
60
  if (x < this.minX) {
@@ -66,6 +77,9 @@ export default class BBox {
66
77
  }
67
78
  }
68
79
 
80
+ /**
81
+ * @returns {BBox}
82
+ */
69
83
  copy() {
70
84
  return new BBox(this.minX, this.minY, this.maxX, this.maxY);
71
85
  }