clearcote 0.40.0 → 0.41.0
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/README.md +9 -0
- package/dist/cli-commands.d.ts +2 -4
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +45 -30
- package/dist/cli-commands.js.map +1 -1
- package/dist/cloud.d.ts.map +1 -1
- package/dist/cloud.js +5 -2
- package/dist/cloud.js.map +1 -1
- package/dist/colorscheme.d.ts +27 -0
- package/dist/colorscheme.d.ts.map +1 -0
- package/dist/colorscheme.js +20 -0
- package/dist/colorscheme.js.map +1 -0
- package/dist/docker.d.ts +24 -2
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +168 -49
- package/dist/docker.js.map +1 -1
- package/dist/download.d.ts +37 -1
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +609 -29
- package/dist/download.js.map +1 -1
- package/dist/fonts.d.ts +84 -3
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +486 -12
- package/dist/fonts.js.map +1 -1
- package/dist/geometry.d.ts +3 -1
- package/dist/geometry.d.ts.map +1 -1
- package/dist/geometry.js +6 -2
- package/dist/geometry.js.map +1 -1
- package/dist/index.d.ts +40 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -76
- package/dist/index.js.map +1 -1
- package/dist/launchopts.d.ts +21 -0
- package/dist/launchopts.d.ts.map +1 -1
- package/dist/launchopts.js +46 -0
- package/dist/launchopts.js.map +1 -1
- package/dist/personaenv.d.ts +33 -0
- package/dist/personaenv.d.ts.map +1 -0
- package/dist/personaenv.js +117 -0
- package/dist/personaenv.js.map +1 -0
- package/dist/warnings.d.ts +9 -1
- package/dist/warnings.d.ts.map +1 -1
- package/dist/warnings.js +32 -4
- package/dist/warnings.js.map +1 -1
- package/dist/widevine.d.ts +10 -0
- package/dist/widevine.d.ts.map +1 -1
- package/dist/widevine.js +18 -0
- package/dist/widevine.js.map +1 -1
- package/dist/winlaunch.d.ts +55 -0
- package/dist/winlaunch.d.ts.map +1 -0
- package/dist/winlaunch.js +334 -0
- package/dist/winlaunch.js.map +1 -0
- package/docker-seccomp.json +909 -0
- package/package.json +2 -1
package/dist/fonts.js
CHANGED
|
@@ -9,13 +9,420 @@
|
|
|
9
9
|
// At launch we materialize the template (substituting the real fonts dir + a writable
|
|
10
10
|
// cache dir) and point FONTCONFIG_FILE at it, so the clones resolve without depending on
|
|
11
11
|
// the host's /etc/fonts. No-op on non-Linux and on older binaries that ship no `fonts/`.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
//
|
|
13
|
+
// Because the template is self-contained, fonts installed on the host are invisible to the
|
|
14
|
+
// browser. Two settings add directories to it (the same as the Python SDK's _fonts.py):
|
|
15
|
+
//
|
|
16
|
+
// * `fontDirs` / CLEARCOTE_FONT_DIRS — your own fonts, typically a copy of a Windows machine's
|
|
17
|
+
// Fonts folder. Listed ahead of the bundle. On an engine that lets a genuine face win over its
|
|
18
|
+
// substitute (it carries GENUINE_FACES_SWITCH; PRO r32+), every family they provide is also used as
|
|
19
|
+
// itself: its lookalike rule (Arial->Arimo, Segoe UI->Selawik, …) is dropped, and the names and CSS
|
|
20
|
+
// generics that resolve to it on Windows (Helvetica->Arial, sans-serif->Arial, system-ui->Segoe UI,
|
|
21
|
+
// …) point at it. An older engine still draws every family a persona lists through its own
|
|
22
|
+
// substitute, so the rules stay there: changing them would split Helvetica from Arial. The
|
|
23
|
+
// directories still serve the characters the bundle cannot draw.
|
|
24
|
+
// * CLEARCOTE_FALLBACK_FONT_DIRS — fonts used only for characters nothing else covers (CJK, Indic,
|
|
25
|
+
// emoji, …). Listed after the bundle and change no rules. The Docker image sets it to the script
|
|
26
|
+
// fonts it installs.
|
|
27
|
+
//
|
|
28
|
+
// Both are lists separated by the path delimiter. Never point either at all of /usr/share/fonts:
|
|
29
|
+
// the host's Latin families then compete with the clones and change the Windows widths.
|
|
30
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, statSync, writeFileSync } from "node:fs";
|
|
31
|
+
import { createHash } from "node:crypto";
|
|
32
|
+
import { delimiter, dirname, join, resolve } from "node:path";
|
|
33
|
+
import { homedir, tmpdir } from "node:os";
|
|
34
|
+
import { engineSupportsSwitch } from "./launchopts.js";
|
|
35
|
+
export const FONT_DIRS_ENV = "CLEARCOTE_FONT_DIRS";
|
|
36
|
+
export const FALLBACK_FONT_DIRS_ENV = "CLEARCOTE_FALLBACK_FONT_DIRS";
|
|
37
|
+
const FONT_EXTS = [".ttf", ".otf", ".ttc", ".otc"];
|
|
38
|
+
/** Carried by an engine that lets a genuine Windows face installed here win over its substitute (PRO
|
|
39
|
+
* r32+). The SDK never passes it: its presence in the binary is the marker. Measured on an engine without
|
|
40
|
+
* it: with a genuine Arial in CLEARCOTE_FONT_DIRS and the rules changed, "Helvetica" reached the genuine
|
|
41
|
+
* file while "Arial" stayed on the engine's Arimo -- two widths no Windows machine has. */
|
|
42
|
+
export const GENUINE_FACES_SWITCH = "disable-genuine-font-faces";
|
|
43
|
+
/** Whether the engine at `exePath` lets a genuine face from your own fonts win (see GENUINE_FACES_SWITCH). */
|
|
44
|
+
export function engineHonoursGenuineFaces(exePath) {
|
|
45
|
+
return engineSupportsSwitch(exePath, GENUINE_FACES_SWITCH);
|
|
46
|
+
}
|
|
47
|
+
/** The Windows family each non-Windows name in the template stands for (the Windows registry's
|
|
48
|
+
* FontSubstitutes): when the genuine family is present, the rule points at it instead of a clone. */
|
|
49
|
+
const WINDOWS_ALIASES = { helvetica: "Arial", times: "Times New Roman", courier: "Courier New" };
|
|
50
|
+
/** What each CSS generic resolves to in Chrome on Windows (measured: see fonts.conf.template). */
|
|
51
|
+
const GENERIC_WINDOWS = {
|
|
52
|
+
"sans-serif": "Arial", serif: "Times New Roman", monospace: "Consolas", "system-ui": "Segoe UI",
|
|
53
|
+
};
|
|
54
|
+
/** The Windows families the bundle stands in for with a lookalike; `clearcote info` reports which of
|
|
55
|
+
* them your own fonts provide for real. */
|
|
56
|
+
export const KEY_WINDOWS_FAMILIES = ["Arial", "Segoe UI", "Calibri", "Cambria", "Consolas", "Courier New", "Georgia",
|
|
57
|
+
"Times New Roman", "Verdana", "Tahoma", "Trebuchet MS", "Comic Sans MS", "Impact"];
|
|
58
|
+
/** One character per script that Windows 10/11 renders out of the box. A script with no font for its
|
|
59
|
+
* character draws empty boxes, which a page tells apart from real glyphs with one fillText. */
|
|
60
|
+
export const SCRIPT_SAMPLES = [
|
|
61
|
+
["Latin", 0x0041], ["Greek", 0x03a9], ["Cyrillic", 0x0416], ["Hebrew", 0x05d0], ["Arabic", 0x0628],
|
|
62
|
+
["Armenian", 0x0531], ["Georgian", 0x10d0], ["Devanagari", 0x0915], ["Bengali", 0x0995],
|
|
63
|
+
["Gurmukhi", 0x0a15], ["Gujarati", 0x0a95], ["Oriya", 0x0b15], ["Tamil", 0x0b95], ["Telugu", 0x0c15],
|
|
64
|
+
["Kannada", 0x0c95], ["Malayalam", 0x0d15], ["Sinhala", 0x0d9a], ["Thai", 0x0e01], ["Lao", 0x0e81],
|
|
65
|
+
["Tibetan", 0x0f40], ["Myanmar", 0x1000], ["Ethiopic", 0x1200], ["Cherokee", 0x13a0],
|
|
66
|
+
["Khmer", 0x1780], ["Mongolian", 0x1820], ["Hangul", 0xac00], ["Kana", 0x3042],
|
|
67
|
+
["CJK ideographs", 0x4e2d], ["Emoji", 0x1f600],
|
|
68
|
+
];
|
|
69
|
+
/** Emoji count only from a colour font: a monochrome glyph (DejaVu has one) is not what Windows draws. */
|
|
70
|
+
const COLOR_TABLES = ["COLR", "CBDT", "sbix", "SVG "];
|
|
71
|
+
// --- reading font files (just the name and cmap tables; no fontconfig needed) --------------------
|
|
72
|
+
function readAt(fd, offset, length) {
|
|
73
|
+
const buf = Buffer.alloc(Math.max(0, length));
|
|
74
|
+
const n = length > 0 ? readSync(fd, buf, 0, length, offset) : 0;
|
|
75
|
+
return buf.subarray(0, n);
|
|
76
|
+
}
|
|
77
|
+
/** Offsets of the sfnt faces in a font file: one for .ttf/.otf, several for a collection. */
|
|
78
|
+
function faces(fd) {
|
|
79
|
+
const head = readAt(fd, 0, 12);
|
|
80
|
+
if (head.length < 12)
|
|
81
|
+
return [];
|
|
82
|
+
if (head.toString("latin1", 0, 4) === "ttcf") {
|
|
83
|
+
const count = Math.min(head.readUInt32BE(8), 1024);
|
|
84
|
+
const data = readAt(fd, 12, 4 * count);
|
|
85
|
+
const out = [];
|
|
86
|
+
for (let i = 0; i + 4 <= data.length; i += 4)
|
|
87
|
+
out.push(data.readUInt32BE(i));
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
return [0];
|
|
91
|
+
}
|
|
92
|
+
function tables(fd, offset) {
|
|
93
|
+
const head = readAt(fd, offset, 12);
|
|
94
|
+
const out = new Map();
|
|
95
|
+
if (head.length < 12)
|
|
96
|
+
return out;
|
|
97
|
+
const num = head.readUInt16BE(4);
|
|
98
|
+
const data = readAt(fd, offset + 12, 16 * num);
|
|
99
|
+
for (let i = 0; i + 16 <= data.length; i += 16) {
|
|
100
|
+
out.set(data.toString("latin1", i, i + 4), [data.readUInt32BE(i + 8), data.readUInt32BE(i + 12)]);
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
function macRoman(raw) {
|
|
105
|
+
try {
|
|
106
|
+
return new TextDecoder("macintosh").decode(raw);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return raw.toString("latin1"); // a Node without the legacy encodings: right for ASCII names
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Family names (name IDs 1 and 16, every language) of one face, lower-cased. */
|
|
113
|
+
function families(fd, [off, length]) {
|
|
114
|
+
const data = readAt(fd, off, length);
|
|
115
|
+
const names = new Set();
|
|
116
|
+
if (data.length < 6)
|
|
117
|
+
return names;
|
|
118
|
+
const count = data.readUInt16BE(2);
|
|
119
|
+
const strings = data.readUInt16BE(4);
|
|
120
|
+
for (let i = 0; i < count; i++) {
|
|
121
|
+
const at = 6 + 12 * i;
|
|
122
|
+
if (at + 12 > data.length)
|
|
123
|
+
break;
|
|
124
|
+
const platform = data.readUInt16BE(at), encoding = data.readUInt16BE(at + 2), nameId = data.readUInt16BE(at + 6);
|
|
125
|
+
const n = data.readUInt16BE(at + 8), o = data.readUInt16BE(at + 10);
|
|
126
|
+
if (nameId !== 1 && nameId !== 16)
|
|
127
|
+
continue;
|
|
128
|
+
const raw = data.subarray(strings + o, strings + o + n);
|
|
129
|
+
let text;
|
|
130
|
+
if (platform === 0 || platform === 3) {
|
|
131
|
+
if (raw.length % 2)
|
|
132
|
+
continue;
|
|
133
|
+
text = Buffer.from(raw).swap16().toString("utf16le");
|
|
134
|
+
}
|
|
135
|
+
else if (platform === 1 && encoding === 0) {
|
|
136
|
+
text = macRoman(raw);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (text.trim())
|
|
142
|
+
names.add(text.trim().toLowerCase());
|
|
143
|
+
}
|
|
144
|
+
return names;
|
|
145
|
+
}
|
|
146
|
+
/** Which of `codepoints` the face maps to a real glyph (format 4 and 12 subtables). */
|
|
147
|
+
function cmapCovers(fd, [off, length], codepoints) {
|
|
148
|
+
const data = readAt(fd, off, length);
|
|
149
|
+
if (data.length < 4)
|
|
150
|
+
return new Set();
|
|
151
|
+
const count = data.readUInt16BE(2);
|
|
152
|
+
const subtables = new Map();
|
|
153
|
+
for (let i = 0; i < count; i++) {
|
|
154
|
+
const at = 4 + 8 * i;
|
|
155
|
+
if (at + 8 > data.length)
|
|
156
|
+
break;
|
|
157
|
+
const sub = data.readUInt32BE(at + 4);
|
|
158
|
+
if (sub + 2 <= data.length) {
|
|
159
|
+
const key = `${data.readUInt16BE(at)},${data.readUInt16BE(at + 2)},${data.readUInt16BE(sub)}`;
|
|
160
|
+
if (!subtables.has(key))
|
|
161
|
+
subtables.set(key, sub);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
for (const key of ["3,10,12", "0,6,12", "0,4,12", "3,1,4", "0,3,4", "0,2,4", "0,1,4", "0,0,4"]) {
|
|
165
|
+
const sub = subtables.get(key);
|
|
166
|
+
if (sub !== undefined)
|
|
167
|
+
return key.endsWith(",12") ? fmt12(data, sub, codepoints) : fmt4(data, sub, codepoints);
|
|
168
|
+
}
|
|
169
|
+
return new Set();
|
|
170
|
+
}
|
|
171
|
+
function fmt12(data, sub, codepoints) {
|
|
172
|
+
const out = new Set();
|
|
173
|
+
if (sub + 16 > data.length)
|
|
174
|
+
return out;
|
|
175
|
+
const groups = Math.min(data.readUInt32BE(sub + 12), Math.floor((data.length - sub - 16) / 12));
|
|
176
|
+
for (let i = 0; i < groups; i++) {
|
|
177
|
+
const at = sub + 16 + 12 * i;
|
|
178
|
+
const start = data.readUInt32BE(at), end = data.readUInt32BE(at + 4), glyph = data.readUInt32BE(at + 8);
|
|
179
|
+
for (const c of codepoints)
|
|
180
|
+
if (c >= start && c <= end && glyph + (c - start) !== 0)
|
|
181
|
+
out.add(c);
|
|
182
|
+
}
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
function fmt4(data, sub, codepoints) {
|
|
186
|
+
const out = new Set();
|
|
187
|
+
if (sub + 14 > data.length)
|
|
188
|
+
return out;
|
|
189
|
+
const seg2 = data.readUInt16BE(sub + 6);
|
|
190
|
+
const endsAt = sub + 14, startsAt = endsAt + seg2 + 2, deltasAt = startsAt + seg2, rangesAt = deltasAt + seg2;
|
|
191
|
+
if (rangesAt + seg2 > data.length)
|
|
192
|
+
return out;
|
|
193
|
+
for (const c of codepoints) {
|
|
194
|
+
if (c > 0xffff)
|
|
195
|
+
continue;
|
|
196
|
+
for (let i = 0; i < seg2 / 2; i++) {
|
|
197
|
+
if (c > data.readUInt16BE(endsAt + 2 * i))
|
|
198
|
+
continue;
|
|
199
|
+
const start = data.readUInt16BE(startsAt + 2 * i);
|
|
200
|
+
if (c < start)
|
|
201
|
+
break;
|
|
202
|
+
const delta = data.readInt16BE(deltasAt + 2 * i);
|
|
203
|
+
const rangeOff = data.readUInt16BE(rangesAt + 2 * i);
|
|
204
|
+
let glyph;
|
|
205
|
+
if (rangeOff === 0) {
|
|
206
|
+
glyph = (c + delta) & 0xffff;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
const at = rangesAt + 2 * i + rangeOff + 2 * (c - start);
|
|
210
|
+
if (at + 2 > data.length)
|
|
211
|
+
break;
|
|
212
|
+
glyph = data.readUInt16BE(at);
|
|
213
|
+
if (glyph)
|
|
214
|
+
glyph = (glyph + delta) & 0xffff;
|
|
215
|
+
}
|
|
216
|
+
if (glyph)
|
|
217
|
+
out.add(c);
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
/** A font file's family names (lower-cased, every face of a collection), which of `codepoints` it
|
|
224
|
+
* covers, and whether a face with a colour table covers any of them. Empty for a file that is not a
|
|
225
|
+
* readable font. */
|
|
226
|
+
export function readFont(path, codepoints = []) {
|
|
227
|
+
const info = { families: new Set(), covered: new Set(), color: false };
|
|
228
|
+
let fd;
|
|
229
|
+
try {
|
|
230
|
+
fd = openSync(path, "r");
|
|
231
|
+
for (const face of faces(fd)) {
|
|
232
|
+
const t = tables(fd, face);
|
|
233
|
+
const name = t.get("name");
|
|
234
|
+
if (name)
|
|
235
|
+
for (const f of families(fd, name))
|
|
236
|
+
info.families.add(f);
|
|
237
|
+
const cmap = t.get("cmap");
|
|
238
|
+
if (codepoints.length && cmap) {
|
|
239
|
+
const got = cmapCovers(fd, cmap, codepoints);
|
|
240
|
+
for (const c of got)
|
|
241
|
+
info.covered.add(c);
|
|
242
|
+
if (got.size && COLOR_TABLES.some((tag) => t.has(tag)))
|
|
243
|
+
info.color = true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return { families: new Set(), covered: new Set(), color: false };
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
if (fd !== undefined)
|
|
252
|
+
closeSync(fd);
|
|
253
|
+
}
|
|
254
|
+
return info;
|
|
255
|
+
}
|
|
256
|
+
/** Every font file under `dirs` (recursively, as fontconfig reads a `<dir>`), sorted. */
|
|
257
|
+
export function fontFiles(dirs) {
|
|
258
|
+
const found = [];
|
|
259
|
+
const walk = (d) => {
|
|
260
|
+
let entries;
|
|
261
|
+
try {
|
|
262
|
+
entries = readdirSync(d, { withFileTypes: true });
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
for (const e of entries) {
|
|
268
|
+
const p = join(d, e.name);
|
|
269
|
+
if (e.isDirectory())
|
|
270
|
+
walk(p);
|
|
271
|
+
else if (FONT_EXTS.some((x) => e.name.toLowerCase().endsWith(x)))
|
|
272
|
+
found.push(p);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
for (const d of dirs)
|
|
276
|
+
walk(d);
|
|
277
|
+
return found.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
278
|
+
}
|
|
279
|
+
const familyCache = new Map();
|
|
280
|
+
/** Lower-cased family names of every font under `dirs` (cached per file size and mtime). */
|
|
281
|
+
export function dirFamilies(dirs) {
|
|
282
|
+
const fams = new Set();
|
|
283
|
+
for (const path of fontFiles(dirs)) {
|
|
284
|
+
let key;
|
|
285
|
+
try {
|
|
286
|
+
const st = statSync(path);
|
|
287
|
+
key = `${path}\0${st.size}\0${st.mtimeMs}`;
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
if (!familyCache.has(key))
|
|
293
|
+
familyCache.set(key, readFont(path).families);
|
|
294
|
+
for (const f of familyCache.get(key))
|
|
295
|
+
fams.add(f);
|
|
296
|
+
}
|
|
297
|
+
return fams;
|
|
298
|
+
}
|
|
299
|
+
// --- which directories -----------------------------------------------------------------------------
|
|
300
|
+
function expand(p) {
|
|
301
|
+
return resolve(p === "~" || p.startsWith("~/") ? join(homedir(), p.slice(1)) : p);
|
|
302
|
+
}
|
|
303
|
+
function split(value) {
|
|
304
|
+
if (!value)
|
|
305
|
+
return [];
|
|
306
|
+
return value.split(delimiter).map((p) => p.trim()).filter(Boolean).map(expand);
|
|
307
|
+
}
|
|
308
|
+
function isDir(p) {
|
|
309
|
+
try {
|
|
310
|
+
return statSync(p).isDirectory();
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/** The `fontDirs` launch option as a list of absolute paths. Throws TypeError for a wrong type, and on
|
|
317
|
+
* Linux for a path that is not a directory: a typo must not silently fall back to the lookalikes.
|
|
318
|
+
* (Elsewhere the option does nothing: Windows and macOS have their own fonts.) */
|
|
319
|
+
export function checkFontDirs(fontDirs, platform = process.platform) {
|
|
320
|
+
if (fontDirs === undefined || fontDirs === null)
|
|
321
|
+
return [];
|
|
322
|
+
const list = typeof fontDirs === "string" ? [fontDirs] : fontDirs;
|
|
323
|
+
if (!Array.isArray(list) || !list.every((d) => typeof d === "string")) {
|
|
324
|
+
throw new TypeError("fontDirs must be a directory path or an array of them");
|
|
325
|
+
}
|
|
326
|
+
const dirs = list.map(expand);
|
|
327
|
+
if (platform === "linux") {
|
|
328
|
+
for (const d of dirs)
|
|
329
|
+
if (!isDir(d))
|
|
330
|
+
throw new TypeError(`fontDirs: ${d} is not a directory`);
|
|
331
|
+
}
|
|
332
|
+
return dirs;
|
|
333
|
+
}
|
|
334
|
+
/** The option's directories then CLEARCOTE_FONT_DIRS (`user`), and CLEARCOTE_FALLBACK_FONT_DIRS
|
|
335
|
+
* (`fallback`), each without duplicates; `ignored` lists entries from the environment that are not
|
|
336
|
+
* directories (the option throws for those instead). */
|
|
337
|
+
export function resolveFontDirs(fontDirs, env = process.env) {
|
|
338
|
+
const user = [], fallback = [], ignored = [];
|
|
339
|
+
for (const d of checkFontDirs(fontDirs))
|
|
340
|
+
if (!user.includes(d))
|
|
341
|
+
user.push(d);
|
|
342
|
+
for (const d of split(env[FONT_DIRS_ENV])) {
|
|
343
|
+
if (!isDir(d))
|
|
344
|
+
ignored.push(d);
|
|
345
|
+
else if (!user.includes(d))
|
|
346
|
+
user.push(d);
|
|
347
|
+
}
|
|
348
|
+
for (const d of split(env[FALLBACK_FONT_DIRS_ENV])) {
|
|
349
|
+
if (!isDir(d))
|
|
350
|
+
ignored.push(d);
|
|
351
|
+
else if (!user.includes(d) && !fallback.includes(d))
|
|
352
|
+
fallback.push(d);
|
|
353
|
+
}
|
|
354
|
+
return { user, fallback, ignored };
|
|
355
|
+
}
|
|
356
|
+
// --- the generated fontconfig file -----------------------------------------------------------------
|
|
357
|
+
const xml = (s) => s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
358
|
+
const unxml = (s) => s.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"").replace(/&/g, "&").trim();
|
|
359
|
+
const RULE = /[ \t]*<match\b[^>]*>\s*<test\b[^>]*name="family"[^>]*>\s*<string>([^<]*)<\/string>\s*<\/test>\s*<edit\b[^>]*name="family"[^>]*>\s*<string>([^<]*)<\/string>(\s*<\/edit>\s*<\/match>)[ \t]*\n?/g;
|
|
360
|
+
const ALIAS = /(<alias\b[^>]*>\s*<family>([^<]*)<\/family>\s*<prefer>\s*<family>)([^<]*)(<\/family>)/g;
|
|
361
|
+
const BUNDLE_DIR = /<dir>\s*@FONTS_DIR@\s*<\/dir>/;
|
|
362
|
+
/** `template` with the lookalike rules and generics adjusted to the `genuine` families (lower-cased
|
|
363
|
+
* names your own fonts provide). A family that is genuinely present loses its rule; a non-Windows name
|
|
364
|
+
* whose Windows family is present (Helvetica -> Arial) and a generic that resolves to it on Windows
|
|
365
|
+
* (sans-serif -> Arial) point at the genuine family. */
|
|
366
|
+
export function genuineRules(template, genuine) {
|
|
367
|
+
if (!genuine.size)
|
|
368
|
+
return template;
|
|
369
|
+
return template
|
|
370
|
+
.replace(RULE, (whole, fam, clone, tail) => {
|
|
371
|
+
const family = unxml(fam);
|
|
372
|
+
if (genuine.has(family.toLowerCase()))
|
|
373
|
+
return "";
|
|
374
|
+
const target = WINDOWS_ALIASES[family.toLowerCase()];
|
|
375
|
+
if (target && genuine.has(target.toLowerCase()) && unxml(clone) !== target) {
|
|
376
|
+
return whole.replace(`<string>${clone}</string>${tail}`, `<string>${xml(target)}</string>${tail}`);
|
|
377
|
+
}
|
|
378
|
+
return whole;
|
|
379
|
+
})
|
|
380
|
+
.replace(ALIAS, (whole, head, generic, _prefer, close) => {
|
|
381
|
+
const target = GENERIC_WINDOWS[unxml(generic).toLowerCase()];
|
|
382
|
+
return target && genuine.has(target.toLowerCase()) ? head + xml(target) + close : whole;
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
/** The fontconfig file for one launch: the template with its directories filled in, your own
|
|
386
|
+
* directories ahead of the bundle, the fallback ones after it, and the rules adjusted to the families
|
|
387
|
+
* your own fonts genuinely provide. */
|
|
388
|
+
export function buildConf(template, fontsDir, cacheDir, userDirs = [], fallbackDirs = [], genuine = new Set()) {
|
|
389
|
+
let conf = genuineRules(template, genuine);
|
|
390
|
+
if (userDirs.length || fallbackDirs.length) {
|
|
391
|
+
const mine = userDirs.map((d) => `<dir>${xml(d)}</dir>`);
|
|
392
|
+
const after = fallbackDirs.map((d) => `<dir>${xml(d)}</dir>`);
|
|
393
|
+
if (BUNDLE_DIR.test(conf)) {
|
|
394
|
+
conf = conf.replace(BUNDLE_DIR, () => [...mine, "<dir>@FONTS_DIR@</dir>", ...after].join("\n "));
|
|
395
|
+
}
|
|
396
|
+
else { // a template without the usual line: still list everything, the bundle's place unknown
|
|
397
|
+
conf = conf.replace("</fontconfig>", ` ${[...mine, ...after].join("\n ")}\n</fontconfig>`);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return conf.split("@FONTS_DIR@").join(fontsDir).split("@CACHE_DIR@").join(cacheDir);
|
|
401
|
+
}
|
|
402
|
+
function writeAtomic(path, text) {
|
|
403
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
404
|
+
writeFileSync(tmp, text);
|
|
405
|
+
renameSync(tmp, path);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Returns `{ FONTCONFIG_FILE }` on Linux when the font bundle is present, else `{}`.
|
|
409
|
+
*
|
|
410
|
+
* `fontDirs` (and CLEARCOTE_FONT_DIRS / CLEARCOTE_FALLBACK_FONT_DIRS) add directories: see the top of
|
|
411
|
+
* this file. Without any, the file is `fonts.generated.conf` exactly as before; with some, each
|
|
412
|
+
* distinct result gets its own `fonts.generated-<hash>.conf`, so launches with different directories
|
|
413
|
+
* never rewrite each other's file. `args` is the engine's command line (see genuineFacesDisabled).
|
|
414
|
+
*/
|
|
415
|
+
/** Whether the launch turns genuine faces off itself (`--disable-genuine-font-faces` in `args`). The engine
|
|
416
|
+
* then keeps every substitute, so the rules must stay as the template has them: measured on an engine with
|
|
417
|
+
* the switch, retargeting anyway sent Helvetica to the genuine file while Arial stayed on its substitute. */
|
|
418
|
+
export function genuineFacesDisabled(args) {
|
|
419
|
+
const flag = `--${GENUINE_FACES_SWITCH}`;
|
|
420
|
+
return (args ?? []).some((a) => typeof a === "string" && (a === flag || a.startsWith(`${flag}=`)));
|
|
421
|
+
}
|
|
422
|
+
export function linuxFontEnv(exePath, fontDirs, args) {
|
|
17
423
|
if (process.platform !== "linux")
|
|
18
424
|
return {};
|
|
425
|
+
const { user, fallback } = resolveFontDirs(fontDirs);
|
|
19
426
|
const fontsDir = join(dirname(exePath), "fonts");
|
|
20
427
|
const template = join(fontsDir, "fonts.conf.template");
|
|
21
428
|
if (!existsSync(template))
|
|
@@ -23,17 +430,84 @@ export function linuxFontEnv(exePath) {
|
|
|
23
430
|
try {
|
|
24
431
|
const cacheDir = join(tmpdir(), "cc-fc-cache");
|
|
25
432
|
mkdirSync(cacheDir, { recursive: true });
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
433
|
+
// The rules follow your fonts only on an engine that draws them (GENUINE_FACES_SWITCH).
|
|
434
|
+
const genuine = user.length && engineHonoursGenuineFaces(exePath) && !genuineFacesDisabled(args)
|
|
435
|
+
? dirFamilies(user) : new Set();
|
|
436
|
+
const conf = buildConf(readFileSync(template, "utf8"), fontsDir, cacheDir, user, fallback, genuine);
|
|
437
|
+
const name = user.length || fallback.length
|
|
438
|
+
? `fonts.generated-${createHash("sha256").update(conf, "utf8").digest("hex").slice(0, 12)}.conf`
|
|
439
|
+
: "fonts.generated.conf";
|
|
440
|
+
const confPath = join(fontsDir, name);
|
|
441
|
+
writeAtomic(confPath, conf);
|
|
31
442
|
return { FONTCONFIG_FILE: confPath };
|
|
32
443
|
}
|
|
33
444
|
catch {
|
|
34
445
|
return {}; // never block a launch on font wiring
|
|
35
446
|
}
|
|
36
447
|
}
|
|
448
|
+
/** What `clearcote info` says about fonts on Linux (the `fonts` key of its JSON): whether the build
|
|
449
|
+
* bundles fonts, which scripts the fonts a launch would see can draw, and which of the key Windows
|
|
450
|
+
* families your own fonts provide for real. `undefined` when the build ships no bundle. */
|
|
451
|
+
export function linuxFontReport(exePath, fontDirs, env = process.env) {
|
|
452
|
+
const fontsDir = join(dirname(exePath), "fonts");
|
|
453
|
+
if (!existsSync(join(fontsDir, "fonts.conf.template")))
|
|
454
|
+
return undefined;
|
|
455
|
+
const { user, fallback, ignored } = resolveFontDirs(fontDirs, env);
|
|
456
|
+
const wanted = SCRIPT_SAMPLES.map(([, cp]) => cp);
|
|
457
|
+
const covered = new Set(), color = new Set();
|
|
458
|
+
for (const path of fontFiles([fontsDir, ...user, ...fallback])) {
|
|
459
|
+
const f = readFont(path, wanted);
|
|
460
|
+
for (const c of f.covered) {
|
|
461
|
+
covered.add(c);
|
|
462
|
+
if (f.color)
|
|
463
|
+
color.add(c);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
const emoji = SCRIPT_SAMPLES.find(([name]) => name === "Emoji")[1];
|
|
467
|
+
const ok = SCRIPT_SAMPLES.filter(([, cp]) => (cp === emoji ? color : covered).has(cp)).map(([name]) => name);
|
|
468
|
+
const report = {
|
|
469
|
+
bundled: true,
|
|
470
|
+
note: "metric-compatible Windows font clones are bundled with this build",
|
|
471
|
+
scripts: { covered: ok, missing: SCRIPT_SAMPLES.map(([name]) => name).filter((n) => !ok.includes(n)) },
|
|
472
|
+
fontDirs: user,
|
|
473
|
+
fallbackFontDirs: fallback,
|
|
474
|
+
};
|
|
475
|
+
if (ignored.length)
|
|
476
|
+
report.ignoredFontDirs = ignored;
|
|
477
|
+
if (user.length) {
|
|
478
|
+
const genuine = dirFamilies(user);
|
|
479
|
+
report.genuineWindowsFamilies = KEY_WINDOWS_FAMILIES.filter((f) => genuine.has(f.toLowerCase()));
|
|
480
|
+
report.lookalikeWindowsFamilies = KEY_WINDOWS_FAMILIES.filter((f) => !genuine.has(f.toLowerCase()));
|
|
481
|
+
report.genuineFacesSupported = engineHonoursGenuineFaces(exePath);
|
|
482
|
+
}
|
|
483
|
+
return report;
|
|
484
|
+
}
|
|
485
|
+
/** The Linux font lines of `clearcote info` (same text as the Python CLI). */
|
|
486
|
+
export function fontLines(f) {
|
|
487
|
+
const lines = [`Fonts ${f.note}`];
|
|
488
|
+
if (f.scripts) {
|
|
489
|
+
const total = f.scripts.covered.length + f.scripts.missing.length;
|
|
490
|
+
lines.push(f.scripts.missing.length
|
|
491
|
+
? `Scripts ${f.scripts.covered.length} of ${total} render; no font for ${f.scripts.missing.join(", ")} (they draw as empty boxes)`
|
|
492
|
+
: `Scripts all ${total} render`);
|
|
493
|
+
}
|
|
494
|
+
for (const d of f.fontDirs ?? [])
|
|
495
|
+
lines.push(`Your fonts ${d}`);
|
|
496
|
+
if (f.fontDirs?.length) {
|
|
497
|
+
const genuine = f.genuineWindowsFamilies ?? [], lookalike = f.lookalikeWindowsFamilies ?? [];
|
|
498
|
+
lines.push(` real: ${genuine.length ? genuine.join(", ") : "none of the key Windows families"}`);
|
|
499
|
+
if (lookalike.length)
|
|
500
|
+
lines.push(` lookalike: ${lookalike.join(", ")}`);
|
|
501
|
+
if (genuine.length && f.genuineFacesSupported === false) {
|
|
502
|
+
lines.push(" this engine still draws its lookalikes for them (real faces need PRO r32 or newer)");
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
for (const d of f.fallbackFontDirs ?? [])
|
|
506
|
+
lines.push(`Fallback fonts ${d}`);
|
|
507
|
+
for (const d of f.ignoredFontDirs ?? [])
|
|
508
|
+
lines.push(`Ignored ${d} (not a directory)`);
|
|
509
|
+
return lines;
|
|
510
|
+
}
|
|
37
511
|
/**
|
|
38
512
|
* `{ LANGUAGE: <ui locale> }` on Linux when `args` pin a UI locale with `--lang`, else `{}`.
|
|
39
513
|
*
|
|
@@ -61,8 +535,8 @@ export function linuxLocaleEnv(args, platform = process.platform) {
|
|
|
61
535
|
* the bundled-font FONTCONFIG_FILE + locale, then any caller-supplied `env` (caller wins).
|
|
62
536
|
* Returns `undefined` when there is nothing to add (preserve Playwright's default env).
|
|
63
537
|
*/
|
|
64
|
-
export function fontLaunchEnv(exePath, userEnv, args) {
|
|
65
|
-
const fontEnv = { ...linuxFontEnv(exePath), ...linuxLocaleEnv(args) };
|
|
538
|
+
export function fontLaunchEnv(exePath, userEnv, args, fontDirs) {
|
|
539
|
+
const fontEnv = { ...linuxFontEnv(exePath, fontDirs, args), ...linuxLocaleEnv(args) };
|
|
66
540
|
if (Object.keys(fontEnv).length === 0 && !userEnv)
|
|
67
541
|
return undefined;
|
|
68
542
|
return { ...process.env, ...fontEnv, ...(userEnv ?? {}) };
|
package/dist/fonts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,EAAE;AACF,8EAA8E;AAC9E,oFAAoF;AACpF,wFAAwF;AACxF,yFAAyF;AACzF,wFAAwF;AACxF,EAAE;AACF,sFAAsF;AACtF,yFAAyF;AACzF,yFAAyF;AAEzF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;QAC/C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;aACxC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;aACnC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QACxD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,sCAAsC;IACnD,CAAC;AACH,CAAC;AAID;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAmC,EAAE,WAAmB,OAAO,CAAC,QAAQ;IACrG,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,IAAwB,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,4BAA4B;IACnI,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,OAAgB,EAAE,IAAwB;IACvF,MAAM,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IACtE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;AAC5D,CAAC"}
|
|
1
|
+
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"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"}
|
package/dist/geometry.d.ts
CHANGED
|
@@ -59,7 +59,9 @@ export interface DisplayFingerprint {
|
|
|
59
59
|
availWidth?: number;
|
|
60
60
|
availHeight?: number;
|
|
61
61
|
}
|
|
62
|
-
export type AppliedGeometry =
|
|
62
|
+
export type AppliedGeometry =
|
|
63
|
+
/** On Linux, args carries the persona's real headless display (`--screen-info`). */
|
|
64
|
+
{
|
|
63
65
|
mode: "persona";
|
|
64
66
|
args: string[];
|
|
65
67
|
}
|
package/dist/geometry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,6FAA6F;AAC7F,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAS7F,CAAC;AAKF,MAAM,WAAW,IAAI;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACvD,MAAM,WAAW,gBAAgB;IAAG,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAA;CAAE;AAElE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAEtE;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAE7E;AA8BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAiB9F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,gBAAgB,CAGhF;AAED,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
|
package/dist/geometry.js
CHANGED
|
@@ -182,8 +182,12 @@ export function applyHeadlessGeometry(opts, seed, args, fp = {}) {
|
|
|
182
182
|
if ("viewport" in opts || "screen" in opts)
|
|
183
183
|
return null;
|
|
184
184
|
opts.viewport = null;
|
|
185
|
-
if (personaActive(args))
|
|
186
|
-
|
|
185
|
+
if (personaActive(args)) {
|
|
186
|
+
const display = process.platform === "linux" && !callerSetTheDisplay(args)
|
|
187
|
+
? servedDisplay({ ...fp, seed, args, lightStealth: false })
|
|
188
|
+
: null;
|
|
189
|
+
return { mode: "persona", args: display ? [screenInfoSwitch(display)] : [] };
|
|
190
|
+
}
|
|
187
191
|
// Not lightStealth's own row, unlike serve(): launch() keeps the seed -> screen row the Python and
|
|
188
192
|
// .NET launch() pick (headlessGeometry). An imported profile's screen still wins over it.
|
|
189
193
|
const display = callerSetTheDisplay(args) ? null : servedDisplay({ ...fp, seed, args, lightStealth: false });
|