postext-pdf 1.29.2 → 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.
Files changed (96) hide show
  1. package/dist/__tests__/canvasShaping.test.d.ts +2 -0
  2. package/dist/__tests__/canvasShaping.test.d.ts.map +1 -0
  3. package/dist/__tests__/canvasShaping.test.js +258 -0
  4. package/dist/__tests__/canvasShaping.test.js.map +1 -0
  5. package/dist/__tests__/canvasWords.test.d.ts +2 -0
  6. package/dist/__tests__/canvasWords.test.d.ts.map +1 -0
  7. package/dist/__tests__/canvasWords.test.js +66 -0
  8. package/dist/__tests__/canvasWords.test.js.map +1 -0
  9. package/dist/__tests__/declaredFiles.test.d.ts +2 -0
  10. package/dist/__tests__/declaredFiles.test.d.ts.map +1 -0
  11. package/dist/__tests__/declaredFiles.test.js +435 -0
  12. package/dist/__tests__/declaredFiles.test.js.map +1 -0
  13. package/dist/__tests__/designTextRtl.test.js +17 -6
  14. package/dist/__tests__/designTextRtl.test.js.map +1 -1
  15. package/dist/__tests__/glyphPositions.d.ts +25 -0
  16. package/dist/__tests__/glyphPositions.d.ts.map +1 -0
  17. package/dist/__tests__/glyphPositions.js +288 -0
  18. package/dist/__tests__/glyphPositions.js.map +1 -0
  19. package/dist/__tests__/japaneseShaping.test.js +3 -3
  20. package/dist/__tests__/japaneseShaping.test.js.map +1 -1
  21. package/dist/__tests__/listMarkerShaping.test.d.ts +2 -0
  22. package/dist/__tests__/listMarkerShaping.test.d.ts.map +1 -0
  23. package/dist/__tests__/listMarkerShaping.test.js +64 -0
  24. package/dist/__tests__/listMarkerShaping.test.js.map +1 -0
  25. package/dist/__tests__/pdfWorker.test.js +27 -0
  26. package/dist/__tests__/pdfWorker.test.js.map +1 -1
  27. package/dist/__tests__/scriptContextHan.test.js +3 -3
  28. package/dist/__tests__/scriptContextHan.test.js.map +1 -1
  29. package/dist/__tests__/shapingLanguageDocument.test.js +1 -1
  30. package/dist/__tests__/shapingLanguageDocument.test.js.map +1 -1
  31. package/dist/__tests__/shapingLanguageRunsDocument.test.js +158 -8
  32. package/dist/__tests__/shapingLanguageRunsDocument.test.js.map +1 -1
  33. package/dist/__tests__/trackedLetters.test.d.ts +2 -0
  34. package/dist/__tests__/trackedLetters.test.d.ts.map +1 -0
  35. package/dist/__tests__/trackedLetters.test.js +77 -0
  36. package/dist/__tests__/trackedLetters.test.js.map +1 -0
  37. package/dist/canvasWords.d.ts +55 -0
  38. package/dist/canvasWords.d.ts.map +1 -0
  39. package/dist/canvasWords.js +160 -0
  40. package/dist/canvasWords.js.map +1 -0
  41. package/dist/faceFiles.d.ts +93 -5
  42. package/dist/faceFiles.d.ts.map +1 -1
  43. package/dist/faceFiles.js +256 -10
  44. package/dist/faceFiles.js.map +1 -1
  45. package/dist/fontCache.d.ts +92 -11
  46. package/dist/fontCache.d.ts.map +1 -1
  47. package/dist/fontCache.js +82 -17
  48. package/dist/fontCache.js.map +1 -1
  49. package/dist/index.d.ts +2 -2
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/pdf-backend/blockRender.d.ts.map +1 -1
  54. package/dist/pdf-backend/blockRender.js +63 -23
  55. package/dist/pdf-backend/blockRender.js.map +1 -1
  56. package/dist/pdf-backend/index.d.ts +3 -2
  57. package/dist/pdf-backend/index.d.ts.map +1 -1
  58. package/dist/pdf-backend/index.js +9 -3
  59. package/dist/pdf-backend/index.js.map +1 -1
  60. package/dist/pdf-backend/primitives.d.ts +55 -5
  61. package/dist/pdf-backend/primitives.d.ts.map +1 -1
  62. package/dist/pdf-backend/primitives.js +206 -25
  63. package/dist/pdf-backend/primitives.js.map +1 -1
  64. package/dist/pdf-backend/renderResourceBlock.d.ts.map +1 -1
  65. package/dist/pdf-backend/renderResourceBlock.js +27 -7
  66. package/dist/pdf-backend/renderResourceBlock.js.map +1 -1
  67. package/dist/pdf-backend/shapedText.d.ts +4 -0
  68. package/dist/pdf-backend/shapedText.d.ts.map +1 -1
  69. package/dist/pdf-backend/shapedText.js +15 -4
  70. package/dist/pdf-backend/shapedText.js.map +1 -1
  71. package/dist/pdf-backend/svgVector.js +1 -1
  72. package/dist/pdf-backend/svgVector.js.map +1 -1
  73. package/dist/pdf-backend/verticalText.d.ts.map +1 -1
  74. package/dist/pdf-backend/verticalText.js +7 -4
  75. package/dist/pdf-backend/verticalText.js.map +1 -1
  76. package/dist/pdf-backend/wordPieces.d.ts +22 -41
  77. package/dist/pdf-backend/wordPieces.d.ts.map +1 -1
  78. package/dist/pdf-backend/wordPieces.js +75 -62
  79. package/dist/pdf-backend/wordPieces.js.map +1 -1
  80. package/dist/shapingLanguage.d.ts +16 -0
  81. package/dist/shapingLanguage.d.ts.map +1 -1
  82. package/dist/shapingLanguage.js +50 -20
  83. package/dist/shapingLanguage.js.map +1 -1
  84. package/dist/unicodeRange.d.ts +19 -0
  85. package/dist/unicodeRange.d.ts.map +1 -0
  86. package/dist/unicodeRange.js +68 -0
  87. package/dist/unicodeRange.js.map +1 -0
  88. package/dist/worker/client.d.ts +1 -1
  89. package/dist/worker/client.d.ts.map +1 -1
  90. package/dist/worker/client.js +5 -2
  91. package/dist/worker/client.js.map +1 -1
  92. package/dist/worker/pdf.worker.js +7 -0
  93. package/dist/worker/pdf.worker.js.map +1 -1
  94. package/dist/worker/protocol.d.ts +6 -0
  95. package/dist/worker/protocol.d.ts.map +1 -1
  96. package/package.json +3 -3
@@ -0,0 +1,435 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import fs from 'node:fs';
3
+ import fontkit from '@pdf-lib/fontkit';
4
+ import { PDFDocument, rgb } from 'pdf-lib';
5
+ import { buildDocument } from 'postext';
6
+ import { renderToPdf } from '../pdf-backend';
7
+ import { FontCache, declarationOf, declaredFontFile, inDeclarationOrder, withBareFiles } from '../fontCache';
8
+ import { FaceFiles, fileRuns, registerFaceFiles } from '../faceFiles';
9
+ import { parseFontString } from '../fontString';
10
+ import { parseUnicodeRange, rangesHold } from '../unicodeRange';
11
+ import { withDocumentLanguage } from '../shapingLanguage';
12
+ import { drawTextPx, textAdvancePx } from '../pdf-backend/primitives';
13
+ import { inlineSvgFontsForRaster } from '../pdf-backend/renderResourceBlock';
14
+ import { paintedGlyphs } from './glyphPositions';
15
+ // #770: a browser sets a character two files of a family hold in the file
16
+ // declared last among those whose `unicode-range` holds it, and a provider
17
+ // that hands each file with its range and its place in the declaration
18
+ // (`PdfFontFile`: the bytes, carrying both) gets the PDF set the same way,
19
+ // in a document shaped in its own language; one that keeps the host's
20
+ // language reads the files in the order given and prints as before. The
21
+ // rules and the widths below are Chrome 154's (`measureText` at 1000 px on
22
+ // a canvas, in a page and in a worker; thousandths of the em).
23
+ //
24
+ // The face of the tests is Noto Serif JP 400 as Fontsource serves it, cut
25
+ // to `Shift_JIS` and a space: `latin` holds every character and kerns `t_`
26
+ // and `_J`, slice 118 repeats the letters, slice 113 the `_`. A pen adds
27
+ // `latin` first and the numbered slices after it, so the page sets the
28
+ // letters from 118 and the `_` from 113, with nothing kerned across:
29
+ // 4252, where `latin` alone gives 4318.
30
+ const fixture = (name) => new Uint8Array(fs.readFileSync(new URL(`./fixtures/fontsource/${name}`, import.meta.url)));
31
+ const LATIN = fixture('noto-serif-jp-latin.ttf');
32
+ const S118 = fixture('noto-serif-jp-118.ttf');
33
+ const S113 = fixture('noto-serif-jp-113.ttf');
34
+ /** The ranges `@fontsource/noto-serif-jp@5/400.css` declares the files with. */
35
+ const RANGE = {
36
+ latin: 'U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD',
37
+ 118: 'U+21-22,U+27-2a,U+2c-3b,U+3f,U+41-4d,U+4f-5d,U+61-7b,U+7d,U+ab,U+ae,U+b2-b3,U+b7,U+bb,U+c9,U+cd,U+d6,U+d8,U+dc,U+e0-e5,U+e7-ed,U+ef,U+f1-f4,U+f6,U+f8,U+fa,U+fc-fd,U+103,U+14d,U+1b0,U+300-301,U+1ebf,U+1ec7,U+2013-2014,U+201c-201d,U+2039-203a,U+203c,U+2048-2049,U+2113,U+2122,U+65e5,U+6708,U+70b9',
38
+ 113: 'U+26,U+5f,U+2026,U+203b,U+4e09,U+4eac,U+4ed5,U+4fa1,U+5143,U+5199,U+5207,U+539f,U+53e3,U+53f7,U+5411,U+5473,U+5546,U+55b6,U+5929,U+597d,U+5bb9,U+5c11,U+5c4b,U+5ddd,U+5f97,U+5fc5,U+6295,U+6301,U+6307,U+671b,U+76f8,U+78ba,U+795e,U+7d30,U+7d39,U+7d9a,U+89e3,U+8a00,U+8a73,U+8a8d,U+8a9e,U+8aad,U+8abf,U+8cea,U+8eca,U+8ffd,U+904b,U+9650,U+ff11-ff12',
39
+ };
40
+ /** The three files as a pen declares them: `latin`, then the slices from
41
+ * the last of the sheet to the first (118 before 113). */
42
+ const DECLARED = [
43
+ declaredFontFile(LATIN, { unicodeRange: RANGE.latin, order: 0 }),
44
+ declaredFontFile(S118, { unicodeRange: RANGE[118], order: 6 }),
45
+ declaredFontFile(S113, { unicodeRange: RANGE[113], order: 11 }),
46
+ ];
47
+ /** The same files with nothing said of them. */
48
+ const BARE = [LATIN, S118, S113];
49
+ const FONT = '400 16px "Noto Serif JP"';
50
+ /** The face a provider answering `answer` gives the renderers. */
51
+ async function faceOf(answer) {
52
+ const doc = await PDFDocument.create();
53
+ doc.registerFontkit(fontkit);
54
+ const cache = new FontCache(doc, async () => answer);
55
+ await cache.preloadFontStrings([FONT]);
56
+ return cache.get(FONT);
57
+ }
58
+ const inDocument = (tag, fn) => withDocumentLanguage(tag, tag, fn);
59
+ const inHost = (tag, fn) => withDocumentLanguage(undefined, tag, fn);
60
+ const advance = (font, text) => textAdvancePx(font, text, 1000).advance;
61
+ const near = (got, chrome, what) => expect(Math.abs(got - chrome), `${what}: ${got.toFixed(1)}, Chrome ${chrome}`).toBeLessThan(0.75);
62
+ describe('a file that says how the page declared it (#770)', () => {
63
+ it('is its bytes, carrying a range and a place, and the bytes given stay as they were', () => {
64
+ const file = declaredFontFile(LATIN, { unicodeRange: 'U+0-FF', order: 3 });
65
+ expect(file).toBeInstanceOf(Uint8Array);
66
+ expect(file.buffer).toBe(LATIN.buffer);
67
+ expect(file.length).toBe(LATIN.length);
68
+ expect(declarationOf(file)).toEqual({ unicodeRange: 'U+0-FF', order: 3 });
69
+ expect(declarationOf(LATIN)).toBeUndefined();
70
+ // Marked in place, as a pen does with bytes of its own.
71
+ expect(declarationOf(Object.assign(new Uint8Array(2), { unicodeRange: 'U+41', order: 0 }))).toEqual({ unicodeRange: 'U+41', order: 0 });
72
+ // What is no range and no number is not read.
73
+ expect(declarationOf(Object.assign(new Uint8Array(2), { unicodeRange: 7, order: 'last' }))).toBeUndefined();
74
+ });
75
+ it('says nothing to a render with no document shaped in its own language', async () => {
76
+ const bare = withBareFiles(async () => DECLARED);
77
+ const files = (await bare('Noto Serif JP', 400, 'normal'));
78
+ expect(files.map((file) => declarationOf(file))).toEqual([undefined, undefined, undefined]);
79
+ expect(files.map((file) => file.length)).toEqual(DECLARED.map((file) => file.length));
80
+ // One file stays one file, and a plain one the same object.
81
+ expect(await withBareFiles(async () => LATIN)('Noto Serif JP', 400, 'normal')).toBe(LATIN);
82
+ expect(Array.isArray(await withBareFiles(async () => DECLARED[0])('Noto Serif JP', 400, 'normal'))).toBe(false);
83
+ });
84
+ });
85
+ describe('unicode-range', () => {
86
+ it('reads intervals, single code points and wildcards, merged and in order', () => {
87
+ expect(parseUnicodeRange('U+0000-00FF, u+131,U+4E??')).toEqual([[0, 0xff], [0x131, 0x131], [0x4e00, 0x4eff]]);
88
+ expect(parseUnicodeRange('U+41-5A,U+30-39,U+3A-40')).toEqual([[0x30, 0x5a]]);
89
+ expect(parseUnicodeRange('U+??')).toEqual([[0, 0xff]]);
90
+ expect(parseUnicodeRange('U+1F6??')).toEqual([[0x1f600, 0x1f6ff]]);
91
+ });
92
+ it('gives nothing for a value a browser drops: the file then answers for every character', () => {
93
+ for (const value of ['', 'latin', 'U+', 'U+5A-41', 'U+110000', 'U+0-FF,x', 'U+4?5', 'U+1234567'])
94
+ expect(parseUnicodeRange(value), value).toBeUndefined();
95
+ });
96
+ it('says whether a code point is held', () => {
97
+ const ranges = parseUnicodeRange(RANGE[118]);
98
+ expect([...'Shift_JIS '].map((ch) => rangesHold(ranges, ch.codePointAt(0)))).toEqual([true, true, true, true, true, false, true, true, true, false]);
99
+ });
100
+ });
101
+ /** A file that has glyphs for the characters of `chars`: enough for the
102
+ * cut of a text, which looks at nothing else of a font. */
103
+ const stub = (chars) => {
104
+ const cps = new Set([...chars].map((ch) => ch.codePointAt(0)));
105
+ return { embedder: { font: { hasGlyphForCodePoint: (cp) => cps.has(cp) } } };
106
+ };
107
+ /** The runs of `text` in a face of `files`, each `[name, glyphs, range?,
108
+ * order?]`, the first being the font the renderers are handed; as
109
+ * `name:text` joined by a bar. In a document shaped in its own language,
110
+ * or (`host`) in one that keeps the host's. */
111
+ function cut(text, files, rtl = false, host = false) {
112
+ const fonts = files.map(([, chars]) => stub(chars));
113
+ const declarations = new Map();
114
+ files.forEach(([, , unicodeRange, order], i) => {
115
+ if (unicodeRange !== undefined || order !== undefined)
116
+ declarations.set(fonts[i], { ...(unicodeRange !== undefined ? { unicodeRange } : {}), ...(order !== undefined ? { order } : {}) });
117
+ });
118
+ registerFaceFiles(fonts[0], fonts.slice(1), declarations);
119
+ const runs = (host ? inHost : inDocument)('en', () => fileRuns(fonts[0], text, rtl));
120
+ return runs.map((run) => `${files[fonts.indexOf(run.font)][0]}:${run.text}`).join('|');
121
+ }
122
+ describe('the file a character is set in, for a face given with its ranges (#770)', () => {
123
+ const ALL = 'ABab_ ()';
124
+ it('is the one declared last among those whose range holds it', () => {
125
+ // Chrome: `a` of two files that both claim it is the later one's, 557
126
+ // for 541, whichever was made or loaded first.
127
+ expect(cut('Aa', [['first', ALL, 'U+0-FF', 0], ['last', ALL, 'U+0-FF', 1]])).toBe('last:Aa');
128
+ expect(cut('Aa', [['last', ALL, 'U+0-FF', 1], ['first', ALL, 'U+0-FF', 0]])).toBe('last:Aa');
129
+ // With no number, the first file given is the one declared last, as
130
+ // a list of bare files is read.
131
+ expect(cut('Aa', [['given first', ALL, 'U+0-FF'], ['given second', ALL, 'U+0-FF']])).toBe('given first:Aa');
132
+ });
133
+ it('is never one whose range leaves the character out, though the file has a glyph', () => {
134
+ // Chrome: `Aa` with the capitals alone claimed by the last file is `A`
135
+ // from it and `a` from the other, 1269; 1253 and 1274 in one file.
136
+ expect(cut('Aa', [['all', ALL, undefined, 0], ['capitals', ALL, 'U+41-5A', 1]])).toBe('capitals:A|all:a');
137
+ // Nothing stays in a file because the character before it was set there.
138
+ expect(cut('AaBb', [['all', ALL, undefined, 0], ['capitals', ALL, 'U+41-5A', 1]])).toBe('capitals:A|all:a|capitals:B|all:b');
139
+ });
140
+ it('passes over a file whose range claims a character it has no glyph for', () => {
141
+ // Chrome: `S` claimed by a file that has none is the next one's down, 567.
142
+ expect(cut('A_', [['first', ALL, 'U+0-FF', 0], ['second', ALL, 'U+0-FF', 1], ['claims all', '_', 'U+0-FF', 2]])).toBe('second:A|claims all:_');
143
+ });
144
+ it('takes a file with no range for every character', () => {
145
+ expect(cut('Aa_', [['ranged', ALL, 'U+61', 0], ['no range', ALL, undefined, 1]])).toBe('no range:Aa_');
146
+ expect(cut('Aa_', [['no range', ALL, undefined, 0], ['ranged', ALL, 'U+61', 1]])).toBe('no range:A|ranged:a|no range:_');
147
+ });
148
+ it('sets a space in the file whose range holds it, though every file has one', () => {
149
+ // An Arabic family: the `arabic` file has a space and brackets, and its
150
+ // range claims neither.
151
+ const arabic = ['arabic', '\u0623\u0644\u0641\u0644\u064A\u0629 (', 'U+0600-06FF,U+200C-200E', 3];
152
+ const latin = ['latin', 'ab ()', 'U+0-FF,U+2000-206F', 0];
153
+ expect(cut('\u0623\u0644\u0641 \u0644\u064A\u0644\u0629', [arabic, latin])).toBe('arabic:\u0623\u0644\u0641|latin: |arabic:\u0644\u064A\u0644\u0629');
154
+ // The bracket is the `latin` file's whatever follows it, and in a
155
+ // right-to-left run too.
156
+ expect(cut('(\u0623\u0644\u0641)', [arabic, latin], true)).toBe('latin:(|arabic:\u0623\u0644\u0641|latin:)');
157
+ // Bare, the first file with a glyph keeps the line in one run.
158
+ expect(cut('\u0623\u0644\u0641 \u0644\u064A\u0644\u0629', [['arabic', arabic[1]], ['latin', latin[1]]])).toBe('arabic:\u0623\u0644\u0641 \u0644\u064A\u0644\u0629');
159
+ });
160
+ it('sets a letter and the marks on it in one file, the last declared that answers for them all', () => {
161
+ // Chrome: `a` + U+0308 where the last file answers for `a` alone is the
162
+ // first file's whole, 541 for 557; `a` alone is the last file's.
163
+ const first = ['first', 'ab\u0308', undefined, 0];
164
+ expect(cut('a\u0308a', [first, ['last', 'ab\u0308', 'U+61', 1]])).toBe('first:a\u0308|last:a');
165
+ expect(cut('a\u0308a', [first, ['last', 'ab\u0308', 'U+61,U+308', 1]])).toBe('last:a\u0308a');
166
+ // No file sets them all: the mark beside its letter when that file
167
+ // has a glyph for it, else by itself.
168
+ expect(cut('a\u0308', [['marks', '\u0308', 'U+308', 0], ['letters', 'a\u0308', 'U+61', 1]])).toBe('letters:a\u0308');
169
+ expect(cut('a\u0308', [['marks', '\u0308', 'U+308', 0], ['letters', 'a', 'U+61', 1]])).toBe('letters:a|marks:\u0308');
170
+ });
171
+ it('keeps a joiner with the letter it joins and an invisible character in its run', () => {
172
+ const arabic = ['arabic', '\u0628\u0646', 'U+0600-06FF', 1];
173
+ const latin = ['latin', 'ab\u200C\u00AD', 'U+0-FF,U+2000-206F', 0];
174
+ expect(cut('\u0628\u200C\u0646', [arabic, latin])).toBe('arabic:\u0628\u200C\u0646');
175
+ expect(cut('\u200C\u0628', [arabic, latin])).toBe('arabic:\u200C\u0628');
176
+ expect(cut('\u0628\u00AD\u0646', [arabic, latin])).toBe('arabic:\u0628\u00AD\u0646');
177
+ });
178
+ it('draws a character no range holds as a face given bare does: beside the one before it, else from the first file that has it', () => {
179
+ expect(cut('a_b', [['letters', 'ab_', 'U+61-7A', 0], ['other', '_', 'U+41', 1]])).toBe('letters:a_b');
180
+ expect(cut('a_b', [['letters', 'ab', 'U+61-7A', 0], ['other', '_', 'U+41', 1]])).toBe('letters:a|other:_|letters:b');
181
+ // No file has it at all: it stays in its run, and is reported when shaped.
182
+ expect(cut('a\u2603b', [['letters', 'ab', 'U+61-7A', 0], ['other', '_', 'U+5F', 1]])).toBe('letters:a\u2603b');
183
+ });
184
+ it('answers a later file for a character an earlier one was drawn from', () => {
185
+ const [latin, slice] = [stub('ab_'), stub('ab')];
186
+ const files = new FaceFiles([latin], new Map([[latin, { unicodeRange: 'U+0-FF', order: 0 }]]));
187
+ expect(files.ranged).toBe(true);
188
+ expect(files.declaredFile(0x61)).toBe(latin);
189
+ files.add(slice, { unicodeRange: 'U+61-7A', order: 5 });
190
+ expect(files.declaredFile(0x61)).toBe(slice);
191
+ expect(files.declaredFile(0x5f)).toBe(latin);
192
+ // A file given again keeps what was first said of it.
193
+ files.add(slice, { unicodeRange: 'U+5F', order: -1 });
194
+ expect(files.declaredFile(0x61)).toBe(slice);
195
+ });
196
+ it('reads the files as bare ones in a document that keeps the host\u2019s language, and with no document at all', () => {
197
+ const files = [['all', ALL, 'U+0-FF', 0], ['capitals', ALL, 'U+41-5A', 1]];
198
+ expect(cut('AaBb', files)).toBe('capitals:A|all:a|capitals:B|all:b');
199
+ expect(cut('AaBb', files, false, true)).toBe('all:AaBb');
200
+ const fonts = files.map(([, chars]) => stub(chars));
201
+ registerFaceFiles(fonts[0], fonts.slice(1), new Map(fonts.map((font, i) => [font, { unicodeRange: files[i][2], order: files[i][3] }])));
202
+ expect(fileRuns(fonts[0], 'AaBb')).toEqual([{ font: fonts[0], text: 'AaBb' }]);
203
+ });
204
+ it('leaves a face given bare as it was: the first file with a glyph, and what follows in it', () => {
205
+ const files = new FaceFiles([stub('ab'), stub('ab_')]);
206
+ expect(files.ranged).toBe(false);
207
+ expect(cut('a_b', [['first', 'ab'], ['second', 'ab_']])).toBe('first:a|second:_b');
208
+ // A place alone, with no range of any file, changes nothing either.
209
+ expect(cut('a_b', [['first', 'ab', undefined, 0], ['second', 'ab_', undefined, 9]])).toBe('first:a|second:_b');
210
+ });
211
+ });
212
+ describe('Noto Serif JP: `Shift_JIS` from the files the page took it from (#770)', () => {
213
+ /** Chrome's widths with the files declared `latin`, 118, 113. */
214
+ const DECLARED_WIDTHS = [['Shift_JIS', 4252], ['Shift', 2315], ['_', 563], ['JIS', 1374], ['t_', 930], ['_J', 966], ['Shift_JIS Shift_JIS', 8760]];
215
+ /** And with `latin` declared last, or alone: `t_` and `_J` kerned. */
216
+ const LATIN_WIDTHS = [['Shift_JIS', 4318], ['Shift', 2315], ['_', 563], ['JIS', 1374], ['t_', 943], ['_J', 1019], ['Shift_JIS Shift_JIS', 8892]];
217
+ it('sets the letters from slice 118 and the `_` from slice 113: 4252, with nothing kerned across', async () => {
218
+ const font = await faceOf(DECLARED);
219
+ inDocument('ja', () => DECLARED_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
220
+ inDocument('en', () => DECLARED_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
221
+ });
222
+ it('whatever order the provider lists the files in', async () => {
223
+ const font = await faceOf([DECLARED[2], DECLARED[0], DECLARED[1]]);
224
+ inDocument('ja', () => DECLARED_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
225
+ });
226
+ it('and from `latin` when it is the one declared last, as a style sheet of Fontsource declares it', async () => {
227
+ const font = await faceOf([declaredFontFile(LATIN, { unicodeRange: RANGE.latin, order: 20 }), DECLARED[1], DECLARED[2]]);
228
+ inDocument('ja', () => LATIN_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
229
+ });
230
+ it('a document that keeps the host\u2019s language reads the files in the order given, as bare ones', async () => {
231
+ const font = await faceOf(DECLARED);
232
+ inHost('en', () => LATIN_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
233
+ inHost('ja', () => near(advance(font, 'Shift_JIS'), 4318, 'Shift_JIS'));
234
+ // And so does text with no document in force.
235
+ near(advance(font, 'Shift_JIS'), 4318, 'Shift_JIS');
236
+ });
237
+ it('bare files are read as before: the first file with a glyph, `latin` for the whole word', async () => {
238
+ const font = await faceOf(BARE);
239
+ inDocument('ja', () => LATIN_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
240
+ inHost('en', () => LATIN_WIDTHS.forEach(([text, chrome]) => near(advance(font, text), chrome, text)));
241
+ });
242
+ /** `Shift_JIS` painted at 20 pt from x = 50, in a face of `answer`. */
243
+ async function painted(answer, host = false) {
244
+ const doc = await PDFDocument.create();
245
+ doc.registerFontkit(fontkit);
246
+ const cache = new FontCache(doc, async () => answer);
247
+ await cache.preloadFontStrings([FONT]);
248
+ const page = doc.addPage([600, 100]);
249
+ const ctx = { page, pageHeightPt: 100, scale: 1, colorSpace: 'rgb' };
250
+ const paint = () => drawTextPx(ctx, 'Shift_JIS', 50, 60, cache.get(FONT), 20, rgb(0, 0, 0));
251
+ if (host)
252
+ inHost('ja', paint);
253
+ else
254
+ inDocument('ja', paint);
255
+ return (await paintedGlyphs(await doc.save()))[0];
256
+ }
257
+ it('paints the word in three runs of two fonts, each glyph where the page put it', async () => {
258
+ const glyphs = await painted(DECLARED);
259
+ expect(glyphs.map((g) => g.text).join('')).toBe('Shift_JIS');
260
+ const fonts = glyphs.map((g) => g.font);
261
+ // Letters in one font, the `_` in another.
262
+ expect(new Set(fonts).size).toBe(2);
263
+ expect(fonts[5]).not.toBe(fonts[4]);
264
+ expect(fonts[6]).toBe(fonts[4]);
265
+ // The `_` an unkerned `t` after it, the `J` an unkerned `_` after: 20 pt of 2315 and 2878.
266
+ expect(glyphs[5].x).toBeCloseTo(50 + 20 * 2.315, 2);
267
+ expect(glyphs[6].x).toBeCloseTo(50 + 20 * 2.878, 2);
268
+ expect(glyphs[8].end).toBeCloseTo(50 + 20 * 4.252, 2);
269
+ // Bare: one font, the pairs kerned (13 and 53 thousandths more).
270
+ const bare = await painted(BARE);
271
+ expect(new Set(bare.map((g) => g.font)).size).toBe(1);
272
+ expect(bare[8].end).toBeCloseTo(50 + 20 * 4.318, 2);
273
+ // A document that keeps the host's language: the same glyphs, of the
274
+ // same font, at the same places, whatever the provider says of its files.
275
+ expect(await painted(DECLARED, true)).toEqual(await painted(BARE, true));
276
+ });
277
+ });
278
+ describe('a face that grows, given with its ranges (#770)', () => {
279
+ it('asks for every character it was not asked for: a file declared later may answer for it', async () => {
280
+ const asked = [];
281
+ const provider = async (_family, _weight, _style, request) => {
282
+ const codePoints = [...(request?.codePoints ?? [])];
283
+ asked.push(codePoints);
284
+ // As a pen answers: for each character, the file its page set it in.
285
+ return [...new Set(codePoints.map((cp) => (cp === 0x5f ? DECLARED[2] : cp === 0x20 ? DECLARED[0] : DECLARED[1])))];
286
+ };
287
+ const doc = await PDFDocument.create();
288
+ doc.registerFontkit(fontkit);
289
+ const cache = new FontCache(doc, provider);
290
+ // The space first: `latin`, which has a glyph for every letter and
291
+ // a range that holds them all.
292
+ await cache.preloadFontStrings(new Map([[FONT, new Set([0x20])]]));
293
+ await cache.preloadFontStrings(new Map([[FONT, new Set([...'Shift_JIS '].map((ch) => ch.codePointAt(0)))]]));
294
+ // Asked again for the letters and the `_`, which the slices declared
295
+ // after `latin` answer for; not for the space.
296
+ expect(asked).toHaveLength(2);
297
+ expect(String.fromCodePoint(...asked[1].sort((a, b) => a - b))).toBe('IJS_fhit');
298
+ const font = cache.get(FONT);
299
+ inDocument('ja', () => near(advance(font, 'Shift_JIS'), 4252, 'Shift_JIS'));
300
+ // Once every character has its file, nothing more is asked.
301
+ await cache.preloadFontStrings(new Map([[FONT, new Set([0x53, 0x5f])]]));
302
+ expect(asked).toHaveLength(2);
303
+ });
304
+ it('a bare face does not: a glyph anywhere is enough, as before', async () => {
305
+ const asked = [];
306
+ const doc = await PDFDocument.create();
307
+ doc.registerFontkit(fontkit);
308
+ const cache = new FontCache(doc, async (_family, _weight, _style, request) => {
309
+ asked.push([...(request?.codePoints ?? [])]);
310
+ return [LATIN];
311
+ });
312
+ await cache.preloadFontStrings(new Map([[FONT, new Set([0x20])]]));
313
+ await cache.preloadFontStrings(new Map([[FONT, new Set([0x53, 0x5f])]]));
314
+ expect(asked).toHaveLength(1);
315
+ });
316
+ });
317
+ // A layout measured as the page measures a face of three files declared
318
+ // `latin`, 118, 113: each character in the file that answers for it, no
319
+ // pair kerned across two files.
320
+ const FACES = { latin: fontkit.create(Buffer.from(LATIN)), 118: fontkit.create(Buffer.from(S118)), 113: fontkit.create(Buffer.from(S113)) };
321
+ class StubCtx {
322
+ font = '';
323
+ letterSpacing = '0px';
324
+ measureText(s) {
325
+ const size = parseFontString(this.font)?.sizePx ?? 16;
326
+ let units = 0;
327
+ let run = '';
328
+ let face;
329
+ const flush = () => {
330
+ if (face && run)
331
+ units += face.layout(run).advanceWidth;
332
+ run = '';
333
+ };
334
+ // Word by word, as the canvas shapes a string.
335
+ for (const word of s.split(/( )/)) {
336
+ for (const ch of word) {
337
+ const next = ch === '_' ? FACES[113] : ch === ' ' ? FACES.latin : FACES[118];
338
+ if (next !== face)
339
+ flush();
340
+ face = next;
341
+ run += ch;
342
+ }
343
+ flush();
344
+ }
345
+ const width = (units / 1000) * size;
346
+ return { width, actualBoundingBoxAscent: 0.88 * size, actualBoundingBoxDescent: 0.12 * size, actualBoundingBoxLeft: 0, actualBoundingBoxRight: width };
347
+ }
348
+ }
349
+ const pt = (value) => ({ value, unit: 'pt' });
350
+ const config = (shapingLanguage) => ({
351
+ locale: 'ja',
352
+ page: { width: pt(300), height: pt(200), dpi: 72, margins: { top: pt(40), bottom: pt(40), left: pt(30), right: pt(30) } },
353
+ layout: { layoutType: 'single' },
354
+ bodyText: { fontFamily: 'Noto Serif JP', fontSize: pt(20), lineHeight: pt(30), firstLineIndent: pt(0), textAlign: 'left', hyphenation: { enabled: false }, shapingLanguage },
355
+ headings: { fontFamily: 'Noto Serif JP' },
356
+ header: { elements: [] },
357
+ footer: { elements: [] },
358
+ });
359
+ describe('a document printed from files given with their ranges (#770)', () => {
360
+ /** The glyphs of `Shift_JIS Shift_JIS` laid out and printed, page by
361
+ * page; `asked` takes the characters the provider is asked for. */
362
+ async function printedPage(answer, shapingLanguage, asked) {
363
+ const canvas = globalThis.OffscreenCanvas;
364
+ globalThis.OffscreenCanvas = class {
365
+ getContext() {
366
+ return new StubCtx();
367
+ }
368
+ };
369
+ try {
370
+ const doc = buildDocument({ markdown: 'Shift_JIS Shift_JIS' }, config(shapingLanguage));
371
+ return await paintedGlyphs(await renderToPdf(doc, {
372
+ fontProvider: async (_family, _weight, _style, request) => {
373
+ asked?.push([...(request?.codePoints ?? [])].sort((a, b) => a - b));
374
+ return answer;
375
+ },
376
+ }));
377
+ }
378
+ finally {
379
+ globalThis.OffscreenCanvas = canvas;
380
+ }
381
+ }
382
+ /** Where the second word ends on the page, pt from the first glyph,
383
+ * and the fonts the line is shown in. */
384
+ async function printed(answer, shapingLanguage) {
385
+ const glyphs = (await printedPage(answer, shapingLanguage))[0].filter((g) => g.text !== ' ');
386
+ expect(glyphs.map((g) => g.text).join('')).toBe('Shift_JISShift_JIS');
387
+ return { width: glyphs[glyphs.length - 1].end - glyphs[0].x, fonts: new Set(glyphs.map((g) => g.font)).size };
388
+ }
389
+ it('ends each word where the layout measured it, in a document shaped in its own language', async () => {
390
+ // 8760 thousandths of 20 pt, as the page measured the line.
391
+ const line = await printed(DECLARED, 'document');
392
+ expect(line.width).toBeCloseTo(20 * 8.76, 1);
393
+ expect(line.fonts).toBe(2);
394
+ });
395
+ it('and 1.3 pt past it from bare files, each word kerned in `latin`', async () => {
396
+ for (const mode of ['document', 'host']) {
397
+ const line = await printed(BARE, mode);
398
+ // The second word starts where the layout put it and runs 66
399
+ // thousandths longer: 4252 + 256 + 4318.
400
+ expect(line.width, mode).toBeCloseTo(20 * 8.826, 1);
401
+ expect(line.fonts, mode).toBe(1);
402
+ }
403
+ });
404
+ it('a document that keeps the host\u2019s language prints the same page whatever the provider says of its files', async () => {
405
+ const described = (await printedPage(DECLARED, 'host'))[0];
406
+ expect(described).toEqual((await printedPage(BARE, 'host'))[0]);
407
+ expect(new Set(described.map((g) => g.font)).size).toBe(1);
408
+ // And its provider is asked for the same characters.
409
+ const asked = [];
410
+ await printedPage(DECLARED, 'host', asked);
411
+ const bare = [];
412
+ await printedPage(BARE, 'host', bare);
413
+ expect(asked).toEqual(bare);
414
+ });
415
+ });
416
+ describe('the files of an answer in the order a style sheet declares them (#770)', () => {
417
+ const file = (name, order) => declaredFontFile(new TextEncoder().encode(name), order === undefined ? {} : { order });
418
+ const names = (files) => files.map((f) => new TextDecoder().decode(f)).join(' ');
419
+ it('by their numbers, and a list with none from its last file to its first', () => {
420
+ expect(names(inDeclarationOrder([file('c', 7), file('a', 0), file('b', 3)]))).toBe('a b c');
421
+ expect(names(inDeclarationOrder([file('last'), file('middle'), file('first')]))).toBe('first middle last');
422
+ });
423
+ it('an SVG picture drawn as an image declares ranged files as the page did: each rule with its range, the last declared last', async () => {
424
+ const svg = '<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><text font-family="Noto Serif JP">Shift_JIS</text></svg>';
425
+ const out = await inlineSvgFontsForRaster(svg, [FONT], async () => [DECLARED[2], DECLARED[0], DECLARED[1]]);
426
+ const rules = [...out.matchAll(/@font-face\{[^}]*\}/g)].map((m) => m[0]);
427
+ expect(rules).toHaveLength(3);
428
+ expect(rules.map((rule) => /unicode-range:([^;}]*)/.exec(rule)?.[1]?.split(',')[0])).toEqual(['U+0-ff', 'U+21-22', 'U+26']);
429
+ // Bare files: one rule each, as given, with no range.
430
+ const bare = await inlineSvgFontsForRaster(svg, [FONT], async () => BARE);
431
+ expect([...bare.matchAll(/@font-face\{[^}]*\}/g)]).toHaveLength(3);
432
+ expect(bare).not.toContain('unicode-range');
433
+ });
434
+ });
435
+ //# sourceMappingURL=declaredFiles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaredFiles.test.js","sourceRoot":"","sources":["../../src/__tests__/declaredFiles.test.ts"],"names":[],"mappings":"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"}
@@ -123,14 +123,25 @@ describe('a design text in a face with no Arabic letters (#401)', () => {
123
123
  const latin = new Uint8Array(fs.readFileSync(new URL('./fixtures/arabic/amiri-latin-slice.ttf', import.meta.url)));
124
124
  const base = config();
125
125
  const header = { elements: [{ ...base.header.elements[0], fontFamily: 'Latin Only' }] };
126
- const doc = buildDocument({ markdown: `# ${TITLE}\n\nكلمة كلمة.` }, { ...base, header });
127
- const warnings = [];
128
- await renderToPdf(doc, { fontProvider: async (family) => (family === 'Latin Only' ? latin : AMIRI), onWarning: (w) => warnings.push(w) });
129
- const missing = warnings.filter((w) => w.kind === 'missingGlyph');
126
+ const missingIn = async (bodyText) => {
127
+ const doc = buildDocument({ markdown: `# ${TITLE}\n\nكلمة كلمة.` }, { ...base, header, bodyText: { ...base.bodyText, ...bodyText } });
128
+ const warnings = [];
129
+ await renderToPdf(doc, { fontProvider: async (family) => (family === 'Latin Only' ? latin : AMIRI), onWarning: (w) => warnings.push(w) });
130
+ return warnings.filter((w) => w.kind === 'missingGlyph');
131
+ };
132
+ const missing = await missingIn({});
130
133
  expect(missing).toHaveLength(1);
131
134
  expect(missing[0].family).toBe('Latin Only');
132
- // The title's Arabic letters, not its Latin word or the space.
133
- expect(missing[0].characters.join('')).toBe('السمعيك');
135
+ // The title's Arabic letters, not its Latin word or the space. The
136
+ // document is shaped in its own language, word by word (#770): the
137
+ // letters come in the order its words are set in, the word at the left
138
+ // of the line first.
139
+ expect(missing[0].characters.join('')).toBe('عليكماس');
140
+ // Shaped in the host's language the run is one text, read from its
141
+ // first letter, as up to postext-pdf 1.29.
142
+ const hosted = await missingIn({ shapingLanguage: 'host' });
143
+ expect(hosted).toHaveLength(1);
144
+ expect(hosted[0].characters.join('')).toBe('السمعيك');
134
145
  });
135
146
  });
136
147
  //# sourceMappingURL=designTextRtl.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"designTextRtl.test.js","sourceRoot":"","sources":["../../src/__tests__/designTextRtl.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"designTextRtl.test.js","sourceRoot":"","sources":["../../src/__tests__/designTextRtl.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** A glyph as a page shows it. */
2
+ export interface PaintedGlyph {
3
+ /** The text object (`BT` … `ET`) it is shown in, counted from 0 on its page. */
4
+ object: number;
5
+ /** The resource name of its font, and the font's `/BaseFont`. */
6
+ font: string;
7
+ baseFont: string;
8
+ /** Its code: the glyph id in the embedded file. */
9
+ code: number;
10
+ /** What `/ToUnicode` reads it as (empty with no entry). */
11
+ text: string;
12
+ /** Its origin and the pen after it, character spacing included (pt). */
13
+ x: number;
14
+ y: number;
15
+ end: number;
16
+ /** Its own advance (its `/W` width at the font size), pt. */
17
+ advance: number;
18
+ /** The font size, pt. */
19
+ size: number;
20
+ /** Its outline's box in the embedded file, thousandths of the em: `left right bottom top`. */
21
+ box: string;
22
+ }
23
+ /** The glyphs of each page of `bytes`, in the order they are shown. */
24
+ export declare function paintedGlyphs(bytes: Uint8Array): Promise<PaintedGlyph[][]>;
25
+ //# sourceMappingURL=glyphPositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glyphPositions.d.ts","sourceRoot":"","sources":["../../src/__tests__/glyphPositions.ts"],"names":[],"mappings":"AAcA,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,GAAG,EAAE,MAAM,CAAC;CACb;AAqID,uEAAuE;AACvE,wBAAsB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAqBhF"}