postext 1.25.4 → 1.26.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 (214) hide show
  1. package/dist/__tests__/cjk/headingNumberMark.test.d.ts +2 -0
  2. package/dist/__tests__/cjk/headingNumberMark.test.d.ts.map +1 -0
  3. package/dist/__tests__/cjk/headingNumberMark.test.js +108 -0
  4. package/dist/__tests__/cjk/headingNumberMark.test.js.map +1 -0
  5. package/dist/__tests__/cjk/japaneseDash.test.d.ts +2 -0
  6. package/dist/__tests__/cjk/japaneseDash.test.d.ts.map +1 -0
  7. package/dist/__tests__/cjk/japaneseDash.test.js +250 -0
  8. package/dist/__tests__/cjk/japaneseDash.test.js.map +1 -0
  9. package/dist/__tests__/cjk/japaneseSpacing.test.js +1 -1
  10. package/dist/__tests__/cjk/punctuation.test.js +5 -3
  11. package/dist/__tests__/cjk/punctuation.test.js.map +1 -1
  12. package/dist/__tests__/columnRuleBands.test.js +47 -0
  13. package/dist/__tests__/columnRuleBands.test.js.map +1 -1
  14. package/dist/__tests__/comics/canvas.test.js +38 -1
  15. package/dist/__tests__/comics/canvas.test.js.map +1 -1
  16. package/dist/__tests__/comics/html.test.js +16 -3
  17. package/dist/__tests__/comics/html.test.js.map +1 -1
  18. package/dist/__tests__/design/cjkDesignDash.test.js +7 -4
  19. package/dist/__tests__/design/cjkDesignDash.test.js.map +1 -1
  20. package/dist/__tests__/englishApostropheHyphenation.test.d.ts +2 -0
  21. package/dist/__tests__/englishApostropheHyphenation.test.d.ts.map +1 -0
  22. package/dist/__tests__/englishApostropheHyphenation.test.js +47 -0
  23. package/dist/__tests__/englishApostropheHyphenation.test.js.map +1 -0
  24. package/dist/__tests__/exports.test.js +1 -0
  25. package/dist/__tests__/exports.test.js.map +1 -1
  26. package/dist/__tests__/leaderMinRepeats.test.d.ts +2 -0
  27. package/dist/__tests__/leaderMinRepeats.test.d.ts.map +1 -0
  28. package/dist/__tests__/leaderMinRepeats.test.js +109 -0
  29. package/dist/__tests__/leaderMinRepeats.test.js.map +1 -0
  30. package/dist/__tests__/pipeline/footnoteRuntTracking.test.d.ts +2 -0
  31. package/dist/__tests__/pipeline/footnoteRuntTracking.test.d.ts.map +1 -0
  32. package/dist/__tests__/pipeline/footnoteRuntTracking.test.js +90 -0
  33. package/dist/__tests__/pipeline/footnoteRuntTracking.test.js.map +1 -0
  34. package/dist/__tests__/pipeline/orderedNumberAlign.test.d.ts +2 -0
  35. package/dist/__tests__/pipeline/orderedNumberAlign.test.d.ts.map +1 -0
  36. package/dist/__tests__/pipeline/orderedNumberAlign.test.js +108 -0
  37. package/dist/__tests__/pipeline/orderedNumberAlign.test.js.map +1 -0
  38. package/dist/__tests__/pipeline/trailingCapColumnNote.test.d.ts +2 -0
  39. package/dist/__tests__/pipeline/trailingCapColumnNote.test.d.ts.map +1 -0
  40. package/dist/__tests__/pipeline/trailingCapColumnNote.test.js +63 -0
  41. package/dist/__tests__/pipeline/trailingCapColumnNote.test.js.map +1 -0
  42. package/dist/__tests__/pipeline/trailingCapFloatHead.test.d.ts +2 -0
  43. package/dist/__tests__/pipeline/trailingCapFloatHead.test.d.ts.map +1 -0
  44. package/dist/__tests__/pipeline/trailingCapFloatHead.test.js +91 -0
  45. package/dist/__tests__/pipeline/trailingCapFloatHead.test.js.map +1 -0
  46. package/dist/__tests__/rtl/arabicLeadingNumbers.test.d.ts +2 -0
  47. package/dist/__tests__/rtl/arabicLeadingNumbers.test.d.ts.map +1 -0
  48. package/dist/__tests__/rtl/arabicLeadingNumbers.test.js +186 -0
  49. package/dist/__tests__/rtl/arabicLeadingNumbers.test.js.map +1 -0
  50. package/dist/__tests__/rtl/listMarkerDirection.test.d.ts +2 -0
  51. package/dist/__tests__/rtl/listMarkerDirection.test.d.ts.map +1 -0
  52. package/dist/__tests__/rtl/listMarkerDirection.test.js +197 -0
  53. package/dist/__tests__/rtl/listMarkerDirection.test.js.map +1 -0
  54. package/dist/__tests__/trackedLigatures.test.d.ts +2 -0
  55. package/dist/__tests__/trackedLigatures.test.d.ts.map +1 -0
  56. package/dist/__tests__/trackedLigatures.test.js +230 -0
  57. package/dist/__tests__/trackedLigatures.test.js.map +1 -0
  58. package/dist/__tests__/vectorRasterScale.test.d.ts +2 -0
  59. package/dist/__tests__/vectorRasterScale.test.d.ts.map +1 -0
  60. package/dist/__tests__/vectorRasterScale.test.js +304 -0
  61. package/dist/__tests__/vectorRasterScale.test.js.map +1 -0
  62. package/dist/bidi.d.ts +43 -3
  63. package/dist/bidi.d.ts.map +1 -1
  64. package/dist/bidi.js +29 -7
  65. package/dist/bidi.js.map +1 -1
  66. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  67. package/dist/canvas-backend/blockRender.js +43 -5
  68. package/dist/canvas-backend/blockRender.js.map +1 -1
  69. package/dist/canvas-backend/comic.d.ts +8 -4
  70. package/dist/canvas-backend/comic.d.ts.map +1 -1
  71. package/dist/canvas-backend/comic.js +13 -6
  72. package/dist/canvas-backend/comic.js.map +1 -1
  73. package/dist/canvas-backend/deviceScale.d.ts +31 -0
  74. package/dist/canvas-backend/deviceScale.d.ts.map +1 -0
  75. package/dist/canvas-backend/deviceScale.js +45 -0
  76. package/dist/canvas-backend/deviceScale.js.map +1 -0
  77. package/dist/canvas-backend/index.d.ts +5 -1
  78. package/dist/canvas-backend/index.d.ts.map +1 -1
  79. package/dist/canvas-backend/index.js.map +1 -1
  80. package/dist/canvas-backend/renderResourceBlock.d.ts +5 -3
  81. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  82. package/dist/canvas-backend/renderResourceBlock.js +39 -6
  83. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  84. package/dist/canvas-backend/trackedText.d.ts +55 -0
  85. package/dist/canvas-backend/trackedText.d.ts.map +1 -0
  86. package/dist/canvas-backend/trackedText.js +145 -0
  87. package/dist/canvas-backend/trackedText.js.map +1 -0
  88. package/dist/canvas-backend/wordRuns.d.ts +4 -0
  89. package/dist/canvas-backend/wordRuns.d.ts.map +1 -1
  90. package/dist/canvas-backend/wordRuns.js +9 -1
  91. package/dist/canvas-backend/wordRuns.js.map +1 -1
  92. package/dist/columnRule.d.ts +2 -1
  93. package/dist/columnRule.d.ts.map +1 -1
  94. package/dist/columnRule.js +11 -3
  95. package/dist/columnRule.js.map +1 -1
  96. package/dist/comics/layoutPage.d.ts.map +1 -1
  97. package/dist/comics/layoutPage.js +54 -2
  98. package/dist/comics/layoutPage.js.map +1 -1
  99. package/dist/comics/lettering/__tests__/ellipsisFace.test.d.ts +2 -0
  100. package/dist/comics/lettering/__tests__/ellipsisFace.test.d.ts.map +1 -0
  101. package/dist/comics/lettering/__tests__/ellipsisFace.test.js +54 -0
  102. package/dist/comics/lettering/__tests__/ellipsisFace.test.js.map +1 -0
  103. package/dist/comics/lettering/__tests__/polish.test.js +8 -0
  104. package/dist/comics/lettering/__tests__/polish.test.js.map +1 -1
  105. package/dist/comics/lettering/__tests__/round4.test.d.ts +2 -0
  106. package/dist/comics/lettering/__tests__/round4.test.d.ts.map +1 -0
  107. package/dist/comics/lettering/__tests__/round4.test.js +212 -0
  108. package/dist/comics/lettering/__tests__/round4.test.js.map +1 -0
  109. package/dist/comics/lettering/letter.js +2 -2
  110. package/dist/comics/lettering/letter.js.map +1 -1
  111. package/dist/comics/lettering/placement.d.ts +10 -3
  112. package/dist/comics/lettering/placement.d.ts.map +1 -1
  113. package/dist/comics/lettering/placement.js +162 -22
  114. package/dist/comics/lettering/placement.js.map +1 -1
  115. package/dist/comics/lettering/text.d.ts.map +1 -1
  116. package/dist/comics/lettering/text.js +25 -3
  117. package/dist/comics/lettering/text.js.map +1 -1
  118. package/dist/comics/lettering/types.d.ts +29 -2
  119. package/dist/comics/lettering/types.d.ts.map +1 -1
  120. package/dist/defaults/orderedLists.d.ts +1 -0
  121. package/dist/defaults/orderedLists.d.ts.map +1 -1
  122. package/dist/defaults/orderedLists.js +7 -0
  123. package/dist/defaults/orderedLists.js.map +1 -1
  124. package/dist/design/bidiText.d.ts +5 -2
  125. package/dist/design/bidiText.d.ts.map +1 -1
  126. package/dist/design/bidiText.js +7 -4
  127. package/dist/design/bidiText.js.map +1 -1
  128. package/dist/design/layout.d.ts +5 -0
  129. package/dist/design/layout.d.ts.map +1 -1
  130. package/dist/design/layout.js +1 -1
  131. package/dist/design/layout.js.map +1 -1
  132. package/dist/html-backend.d.ts.map +1 -1
  133. package/dist/html-backend.js +32 -6
  134. package/dist/html-backend.js.map +1 -1
  135. package/dist/htmlComic.d.ts +2 -1
  136. package/dist/htmlComic.d.ts.map +1 -1
  137. package/dist/htmlComic.js +14 -1
  138. package/dist/htmlComic.js.map +1 -1
  139. package/dist/hyphenate.d.ts.map +1 -1
  140. package/dist/hyphenate.js +52 -0
  141. package/dist/hyphenate.js.map +1 -1
  142. package/dist/index.d.ts +3 -3
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +1 -1
  145. package/dist/index.js.map +1 -1
  146. package/dist/math/rasterCache.d.ts +7 -1
  147. package/dist/math/rasterCache.d.ts.map +1 -1
  148. package/dist/math/rasterCache.js +23 -11
  149. package/dist/math/rasterCache.js.map +1 -1
  150. package/dist/measure/bidiLines.d.ts +8 -0
  151. package/dist/measure/bidiLines.d.ts.map +1 -1
  152. package/dist/measure/bidiLines.js +13 -0
  153. package/dist/measure/bidiLines.js.map +1 -1
  154. package/dist/measure/cache.d.ts.map +1 -1
  155. package/dist/measure/cache.js +5 -3
  156. package/dist/measure/cache.js.map +1 -1
  157. package/dist/measure/cjkCompose.d.ts +10 -0
  158. package/dist/measure/cjkCompose.d.ts.map +1 -1
  159. package/dist/measure/cjkCompose.js +95 -19
  160. package/dist/measure/cjkCompose.js.map +1 -1
  161. package/dist/measure/cjkPunctuation.d.ts +10 -0
  162. package/dist/measure/cjkPunctuation.d.ts.map +1 -1
  163. package/dist/measure/cjkPunctuation.js +18 -1
  164. package/dist/measure/cjkPunctuation.js.map +1 -1
  165. package/dist/measure/hardBreaks.d.ts.map +1 -1
  166. package/dist/measure/hardBreaks.js +4 -1
  167. package/dist/measure/hardBreaks.js.map +1 -1
  168. package/dist/measure/leader.d.ts +6 -1
  169. package/dist/measure/leader.d.ts.map +1 -1
  170. package/dist/measure/leader.js +8 -3
  171. package/dist/measure/leader.js.map +1 -1
  172. package/dist/measure/plain.d.ts.map +1 -1
  173. package/dist/measure/plain.js +4 -2
  174. package/dist/measure/plain.js.map +1 -1
  175. package/dist/measure/rich.d.ts.map +1 -1
  176. package/dist/measure/rich.js +7 -4
  177. package/dist/measure/rich.js.map +1 -1
  178. package/dist/measure/types.d.ts +7 -0
  179. package/dist/measure/types.d.ts.map +1 -1
  180. package/dist/measure/types.js.map +1 -1
  181. package/dist/pipeline/build.d.ts.map +1 -1
  182. package/dist/pipeline/build.js +38 -5
  183. package/dist/pipeline/build.js.map +1 -1
  184. package/dist/pipeline/buildBlockKind.d.ts +5 -0
  185. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  186. package/dist/pipeline/buildBlockKind.js +1 -0
  187. package/dist/pipeline/buildBlockKind.js.map +1 -1
  188. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  189. package/dist/pipeline/calloutLayout.js +8 -4
  190. package/dist/pipeline/calloutLayout.js.map +1 -1
  191. package/dist/pipeline/citations.d.ts.map +1 -1
  192. package/dist/pipeline/citations.js +52 -6
  193. package/dist/pipeline/citations.js.map +1 -1
  194. package/dist/pipeline/config.d.ts +6 -0
  195. package/dist/pipeline/config.d.ts.map +1 -1
  196. package/dist/pipeline/config.js +12 -1
  197. package/dist/pipeline/config.js.map +1 -1
  198. package/dist/pipeline/headerFooter.d.ts +2 -0
  199. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  200. package/dist/pipeline/headerFooter.js +3 -1
  201. package/dist/pipeline/headerFooter.js.map +1 -1
  202. package/dist/pipeline/lists.d.ts +8 -0
  203. package/dist/pipeline/lists.d.ts.map +1 -1
  204. package/dist/pipeline/lists.js +18 -1
  205. package/dist/pipeline/lists.js.map +1 -1
  206. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  207. package/dist/pipeline/measureContentBlock.js +3 -0
  208. package/dist/pipeline/measureContentBlock.js.map +1 -1
  209. package/dist/types.d.ts +13 -0
  210. package/dist/types.d.ts.map +1 -1
  211. package/dist/vdt.d.ts +9 -0
  212. package/dist/vdt.d.ts.map +1 -1
  213. package/dist/vdt.js.map +1 -1
  214. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=leaderMinRepeats.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderMinRepeats.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/leaderMinRepeats.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../pipeline';
3
+ import { fitLeader, MIN_LEADER_REPEATS } from '../measure/leader';
4
+ // #666: a leader with room for one or two repeats printed them: a lone dot
5
+ // between a title and its page number, which reads as a full stop
6
+ // ("Punzones, matrices y el nombre de Garamond . 9"). A leader is set with
7
+ // three repeats or more, or not at all.
8
+ /** 7 px a character. */
9
+ class Ctx {
10
+ font = '';
11
+ measureText(s) {
12
+ return { width: s.length * 7 };
13
+ }
14
+ }
15
+ globalThis.OffscreenCanvas = class {
16
+ getContext() {
17
+ return new Ctx();
18
+ }
19
+ };
20
+ const pt = (value) => ({ value, unit: 'pt' });
21
+ const seven = (text) => text.length * 7;
22
+ describe('fitLeader (#666)', () => {
23
+ it('sets three repeats or more', () => {
24
+ expect(MIN_LEADER_REPEATS).toBe(3);
25
+ expect(fitLeader('.', 21, seven)).toEqual({ text: '...', width: 21 });
26
+ expect(fitLeader('.', 70.5, seven)).toEqual({ text: '.'.repeat(10), width: 70 });
27
+ expect(fitLeader('. ', 42, seven)).toEqual({ text: '. . . ', width: 42 });
28
+ });
29
+ it('sets none in a room for one or two', () => {
30
+ expect(fitLeader('.', 7, seven)).toBeNull();
31
+ expect(fitLeader('.', 20.9, seven)).toBeNull();
32
+ expect(fitLeader('. ', 41, seven)).toBeNull();
33
+ expect(fitLeader('.', 6, seven)).toBeNull();
34
+ });
35
+ it('counts the repeats that fit as a run, not one by one', () => {
36
+ // A face that spaces its dots apart: three dots at 7 px each fit 27 px
37
+ // counted one by one, and take 27 px as a run of three.
38
+ const kerned = (text) => text.length * 7 + Math.max(0, text.length - 1) * 3;
39
+ expect(fitLeader('.', 27, kerned)).toEqual({ text: '...', width: 27 });
40
+ expect(fitLeader('.', 26, kerned)).toBeNull();
41
+ });
42
+ });
43
+ // A 260 px measure at 72 dpi.
44
+ const config = (extra = {}) => ({
45
+ page: { dpi: 72, width: pt(300), height: pt(500), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
46
+ layout: { layoutType: 'single' },
47
+ header: { elements: [] },
48
+ footer: { elements: [] },
49
+ bodyText: { firstLineIndent: pt(0), textAlign: 'left', fontFamily: 'Test', hyphenation: { enabled: false } },
50
+ ...extra,
51
+ });
52
+ const leaderOf = (line) => line.segments?.find((s) => s.leader !== undefined);
53
+ const widthOf = (line) => line.segments.reduce((w, s) => w + s.width, 0);
54
+ describe('a contents row (#666)', () => {
55
+ const toc = config({
56
+ headings: { levels: [{ level: 1, breakBefore: { enabled: false, parity: 'any' } }] },
57
+ headingStyles: [{ id: 'front', numbered: false }],
58
+ toc: { leader: { char: '.', gap: pt(7) } },
59
+ });
60
+ const rows = (titles) => {
61
+ const markdown = ['# Contents {style="front" toc="false"}', ':::toc', ...titles.flatMap((t) => [`# ${t}`, 'Some text.'])].join('\n\n');
62
+ const doc = buildDocument({ markdown }, toc);
63
+ const blocks = doc.blocks.filter((b) => b.tocEntry && b.pageIndex === 0);
64
+ return { doc, lines: blocks.map((b) => b.lines[b.lines.length - 1]) };
65
+ };
66
+ it('a title that leaves room for one or two dots is set without leader, its page number where it was', () => {
67
+ // The row holds the number, the title, the gap, the leader, the gap and
68
+ // the page number: titles one character apart walk the leader's room
69
+ // down a dot at a time.
70
+ const base = 'A title of the contents';
71
+ const titles = Array.from({ length: 9 }, (_, i) => base + 'x'.repeat(i));
72
+ const { doc, lines } = rows(titles);
73
+ expect(lines).toHaveLength(titles.length);
74
+ const col = doc.pages[0].columns[0];
75
+ const counts = lines.map((l) => leaderOf(l)?.text.length ?? 0);
76
+ // One line each: no title wraps.
77
+ lines.forEach((l, i) => expect(l.text.startsWith(titles[i])).toBe(true));
78
+ // Longer titles, shorter leaders, and never one of one or two dots.
79
+ expect(counts.some((n) => n >= MIN_LEADER_REPEATS)).toBe(true);
80
+ expect(counts.some((n) => n === 0)).toBe(true);
81
+ expect(counts.every((n) => n === 0 || n >= MIN_LEADER_REPEATS)).toBe(true);
82
+ for (let i = 1; i < counts.length; i++)
83
+ expect(counts[i]).toBeLessThanOrEqual(counts[i - 1]);
84
+ // The first row without leader had room for two dots.
85
+ const first = counts.indexOf(0);
86
+ expect(counts[first - 1]).toBe(MIN_LEADER_REPEATS);
87
+ // Every row still ends on the column's edge, on its page number.
88
+ for (const line of lines) {
89
+ expect(line.bbox.x + widthOf(line)).toBeCloseTo(col.bbox.x + col.bbox.width, 3);
90
+ expect(line.segments.at(-1).text).toMatch(/^\d+$/);
91
+ }
92
+ });
93
+ });
94
+ describe('a tab stop (#666)', () => {
95
+ const menu = config({ bodyText: { firstLineIndent: pt(0), textAlign: 'left', fontFamily: 'Test', hyphenation: { enabled: false }, tabStops: [{ position: 'end', align: 'end', leader: '.', leaderGap: pt(7) }] } });
96
+ const line = (dish) => buildDocument({ markdown: `${dish}\t9` }, menu).blocks.find((b) => b.type === 'paragraph').lines[0];
97
+ it('sets a leader of three dots and none of two, the price at the stop either way', () => {
98
+ // 260 px: the dish, 7 px, the dots, 7 px, the price (7 px).
99
+ const three = line('x'.repeat(31)); // 217 + 7 + 21 + 7 + 7 = 259
100
+ const two = line('x'.repeat(32));
101
+ expect(leaderOf(three)?.text).toBe('...');
102
+ expect(leaderOf(two)).toBeUndefined();
103
+ for (const l of [three, two]) {
104
+ expect(l.segments.at(-1).text).toBe('9');
105
+ expect(l.bbox.x + widthOf(l)).toBeCloseTo(20 + 260, 3);
106
+ }
107
+ });
108
+ });
109
+ //# sourceMappingURL=leaderMinRepeats.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderMinRepeats.test.js","sourceRoot":"","sources":["../../src/__tests__/leaderMinRepeats.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=footnoteRuntTracking.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footnoteRuntTracking.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/footnoteRuntTracking.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { renderBlock } from '../../canvas-backend/blockRender';
4
+ import { renderToHtml } from '../../html-backend';
5
+ // #662: a note at the foot of its column whose runt the engine takes up by
6
+ // setting it one line shorter with a little negative tracking
7
+ // (`bodyText.tightenRunts`, `maxRuntTracking`) is measured with that
8
+ // tracking, so it must be painted with it too. The flow and the boxes stamp
9
+ // the tracking on their blocks (EF-111); the note blocks did not, so a
10
+ // one-line note printed its words at their natural widths on the places
11
+ // measured for the tightened ones: the word spaces closed up until the
12
+ // words joined.
13
+ // Widths that vary by character, so the breaks fall in many places.
14
+ const W = (ch) => {
15
+ if (ch === ' ')
16
+ return 0.25;
17
+ if (ch === ' ')
18
+ return 0.5;
19
+ if ('il.,;:!|\'()'.includes(ch))
20
+ return 0.28;
21
+ if ('mwMW'.includes(ch))
22
+ return 0.8;
23
+ if (/[A-Z]/.test(ch))
24
+ return 0.66;
25
+ return 0.5;
26
+ };
27
+ class StubCtx {
28
+ font = '';
29
+ letterSpacing = '0px';
30
+ measureText(s) {
31
+ const size = parseFloat(/(\d*\.?\d+)px/.exec(this.font)?.[1] ?? '10');
32
+ let w = 0;
33
+ for (const ch of s)
34
+ w += W(ch) * size;
35
+ return { width: w };
36
+ }
37
+ }
38
+ globalThis.OffscreenCanvas = class {
39
+ getContext() {
40
+ return new StubCtx();
41
+ }
42
+ };
43
+ const pt = (value) => ({ value, unit: 'pt' });
44
+ // 72 dpi: 1 pt = 1 px.
45
+ const config = (footnotes = {}, bodyText = {}) => ({
46
+ page: { width: pt(160), height: pt(400), dpi: 72, margins: { top: pt(10), bottom: pt(10), left: pt(10), right: pt(10) } },
47
+ layout: { layoutType: 'single' },
48
+ header: { elements: [] },
49
+ footer: { elements: [] },
50
+ bodyText: { fontSize: pt(10), lineHeight: pt(14), firstLineIndent: pt(0), hyphenation: { enabled: false }, ...bodyText },
51
+ footnotes: { fontSize: pt(10), lineHeight: pt(14), ...footnotes },
52
+ });
53
+ // Two lines set naturally, the second a one-word runt; one with 5‰ of tracking.
54
+ const NOTE = 'and within a is its within then';
55
+ const MD = `The text cites a work.[^n]\n\n[^n]: ${NOTE}`;
56
+ const note = (doc) => doc.blocks.find((b) => b.footnoteNote !== undefined);
57
+ describe('runt tracking in a note at the column foot (#662)', () => {
58
+ it('a ragged note is set a line shorter with negative tracking, and its block carries it', () => {
59
+ const tightened = note(buildDocument({ markdown: MD }, config({ textAlign: 'left' })));
60
+ expect(tightened.lines.map((l) => l.text)).toEqual([`1\u2002${NOTE}`]);
61
+ expect(tightened.letterSpacing).toBeCloseTo(-0.05, 5);
62
+ // Measured with the tracking: the line fits its column.
63
+ expect(tightened.lines[0].bbox.width).toBeLessThanOrEqual(tightened.bbox.width);
64
+ const natural = note(buildDocument({ markdown: MD }, config({ textAlign: 'left' }, { maxRuntTracking: 0 })));
65
+ expect(natural.lines.map((l) => l.text)).toEqual([`1\u2002${NOTE.slice(0, -5)}`, 'then']);
66
+ expect(natural.letterSpacing).toBeUndefined();
67
+ });
68
+ it('the canvas and the HTML paint the note with it', () => {
69
+ const doc = buildDocument({ markdown: MD }, config({ textAlign: 'left' }));
70
+ const block = note(doc);
71
+ const seen = [];
72
+ const ctx = {
73
+ font: '', fillStyle: '', textBaseline: 'alphabetic', _ls: '0px',
74
+ get letterSpacing() { return this._ls; },
75
+ set letterSpacing(v) { this._ls = v; },
76
+ fillText(text) { seen.push(`${this._ls}:${text}`); },
77
+ save() { }, restore() { }, beginPath() { }, rect() { }, clip() { }, fillRect() { }, moveTo() { }, lineTo() { }, stroke() { },
78
+ };
79
+ renderBlock(ctx, block, block.bbox.width, block.bbox.x);
80
+ expect(seen.length).toBeGreaterThan(0);
81
+ expect(seen.every((s) => s.startsWith('-0.05px:'))).toBe(true);
82
+ expect(renderToHtml(doc)).toMatch(/class="pt-line"[^>]*letter-spacing:-0\.05px;/);
83
+ });
84
+ it('a note that needs no tightening carries no tracking', () => {
85
+ const block = note(buildDocument({ markdown: 'The text cites a work.[^n]\n\n[^n]: A short note.' }, config({ textAlign: 'left' })));
86
+ expect(block.lines).toHaveLength(1);
87
+ expect(block.letterSpacing).toBeUndefined();
88
+ });
89
+ });
90
+ //# sourceMappingURL=footnoteRuntTracking.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footnoteRuntTracking.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/footnoteRuntTracking.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=orderedNumberAlign.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderedNumberAlign.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/orderedNumberAlign.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline/build';
3
+ import { createMeasurementCache } from '../../measure';
4
+ import { resolveBodyTextConfig, resolveOrderedListsConfig, stripOrderedListsDefaults } from '../../defaults';
5
+ // `orderedLists.numberAlign` (#682): the numbers of a list at the start of
6
+ // their column, so labels of different lengths begin together (第九條,
7
+ // 第十一條). Every character is 7 px wide in the stub: '9.' is 14 px and
8
+ // '10.' 21 px.
9
+ class StubCtx {
10
+ font = '';
11
+ measureText(s) {
12
+ return { width: s.length * 7 };
13
+ }
14
+ }
15
+ globalThis.OffscreenCanvas = class {
16
+ getContext() {
17
+ return new StubCtx();
18
+ }
19
+ };
20
+ const pt = (value) => ({ value, unit: 'pt' });
21
+ const mm = (value) => ({ value, unit: 'mm' });
22
+ const config = (ordered = {}, extra = {}) => ({
23
+ page: { width: mm(120), height: mm(150), dpi: 72, margins: { top: mm(10), bottom: mm(10), left: mm(10), right: mm(10) } },
24
+ layout: { layoutType: 'single' },
25
+ bodyText: { fontSize: pt(10), lineHeight: pt(12), firstLineIndent: pt(0) },
26
+ orderedLists: ordered,
27
+ headings: { balancing: { enabled: false } },
28
+ ...extra,
29
+ });
30
+ const build = (md, cfg) => buildDocument({ markdown: md }, cfg, createMeasurementCache());
31
+ const items = (doc) => doc.blocks.filter((b) => b.type === 'listItem');
32
+ const textX = (b) => b.lines[0].bbox.x;
33
+ const LIST = '8. Eight\n9. Nine\n10. Ten\n11. Eleven';
34
+ describe('orderedLists.numberAlign (#682)', () => {
35
+ it('defaults to \'end\', strips the default and reads an unknown value as \'end\'', () => {
36
+ const body = resolveBodyTextConfig();
37
+ expect(resolveOrderedListsConfig(undefined, body).numberAlign).toBe('end');
38
+ expect(resolveOrderedListsConfig({ numberAlign: 'start' }, body).numberAlign).toBe('start');
39
+ expect(resolveOrderedListsConfig({ numberAlign: 'left' }, body).numberAlign).toBe('end');
40
+ expect(stripOrderedListsDefaults({ numberAlign: 'end' })).toBeUndefined();
41
+ expect(stripOrderedListsDefaults({ numberAlign: 'start' })).toEqual({ numberAlign: 'start' });
42
+ });
43
+ it('by default the numbers end together', () => {
44
+ const list = items(build(LIST, config()));
45
+ // '9.' one digit right of '10.'.
46
+ expect(list[1].bulletOffsetX - list[2].bulletOffsetX).toBeCloseTo(7, 5);
47
+ expect(JSON.stringify(items(build(LIST, config({ numberAlign: 'end' }))))).toBe(JSON.stringify(list));
48
+ });
49
+ it('\'start\' begins every number at the start of the column, the text where it was', () => {
50
+ const end = items(build(LIST, config()));
51
+ const start = items(build(LIST, config({ numberAlign: 'start' })));
52
+ const x = start[0].bulletOffsetX;
53
+ for (const b of start)
54
+ expect(b.bulletOffsetX).toBeCloseTo(x, 5);
55
+ // Where the widest number of the run stood.
56
+ expect(x).toBeCloseTo(end[2].bulletOffsetX, 5);
57
+ start.forEach((b, i) => {
58
+ expect(textX(b)).toBeCloseTo(textX(end[i]), 5);
59
+ expect(b.lines.map((l) => l.text)).toEqual(end[i].lines.map((l) => l.text));
60
+ expect(b.bbox).toEqual(end[i].bbox);
61
+ });
62
+ });
63
+ it('works with the level-wide column and per depth', () => {
64
+ const md = '1. Stem\n 9. ninth\n 10. tenth\n\nBetween.\n\n10. Other';
65
+ const [stem, ninth, tenth, other] = items(build(md, config({ numberAlign: 'start', numberWidth: 'level' })));
66
+ expect(stem.bulletOffsetX).toBeCloseTo(other.bulletOffsetX, 5);
67
+ expect(ninth.bulletOffsetX).toBeCloseTo(tenth.bulletOffsetX, 5);
68
+ expect(textX(stem)).toBeCloseTo(textX(other), 5);
69
+ });
70
+ it('a separator run follows its own number', () => {
71
+ const cfg = (align) => config({ numberAlign: align, separatorFontWeight: 400, fontWeight: 700 });
72
+ const start = items(build(LIST, cfg('start')));
73
+ const end = items(build(LIST, cfg('end')));
74
+ // Flush right: the separators of '9' and '10' stand in one column.
75
+ expect(end[1].separatorX).toBeCloseTo(end[2].separatorX, 5);
76
+ // At the start: each right after its number, '9' one digit before '10'.
77
+ expect(start[1].bulletOffsetX).toBeCloseTo(start[2].bulletOffsetX, 5);
78
+ expect(start[2].separatorX - start[1].separatorX).toBeCloseTo(7, 5);
79
+ expect(start[1].separatorX - start[1].bulletOffsetX).toBeCloseTo(7, 5);
80
+ });
81
+ it('a prefix and a suffix: 第九條 and 第十一條 begin together in vertical Japanese', () => {
82
+ const cfg = (align) => config({ numberFormat: 'japanese-informal', prefix: '第', separator: '條', hangingIndent: false, ...(align ? { numberAlign: align } : {}) }, { locale: 'ja', layout: { layoutType: 'single', writingMode: 'vertical-rl' } });
83
+ const md = '9. 天皇ハ\n10. 天皇ハ\n11. 天皇ハ';
84
+ const end = items(build(md, cfg()));
85
+ const start = items(build(md, cfg('start')));
86
+ expect(end.map((b) => b.bulletText)).toEqual(['第九條', '第十條', '第十一條']);
87
+ // One character further down the line for the shorter labels …
88
+ expect(end[0].bulletOffsetX).toBeGreaterThan(end[2].bulletOffsetX);
89
+ // … and all three at the head with 'start'.
90
+ expect(start[0].bulletOffsetX).toBeCloseTo(start[2].bulletOffsetX, 5);
91
+ expect(start[1].bulletOffsetX).toBeCloseTo(start[2].bulletOffsetX, 5);
92
+ expect(start[2].bulletOffsetX).toBeCloseTo(end[2].bulletOffsetX, 5);
93
+ expect(textX(start[0])).toBeCloseTo(textX(end[0]), 5);
94
+ });
95
+ it('on a right-to-left page the numbers begin at the start of the mirrored frame', () => {
96
+ // The flow of a right-to-left document is laid out in a mirrored frame
97
+ // (`VDTPage.flow`): its start is the right of the sheet.
98
+ const cfg = (align) => config(align ? { numberAlign: align } : {}, { locale: 'ar', direction: 'rtl' });
99
+ const md = '9. تسعة\n10. عشرة';
100
+ const end = items(build(md, cfg()));
101
+ const start = items(build(md, cfg('start')));
102
+ expect(end[0].bulletOffsetX - end[1].bulletOffsetX).toBeCloseTo(7, 5);
103
+ expect(start[0].bulletOffsetX).toBeCloseTo(start[1].bulletOffsetX, 5);
104
+ expect(start[1].bulletOffsetX).toBeCloseTo(end[1].bulletOffsetX, 5);
105
+ expect(textX(start[0])).toBeCloseTo(textX(end[0]), 5);
106
+ });
107
+ });
108
+ //# sourceMappingURL=orderedNumberAlign.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderedNumberAlign.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/orderedNumberAlign.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trailingCapColumnNote.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingCapColumnNote.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/trailingCapColumnNote.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { createMeasurementCache } from '../../measure';
4
+ // Deterministic text measurement stub (no DOM in the node test env).
5
+ class StubCtx {
6
+ font = '';
7
+ measureText(s) {
8
+ return { width: s.length * 7 };
9
+ }
10
+ }
11
+ globalThis.OffscreenCanvas = class {
12
+ getContext() {
13
+ return new StubCtx();
14
+ }
15
+ };
16
+ const SENTENCE = 'La linterna del faro debe permanecer encendida toda la noche para guiar a los barcos que cruzan la bahía. ';
17
+ const filler = (n) => SENTENCE.repeat(n).trim();
18
+ const mm = (value) => ({ value, unit: 'mm' });
19
+ const TWO_COL = {
20
+ page: { width: mm(160), height: mm(200), margins: { top: mm(10), bottom: mm(10), left: mm(10), right: mm(10) } },
21
+ layout: { layoutType: 'double' },
22
+ bodyText: { hyphenation: { enabled: false } },
23
+ };
24
+ const build = (md) => buildDocument({ markdown: md }, TWO_COL, createMeasurementCache());
25
+ /** Lines of body text in each column of the first page. */
26
+ const textLines = (doc) => doc.pages[0].columns.map((col) => col.blocks.filter((b) => b.footnoteNote === undefined).reduce((n, b) => n + b.lines.length, 0));
27
+ describe('a closing band cut level with a note at a column foot (#673)', () => {
28
+ // The note of a column a band cap cut is set under the cut, at the true
29
+ // foot of the column: its height takes nothing from the lines above the
30
+ // cut unless it reaches above it.
31
+ // `[10, 2]` and `[14]`: the paragraph that cites the note runs to the cut.
32
+ for (const paragraphs of [[6, 4, 5], [3, 3, 3, 3], [10, 2], [14], [4, 9]]) {
33
+ it(`ends level with a note cited in the first column (${paragraphs.join('+')} sentences)`, () => {
34
+ const md = [
35
+ ...paragraphs.map((n, i) => (i === 0 ? `Primera cita.[^n] ${filler(n)}` : filler(n))),
36
+ `[^n]: ${filler(3)}`,
37
+ ].join('\n\n');
38
+ const plain = textLines(build(md.replace('[^n] ', ' ').replace(/\n\n\[\^n\]:.*$/, '')));
39
+ const noted = build(md);
40
+ expect(noted.pages).toHaveLength(1);
41
+ const note = noted.blocks.find((b) => b.footnoteNote === 'n');
42
+ expect(note.columnIndex).toBe(0);
43
+ const lines = textLines(noted);
44
+ expect(Math.abs(lines[0] - lines[1])).toBeLessThanOrEqual(Math.max(1, Math.abs(plain[0] - plain[1])));
45
+ });
46
+ }
47
+ it('still charges the note whole in a column no cap cut', () => {
48
+ // Enough text for two pages: the first column of page 1 runs to the
49
+ // page's foot, and its note takes its lines from it.
50
+ const md = [`Primera cita.[^n] ${filler(150)}`, `[^n]: ${filler(3)}`].join('\n\n');
51
+ const doc = build(md);
52
+ expect(doc.pages.length).toBeGreaterThan(1);
53
+ const [first, second] = doc.pages[0].columns;
54
+ const note = doc.blocks.find((b) => b.footnoteNote === 'n');
55
+ expect(note.pageIndex).toBe(0);
56
+ expect(note.columnIndex).toBe(0);
57
+ const lines = textLines(doc);
58
+ expect(lines[1] - lines[0]).toBeGreaterThanOrEqual(note.lines.length);
59
+ expect(first.bandCapped ?? false).toBe(false);
60
+ expect(second.bandCapped ?? false).toBe(false);
61
+ });
62
+ });
63
+ //# sourceMappingURL=trailingCapColumnNote.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingCapColumnNote.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/trailingCapColumnNote.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trailingCapFloatHead.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingCapFloatHead.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/trailingCapFloatHead.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,91 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline/build';
3
+ import { createMeasurementCache } from '../../measure';
4
+ // Deterministic text measurement stub (no DOM in the node test env).
5
+ class StubCtx {
6
+ font = '';
7
+ measureText(s) {
8
+ return { width: s.length * 10 };
9
+ }
10
+ }
11
+ globalThis.OffscreenCanvas = class {
12
+ getContext() {
13
+ return new StubCtx();
14
+ }
15
+ };
16
+ const picture = (id, height, placement) => ({
17
+ id, typeId: 'figure', kind: 'bitmap', caption: 'A picture.', createdAt: 0, updatedAt: 0,
18
+ bitmap: { fileId: `${id}.png`, format: 'png', width: 1600, height },
19
+ placement,
20
+ });
21
+ const words = 'the lake froze late that year and the ferry kept running until the first week of december when the ice closed over the middle'.split(' ');
22
+ const para = (n, seed) => `${Array.from({ length: n }, (_, i) => words[(i * 7 + seed) % words.length]).join(' ')}.`;
23
+ /** A story that closes on its first page: the picture heads the second and
24
+ * third columns, cited from the first, whose text ends above the picture's
25
+ * foot; `foot` adds a page-wide picture at the foot of the page, cited
26
+ * first, so it is on the page when the other one looks for its slot. */
27
+ const story = (foot, words) => {
28
+ const md = `# One\n\n${foot ? 'First :ref{id="foot"}.\n\n' : ''}${para(6, 1)} See :ref{id="head"}.\n\n${para(words, 2)}\n\n# Two\n\nEnd.`;
29
+ const config = {
30
+ page: { sizePreset: '17x24', dpi: 150 },
31
+ layout: { layoutType: 'multiple', columnCount: 3 },
32
+ bodyText: { fontSize: { value: 10, unit: 'pt' } },
33
+ headings: { levels: [{ level: 1, breakBefore: { enabled: true, parity: 'any' } }] },
34
+ };
35
+ const resources = [picture('head', 1400, { position: 'top', columns: 2 }), ...(foot ? [picture('foot', 300, { position: 'bottom', span: 'page' })] : [])];
36
+ return buildDocument({ markdown: md, resources }, config, createMeasurementCache());
37
+ };
38
+ const bottom = (c) => c.bbox.y + c.bbox.height;
39
+ describe('a closing band cut under a float that heads its empty columns (#681)', () => {
40
+ // The cut of such a band is taken under the float: the room kept for text
41
+ // between two float bands (three lines) is not asked for under it, where
42
+ // no text comes. Asked for, the cap was retried a line lower three times,
43
+ // and the band ended three lines under the picture, or was not cut.
44
+ for (const words of [3, 8, 30]) {
45
+ it(`ends where it ends with no float at the page's foot (${words} words)`, () => {
46
+ const plain = story(false, words).pages[0];
47
+ const doc = story(true, words);
48
+ const page = doc.pages[0];
49
+ expect(page.floats?.filter((f) => f.type === 'resource')).toHaveLength(2);
50
+ const head = page.floats.find((f) => f.resourceBlock?.resource.id === 'head');
51
+ const foot = page.floats.find((f) => f.resourceBlock?.resource.id === 'foot');
52
+ const text = page.columns.filter((c) => c.kind !== 'span');
53
+ expect(text[0].trailingCap).toBe(true);
54
+ expect(plain.columns[0].trailingCap).toBe(true);
55
+ expect(bottom(text[0])).toBeCloseTo(bottom(plain.columns[0]), 1);
56
+ // Within a line of the picture's band, and the columns under the
57
+ // picture hold nothing.
58
+ for (const c of text.slice(1)) {
59
+ expect(c.blocks).toHaveLength(0);
60
+ expect(c.bbox.height).toBeLessThanOrEqual(doc.baselineGrid + 0.5);
61
+ expect(c.bbox.y).toBeGreaterThanOrEqual(head.bbox.y + head.bbox.height - 0.5);
62
+ }
63
+ // The picture at the foot stands clear of the band.
64
+ expect(foot.bbox.y).toBeGreaterThanOrEqual(bottom(text[0]) - 0.5);
65
+ });
66
+ }
67
+ it('keeps the text room between two float bands in a column no cap cut', () => {
68
+ // A long story: the first page flows on, and the picture at the head of
69
+ // a column with the other at its foot leaves at least three lines.
70
+ const md = `# One\n\nFirst :ref{id="foot"}.\n\n${para(6, 1)} See :ref{id="head"}.\n\n${Array.from({ length: 12 }, (_, i) => para(60, i)).join('\n\n')}`;
71
+ const config = {
72
+ page: { sizePreset: '17x24', dpi: 150 },
73
+ layout: { layoutType: 'multiple', columnCount: 3 },
74
+ bodyText: { fontSize: { value: 10, unit: 'pt' } },
75
+ headings: { levels: [{ level: 1, breakBefore: { enabled: true, parity: 'any' } }] },
76
+ };
77
+ const doc = buildDocument({ markdown: md, resources: [picture('head', 1400, { position: 'top', columns: 2 }), picture('foot', 1300, { position: 'bottom', span: 'page' })] }, config, createMeasurementCache());
78
+ for (const page of doc.pages) {
79
+ const floats = (page.floats ?? []).filter((f) => f.type === 'resource');
80
+ if (floats.length < 2)
81
+ continue;
82
+ for (const c of page.columns.filter((k) => k.kind !== 'span' && !k.trailingCap)) {
83
+ const above = floats.some((f) => f.bbox.y + f.bbox.height <= c.bbox.y + 0.5 && f.bbox.x < c.bbox.x + c.bbox.width && f.bbox.x + f.bbox.width > c.bbox.x);
84
+ const below = floats.some((f) => f.bbox.y >= c.bbox.y + c.bbox.height - 0.5 && f.bbox.x < c.bbox.x + c.bbox.width && f.bbox.x + f.bbox.width > c.bbox.x);
85
+ if (above && below)
86
+ expect(c.bbox.height).toBeGreaterThanOrEqual(3 * doc.baselineGrid - 0.5);
87
+ }
88
+ }
89
+ });
90
+ });
91
+ //# sourceMappingURL=trailingCapFloatHead.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingCapFloatHead.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/trailingCapFloatHead.test.ts"],"names":[],"mappings":"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"}