@turntrout/subfont 1.7.1 → 1.8.1

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 (147) hide show
  1. package/CLAUDE.md +39 -13
  2. package/README.md +24 -14
  3. package/lib/FontTracerPool.d.ts +1 -0
  4. package/lib/FontTracerPool.d.ts.map +1 -1
  5. package/lib/FontTracerPool.js +48 -25
  6. package/lib/FontTracerPool.js.map +1 -1
  7. package/lib/HeadlessBrowser.d.ts +18 -0
  8. package/lib/HeadlessBrowser.d.ts.map +1 -0
  9. package/lib/HeadlessBrowser.js +216 -210
  10. package/lib/HeadlessBrowser.js.map +1 -0
  11. package/lib/codepointMaps.d.ts +4 -0
  12. package/lib/codepointMaps.d.ts.map +1 -0
  13. package/lib/codepointMaps.js +115 -0
  14. package/lib/codepointMaps.js.map +1 -0
  15. package/lib/collectFeatureGlyphIds.d.ts +3 -0
  16. package/lib/collectFeatureGlyphIds.d.ts.map +1 -0
  17. package/lib/collectFeatureGlyphIds.js +124 -138
  18. package/lib/collectFeatureGlyphIds.js.map +1 -0
  19. package/lib/collectTextsByPage.d.ts +41 -0
  20. package/lib/collectTextsByPage.d.ts.map +1 -0
  21. package/lib/collectTextsByPage.js +726 -965
  22. package/lib/collectTextsByPage.js.map +1 -0
  23. package/lib/concurrencyLimit.d.ts +3 -0
  24. package/lib/concurrencyLimit.d.ts.map +1 -0
  25. package/lib/concurrencyLimit.js +12 -11
  26. package/lib/concurrencyLimit.js.map +1 -0
  27. package/lib/escapeJsStringLiteral.d.ts +3 -0
  28. package/lib/escapeJsStringLiteral.d.ts.map +1 -0
  29. package/lib/escapeJsStringLiteral.js +7 -6
  30. package/lib/escapeJsStringLiteral.js.map +1 -0
  31. package/lib/extractReferencedCustomPropertyNames.d.ts +3 -0
  32. package/lib/extractReferencedCustomPropertyNames.d.ts.map +1 -0
  33. package/lib/extractReferencedCustomPropertyNames.js +15 -16
  34. package/lib/extractReferencedCustomPropertyNames.js.map +1 -0
  35. package/lib/extractVisibleText.d.ts +7 -0
  36. package/lib/extractVisibleText.d.ts.map +1 -0
  37. package/lib/extractVisibleText.js +110 -119
  38. package/lib/extractVisibleText.js.map +1 -0
  39. package/lib/findCustomPropertyDefinitions.d.ts +8 -0
  40. package/lib/findCustomPropertyDefinitions.d.ts.map +1 -0
  41. package/lib/findCustomPropertyDefinitions.js +41 -48
  42. package/lib/findCustomPropertyDefinitions.js.map +1 -0
  43. package/lib/fontConverter.d.ts +2 -0
  44. package/lib/fontConverter.d.ts.map +1 -0
  45. package/lib/fontConverter.js +40 -21
  46. package/lib/fontConverter.js.map +1 -0
  47. package/lib/fontConverterWorker.d.ts +2 -0
  48. package/lib/fontConverterWorker.d.ts.map +1 -0
  49. package/lib/fontConverterWorker.js +52 -15
  50. package/lib/fontConverterWorker.js.map +1 -0
  51. package/lib/fontFaceHelpers.d.ts +64 -0
  52. package/lib/fontFaceHelpers.d.ts.map +1 -0
  53. package/lib/fontFaceHelpers.js +237 -249
  54. package/lib/fontFaceHelpers.js.map +1 -0
  55. package/lib/fontFeatureHelpers.d.ts +30 -0
  56. package/lib/fontFeatureHelpers.d.ts.map +1 -0
  57. package/lib/fontFeatureHelpers.js +277 -212
  58. package/lib/fontFeatureHelpers.js.map +1 -0
  59. package/lib/fontTracerWorker.d.ts +11 -0
  60. package/lib/fontTracerWorker.d.ts.map +1 -0
  61. package/lib/fontTracerWorker.js +94 -60
  62. package/lib/fontTracerWorker.js.map +1 -0
  63. package/lib/gatherStylesheetsWithPredicates.d.ts +26 -0
  64. package/lib/gatherStylesheetsWithPredicates.d.ts.map +1 -0
  65. package/lib/gatherStylesheetsWithPredicates.js +75 -84
  66. package/lib/gatherStylesheetsWithPredicates.js.map +1 -0
  67. package/lib/getCssRulesByProperty.d.ts +29 -0
  68. package/lib/getCssRulesByProperty.d.ts.map +1 -0
  69. package/lib/getCssRulesByProperty.js +316 -316
  70. package/lib/getCssRulesByProperty.js.map +1 -0
  71. package/lib/getFontInfo.d.ts +11 -0
  72. package/lib/getFontInfo.d.ts.map +1 -0
  73. package/lib/getFontInfo.js +35 -33
  74. package/lib/getFontInfo.js.map +1 -0
  75. package/lib/initialValueByProp.d.ts +3 -0
  76. package/lib/initialValueByProp.d.ts.map +1 -0
  77. package/lib/initialValueByProp.js +20 -17
  78. package/lib/initialValueByProp.js.map +1 -0
  79. package/lib/injectSubsetDefinitions.d.ts +3 -0
  80. package/lib/injectSubsetDefinitions.d.ts.map +1 -0
  81. package/lib/injectSubsetDefinitions.js +54 -59
  82. package/lib/injectSubsetDefinitions.js.map +1 -0
  83. package/lib/normalizeFontPropertyValue.d.ts +3 -0
  84. package/lib/normalizeFontPropertyValue.d.ts.map +1 -0
  85. package/lib/normalizeFontPropertyValue.js +59 -54
  86. package/lib/normalizeFontPropertyValue.js.map +1 -0
  87. package/lib/parseCommandLineOptions.d.ts +9 -0
  88. package/lib/parseCommandLineOptions.d.ts.map +1 -0
  89. package/lib/parseCommandLineOptions.js +145 -149
  90. package/lib/parseCommandLineOptions.js.map +1 -0
  91. package/lib/parseFontVariationSettings.d.ts +3 -0
  92. package/lib/parseFontVariationSettings.d.ts.map +1 -0
  93. package/lib/parseFontVariationSettings.js +38 -36
  94. package/lib/parseFontVariationSettings.js.map +1 -0
  95. package/lib/progress.d.ts +27 -0
  96. package/lib/progress.d.ts.map +1 -0
  97. package/lib/progress.js +51 -54
  98. package/lib/progress.js.map +1 -0
  99. package/lib/sfntCache.d.ts +4 -0
  100. package/lib/sfntCache.d.ts.map +1 -0
  101. package/lib/sfntCache.js +70 -25
  102. package/lib/sfntCache.js.map +1 -0
  103. package/lib/stripLocalTokens.d.ts +3 -0
  104. package/lib/stripLocalTokens.d.ts.map +1 -0
  105. package/lib/stripLocalTokens.js +23 -21
  106. package/lib/stripLocalTokens.js.map +1 -0
  107. package/lib/subfont.d.ts +22 -1
  108. package/lib/subfont.d.ts.map +1 -1
  109. package/lib/subfont.js +7 -6
  110. package/lib/subfont.js.map +1 -1
  111. package/lib/subsetFontWithGlyphs.d.ts +4 -0
  112. package/lib/subsetFontWithGlyphs.d.ts.map +1 -1
  113. package/lib/subsetFontWithGlyphs.js +78 -17
  114. package/lib/subsetFontWithGlyphs.js.map +1 -1
  115. package/lib/subsetFonts.d.ts +1 -5
  116. package/lib/subsetFonts.d.ts.map +1 -1
  117. package/lib/subsetFonts.js +18 -17
  118. package/lib/subsetFonts.js.map +1 -1
  119. package/lib/subsetGeneration.d.ts +3 -6
  120. package/lib/subsetGeneration.d.ts.map +1 -1
  121. package/lib/subsetGeneration.js +42 -9
  122. package/lib/subsetGeneration.js.map +1 -1
  123. package/lib/types/shared.d.ts +11 -0
  124. package/lib/types/shared.d.ts.map +1 -0
  125. package/lib/types/shared.js +3 -0
  126. package/lib/types/shared.js.map +1 -0
  127. package/lib/unicodeRange.d.ts +3 -0
  128. package/lib/unicodeRange.d.ts.map +1 -0
  129. package/lib/unicodeRange.js +17 -30
  130. package/lib/unicodeRange.js.map +1 -0
  131. package/lib/unquote.d.ts +3 -0
  132. package/lib/unquote.d.ts.map +1 -0
  133. package/lib/unquote.js +18 -25
  134. package/lib/unquote.js.map +1 -0
  135. package/lib/variationAxes.d.ts +33 -0
  136. package/lib/variationAxes.d.ts.map +1 -0
  137. package/lib/variationAxes.js +127 -157
  138. package/lib/variationAxes.js.map +1 -0
  139. package/lib/warnAboutMissingGlyphs.d.ts +43 -0
  140. package/lib/warnAboutMissingGlyphs.d.ts.map +1 -0
  141. package/lib/warnAboutMissingGlyphs.js +141 -147
  142. package/lib/warnAboutMissingGlyphs.js.map +1 -0
  143. package/lib/wasmQueue.d.ts +3 -0
  144. package/lib/wasmQueue.d.ts.map +1 -0
  145. package/lib/wasmQueue.js +13 -10
  146. package/lib/wasmQueue.js.map +1 -0
  147. package/package.json +7 -3
@@ -1,249 +1,314 @@
1
- const cssFontParser = require('css-font-parser');
2
-
3
- const featureSettingsProps = new Set([
4
- 'font-feature-settings',
5
- 'font-variant-alternates',
6
- 'font-variant-caps',
7
- 'font-variant-east-asian',
8
- 'font-variant-ligatures',
9
- 'font-variant-numeric',
10
- 'font-variant-position',
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.UNRESOLVED_FEATURES_SENTINEL = exports.fontVariantToOTTags = exports.featureSettingsProps = void 0;
37
+ exports.extractFeatureTagsFromDecl = extractFeatureTagsFromDecl;
38
+ exports.ruleFeatureTags = ruleFeatureTags;
39
+ exports.ruleFontFamily = ruleFontFamily;
40
+ exports.addTagsToMapEntry = addTagsToMapEntry;
41
+ exports.recordRuleFeatureTags = recordRuleFeatureTags;
42
+ exports.findFontFamiliesWithFeatureSettings = findFontFamiliesWithFeatureSettings;
43
+ exports.resolveFeatureSettings = resolveFeatureSettings;
44
+ const cssFontParser = __importStar(require("css-font-parser"));
45
+ exports.featureSettingsProps = new Set([
46
+ 'font-feature-settings',
47
+ 'font-variant-alternates',
48
+ 'font-variant-caps',
49
+ 'font-variant-east-asian',
50
+ 'font-variant-ligatures',
51
+ 'font-variant-numeric',
52
+ 'font-variant-position',
11
53
  ]);
12
-
13
54
  // Map font-variant-* CSS values to their corresponding OpenType feature tags.
14
- const fontVariantToOTTags = {
15
- 'font-variant-ligatures': {
16
- 'common-ligatures': ['liga', 'clig'],
17
- 'no-common-ligatures': ['liga', 'clig'],
18
- 'discretionary-ligatures': ['dlig'],
19
- 'no-discretionary-ligatures': ['dlig'],
20
- 'historical-ligatures': ['hlig'],
21
- 'no-historical-ligatures': ['hlig'],
22
- contextual: ['calt'],
23
- 'no-contextual': ['calt'],
24
- },
25
- 'font-variant-caps': {
26
- 'small-caps': ['smcp'],
27
- 'all-small-caps': ['smcp', 'c2sc'],
28
- 'petite-caps': ['pcap'],
29
- 'all-petite-caps': ['pcap', 'c2pc'],
30
- unicase: ['unic'],
31
- 'titling-caps': ['titl'],
32
- },
33
- 'font-variant-numeric': {
34
- 'lining-nums': ['lnum'],
35
- 'oldstyle-nums': ['onum'],
36
- 'proportional-nums': ['pnum'],
37
- 'tabular-nums': ['tnum'],
38
- 'diagonal-fractions': ['frac'],
39
- 'stacked-fractions': ['afrc'],
40
- ordinal: ['ordn'],
41
- 'slashed-zero': ['zero'],
42
- },
43
- 'font-variant-position': {
44
- sub: ['subs'],
45
- super: ['sups'],
46
- },
47
- 'font-variant-east-asian': {
48
- jis78: ['jp78'],
49
- jis83: ['jp83'],
50
- jis90: ['jp90'],
51
- jis04: ['jp04'],
52
- simplified: ['smpl'],
53
- traditional: ['trad'],
54
- 'proportional-width': ['pwid'],
55
- 'full-width': ['fwid'],
56
- ruby: ['ruby'],
57
- },
55
+ exports.fontVariantToOTTags = {
56
+ 'font-variant-ligatures': {
57
+ 'common-ligatures': ['liga', 'clig'],
58
+ 'no-common-ligatures': ['liga', 'clig'],
59
+ 'discretionary-ligatures': ['dlig'],
60
+ 'no-discretionary-ligatures': ['dlig'],
61
+ 'historical-ligatures': ['hlig'],
62
+ 'no-historical-ligatures': ['hlig'],
63
+ contextual: ['calt'],
64
+ 'no-contextual': ['calt'],
65
+ },
66
+ 'font-variant-caps': {
67
+ 'small-caps': ['smcp'],
68
+ 'all-small-caps': ['smcp', 'c2sc'],
69
+ 'petite-caps': ['pcap'],
70
+ 'all-petite-caps': ['pcap', 'c2pc'],
71
+ unicase: ['unic'],
72
+ 'titling-caps': ['titl'],
73
+ },
74
+ 'font-variant-numeric': {
75
+ 'lining-nums': ['lnum'],
76
+ 'oldstyle-nums': ['onum'],
77
+ 'proportional-nums': ['pnum'],
78
+ 'tabular-nums': ['tnum'],
79
+ 'diagonal-fractions': ['frac'],
80
+ 'stacked-fractions': ['afrc'],
81
+ ordinal: ['ordn'],
82
+ 'slashed-zero': ['zero'],
83
+ },
84
+ 'font-variant-position': {
85
+ sub: ['subs'],
86
+ super: ['sups'],
87
+ },
88
+ 'font-variant-east-asian': {
89
+ jis78: ['jp78'],
90
+ jis83: ['jp83'],
91
+ jis90: ['jp90'],
92
+ jis04: ['jp04'],
93
+ simplified: ['smpl'],
94
+ traditional: ['trad'],
95
+ 'proportional-width': ['pwid'],
96
+ 'full-width': ['fwid'],
97
+ ruby: ['ruby'],
98
+ },
58
99
  };
59
-
100
+ // Add indexed feature tags (e.g. ss01, cv02) referenced by `styleset(2, 5)` /
101
+ // `character-variant(...)`. CSS allows symbolic names (declared via
102
+ // `@font-feature-values`) — those are preserved as-is and skipped here, since
103
+ // we only know how to resolve numeric indices.
104
+ function addIndexedTags(value, callRe, prefix, maxIndex, tags) {
105
+ let m;
106
+ while ((m = callRe.exec(value)) !== null) {
107
+ const args = m[1];
108
+ let sawNumeric = false;
109
+ for (const arg of args.split(',')) {
110
+ const trimmed = arg.trim();
111
+ if (/^\d+$/.test(trimmed)) {
112
+ const idx = Number(trimmed);
113
+ if (idx >= 1 && idx <= maxIndex) {
114
+ tags.add(`${prefix}${String(idx).padStart(2, '0')}`);
115
+ sawNumeric = true;
116
+ }
117
+ }
118
+ }
119
+ // Symbolic-name argument (or empty) — fall back to including all indices,
120
+ // since resolving the name would require parsing @font-feature-values.
121
+ if (!sawNumeric) {
122
+ for (let i = 1; i <= maxIndex; i++) {
123
+ tags.add(`${prefix}${String(i).padStart(2, '0')}`);
124
+ }
125
+ }
126
+ }
127
+ }
60
128
  // Extract OpenType feature tags referenced by a CSS declaration.
129
+ // Sentinel inserted into a feature-tag set when a CSS declaration references
130
+ // var() (or any other token we can't statically resolve). Downstream code
131
+ // detecting this sentinel must treat the rule's feature contribution as
132
+ // "unknown" and avoid using targeted feature retention. The string is more
133
+ // than 4 chars so it can't collide with a real OT feature tag.
134
+ exports.UNRESOLVED_FEATURES_SENTINEL = '<unresolved>';
135
+ // Detects the CSS var() function. CSS keywords are case-insensitive, so
136
+ // vAr(--x) is just as valid as var(--x).
137
+ const VAR_FUNCTION_RE = /\bvar\s*\(/i;
61
138
  function extractFeatureTagsFromDecl(prop, value) {
62
- const tags = new Set();
63
- const propLower = prop.toLowerCase();
64
-
65
- if (propLower === 'font-feature-settings') {
66
- // Parse quoted 4-letter tags: "liga" 1, 'dlig', etc.
67
- const re = /["']([a-zA-Z0-9]{4})["']/g;
68
- let m;
69
- while ((m = re.exec(value)) !== null) {
70
- tags.add(m[1]);
139
+ const tags = new Set();
140
+ const propLower = prop.toLowerCase();
141
+ const hasUnresolvedToken = VAR_FUNCTION_RE.test(value);
142
+ if (propLower === 'font-feature-settings') {
143
+ // Parse quoted 4-letter tags: "liga" 1, 'dlig', etc.
144
+ const re = /["']([a-zA-Z0-9]{4})["']/g;
145
+ let m;
146
+ while ((m = re.exec(value)) !== null) {
147
+ tags.add(m[1]);
148
+ }
149
+ if (hasUnresolvedToken)
150
+ tags.add(exports.UNRESOLVED_FEATURES_SENTINEL);
151
+ return tags;
71
152
  }
72
- return tags;
73
- }
74
-
75
- if (propLower === 'font-variant-alternates') {
76
- const v = value.toLowerCase();
77
- if (v.includes('historical-forms')) tags.add('hist');
78
- if (/stylistic\s*\(/.test(v)) tags.add('salt');
79
- if (/swash\s*\(/.test(v)) tags.add('swsh');
80
- if (/ornaments\s*\(/.test(v)) tags.add('ornm');
81
- if (/annotation\s*\(/.test(v)) tags.add('nalt');
82
- if (/styleset\s*\(/.test(v)) {
83
- for (let i = 1; i <= 20; i++) {
84
- tags.add(`ss${String(i).padStart(2, '0')}`);
85
- }
153
+ if (propLower === 'font-variant-alternates') {
154
+ const v = value.toLowerCase();
155
+ if (v.includes('historical-forms'))
156
+ tags.add('hist');
157
+ if (/stylistic\s*\(/.test(v))
158
+ tags.add('salt');
159
+ if (/swash\s*\(/.test(v))
160
+ tags.add('swsh');
161
+ if (/ornaments\s*\(/.test(v))
162
+ tags.add('ornm');
163
+ if (/annotation\s*\(/.test(v))
164
+ tags.add('nalt');
165
+ addIndexedTags(v, /styleset\s*\(([^)]*)\)/g, 'ss', 20, tags);
166
+ addIndexedTags(v, /character-variant\s*\(([^)]*)\)/g, 'cv', 99, tags);
167
+ if (hasUnresolvedToken)
168
+ tags.add(exports.UNRESOLVED_FEATURES_SENTINEL);
169
+ return tags;
86
170
  }
87
- if (/character-variant\s*\(/.test(v)) {
88
- for (let i = 1; i <= 99; i++) {
89
- tags.add(`cv${String(i).padStart(2, '0')}`);
90
- }
171
+ const mapping = exports.fontVariantToOTTags[propLower];
172
+ if (mapping) {
173
+ // Split into tokens for exact keyword matching — substring matching
174
+ // would falsely trigger e.g. "sub" inside "super".
175
+ const tokens = new Set(value.toLowerCase().split(/\s+/));
176
+ for (const [keyword, otTags] of Object.entries(mapping)) {
177
+ if (tokens.has(keyword)) {
178
+ for (const t of otTags)
179
+ tags.add(t);
180
+ }
181
+ }
182
+ if (hasUnresolvedToken)
183
+ tags.add(exports.UNRESOLVED_FEATURES_SENTINEL);
91
184
  }
92
185
  return tags;
93
- }
94
-
95
- const mapping = fontVariantToOTTags[propLower];
96
- if (mapping) {
97
- // Split into tokens for exact keyword matching — substring matching
98
- // would falsely trigger e.g. "sub" inside "super".
99
- const tokens = new Set(value.toLowerCase().split(/\s+/));
100
- for (const [keyword, otTags] of Object.entries(mapping)) {
101
- if (tokens.has(keyword)) {
102
- for (const t of otTags) tags.add(t);
103
- }
104
- }
105
- }
106
- return tags;
107
186
  }
108
-
109
187
  // Collect feature tags from all feature-related declarations in a CSS rule.
110
188
  function ruleFeatureTags(rule) {
111
- const tags = new Set();
112
- let hasFeatureDecl = false;
113
- for (const node of rule.nodes) {
114
- if (
115
- node.type === 'decl' &&
116
- featureSettingsProps.has(node.prop.toLowerCase())
117
- ) {
118
- hasFeatureDecl = true;
119
- for (const t of extractFeatureTagsFromDecl(node.prop, node.value)) {
120
- tags.add(t);
121
- }
189
+ const tags = new Set();
190
+ let hasFeatureDecl = false;
191
+ for (const node of rule.nodes) {
192
+ if (node.type === 'decl' &&
193
+ exports.featureSettingsProps.has(node.prop.toLowerCase())) {
194
+ hasFeatureDecl = true;
195
+ for (const t of extractFeatureTagsFromDecl(node.prop, node.value)) {
196
+ tags.add(t);
197
+ }
198
+ }
122
199
  }
123
- }
124
- return hasFeatureDecl ? tags : null;
200
+ return hasFeatureDecl ? tags : null;
125
201
  }
126
-
127
202
  function ruleFontFamily(rule) {
128
- for (let i = rule.nodes.length - 1; i >= 0; i--) {
129
- const node = rule.nodes[i];
130
- if (node.type === 'decl' && node.prop.toLowerCase() === 'font-family') {
131
- return node.value;
203
+ for (let i = rule.nodes.length - 1; i >= 0; i--) {
204
+ const node = rule.nodes[i];
205
+ if (node.type === 'decl' && node.prop.toLowerCase() === 'font-family') {
206
+ return node.value;
207
+ }
132
208
  }
133
- }
134
- return null;
209
+ return null;
135
210
  }
136
-
137
211
  // Add all items from `tags` into the Set stored at `key` in `map`,
138
212
  // creating the Set if it doesn't exist yet.
139
213
  function addTagsToMapEntry(map, key, tags) {
140
- let s = map.get(key);
141
- if (!s) {
142
- s = new Set();
143
- map.set(key, s);
144
- }
145
- for (const t of tags) s.add(t);
214
+ let s = map.get(key);
215
+ if (!s) {
216
+ s = new Set();
217
+ map.set(key, s);
218
+ }
219
+ for (const t of tags)
220
+ s.add(t);
146
221
  }
147
-
148
222
  // Record the OT tags from a single CSS rule into featureTagsByFamily,
149
223
  // keyed by font-family (or '*' when no font-family is specified).
150
224
  function recordRuleFeatureTags(rule, featureTagsByFamily) {
151
- const tags = ruleFeatureTags(rule);
152
- if (!tags) return null;
153
-
154
- const fontFamily = ruleFontFamily(rule);
155
- if (!fontFamily) {
156
- if (featureTagsByFamily) addTagsToMapEntry(featureTagsByFamily, '*', tags);
157
- return true; // signals "all families"
158
- }
159
-
160
- const families = cssFontParser.parseFontFamily(fontFamily);
161
- if (featureTagsByFamily) {
162
- for (const family of families) {
163
- addTagsToMapEntry(featureTagsByFamily, family.toLowerCase(), tags);
225
+ const tags = ruleFeatureTags(rule);
226
+ if (!tags)
227
+ return null;
228
+ const fontFamily = ruleFontFamily(rule);
229
+ if (!fontFamily) {
230
+ if (featureTagsByFamily)
231
+ addTagsToMapEntry(featureTagsByFamily, '*', tags);
232
+ return true; // signals "all families"
233
+ }
234
+ const families = cssFontParser.parseFontFamily(fontFamily);
235
+ if (featureTagsByFamily) {
236
+ for (const family of families) {
237
+ addTagsToMapEntry(featureTagsByFamily, family.toLowerCase(), tags);
238
+ }
164
239
  }
165
- }
166
- return families;
240
+ return families;
167
241
  }
168
-
169
242
  // Determine which font-families use font-feature-settings or font-variant-*.
170
243
  // Returns null (none detected), a Set of lowercase family names, or true (all).
171
244
  // Also populates featureTagsByFamily with the OT tags per family (lowercase).
172
- function findFontFamiliesWithFeatureSettings(
173
- stylesheetsWithPredicates,
174
- featureTagsByFamily
175
- ) {
176
- let result = null;
177
- for (const { asset } of stylesheetsWithPredicates) {
178
- if (!asset || !asset.parseTree) continue;
179
- asset.parseTree.walkRules((rule) => {
180
- if (result === true && !featureTagsByFamily) return;
181
-
182
- const recorded = recordRuleFeatureTags(rule, featureTagsByFamily);
183
- if (!recorded) return;
184
-
185
- if (recorded === true) {
186
- result = true;
187
- } else if (result !== true) {
188
- if (!result) result = new Set();
189
- for (const family of recorded) {
190
- result.add(family.toLowerCase());
191
- }
192
- }
193
- });
194
- if (result === true && !featureTagsByFamily) break;
195
- }
196
- return result;
245
+ function findFontFamiliesWithFeatureSettings(stylesheetsWithPredicates, featureTagsByFamily) {
246
+ let result = null;
247
+ for (const { asset } of stylesheetsWithPredicates) {
248
+ if (!asset?.parseTree?.walkRules)
249
+ continue;
250
+ asset.parseTree.walkRules((rule) => {
251
+ if (result === true && !featureTagsByFamily)
252
+ return;
253
+ const recorded = recordRuleFeatureTags(rule, featureTagsByFamily);
254
+ if (!recorded)
255
+ return;
256
+ if (recorded === true) {
257
+ result = true;
258
+ }
259
+ else if (result !== true) {
260
+ if (!result)
261
+ result = new Set();
262
+ for (const family of recorded) {
263
+ result.add(family.toLowerCase());
264
+ }
265
+ }
266
+ });
267
+ if (result === true && !featureTagsByFamily)
268
+ break;
269
+ }
270
+ return result;
197
271
  }
198
-
199
272
  // Determine whether a template's font families use feature settings, and
200
273
  // collect the corresponding OT feature tags from featureTagsByFamily.
201
- function resolveFeatureSettings(
202
- fontFamilies,
203
- fontFamiliesWithFeatureSettings,
204
- featureTagsByFamily
205
- ) {
206
- let hasFontFeatureSettings = false;
207
- if (fontFamiliesWithFeatureSettings === true) {
208
- hasFontFeatureSettings = true;
209
- } else if (fontFamiliesWithFeatureSettings instanceof Set) {
210
- for (const f of fontFamilies) {
211
- if (fontFamiliesWithFeatureSettings.has(f.toLowerCase())) {
274
+ function resolveFeatureSettings(fontFamilies, fontFamiliesWithFeatureSettings, featureTagsByFamily) {
275
+ let hasFontFeatureSettings = false;
276
+ if (fontFamiliesWithFeatureSettings === true) {
212
277
  hasFontFeatureSettings = true;
213
- break;
214
- }
215
- }
216
- }
217
-
218
- let fontFeatureTags;
219
- if (hasFontFeatureSettings && featureTagsByFamily) {
220
- const tags = new Set();
221
- const globalTags = featureTagsByFamily.get('*');
222
- if (globalTags) {
223
- for (const t of globalTags) tags.add(t);
224
278
  }
225
- for (const f of fontFamilies) {
226
- const familyTags = featureTagsByFamily.get(f.toLowerCase());
227
- if (familyTags) {
228
- for (const t of familyTags) tags.add(t);
229
- }
279
+ else if (fontFamiliesWithFeatureSettings instanceof Set) {
280
+ for (const f of fontFamilies) {
281
+ if (fontFamiliesWithFeatureSettings.has(f.toLowerCase())) {
282
+ hasFontFeatureSettings = true;
283
+ break;
284
+ }
285
+ }
230
286
  }
231
- if (tags.size > 0) {
232
- fontFeatureTags = [...tags];
287
+ let fontFeatureTags;
288
+ if (hasFontFeatureSettings && featureTagsByFamily) {
289
+ const tags = new Set();
290
+ const globalTags = featureTagsByFamily.get('*');
291
+ if (globalTags) {
292
+ for (const t of globalTags)
293
+ tags.add(t);
294
+ }
295
+ for (const f of fontFamilies) {
296
+ const familyTags = featureTagsByFamily.get(f.toLowerCase());
297
+ if (familyTags) {
298
+ for (const t of familyTags)
299
+ tags.add(t);
300
+ }
301
+ }
302
+ // If any contributing rule had unresolved tokens (e.g. var()), we don't
303
+ // know the full set — leave fontFeatureTags undefined so callers fall
304
+ // back to retain-all-features instead of dropping features silently.
305
+ if (tags.has(exports.UNRESOLVED_FEATURES_SENTINEL)) {
306
+ tags.delete(exports.UNRESOLVED_FEATURES_SENTINEL);
307
+ }
308
+ else if (tags.size > 0) {
309
+ fontFeatureTags = [...tags];
310
+ }
233
311
  }
234
- }
235
-
236
- return { hasFontFeatureSettings, fontFeatureTags };
312
+ return { hasFontFeatureSettings, fontFeatureTags };
237
313
  }
238
-
239
- module.exports = {
240
- featureSettingsProps,
241
- fontVariantToOTTags,
242
- extractFeatureTagsFromDecl,
243
- ruleFeatureTags,
244
- ruleFontFamily,
245
- addTagsToMapEntry,
246
- recordRuleFeatureTags,
247
- findFontFamiliesWithFeatureSettings,
248
- resolveFeatureSettings,
249
- };
314
+ //# sourceMappingURL=fontFeatureHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fontFeatureHelpers.js","sourceRoot":"","sources":["../src/fontFeatureHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Worker thread for running fontTracer in parallel.
3
+ *
4
+ * Receives: { type: 'trace', taskId, htmlText, stylesheetsWithPredicates }
5
+ * Returns: { type: 'result', taskId, textByProps: [{text, props}] }
6
+ *
7
+ * Re-parses HTML with jsdom inside the worker since DOM objects
8
+ * cannot be transferred via structured clone.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=fontTracerWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fontTracerWorker.d.ts","sourceRoot":"","sources":["../src/fontTracerWorker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}