postext-pdf 1.29.1 → 1.30.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/dist/__tests__/canvasShaping.test.d.ts +2 -0
- package/dist/__tests__/canvasShaping.test.d.ts.map +1 -0
- package/dist/__tests__/canvasShaping.test.js +258 -0
- package/dist/__tests__/canvasShaping.test.js.map +1 -0
- package/dist/__tests__/canvasWords.test.d.ts +2 -0
- package/dist/__tests__/canvasWords.test.d.ts.map +1 -0
- package/dist/__tests__/canvasWords.test.js +66 -0
- package/dist/__tests__/canvasWords.test.js.map +1 -0
- package/dist/__tests__/declaredFiles.test.d.ts +2 -0
- package/dist/__tests__/declaredFiles.test.d.ts.map +1 -0
- package/dist/__tests__/declaredFiles.test.js +435 -0
- package/dist/__tests__/declaredFiles.test.js.map +1 -0
- package/dist/__tests__/designTextRtl.test.js +17 -6
- package/dist/__tests__/designTextRtl.test.js.map +1 -1
- package/dist/__tests__/glyphPositions.d.ts +25 -0
- package/dist/__tests__/glyphPositions.d.ts.map +1 -0
- package/dist/__tests__/glyphPositions.js +288 -0
- package/dist/__tests__/glyphPositions.js.map +1 -0
- package/dist/__tests__/japaneseShaping.test.js +3 -3
- package/dist/__tests__/japaneseShaping.test.js.map +1 -1
- package/dist/__tests__/listMarkerShaping.test.d.ts +2 -0
- package/dist/__tests__/listMarkerShaping.test.d.ts.map +1 -0
- package/dist/__tests__/listMarkerShaping.test.js +64 -0
- package/dist/__tests__/listMarkerShaping.test.js.map +1 -0
- package/dist/__tests__/pdfWorker.test.js +27 -0
- package/dist/__tests__/pdfWorker.test.js.map +1 -1
- package/dist/__tests__/scriptContextHan.test.js +3 -3
- package/dist/__tests__/scriptContextHan.test.js.map +1 -1
- package/dist/__tests__/shapingLanguageDocument.test.js +1 -1
- package/dist/__tests__/shapingLanguageDocument.test.js.map +1 -1
- package/dist/__tests__/shapingLanguageRuns.test.d.ts +2 -0
- package/dist/__tests__/shapingLanguageRuns.test.d.ts.map +1 -0
- package/dist/__tests__/shapingLanguageRuns.test.js +250 -0
- package/dist/__tests__/shapingLanguageRuns.test.js.map +1 -0
- package/dist/__tests__/shapingLanguageRunsDocument.test.d.ts +2 -0
- package/dist/__tests__/shapingLanguageRunsDocument.test.d.ts.map +1 -0
- package/dist/__tests__/shapingLanguageRunsDocument.test.js +477 -0
- package/dist/__tests__/shapingLanguageRunsDocument.test.js.map +1 -0
- package/dist/__tests__/trackedLetters.test.d.ts +2 -0
- package/dist/__tests__/trackedLetters.test.d.ts.map +1 -0
- package/dist/__tests__/trackedLetters.test.js +77 -0
- package/dist/__tests__/trackedLetters.test.js.map +1 -0
- package/dist/canvasWords.d.ts +55 -0
- package/dist/canvasWords.d.ts.map +1 -0
- package/dist/canvasWords.js +160 -0
- package/dist/canvasWords.js.map +1 -0
- package/dist/faceFiles.d.ts +102 -5
- package/dist/faceFiles.d.ts.map +1 -1
- package/dist/faceFiles.js +271 -10
- package/dist/faceFiles.js.map +1 -1
- package/dist/fontCache.d.ts +92 -11
- package/dist/fontCache.d.ts.map +1 -1
- package/dist/fontCache.js +82 -17
- package/dist/fontCache.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pdf-backend/blockRender.d.ts.map +1 -1
- package/dist/pdf-backend/blockRender.js +72 -22
- package/dist/pdf-backend/blockRender.js.map +1 -1
- package/dist/pdf-backend/index.d.ts +3 -2
- package/dist/pdf-backend/index.d.ts.map +1 -1
- package/dist/pdf-backend/index.js +9 -3
- package/dist/pdf-backend/index.js.map +1 -1
- package/dist/pdf-backend/primitives.d.ts +55 -5
- package/dist/pdf-backend/primitives.d.ts.map +1 -1
- package/dist/pdf-backend/primitives.js +207 -26
- package/dist/pdf-backend/primitives.js.map +1 -1
- package/dist/pdf-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/pdf-backend/renderResourceBlock.js +32 -6
- package/dist/pdf-backend/renderResourceBlock.js.map +1 -1
- package/dist/pdf-backend/shapedText.d.ts +4 -0
- package/dist/pdf-backend/shapedText.d.ts.map +1 -1
- package/dist/pdf-backend/shapedText.js +30 -9
- package/dist/pdf-backend/shapedText.js.map +1 -1
- package/dist/pdf-backend/svgVector.js +1 -1
- package/dist/pdf-backend/svgVector.js.map +1 -1
- package/dist/pdf-backend/verticalText.d.ts.map +1 -1
- package/dist/pdf-backend/verticalText.js +7 -4
- package/dist/pdf-backend/verticalText.js.map +1 -1
- package/dist/pdf-backend/wordPieces.d.ts +29 -0
- package/dist/pdf-backend/wordPieces.d.ts.map +1 -0
- package/dist/pdf-backend/wordPieces.js +85 -0
- package/dist/pdf-backend/wordPieces.js.map +1 -0
- package/dist/shapingLanguage.d.ts +56 -3
- package/dist/shapingLanguage.d.ts.map +1 -1
- package/dist/shapingLanguage.js +202 -9
- package/dist/shapingLanguage.js.map +1 -1
- package/dist/unicodeRange.d.ts +19 -0
- package/dist/unicodeRange.d.ts.map +1 -0
- package/dist/unicodeRange.js +68 -0
- package/dist/unicodeRange.js.map +1 -0
- package/dist/worker/client.d.ts +1 -1
- package/dist/worker/client.d.ts.map +1 -1
- package/dist/worker/client.js +5 -2
- package/dist/worker/client.js.map +1 -1
- package/dist/worker/pdf.worker.js +7 -0
- package/dist/worker/pdf.worker.js.map +1 -1
- package/dist/worker/protocol.d.ts +6 -0
- package/dist/worker/protocol.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/faceFiles.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { mirroredCodePoint } from 'postext';
|
|
2
2
|
import { isDefaultIgnorable, isFallbackHandled, substituteGlyph } from './pdf-backend/fallbackSpaces';
|
|
3
|
-
import { shapingScriptLetter } from './shapingLanguage';
|
|
3
|
+
import { besideLetterOf, shapesAsCanvas, shapingScript, shapingScriptLetter, withBesideLetter, withinWideText } from './shapingLanguage';
|
|
4
|
+
import { canvasWords } from './canvasWords';
|
|
5
|
+
import { parseUnicodeRange, rangesHold } from './unicodeRange';
|
|
4
6
|
function coverageFace(font) {
|
|
5
7
|
const face = font.embedder?.font;
|
|
6
8
|
return face && typeof face.hasGlyphForCodePoint === 'function' ? face : undefined;
|
|
@@ -17,27 +19,63 @@ export class FaceFiles {
|
|
|
17
19
|
faces = new Map();
|
|
18
20
|
/** First file holding each code point, or null for none. */
|
|
19
21
|
first = new Map();
|
|
20
|
-
|
|
22
|
+
/** The range each file was given with; a file with none answers for
|
|
23
|
+
* every character. */
|
|
24
|
+
ranges = new Map();
|
|
25
|
+
/** Where each file is declared: the number it was given with, else its
|
|
26
|
+
* place in the list counted down, the first file being the one
|
|
27
|
+
* declared last. */
|
|
28
|
+
orders = new Map();
|
|
29
|
+
/** The files from the one declared last to the one declared first. */
|
|
30
|
+
lastDeclaredFirst;
|
|
31
|
+
/** The file a browser sets each code point in, or null for none. */
|
|
32
|
+
declared = new Map();
|
|
33
|
+
hasRanges = false;
|
|
34
|
+
constructor(files, declarations) {
|
|
21
35
|
this.files = [];
|
|
22
36
|
for (const file of files)
|
|
23
|
-
this.add(file);
|
|
37
|
+
this.add(file, declarations?.get(file));
|
|
24
38
|
}
|
|
25
|
-
/** Append a file (a slice fetched later)
|
|
26
|
-
* where it is. */
|
|
27
|
-
add(file) {
|
|
39
|
+
/** Append a file (a slice fetched later), with what the provider says
|
|
40
|
+
* of it; a file already listed is kept where it is, as it was given. */
|
|
41
|
+
add(file, declaration) {
|
|
28
42
|
if (this.faces.has(file))
|
|
29
43
|
return;
|
|
44
|
+
this.orders.set(file, declaration?.order ?? -this.files.length);
|
|
30
45
|
this.files.push(file);
|
|
31
46
|
this.faces.set(file, coverageFace(file));
|
|
32
|
-
|
|
47
|
+
const ranges = declaration?.unicodeRange === undefined ? undefined : parseUnicodeRange(declaration.unicodeRange);
|
|
48
|
+
if (ranges) {
|
|
49
|
+
this.ranges.set(file, ranges);
|
|
50
|
+
this.hasRanges = true;
|
|
51
|
+
}
|
|
52
|
+
// A code point no file had may be in this one, and a file declared
|
|
53
|
+
// later than the one that set a character takes it.
|
|
33
54
|
for (const [cp, hit] of this.first)
|
|
34
55
|
if (hit === null)
|
|
35
56
|
this.first.delete(cp);
|
|
57
|
+
this.declared.clear();
|
|
58
|
+
this.lastDeclaredFirst = undefined;
|
|
59
|
+
}
|
|
60
|
+
/** Whether the provider gave a file of the face with its range: the
|
|
61
|
+
* face is then read as a browser reads its `@font-face` rules
|
|
62
|
+
* ({@link declaredFile}). */
|
|
63
|
+
get ranged() {
|
|
64
|
+
return this.hasRanges;
|
|
36
65
|
}
|
|
37
66
|
/** Whether `file` has a glyph for `cp`. */
|
|
38
67
|
covers(file, cp) {
|
|
39
68
|
return this.faces.get(file)?.hasGlyphForCodePoint(cp) ?? false;
|
|
40
69
|
}
|
|
70
|
+
/** Whether `file` answers for `cp` as a browser reads it: its range
|
|
71
|
+
* holds the character and the file has a glyph for it. Chrome 154 skips
|
|
72
|
+
* a file whose range claims a character it has no glyph for and takes
|
|
73
|
+
* the next one down, and never draws a glyph a file has outside its
|
|
74
|
+
* range. */
|
|
75
|
+
answers(file, cp) {
|
|
76
|
+
const ranges = this.ranges.get(file);
|
|
77
|
+
return (ranges === undefined || rangesHold(ranges, cp)) && this.covers(file, cp);
|
|
78
|
+
}
|
|
41
79
|
/** The first file with a glyph for `cp`, or null when none has one. */
|
|
42
80
|
fileFor(cp) {
|
|
43
81
|
const hit = this.first.get(cp);
|
|
@@ -53,20 +91,54 @@ export class FaceFiles {
|
|
|
53
91
|
this.first.set(cp, found);
|
|
54
92
|
return found;
|
|
55
93
|
}
|
|
94
|
+
/** The files a browser tries in turn: the one declared last first.
|
|
95
|
+
* Files of one number keep the order they were given in. */
|
|
96
|
+
byDeclaration() {
|
|
97
|
+
if (!this.lastDeclaredFirst) {
|
|
98
|
+
const at = new Map(this.files.map((file, i) => [file, i]));
|
|
99
|
+
this.lastDeclaredFirst = [...this.files].sort((a, b) => this.orders.get(b) - this.orders.get(a) || at.get(a) - at.get(b));
|
|
100
|
+
}
|
|
101
|
+
return this.lastDeclaredFirst;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The file a browser sets `cp` in: the one declared last among those
|
|
105
|
+
* whose range holds it and that have a glyph for it. Null when none
|
|
106
|
+
* does: the browser then leaves the family, for the next one of the
|
|
107
|
+
* `font-family` list or a font of the system.
|
|
108
|
+
*/
|
|
109
|
+
declaredFile(cp) {
|
|
110
|
+
const hit = this.declared.get(cp);
|
|
111
|
+
if (hit !== undefined)
|
|
112
|
+
return hit;
|
|
113
|
+
const found = this.byDeclaration().find((file) => this.answers(file, cp)) ?? null;
|
|
114
|
+
this.declared.set(cp, found);
|
|
115
|
+
return found;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The file a browser sets a letter and the marks on it in (`cps`, the
|
|
119
|
+
* letter first): the one declared last that answers for every one of
|
|
120
|
+
* them. With Source Serif 4 declared first and Noto Serif JP after it
|
|
121
|
+
* for `a` alone, Chrome sets `a` in the second (557 thousandths) and
|
|
122
|
+
* `a` + U+0308 whole in the first (541). Null when no file sets them
|
|
123
|
+
* all.
|
|
124
|
+
*/
|
|
125
|
+
declaredFileOfAll(cps) {
|
|
126
|
+
return this.byDeclaration().find((file) => cps.every((cp) => this.answers(file, cp))) ?? null;
|
|
127
|
+
}
|
|
56
128
|
}
|
|
57
129
|
const faceFiles = new WeakMap();
|
|
58
130
|
/** Register the files of a face under its first file, the font the
|
|
59
131
|
* renderers are handed. A first file already registered (two faces the
|
|
60
132
|
* provider answered with the same files) keeps its list, which takes the
|
|
61
133
|
* new files too; the list in force is returned. */
|
|
62
|
-
export function registerFaceFiles(primary, files) {
|
|
134
|
+
export function registerFaceFiles(primary, files, declarations) {
|
|
63
135
|
const known = faceFiles.get(primary);
|
|
64
136
|
if (known) {
|
|
65
137
|
for (const file of files)
|
|
66
|
-
known.add(file);
|
|
138
|
+
known.add(file, declarations?.get(file));
|
|
67
139
|
return known;
|
|
68
140
|
}
|
|
69
|
-
const list = new FaceFiles([primary, ...files]);
|
|
141
|
+
const list = new FaceFiles([primary, ...files], declarations);
|
|
70
142
|
faceFiles.set(primary, list);
|
|
71
143
|
return list;
|
|
72
144
|
}
|
|
@@ -108,11 +180,22 @@ export function faceFilesOf(font) {
|
|
|
108
180
|
* Latin form for it. A word the file cannot set whole (the `(` of an
|
|
109
181
|
* Arabic sentence, whose mirror only the `latin` file holds) is cut as
|
|
110
182
|
* any other text.
|
|
183
|
+
*
|
|
184
|
+
* A run with no letter, cut out of text that has one (the `.»` of
|
|
185
|
+
* `خالة.»`, which the `latin` file draws), says the letter whose script
|
|
186
|
+
* the browser shaped it in (`beside`, #764), in a document shaped in its
|
|
187
|
+
* own language.
|
|
188
|
+
*
|
|
189
|
+
* A face given with the ranges of its files is cut as a browser cuts it
|
|
190
|
+
* ({@link declaredRuns}, #770) in a document shaped in its own language,
|
|
191
|
+
* and none of the rules above that guess at the browser's file apply.
|
|
111
192
|
*/
|
|
112
193
|
export function fileRuns(font, text, rtl = false) {
|
|
113
194
|
const list = faceFilesOf(font);
|
|
114
195
|
if (!list)
|
|
115
196
|
return [{ font, text }];
|
|
197
|
+
if (setsAsDeclared(list))
|
|
198
|
+
return besideLetters(declaredRuns(list, font, text, rtl), text, font);
|
|
116
199
|
const letter = shapingScriptLetter();
|
|
117
200
|
if (letter !== undefined) {
|
|
118
201
|
const file = list.fileFor(letter);
|
|
@@ -172,8 +255,186 @@ export function fileRuns(font, text, rtl = false) {
|
|
|
172
255
|
else
|
|
173
256
|
runs.push({ font, text: pending });
|
|
174
257
|
}
|
|
258
|
+
return besideLetters(runs, text, font);
|
|
259
|
+
}
|
|
260
|
+
/** `runs`, the runs `text` was cut into, each saying the letter it was
|
|
261
|
+
* cut from beside when it has none; one run in `font` for no run. */
|
|
262
|
+
function besideLetters(runs, text, font) {
|
|
263
|
+
if (runs.length > 1) {
|
|
264
|
+
// The runs follow each other through the text.
|
|
265
|
+
let at = 0;
|
|
266
|
+
for (const run of runs) {
|
|
267
|
+
const beside = besideLetterOf(text, at, at + run.text.length);
|
|
268
|
+
if (beside !== undefined)
|
|
269
|
+
run.beside = beside;
|
|
270
|
+
at += run.text.length;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
175
273
|
return runs.length > 0 ? runs : [{ font, text }];
|
|
176
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Whether the text being painted takes each character from the file a
|
|
277
|
+
* browser takes it from: a face whose provider gave its files with their
|
|
278
|
+
* ranges, in a document shaped in its own language.
|
|
279
|
+
*
|
|
280
|
+
* The page chose the file of a character the same way whatever language
|
|
281
|
+
* it shaped the text in, but a document that keeps the host's language is
|
|
282
|
+
* shaped string by string, each run in the script it shows, as it always
|
|
283
|
+
* was, and prints the same bytes. Cut by the browser's files, its strings
|
|
284
|
+
* fall into more runs with no letter, which that shaping gives no script:
|
|
285
|
+
* in Noto Serif SC the space is another slice's than the letters and the
|
|
286
|
+
* digits, so `GB/T 15834` became `GB/T`, a space and `15834`, and the
|
|
287
|
+
* digits alone took the proportional forms of the default script, 0.80 pt
|
|
288
|
+
* short of the tabular ones the page measured in a Latin string (15.75
|
|
289
|
+
* pt, the Cookbook's Chinese official document). `renderToPdf` drops what
|
|
290
|
+
* the files say when no document of the render is shaped in its own
|
|
291
|
+
* language (`withBareFiles`); this is for a page of one that is not, in a
|
|
292
|
+
* render that has one.
|
|
293
|
+
*/
|
|
294
|
+
function setsAsDeclared(list) {
|
|
295
|
+
return list.ranged && shapesAsCanvas();
|
|
296
|
+
}
|
|
297
|
+
/** A combining mark: it is set in the file of the letter it stands on. */
|
|
298
|
+
const MARK_RE = /^\p{M}$/u;
|
|
299
|
+
/**
|
|
300
|
+
* `text` cut into runs by the file a browser sets each character in, for
|
|
301
|
+
* a face given with the ranges of its files (postext #770). As measured
|
|
302
|
+
* in Chrome 154 (two files that draw the same letters at other widths,
|
|
303
|
+
* declared as one family, on a canvas in a page and in a worker):
|
|
304
|
+
*
|
|
305
|
+
* - a character is set in the file declared last among those whose range
|
|
306
|
+
* holds it: of two `FontFace` objects, the one added to the font set
|
|
307
|
+
* last, whichever was made or loaded first; of two `@font-face` rules,
|
|
308
|
+
* the later one in the document; and a `FontFace` added by script
|
|
309
|
+
* rather than any rule of a style sheet, whichever came first;
|
|
310
|
+
* - a file with no range answers for every character;
|
|
311
|
+
* - a file whose range claims a character it has no glyph for is passed
|
|
312
|
+
* over for the next one down, and a glyph a file has outside its range
|
|
313
|
+
* is never drawn;
|
|
314
|
+
* - nothing stays in a file because the character before it was set
|
|
315
|
+
* there: `Aa` with the capitals in one file is `A` from it and `a` from
|
|
316
|
+
* the other, 1269 thousandths, where either file alone gives 1253 or
|
|
317
|
+
* 1274. A space goes to the file whose range holds it, though every
|
|
318
|
+
* file has one;
|
|
319
|
+
* - a letter and the marks on it are set in one file, the one declared
|
|
320
|
+
* last that answers for them all. (Chrome also composes the pair where
|
|
321
|
+
* a file answers for the composed character: `o` + U+0304 is the `ō` of
|
|
322
|
+
* `latin-ext`. The PDF's shapers compose nothing, so here the pair goes
|
|
323
|
+
* to a file that has both.)
|
|
324
|
+
*
|
|
325
|
+
* So no character follows the one before it here, an opening bracket does
|
|
326
|
+
* not go with what it opens and a word shaped in a script is not looked up
|
|
327
|
+
* by a letter of that script: the browser did none of that. What stays is
|
|
328
|
+
* what the shapers need: a zero width joiner or non-joiner with the letter
|
|
329
|
+
* it joins, an invisible character in the run it stands in.
|
|
330
|
+
*
|
|
331
|
+
* A character no file answers for was drawn by the browser in another
|
|
332
|
+
* family; here it is set as in a face given without ranges: in the run
|
|
333
|
+
* before it when that file has a glyph, else in the first file that has
|
|
334
|
+
* one (its mirror's, in a right-to-left run), and reported as missing
|
|
335
|
+
* when none has.
|
|
336
|
+
*/
|
|
337
|
+
function declaredRuns(list, font, text, rtl) {
|
|
338
|
+
const runs = [];
|
|
339
|
+
let current;
|
|
340
|
+
// Joining controls waiting for the letter after them.
|
|
341
|
+
let pending = '';
|
|
342
|
+
let previous = 0;
|
|
343
|
+
// The file of the letter whose marks follow, up to `wholeEnd`.
|
|
344
|
+
let whole = null;
|
|
345
|
+
let wholeEnd = 0;
|
|
346
|
+
const chars = [...text];
|
|
347
|
+
for (let at = 0; at < chars.length; at++) {
|
|
348
|
+
const ch = chars[at];
|
|
349
|
+
const cp = ch.codePointAt(0);
|
|
350
|
+
if (isJoiningControl(cp) && (!current || !joinsOnto(previous))) {
|
|
351
|
+
pending += ch;
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
let file;
|
|
355
|
+
if (at < wholeEnd) {
|
|
356
|
+
file = whole;
|
|
357
|
+
}
|
|
358
|
+
else if (current && isDefaultIgnorable(cp)) {
|
|
359
|
+
file = current.font;
|
|
360
|
+
}
|
|
361
|
+
else if (MARK_RE.test(ch)) {
|
|
362
|
+
// A mark whose letter no file sets with it: beside its letter when
|
|
363
|
+
// that file has a glyph for it.
|
|
364
|
+
file = current && list.covers(current.font, cp) ? current.font : list.declaredFile(cp);
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
let end = at + 1;
|
|
368
|
+
while (end < chars.length && MARK_RE.test(chars[end]))
|
|
369
|
+
end++;
|
|
370
|
+
if (end > at + 1) {
|
|
371
|
+
whole = list.declaredFileOfAll(chars.slice(at, end).map((c) => c.codePointAt(0)));
|
|
372
|
+
wholeEnd = whole ? end : 0;
|
|
373
|
+
}
|
|
374
|
+
file = (at < wholeEnd ? whole : null) ?? list.declaredFile(cp);
|
|
375
|
+
}
|
|
376
|
+
if (!file) {
|
|
377
|
+
const mirror = rtl ? mirroredCodePoint(cp) : cp;
|
|
378
|
+
const shown = mirror !== cp && list.fileFor(mirror) ? mirror : cp;
|
|
379
|
+
file = current && (list.covers(current.font, shown) || isDefaultIgnorable(cp)) ? current.font : list.fileFor(shown) ?? current?.font ?? font;
|
|
380
|
+
}
|
|
381
|
+
if (current && current.font === file) {
|
|
382
|
+
current.text += pending + ch;
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
current = { font: file, text: pending + ch };
|
|
386
|
+
runs.push(current);
|
|
387
|
+
}
|
|
388
|
+
pending = '';
|
|
389
|
+
previous = cp;
|
|
390
|
+
}
|
|
391
|
+
if (pending) {
|
|
392
|
+
if (current)
|
|
393
|
+
current.text += pending;
|
|
394
|
+
else
|
|
395
|
+
runs.push({ font, text: pending });
|
|
396
|
+
}
|
|
397
|
+
return runs;
|
|
398
|
+
}
|
|
399
|
+
/** A string a browser keeps in eight bits: no character above U+00FF. */
|
|
400
|
+
const LATIN_1_RE = /^[\u0000-\u00FF]*$/;
|
|
401
|
+
/**
|
|
402
|
+
* `text`, a string the canvas was handed whole (a line of a running head,
|
|
403
|
+
* a word of the body), cut into the runs it is shaped in: its words
|
|
404
|
+
* (`canvasWords.ts`, #770), each cut by file ({@link fileRuns}). The
|
|
405
|
+
* canvas shapes every word alone, so no kerned pair and no ligature
|
|
406
|
+
* crosses a space or stands between two CJK characters, and a word takes
|
|
407
|
+
* the script of its own letters: one with no letter, a space among them,
|
|
408
|
+
* has none in a string not kept in eight bits (`wide`).
|
|
409
|
+
*
|
|
410
|
+
* {@link fileRuns} itself, the string shaped whole as up to postext-pdf
|
|
411
|
+
* 1.29, for a string of one word, in a document that keeps the host's
|
|
412
|
+
* language, and with a script in force (#725: a word with no letter the
|
|
413
|
+
* layout measured in the script of its context).
|
|
414
|
+
*/
|
|
415
|
+
export function wordRuns(font, text, rtl = false) {
|
|
416
|
+
if (!shapesAsCanvas() || shapingScript() !== undefined)
|
|
417
|
+
return fileRuns(font, text, rtl);
|
|
418
|
+
const words = canvasWords(text);
|
|
419
|
+
if (words.length === 1)
|
|
420
|
+
return fileRuns(font, text, rtl);
|
|
421
|
+
const wide = !LATIN_1_RE.test(text);
|
|
422
|
+
const runs = [];
|
|
423
|
+
for (const word of words) {
|
|
424
|
+
for (const run of fileRuns(font, word, rtl)) {
|
|
425
|
+
if (wide)
|
|
426
|
+
run.wide = true;
|
|
427
|
+
runs.push(run);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return runs;
|
|
431
|
+
}
|
|
432
|
+
/** Run `fn`, the shaping of `run` ({@link wordRuns}), with what the run
|
|
433
|
+
* says of its script in force: the letter it was cut from beside, and
|
|
434
|
+
* whether it is a word of a string not kept in eight bits. */
|
|
435
|
+
export function inRun(run, fn) {
|
|
436
|
+
return run.wide ? withinWideText(true, () => withBesideLetter(run.beside, fn)) : withBesideLetter(run.beside, fn);
|
|
437
|
+
}
|
|
177
438
|
/** Opening brackets and initial quotation marks (`Ps`, `Pi`). */
|
|
178
439
|
const OPENING_RE = /^[\p{Ps}\p{Pi}]$/u;
|
|
179
440
|
/** The file the first character after a row of opening marks (from `from`)
|
package/dist/faceFiles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faceFiles.js","sourceRoot":"","sources":["../src/faceFiles.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"faceFiles.js","sourceRoot":"","sources":["../src/faceFiles.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzI,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAwB,MAAM,gBAAgB,CAAC;AAOrF,SAAS,YAAY,CAAC,IAAa;IACjC,MAAM,IAAI,GAAI,IAA0D,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxF,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,oBAAoB,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AAED;;iCAEiC;AACjC,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAUD,sEAAsE;AACtE,MAAM,OAAO,SAAS;IACX,KAAK,CAAY;IACT,KAAK,GAAG,IAAI,GAAG,EAAqC,CAAC;IACtE,4DAA4D;IAC3C,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC3D;2BACuB;IACN,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC9D;;yBAEqB;IACJ,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,sEAAsE;IAC9D,iBAAiB,CAAwB;IACjD,oEAAoE;IACnD,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IACtD,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,KAAyB,EAAE,YAAoD;QACzF,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;6EACyE;IACzE,GAAG,CAAC,IAAa,EAAE,WAA6B;QAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,WAAW,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACjH,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,mEAAmE;QACnE,oDAAoD;QACpD,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,GAAG,KAAK,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED;;kCAE8B;IAC9B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,IAAa,EAAE,EAAU;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,oBAAoB,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;IACjE,CAAC;IAED;;;;iBAIa;IACL,OAAO,CAAC,IAAa,EAAE,EAAU;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,EAAU;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClC,IAAI,KAAK,GAAmB,IAAI,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC1B,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;iEAC6D;IACrD,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QAChI,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,EAAU;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;QAClF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,GAAsB;QACtC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAChG,CAAC;CACF;AAED,MAAM,SAAS,GAAG,IAAI,OAAO,EAAsB,CAAC;AAEpD;;;oDAGoD;AACpD,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,KAAyB,EAAE,YAAoD;IACjI,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;IAC9D,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa,EAAE,IAAY,EAAE,GAAG,GAAG,KAAK;IAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,oEAAoE;QACpE,+DAA+D;QAC/D,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;YACjC,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,kBAAkB,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClI,CAAC,CAAC;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,IAAI,OAA4B,CAAC;IACjC,kEAAkE;IAClE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,oEAAoE;QACpE,qEAAqE;QACrE,kEAAkE;QAClE,iEAAiE;QACjE,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;QACtD,CAAC;QACD,kDAAkD;QAClD,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBAAE,IAAI,GAAG,MAAM,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;;YAChC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;sEACsE;AACtE,SAAS,aAAa,CAAC,IAAe,EAAE,IAAY,EAAE,IAAa;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,+CAA+C;QAC/C,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,MAAM,KAAK,SAAS;gBAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YAC9C,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,cAAc,CAAC,IAAe;IACrC,OAAO,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,MAAM,OAAO,GAAG,UAAU,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,SAAS,YAAY,CAAC,IAAe,EAAE,IAAa,EAAE,IAAY,EAAE,GAAY;IAC9E,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,IAAI,OAA4B,CAAC;IACjC,sDAAsD;IACtD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,+DAA+D;IAC/D,IAAI,KAAK,GAAmB,IAAI,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,IAAgC,CAAC;QACrC,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,mEAAmE;YACnE,gCAAgC;YAChC,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YACjB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;gBAAE,GAAG,EAAE,CAAC;YAC9D,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACjB,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;gBACnF,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;QAC/I,CAAC;QACD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;;YAChC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa,EAAE,IAAY,EAAE,GAAG,GAAG,KAAK;IAC/D,IAAI,CAAC,cAAc,EAAE,IAAI,aAAa,EAAE,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;+DAE+D;AAC/D,MAAM,UAAU,KAAK,CAAI,GAAY,EAAE,EAAW;IAChD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC;;;8BAG8B;AAC9B,SAAS,UAAU,CAAC,IAAe,EAAE,KAAwB,EAAE,IAAY,EAAE,OAA4B;IACvG,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC;QAAE,EAAE,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;IAChC,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAAE,OAAO,OAAO,CAAC;IACxD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC;AAED;mCACmC;AACnC,SAAS,gBAAgB,CAAC,EAAU;IAClC,OAAO,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,CAAC;AACxC,CAAC;AAED;mEACmE;AACnE,SAAS,SAAS,CAAC,EAAU;IAC3B,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACnH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,iBAAiB,CAAC,IAAa,EAAE,IAAY,EAAE,IAAY;IACzE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;4DAE4D;AAC5D,MAAM,aAAa,GAAG,IAAI,OAAO,EAAgC,CAAC;AAClE,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB;;;6EAG6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,IAAa,EAAE,IAAY;IAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,SAAS;YAAE,SAAS;QAC3G,IAAI,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACjB,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;4BAC4B;AAC5B,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/fontCache.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { cssWeightOrder } from 'postext';
|
|
2
2
|
import { type PDFDocument, type PDFFont } from 'pdf-lib';
|
|
3
|
+
import { type FileDeclaration } from './faceFiles';
|
|
3
4
|
/** pdf-lib builds a CID font's `W` (advance widths) array from the glyphs
|
|
4
5
|
* reachable through the cmap, so a face embedded whole leaves every
|
|
5
6
|
* GSUB-only glyph — the fi/fl ligatures, contextual alternates — at the
|
|
@@ -43,17 +44,92 @@ export interface PdfFontRequest {
|
|
|
43
44
|
* characters the files already given lack. */
|
|
44
45
|
codePoints: ReadonlySet<number>;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* One file of a face, which may say what its `@font-face` rule says of it:
|
|
49
|
+
* the bytes themselves, carrying two properties, for a provider that
|
|
50
|
+
* knows how the page that measured the layout declared the face (postext
|
|
51
|
+
* #770). A plain `Uint8Array` is a file that says nothing.
|
|
52
|
+
*
|
|
53
|
+
* A browser sets a character in the file declared last among those whose
|
|
54
|
+
* `unicode-range` holds it, and the files of a family overlap: Fontsource
|
|
55
|
+
* repeats the ASCII letters of a Japanese family in its `latin` file and
|
|
56
|
+
* in its numbered slices, the space in every file, the brackets in the
|
|
57
|
+
* `arabic` file of an Arabic one. Two characters set in two files do not
|
|
58
|
+
* kern, so the file decides the width the layout measured. A provider
|
|
59
|
+
* that hands every file of a face this way has each character drawn from
|
|
60
|
+
* the file the browser took it from.
|
|
61
|
+
*
|
|
62
|
+
* The properties ride on the bytes, so a described file is still the
|
|
63
|
+
* `Uint8Array` every reader of a provider expects (the engine's SVG
|
|
64
|
+
* inliner and `bundleFontProvider`, a postext-pdf released before this),
|
|
65
|
+
* and what does not look at them reads the file as before. A copy of the
|
|
66
|
+
* bytes does not carry them: {@link declaredFontFile} puts them on.
|
|
67
|
+
*/
|
|
68
|
+
export type PdfFontFile = Uint8Array & {
|
|
69
|
+
/** The `unicode-range` of the file's rule, as CSS writes it
|
|
70
|
+
* (`U+0000-00FF,U+0131,U+4E??`). A file with none answers for every
|
|
71
|
+
* character, as a rule without the descriptor does. */
|
|
72
|
+
unicodeRange?: string;
|
|
73
|
+
/** Where the file is declared among the files of the face (one weight
|
|
74
|
+
* and style of the family): any number that grows with the order of
|
|
75
|
+
* the `@font-face` rules in the page, or of the calls to
|
|
76
|
+
* `document.fonts.add`; the file with the greatest is the one declared
|
|
77
|
+
* last. The same file keeps its number in every answer for the face.
|
|
78
|
+
* Files with none are read in the order given, the first being the
|
|
79
|
+
* one declared last. */
|
|
80
|
+
order?: number;
|
|
81
|
+
};
|
|
82
|
+
/** What a {@link PdfFontFile} says of itself. */
|
|
83
|
+
export type PdfFontFileDeclaration = FileDeclaration;
|
|
84
|
+
/**
|
|
85
|
+
* `bytes` as a file that says how the page declared it: a view of the
|
|
86
|
+
* same bytes (nothing is copied, and `bytes` itself is left as it is)
|
|
87
|
+
* carrying `unicodeRange` and `order` ({@link PdfFontFile}). A plain
|
|
88
|
+
* `Object.assign(bytes, { unicodeRange, order })` does as well where the
|
|
89
|
+
* bytes are the provider's own to mark.
|
|
90
|
+
*/
|
|
91
|
+
export declare function declaredFontFile(bytes: Uint8Array, declaration: PdfFontFileDeclaration): PdfFontFile;
|
|
92
|
+
/** What `file` says of itself, when it says anything a browser would
|
|
93
|
+
* read: a range that is text, a place that is a number. */
|
|
94
|
+
export declare function declarationOf(file: PdfFontFile): PdfFontFileDeclaration | undefined;
|
|
46
95
|
/**
|
|
47
96
|
* The bytes of a face (TrueType, or CFF-flavoured OpenType): one file, or
|
|
48
97
|
* several that together make the face — each holding part of its
|
|
49
98
|
* characters, like the numbered unicode-range slices Fontsource ships for
|
|
50
99
|
* Chinese, Japanese and Korean families. Each file is embedded as its own
|
|
51
|
-
* subset font
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
100
|
+
* subset font.
|
|
101
|
+
*
|
|
102
|
+
* A character is drawn from the first file, in the order given, that has
|
|
103
|
+
* a glyph for it. When a file of the face comes with its range
|
|
104
|
+
* ({@link PdfFontFile}), a character is drawn from the file a browser
|
|
105
|
+
* takes it from: the one declared last among those whose range holds it
|
|
106
|
+
* and that have a glyph for it; a character no range holds is drawn from
|
|
107
|
+
* the first file with a glyph. So it is in a document shaped in its own
|
|
108
|
+
* language (`bodyText.shapingLanguage: 'document'`); one that keeps the
|
|
109
|
+
* host's language reads the files in the order given whatever they say,
|
|
110
|
+
* and prints as it did. A provider that describes its files therefore
|
|
111
|
+
* still lists them with the one declared last first.
|
|
112
|
+
*
|
|
113
|
+
* Reject (throw) for a face the provider cannot supply: another cut of
|
|
114
|
+
* the family is set in its place (`fontFallback`).
|
|
115
|
+
*/
|
|
116
|
+
export type PdfFontProvider = (family: string, weight: number, style: 'normal' | 'italic', request?: PdfFontRequest) => Promise<PdfFontAnswer>;
|
|
117
|
+
/** What a {@link PdfFontProvider} answers a face with. */
|
|
118
|
+
export type PdfFontAnswer = PdfFontFile | PdfFontFile[];
|
|
119
|
+
/** The files of an answer. */
|
|
120
|
+
export declare function fontFilesOf(answer: PdfFontAnswer): PdfFontFile[];
|
|
121
|
+
/**
|
|
122
|
+
* `provider` answering with files that say nothing: what each says of
|
|
123
|
+
* itself is left off. For a render with no document shaped in its own
|
|
124
|
+
* language, which reads every face as it did before a file could say
|
|
125
|
+
* more (the first file with a glyph), and asks for the same characters.
|
|
55
126
|
*/
|
|
56
|
-
export
|
|
127
|
+
export declare function withBareFiles(provider: PdfFontProvider): PdfFontProvider;
|
|
128
|
+
/** The files of an answer from the one declared first to the one declared
|
|
129
|
+
* last, as a style sheet lists its rules (`PdfFontFile.order`; a file
|
|
130
|
+
* with no number takes its place in the answer, the first being the one
|
|
131
|
+
* declared last). */
|
|
132
|
+
export declare function inDeclarationOrder(files: readonly PdfFontFile[]): PdfFontFile[];
|
|
57
133
|
/** A face some characters of which no file of it has a glyph for; the PDF
|
|
58
134
|
* draws them as the font's `.notdef` glyph. */
|
|
59
135
|
export interface FontMissingGlyphs {
|
|
@@ -137,8 +213,10 @@ export interface FontCacheOptions {
|
|
|
137
213
|
* A face the provider answers with several files (see
|
|
138
214
|
* {@link PdfFontProvider}) embeds each file as a subset of its own; `get()`
|
|
139
215
|
* hands out the first, and the text primitives draw each character from
|
|
140
|
-
* the file that has it
|
|
141
|
-
*
|
|
216
|
+
* the file that has it, or from the file a browser takes it from when the
|
|
217
|
+
* provider says how the files are declared (`faceFiles.ts`). Asked again
|
|
218
|
+
* for characters its files lack, such a face asks the provider for those
|
|
219
|
+
* only.
|
|
142
220
|
*/
|
|
143
221
|
export declare class FontCache {
|
|
144
222
|
private pdfDoc;
|
|
@@ -165,16 +243,19 @@ export declare class FontCache {
|
|
|
165
243
|
/** Embed a font file, once per distinct content. `spec` is the face it
|
|
166
244
|
* was first given for (named in a CFF size report). */
|
|
167
245
|
private embedBytes;
|
|
168
|
-
/** Embed every file of a provider answer, in order, dropping repeats
|
|
246
|
+
/** Embed every file of a provider answer, in order, dropping repeats:
|
|
247
|
+
* the fonts, and what the provider says of each (the first time it
|
|
248
|
+
* gives a file). */
|
|
169
249
|
private embedAnswer;
|
|
170
250
|
/** Fetch and embed one face, once; later calls with characters it was
|
|
171
251
|
* not asked for grow a sliced face (see {@link growFace}). Null when
|
|
172
252
|
* the provider rejects it or its bytes do not embed. */
|
|
173
253
|
private loadFace;
|
|
174
254
|
/** Ask a sliced face's provider for the characters none of its files
|
|
175
|
-
* has that it was not asked for yet
|
|
176
|
-
*
|
|
177
|
-
*
|
|
255
|
+
* has that it was not asked for yet (every character it was not asked
|
|
256
|
+
* for, when its files came with their ranges), and add the files it
|
|
257
|
+
* answers. A rejection leaves the face as it is (the characters are
|
|
258
|
+
* reported as missing when drawn). */
|
|
178
259
|
private growFace;
|
|
179
260
|
/** Report a variable font asked for at a weight other than its default
|
|
180
261
|
* instance, the one pdf-lib embeds. */
|
package/dist/fontCache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fontCache.d.ts","sourceRoot":"","sources":["../src/fontCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAuC,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"fontCache.d.ts","sourceRoot":"","sources":["../src/fontCache.ts"],"names":[],"mappings":"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"}
|