@turntrout/subfont 1.10.1 → 1.10.3
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.
- package/lib/HeadlessBrowser.d.ts +2 -0
- package/lib/HeadlessBrowser.d.ts.map +1 -1
- package/lib/HeadlessBrowser.js +64 -58
- package/lib/HeadlessBrowser.js.map +1 -1
- package/lib/collectTextsByPage.d.ts.map +1 -1
- package/lib/collectTextsByPage.js +136 -132
- package/lib/collectTextsByPage.js.map +1 -1
- package/lib/concurrencyLimit.d.ts.map +1 -1
- package/lib/concurrencyLimit.js +6 -8
- package/lib/concurrencyLimit.js.map +1 -1
- package/lib/extractVisibleText.d.ts.map +1 -1
- package/lib/extractVisibleText.js +58 -30
- package/lib/extractVisibleText.js.map +1 -1
- package/lib/fontConverter.d.ts.map +1 -1
- package/lib/fontConverter.js +27 -23
- package/lib/fontConverter.js.map +1 -1
- package/lib/getCssRulesByProperty.d.ts.map +1 -1
- package/lib/getCssRulesByProperty.js +234 -207
- package/lib/getCssRulesByProperty.js.map +1 -1
- package/lib/injectSubsetDefinitions.d.ts.map +1 -1
- package/lib/injectSubsetDefinitions.js +24 -21
- package/lib/injectSubsetDefinitions.js.map +1 -1
- package/lib/parseCommandLineOptions.d.ts.map +1 -1
- package/lib/parseCommandLineOptions.js +29 -14
- package/lib/parseCommandLineOptions.js.map +1 -1
- package/lib/subfont.d.ts.map +1 -1
- package/lib/subfont.js +347 -311
- package/lib/subfont.js.map +1 -1
- package/lib/subsetFontWithGlyphs.d.ts.map +1 -1
- package/lib/subsetFontWithGlyphs.js +60 -48
- package/lib/subsetFontWithGlyphs.js.map +1 -1
- package/lib/subsetFonts.d.ts.map +1 -1
- package/lib/subsetFonts.js +338 -280
- package/lib/subsetFonts.js.map +1 -1
- package/lib/subsetGeneration.d.ts.map +1 -1
- package/lib/subsetGeneration.js +151 -127
- package/lib/subsetGeneration.js.map +1 -1
- package/lib/warnAboutMissingGlyphs.d.ts.map +1 -1
- package/lib/warnAboutMissingGlyphs.js +132 -112
- package/lib/warnAboutMissingGlyphs.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
const lines_and_columns_1 = require("lines-and-columns");
|
|
3
3
|
const getFontInfo = require("./getFontInfo");
|
|
4
4
|
const unicodeRange = require("./unicodeRange");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// Promise.all just queues them up rather than running in parallel.
|
|
5
|
+
// Collect all unique subset buffers and parse them concurrently.
|
|
6
|
+
// getFontInfo internally serializes harfbuzzjs WASM calls, so
|
|
7
|
+
// Promise.all just queues them up rather than running in parallel.
|
|
8
|
+
async function buildSubsetCharSetCache(htmlOrSvgAssetTextsWithProps, assetGraph) {
|
|
10
9
|
const uniqueSubsetBuffers = new Map();
|
|
11
10
|
for (const { fontUsages } of htmlOrSvgAssetTextsWithProps) {
|
|
12
11
|
for (const fontUsage of fontUsages) {
|
|
@@ -15,137 +14,158 @@ async function warnAboutMissingGlyphs(htmlOrSvgAssetTextsWithProps, assetGraph)
|
|
|
15
14
|
const subsetBuffer = Object.values(fontUsage.subsets)[0];
|
|
16
15
|
if (!subsetBuffer)
|
|
17
16
|
continue;
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
17
|
+
if (uniqueSubsetBuffers.has(subsetBuffer))
|
|
18
|
+
continue;
|
|
19
|
+
uniqueSubsetBuffers.set(subsetBuffer, getFontInfo(subsetBuffer)
|
|
20
|
+
.then((info) => new Set(info.characterSet))
|
|
21
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
22
|
+
.catch((rawErr) => {
|
|
23
|
+
assetGraph.warn(rawErr instanceof Error ? rawErr : new Error(String(rawErr)));
|
|
24
|
+
return null;
|
|
25
|
+
}));
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
const subsetCharSetCache = new Map();
|
|
30
29
|
await Promise.all([...uniqueSubsetBuffers.entries()].map(async ([buffer, promise]) => {
|
|
31
30
|
subsetCharSetCache.set(buffer, await promise);
|
|
32
31
|
}));
|
|
32
|
+
return subsetCharSetCache;
|
|
33
|
+
}
|
|
34
|
+
// Create a closure that locates the first occurrence of a character in
|
|
35
|
+
// the page text and counts the remaining occurrences. Caches per-char so
|
|
36
|
+
// repeated scans for the same missing glyph (common on KaTeX-heavy pages)
|
|
37
|
+
// don't redo the O(N) walk.
|
|
38
|
+
function makeCharLocator(htmlOrSvgAsset) {
|
|
39
|
+
let linesAndColumns;
|
|
40
|
+
const cache = new Map();
|
|
41
|
+
return (char) => {
|
|
42
|
+
const cached = cache.get(char);
|
|
43
|
+
if (cached)
|
|
44
|
+
return cached;
|
|
45
|
+
let firstLocation;
|
|
46
|
+
let occurrences = 0;
|
|
47
|
+
if (char.length > 0) {
|
|
48
|
+
const sourceText = htmlOrSvgAsset.text;
|
|
49
|
+
let searchIdx = 0;
|
|
50
|
+
while (true) {
|
|
51
|
+
const charIdx = sourceText.indexOf(char, searchIdx);
|
|
52
|
+
if (charIdx === -1)
|
|
53
|
+
break;
|
|
54
|
+
occurrences++;
|
|
55
|
+
if (occurrences === 1) {
|
|
56
|
+
if (!linesAndColumns) {
|
|
57
|
+
linesAndColumns = new lines_and_columns_1.LinesAndColumns(sourceText);
|
|
58
|
+
}
|
|
59
|
+
const position = linesAndColumns.locationForIndex(charIdx);
|
|
60
|
+
firstLocation = `${htmlOrSvgAsset.urlOrDescription}:${position.line + 1}:${position.column + 1}`;
|
|
61
|
+
}
|
|
62
|
+
searchIdx = charIdx + char.length;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (!firstLocation) {
|
|
66
|
+
firstLocation = `${htmlOrSvgAsset.urlOrDescription} (generated content)`;
|
|
67
|
+
}
|
|
68
|
+
const result = { firstLocation, occurrences };
|
|
69
|
+
cache.set(char, result);
|
|
70
|
+
return result;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function recordFontFaceUnicodeRange(accumulatedFontFaceDeclarations, fontUsage, unicodeRangeAccumulator) {
|
|
74
|
+
for (const fontFace of accumulatedFontFaceDeclarations) {
|
|
75
|
+
const family = fontFace['font-family'];
|
|
76
|
+
if (!family || !fontUsage.fontFamilies.has(family))
|
|
77
|
+
continue;
|
|
78
|
+
const relation = fontFace.relations[0];
|
|
79
|
+
const node = relation.node;
|
|
80
|
+
if (node.some((decl) => decl.prop === 'unicode-range'))
|
|
81
|
+
continue;
|
|
82
|
+
let entry = unicodeRangeAccumulator.get(node);
|
|
83
|
+
if (!entry) {
|
|
84
|
+
entry = { relation, codepoints: new Set() };
|
|
85
|
+
unicodeRangeAccumulator.set(node, entry);
|
|
86
|
+
}
|
|
87
|
+
for (const cp of fontUsage.codepoints?.original ?? []) {
|
|
88
|
+
entry.codepoints.add(cp);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function findMissingGlyphsForUsage(htmlOrSvgAsset, fontUsage, characterSetLookup, lookupChar, missingGlyphsErrors) {
|
|
93
|
+
let missedAny = false;
|
|
94
|
+
if (!fontUsage.pageText)
|
|
95
|
+
return false;
|
|
96
|
+
for (const char of fontUsage.pageText) {
|
|
97
|
+
// Turns out that browsers don't mind that these are missing:
|
|
98
|
+
if (char === '\t' || char === '\n')
|
|
99
|
+
continue;
|
|
100
|
+
const codePoint = char.codePointAt(0);
|
|
101
|
+
if (codePoint === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
if (characterSetLookup.has(codePoint))
|
|
104
|
+
continue;
|
|
105
|
+
// Report only the first location plus a count of remaining
|
|
106
|
+
// occurrences. A character like U+200B can appear thousands of
|
|
107
|
+
// times on a page and per-occurrence lines drown the log.
|
|
108
|
+
const { firstLocation, occurrences } = lookupChar(char);
|
|
109
|
+
missingGlyphsErrors.push({
|
|
110
|
+
codePoint,
|
|
111
|
+
char,
|
|
112
|
+
htmlOrSvgAsset,
|
|
113
|
+
fontUsage,
|
|
114
|
+
location: firstLocation,
|
|
115
|
+
occurrences,
|
|
116
|
+
});
|
|
117
|
+
missedAny = true;
|
|
118
|
+
}
|
|
119
|
+
return missedAny;
|
|
120
|
+
}
|
|
121
|
+
function flushUnicodeRanges(unicodeRangeAccumulator) {
|
|
122
|
+
for (const { relation, codepoints } of unicodeRangeAccumulator.values()) {
|
|
123
|
+
relation.node.append({
|
|
124
|
+
prop: 'unicode-range',
|
|
125
|
+
value: unicodeRange([...codepoints]),
|
|
126
|
+
});
|
|
127
|
+
relation.from.markDirty();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function reportMissingGlyphs(missingGlyphsErrors, assetGraph) {
|
|
131
|
+
if (missingGlyphsErrors.length === 0)
|
|
132
|
+
return;
|
|
133
|
+
const errorLog = missingGlyphsErrors.map(({ char, fontUsage, location, occurrences }) => {
|
|
134
|
+
const extra = occurrences > 1 ? ` (+${occurrences - 1} more)` : '';
|
|
135
|
+
return `- \\u{${char.codePointAt(0).toString(16)}} (${char}) in font-family '${fontUsage.props['font-family']}' (${fontUsage.props['font-weight']}/${fontUsage.props['font-style']}) at ${location}${extra}`;
|
|
136
|
+
});
|
|
137
|
+
const message = `Missing glyph fallback detected.
|
|
138
|
+
When your primary webfont doesn't contain the glyphs you use, browsers that don't support unicode-range will load your fallback fonts, which will be a potential waste of bandwidth.
|
|
139
|
+
These glyphs are used on your site, but they don't exist in the font you applied to them:`;
|
|
140
|
+
assetGraph.info(new Error(`${message}\n${errorLog.join('\n')}`));
|
|
141
|
+
}
|
|
142
|
+
async function warnAboutMissingGlyphs(htmlOrSvgAssetTextsWithProps, assetGraph) {
|
|
143
|
+
const missingGlyphsErrors = [];
|
|
144
|
+
const subsetCharSetCache = await buildSubsetCharSetCache(htmlOrSvgAssetTextsWithProps, assetGraph);
|
|
33
145
|
// Codepoint unions per @font-face declaration, keyed by the at-rule node.
|
|
34
146
|
// Built across all fontUsages on a page, then flushed in a single append
|
|
35
147
|
// per @font-face so multiple fontUsages sharing a family don't lose data.
|
|
36
148
|
const unicodeRangeAccumulator = new Map();
|
|
37
149
|
for (const { htmlOrSvgAsset, fontUsages, accumulatedFontFaceDeclarations, } of htmlOrSvgAssetTextsWithProps) {
|
|
38
|
-
|
|
39
|
-
// Dedupe scans for the same missing char across different fontUsages on
|
|
40
|
-
// this page. On KaTeX-heavy pages the same symbol is often missing in
|
|
41
|
-
// several font-families, and each scan is an O(N) walk of the HTML text.
|
|
42
|
-
const charLookupCache = new Map();
|
|
43
|
-
const lookupChar = (char) => {
|
|
44
|
-
const cachedHit = charLookupCache.get(char);
|
|
45
|
-
if (cachedHit)
|
|
46
|
-
return cachedHit;
|
|
47
|
-
let firstLocation;
|
|
48
|
-
let occurrences = 0;
|
|
49
|
-
if (char.length > 0) {
|
|
50
|
-
const sourceText = htmlOrSvgAsset.text;
|
|
51
|
-
let searchIdx = 0;
|
|
52
|
-
while (true) {
|
|
53
|
-
const charIdx = sourceText.indexOf(char, searchIdx);
|
|
54
|
-
if (charIdx === -1)
|
|
55
|
-
break;
|
|
56
|
-
occurrences++;
|
|
57
|
-
if (occurrences === 1) {
|
|
58
|
-
if (!linesAndColumns) {
|
|
59
|
-
linesAndColumns = new lines_and_columns_1.LinesAndColumns(sourceText);
|
|
60
|
-
}
|
|
61
|
-
const position = linesAndColumns.locationForIndex(charIdx);
|
|
62
|
-
firstLocation = `${htmlOrSvgAsset.urlOrDescription}:${position.line + 1}:${position.column + 1}`;
|
|
63
|
-
}
|
|
64
|
-
searchIdx = charIdx + char.length;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (!firstLocation) {
|
|
68
|
-
firstLocation = `${htmlOrSvgAsset.urlOrDescription} (generated content)`;
|
|
69
|
-
}
|
|
70
|
-
const result = { firstLocation, occurrences };
|
|
71
|
-
charLookupCache.set(char, result);
|
|
72
|
-
return result;
|
|
73
|
-
};
|
|
150
|
+
const lookupChar = makeCharLocator(htmlOrSvgAsset);
|
|
74
151
|
for (const fontUsage of fontUsages) {
|
|
75
152
|
if (!fontUsage.subsets)
|
|
76
153
|
continue;
|
|
77
154
|
const subsetBuffer = Object.values(fontUsage.subsets)[0];
|
|
78
155
|
const characterSetLookup = subsetCharSetCache.get(subsetBuffer);
|
|
156
|
+
// getFontInfo failed on subset; already warned
|
|
79
157
|
if (!characterSetLookup)
|
|
80
|
-
continue; // getFontInfo failed on subset; already warned
|
|
81
|
-
let missedAny = false;
|
|
82
|
-
if (!fontUsage.pageText)
|
|
83
158
|
continue;
|
|
84
|
-
|
|
85
|
-
// Turns out that browsers don't mind that these are missing:
|
|
86
|
-
if (char === '\t' || char === '\n') {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
const codePoint = char.codePointAt(0);
|
|
90
|
-
if (codePoint === undefined)
|
|
91
|
-
continue;
|
|
92
|
-
const isMissing = !characterSetLookup.has(codePoint);
|
|
93
|
-
if (isMissing) {
|
|
94
|
-
// Report only the first location plus a count of remaining
|
|
95
|
-
// occurrences. A character like U+200B can appear thousands of
|
|
96
|
-
// times on a page and per-occurrence lines drown the log.
|
|
97
|
-
const { firstLocation, occurrences } = lookupChar(char);
|
|
98
|
-
missingGlyphsErrors.push({
|
|
99
|
-
codePoint,
|
|
100
|
-
char,
|
|
101
|
-
htmlOrSvgAsset,
|
|
102
|
-
fontUsage,
|
|
103
|
-
location: firstLocation,
|
|
104
|
-
occurrences,
|
|
105
|
-
});
|
|
106
|
-
missedAny = true;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
159
|
+
const missedAny = findMissingGlyphsForUsage(htmlOrSvgAsset, fontUsage, characterSetLookup, lookupChar, missingGlyphsErrors);
|
|
109
160
|
if (missedAny) {
|
|
110
|
-
|
|
111
|
-
const family = fontFace['font-family'];
|
|
112
|
-
if (!family || !fontUsage.fontFamilies.has(family))
|
|
113
|
-
continue;
|
|
114
|
-
const relation = fontFace.relations[0];
|
|
115
|
-
const node = relation.node;
|
|
116
|
-
if (node.some((decl) => decl.prop === 'unicode-range'))
|
|
117
|
-
continue;
|
|
118
|
-
let entry = unicodeRangeAccumulator.get(node);
|
|
119
|
-
if (!entry) {
|
|
120
|
-
entry = { relation, codepoints: new Set() };
|
|
121
|
-
unicodeRangeAccumulator.set(node, entry);
|
|
122
|
-
}
|
|
123
|
-
for (const cp of fontUsage.codepoints?.original ?? []) {
|
|
124
|
-
entry.codepoints.add(cp);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
161
|
+
recordFontFaceUnicodeRange(accumulatedFontFaceDeclarations, fontUsage, unicodeRangeAccumulator);
|
|
127
162
|
}
|
|
128
163
|
}
|
|
129
164
|
}
|
|
130
165
|
// Flush accumulated unicode-range declarations: one append per @font-face,
|
|
131
166
|
// covering every fontUsage that mapped to it.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
prop: 'unicode-range',
|
|
135
|
-
value: unicodeRange([...codepoints]),
|
|
136
|
-
});
|
|
137
|
-
relation.from.markDirty();
|
|
138
|
-
}
|
|
139
|
-
if (missingGlyphsErrors.length) {
|
|
140
|
-
const errorLog = missingGlyphsErrors.map(({ char, fontUsage, location, occurrences }) => {
|
|
141
|
-
const extra = occurrences > 1 ? ` (+${occurrences - 1} more)` : '';
|
|
142
|
-
return `- \\u{${char.codePointAt(0).toString(16)}} (${char}) in font-family '${fontUsage.props['font-family']}' (${fontUsage.props['font-weight']}/${fontUsage.props['font-style']}) at ${location}${extra}`;
|
|
143
|
-
});
|
|
144
|
-
const message = `Missing glyph fallback detected.
|
|
145
|
-
When your primary webfont doesn't contain the glyphs you use, browsers that don't support unicode-range will load your fallback fonts, which will be a potential waste of bandwidth.
|
|
146
|
-
These glyphs are used on your site, but they don't exist in the font you applied to them:`;
|
|
147
|
-
assetGraph.info(new Error(`${message}\n${errorLog.join('\n')}`));
|
|
148
|
-
}
|
|
167
|
+
flushUnicodeRanges(unicodeRangeAccumulator);
|
|
168
|
+
reportMissingGlyphs(missingGlyphsErrors, assetGraph);
|
|
149
169
|
}
|
|
150
170
|
module.exports = warnAboutMissingGlyphs;
|
|
151
171
|
//# sourceMappingURL=warnAboutMissingGlyphs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warnAboutMissingGlyphs.js","sourceRoot":"","sources":["../src/warnAboutMissingGlyphs.ts"],"names":[],"mappings":";AAAA,yDAAoD;AACpD,6CAA8C;AAC9C,+CAAgD;
|
|
1
|
+
{"version":3,"file":"warnAboutMissingGlyphs.js","sourceRoot":"","sources":["../src/warnAboutMissingGlyphs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED