postext 1.19.2 → 1.20.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 (251) hide show
  1. package/dist/__tests__/comics/art.test.d.ts +2 -0
  2. package/dist/__tests__/comics/art.test.d.ts.map +1 -0
  3. package/dist/__tests__/comics/art.test.js +96 -0
  4. package/dist/__tests__/comics/art.test.js.map +1 -0
  5. package/dist/__tests__/comics/build.test.d.ts +2 -0
  6. package/dist/__tests__/comics/build.test.d.ts.map +1 -0
  7. package/dist/__tests__/comics/build.test.js +215 -0
  8. package/dist/__tests__/comics/build.test.js.map +1 -0
  9. package/dist/__tests__/comics/canvas.test.d.ts +2 -0
  10. package/dist/__tests__/comics/canvas.test.d.ts.map +1 -0
  11. package/dist/__tests__/comics/canvas.test.js +161 -0
  12. package/dist/__tests__/comics/canvas.test.js.map +1 -0
  13. package/dist/__tests__/comics/config.test.d.ts +2 -0
  14. package/dist/__tests__/comics/config.test.d.ts.map +1 -0
  15. package/dist/__tests__/comics/config.test.js +97 -0
  16. package/dist/__tests__/comics/config.test.js.map +1 -0
  17. package/dist/__tests__/comics/geometry.test.d.ts +2 -0
  18. package/dist/__tests__/comics/geometry.test.d.ts.map +1 -0
  19. package/dist/__tests__/comics/geometry.test.js +118 -0
  20. package/dist/__tests__/comics/geometry.test.js.map +1 -0
  21. package/dist/__tests__/comics/html.test.d.ts +2 -0
  22. package/dist/__tests__/comics/html.test.d.ts.map +1 -0
  23. package/dist/__tests__/comics/html.test.js +253 -0
  24. package/dist/__tests__/comics/html.test.js.map +1 -0
  25. package/dist/__tests__/comics/lettering.test.d.ts +2 -0
  26. package/dist/__tests__/comics/lettering.test.d.ts.map +1 -0
  27. package/dist/__tests__/comics/lettering.test.js +241 -0
  28. package/dist/__tests__/comics/lettering.test.js.map +1 -0
  29. package/dist/__tests__/comics/script.test.d.ts +2 -0
  30. package/dist/__tests__/comics/script.test.d.ts.map +1 -0
  31. package/dist/__tests__/comics/script.test.js +147 -0
  32. package/dist/__tests__/comics/script.test.js.map +1 -0
  33. package/dist/__tests__/comics/split.test.d.ts +2 -0
  34. package/dist/__tests__/comics/split.test.d.ts.map +1 -0
  35. package/dist/__tests__/comics/split.test.js +120 -0
  36. package/dist/__tests__/comics/split.test.js.map +1 -0
  37. package/dist/__tests__/comics/spread.test.d.ts +2 -0
  38. package/dist/__tests__/comics/spread.test.d.ts.map +1 -0
  39. package/dist/__tests__/comics/spread.test.js +161 -0
  40. package/dist/__tests__/comics/spread.test.js.map +1 -0
  41. package/dist/__tests__/comics/strip.test.d.ts +2 -0
  42. package/dist/__tests__/comics/strip.test.d.ts.map +1 -0
  43. package/dist/__tests__/comics/strip.test.js +231 -0
  44. package/dist/__tests__/comics/strip.test.js.map +1 -0
  45. package/dist/__tests__/exports.test.js +89 -0
  46. package/dist/__tests__/exports.test.js.map +1 -1
  47. package/dist/__tests__/parse/containers.test.js +1 -1
  48. package/dist/__tests__/parse/containers.test.js.map +1 -1
  49. package/dist/canvas-backend/comic.d.ts +32 -0
  50. package/dist/canvas-backend/comic.d.ts.map +1 -0
  51. package/dist/canvas-backend/comic.js +216 -0
  52. package/dist/canvas-backend/comic.js.map +1 -0
  53. package/dist/canvas-backend/headerFooter.d.ts +4 -1
  54. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  55. package/dist/canvas-backend/headerFooter.js +3 -1
  56. package/dist/canvas-backend/headerFooter.js.map +1 -1
  57. package/dist/canvas-backend/index.d.ts.map +1 -1
  58. package/dist/canvas-backend/index.js +7 -1
  59. package/dist/canvas-backend/index.js.map +1 -1
  60. package/dist/comics/art.d.ts +72 -0
  61. package/dist/comics/art.d.ts.map +1 -0
  62. package/dist/comics/art.js +154 -0
  63. package/dist/comics/art.js.map +1 -0
  64. package/dist/comics/fonts.d.ts +20 -0
  65. package/dist/comics/fonts.d.ts.map +1 -0
  66. package/dist/comics/fonts.js +42 -0
  67. package/dist/comics/fonts.js.map +1 -0
  68. package/dist/comics/geometry.d.ts +87 -0
  69. package/dist/comics/geometry.d.ts.map +1 -0
  70. package/dist/comics/geometry.js +272 -0
  71. package/dist/comics/geometry.js.map +1 -0
  72. package/dist/comics/index.d.ts +29 -0
  73. package/dist/comics/index.d.ts.map +1 -0
  74. package/dist/comics/index.js +18 -0
  75. package/dist/comics/index.js.map +1 -0
  76. package/dist/comics/layoutPage.d.ts +156 -0
  77. package/dist/comics/layoutPage.d.ts.map +1 -0
  78. package/dist/comics/layoutPage.js +697 -0
  79. package/dist/comics/layoutPage.js.map +1 -0
  80. package/dist/comics/lettering/__tests__/harness.test.d.ts +2 -0
  81. package/dist/comics/lettering/__tests__/harness.test.d.ts.map +1 -0
  82. package/dist/comics/lettering/__tests__/harness.test.js +273 -0
  83. package/dist/comics/lettering/__tests__/harness.test.js.map +1 -0
  84. package/dist/comics/lettering/__tests__/letterPanel.test.d.ts +2 -0
  85. package/dist/comics/lettering/__tests__/letterPanel.test.d.ts.map +1 -0
  86. package/dist/comics/lettering/__tests__/letterPanel.test.js +224 -0
  87. package/dist/comics/lettering/__tests__/letterPanel.test.js.map +1 -0
  88. package/dist/comics/lettering/__tests__/polish.test.d.ts +2 -0
  89. package/dist/comics/lettering/__tests__/polish.test.d.ts.map +1 -0
  90. package/dist/comics/lettering/__tests__/polish.test.js +357 -0
  91. package/dist/comics/lettering/__tests__/polish.test.js.map +1 -0
  92. package/dist/comics/lettering/__tests__/round2.test.d.ts +2 -0
  93. package/dist/comics/lettering/__tests__/round2.test.d.ts.map +1 -0
  94. package/dist/comics/lettering/__tests__/round2.test.js +289 -0
  95. package/dist/comics/lettering/__tests__/round2.test.js.map +1 -0
  96. package/dist/comics/lettering/__tests__/shapeText.test.d.ts +2 -0
  97. package/dist/comics/lettering/__tests__/shapeText.test.d.ts.map +1 -0
  98. package/dist/comics/lettering/__tests__/shapeText.test.js +98 -0
  99. package/dist/comics/lettering/__tests__/shapeText.test.js.map +1 -0
  100. package/dist/comics/lettering/__tests__/shapes.test.d.ts +2 -0
  101. package/dist/comics/lettering/__tests__/shapes.test.d.ts.map +1 -0
  102. package/dist/comics/lettering/__tests__/shapes.test.js +137 -0
  103. package/dist/comics/lettering/__tests__/shapes.test.js.map +1 -0
  104. package/dist/comics/lettering/__tests__/stubMeasure.d.ts +5 -0
  105. package/dist/comics/lettering/__tests__/stubMeasure.d.ts.map +1 -0
  106. package/dist/comics/lettering/__tests__/stubMeasure.js +47 -0
  107. package/dist/comics/lettering/__tests__/stubMeasure.js.map +1 -0
  108. package/dist/comics/lettering/__tests__/text.test.d.ts +2 -0
  109. package/dist/comics/lettering/__tests__/text.test.d.ts.map +1 -0
  110. package/dist/comics/lettering/__tests__/text.test.js +86 -0
  111. package/dist/comics/lettering/__tests__/text.test.js.map +1 -0
  112. package/dist/comics/lettering/geom.d.ts +78 -0
  113. package/dist/comics/lettering/geom.d.ts.map +1 -0
  114. package/dist/comics/lettering/geom.js +376 -0
  115. package/dist/comics/lettering/geom.js.map +1 -0
  116. package/dist/comics/lettering/index.d.ts +7 -0
  117. package/dist/comics/lettering/index.d.ts.map +1 -0
  118. package/dist/comics/lettering/index.js +8 -0
  119. package/dist/comics/lettering/index.js.map +1 -0
  120. package/dist/comics/lettering/letter.d.ts +7 -0
  121. package/dist/comics/lettering/letter.d.ts.map +1 -0
  122. package/dist/comics/lettering/letter.js +397 -0
  123. package/dist/comics/lettering/letter.js.map +1 -0
  124. package/dist/comics/lettering/placement.d.ts +117 -0
  125. package/dist/comics/lettering/placement.d.ts.map +1 -0
  126. package/dist/comics/lettering/placement.js +889 -0
  127. package/dist/comics/lettering/placement.js.map +1 -0
  128. package/dist/comics/lettering/presets.d.ts +15 -0
  129. package/dist/comics/lettering/presets.d.ts.map +1 -0
  130. package/dist/comics/lettering/presets.js +61 -0
  131. package/dist/comics/lettering/presets.js.map +1 -0
  132. package/dist/comics/lettering/shape-text.d.ts +72 -0
  133. package/dist/comics/lettering/shape-text.d.ts.map +1 -0
  134. package/dist/comics/lettering/shape-text.js +550 -0
  135. package/dist/comics/lettering/shape-text.js.map +1 -0
  136. package/dist/comics/lettering/shapes.d.ts +83 -0
  137. package/dist/comics/lettering/shapes.d.ts.map +1 -0
  138. package/dist/comics/lettering/shapes.js +512 -0
  139. package/dist/comics/lettering/shapes.js.map +1 -0
  140. package/dist/comics/lettering/text.d.ts +79 -0
  141. package/dist/comics/lettering/text.d.ts.map +1 -0
  142. package/dist/comics/lettering/text.js +488 -0
  143. package/dist/comics/lettering/text.js.map +1 -0
  144. package/dist/comics/lettering/types.d.ts +270 -0
  145. package/dist/comics/lettering/types.d.ts.map +1 -0
  146. package/dist/comics/lettering/types.js +9 -0
  147. package/dist/comics/lettering/types.js.map +1 -0
  148. package/dist/comics/page.d.ts +37 -0
  149. package/dist/comics/page.d.ts.map +1 -0
  150. package/dist/comics/page.js +285 -0
  151. package/dist/comics/page.js.map +1 -0
  152. package/dist/comics/paint.d.ts +65 -0
  153. package/dist/comics/paint.d.ts.map +1 -0
  154. package/dist/comics/paint.js +219 -0
  155. package/dist/comics/paint.js.map +1 -0
  156. package/dist/comics/script.d.ts +42 -0
  157. package/dist/comics/script.d.ts.map +1 -0
  158. package/dist/comics/script.js +302 -0
  159. package/dist/comics/script.js.map +1 -0
  160. package/dist/comics/split.d.ts +135 -0
  161. package/dist/comics/split.d.ts.map +1 -0
  162. package/dist/comics/split.js +514 -0
  163. package/dist/comics/split.js.map +1 -0
  164. package/dist/comics/spread.d.ts +36 -0
  165. package/dist/comics/spread.d.ts.map +1 -0
  166. package/dist/comics/spread.js +172 -0
  167. package/dist/comics/spread.js.map +1 -0
  168. package/dist/comics/strip.d.ts +77 -0
  169. package/dist/comics/strip.d.ts.map +1 -0
  170. package/dist/comics/strip.js +89 -0
  171. package/dist/comics/strip.js.map +1 -0
  172. package/dist/comics/transform.d.ts +37 -0
  173. package/dist/comics/transform.d.ts.map +1 -0
  174. package/dist/comics/transform.js +161 -0
  175. package/dist/comics/transform.js.map +1 -0
  176. package/dist/comics/types.d.ts +143 -0
  177. package/dist/comics/types.d.ts.map +1 -0
  178. package/dist/comics/types.js +13 -0
  179. package/dist/comics/types.js.map +1 -0
  180. package/dist/comics/warnings.d.ts +14 -0
  181. package/dist/comics/warnings.d.ts.map +1 -0
  182. package/dist/comics/warnings.js +94 -0
  183. package/dist/comics/warnings.js.map +1 -0
  184. package/dist/configWarnings.d.ts.map +1 -1
  185. package/dist/configWarnings.js +42 -0
  186. package/dist/configWarnings.js.map +1 -1
  187. package/dist/defaults/comics.d.ts +51 -0
  188. package/dist/defaults/comics.d.ts.map +1 -0
  189. package/dist/defaults/comics.js +385 -0
  190. package/dist/defaults/comics.js.map +1 -0
  191. package/dist/defaults/index.d.ts +1 -0
  192. package/dist/defaults/index.d.ts.map +1 -1
  193. package/dist/defaults/index.js +9 -0
  194. package/dist/defaults/index.js.map +1 -1
  195. package/dist/design/layout.d.ts +13 -1
  196. package/dist/design/layout.d.ts.map +1 -1
  197. package/dist/design/layout.js +17 -0
  198. package/dist/design/layout.js.map +1 -1
  199. package/dist/html-backend.d.ts +3 -0
  200. package/dist/html-backend.d.ts.map +1 -1
  201. package/dist/html-backend.js +44 -8
  202. package/dist/html-backend.js.map +1 -1
  203. package/dist/htmlComic.d.ts +69 -0
  204. package/dist/htmlComic.d.ts.map +1 -0
  205. package/dist/htmlComic.js +179 -0
  206. package/dist/htmlComic.js.map +1 -0
  207. package/dist/index.d.ts +8 -2
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +4 -0
  210. package/dist/index.js.map +1 -1
  211. package/dist/parse/blockParser.d.ts.map +1 -1
  212. package/dist/parse/blockParser.js +25 -1
  213. package/dist/parse/blockParser.js.map +1 -1
  214. package/dist/parse/indexMarks.d.ts.map +1 -1
  215. package/dist/parse/indexMarks.js +3 -0
  216. package/dist/parse/indexMarks.js.map +1 -1
  217. package/dist/parse/types.d.ts +7 -1
  218. package/dist/parse/types.d.ts.map +1 -1
  219. package/dist/pipeline/build.d.ts.map +1 -1
  220. package/dist/pipeline/build.js +251 -9
  221. package/dist/pipeline/build.js.map +1 -1
  222. package/dist/pipeline/config.d.ts.map +1 -1
  223. package/dist/pipeline/config.js +4 -1
  224. package/dist/pipeline/config.js.map +1 -1
  225. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  226. package/dist/pipeline/contentWarnings.js +58 -0
  227. package/dist/pipeline/contentWarnings.js.map +1 -1
  228. package/dist/pipeline/floatSlots.js +1 -1
  229. package/dist/pipeline/floatSlots.js.map +1 -1
  230. package/dist/pipeline/headerFooter.d.ts +6 -2
  231. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  232. package/dist/pipeline/headerFooter.js +11 -3
  233. package/dist/pipeline/headerFooter.js.map +1 -1
  234. package/dist/pipeline/pageRoles.d.ts +1 -0
  235. package/dist/pipeline/pageRoles.d.ts.map +1 -1
  236. package/dist/pipeline/pageRoles.js +3 -0
  237. package/dist/pipeline/pageRoles.js.map +1 -1
  238. package/dist/pipeline/placement.d.ts +3 -3
  239. package/dist/pipeline/placement.d.ts.map +1 -1
  240. package/dist/pipeline/placement.js +4 -4
  241. package/dist/pipeline/placement.js.map +1 -1
  242. package/dist/types.d.ts +338 -1
  243. package/dist/types.d.ts.map +1 -1
  244. package/dist/vdt.d.ts +271 -2
  245. package/dist/vdt.d.ts.map +1 -1
  246. package/dist/vdt.js.map +1 -1
  247. package/dist/worker/fonts.d.ts +2 -1
  248. package/dist/worker/fonts.d.ts.map +1 -1
  249. package/dist/worker/fonts.js +11 -1
  250. package/dist/worker/fonts.js.map +1 -1
  251. package/package.json +1 -1
@@ -0,0 +1,161 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { isComicSpread, parseComicFence } from '../../comics';
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 resources = [
17
+ { id: 'vista', typeId: 'figure', kind: 'bitmap', createdAt: 0, updatedAt: 0, bitmap: { fileId: 'vista-file', format: 'png', width: 4000, height: 1500 } },
18
+ ];
19
+ /** A spread: a wide panel across the top of both pages, three panels
20
+ * under it (the middle one across the spine). */
21
+ const spread = ':::page{spread split="40 / * [* | * | *]"}\n::panel{art=vista}\ncaption: The valley.\n::panel\n::panel\n::panel\n:::';
22
+ const comicPages = (doc) => doc.pages.filter((p) => p.comic);
23
+ const trimOf = (doc, page) => ({ x: doc.trimOffset, width: page.width - 2 * doc.trimOffset });
24
+ describe(':::page{spread}', () => {
25
+ const config = { page: { sizePreset: '17x24' } };
26
+ it('reads the spread flag', () => {
27
+ const src = (attrs) => parseComicFence(`:::page{${attrs}}\n::panel\n:::`, 0).source;
28
+ expect(isComicSpread(src('spread'))).toBe(true);
29
+ expect(isComicSpread(src('spread=false'))).toBe(false);
30
+ expect(isComicSpread(src('split="*"'))).toBe(false);
31
+ });
32
+ it('opens on a verso, a blank before it at the start of a book, and lays one split over both pages', () => {
33
+ const doc = buildDocument({ markdown: `${spread}\n\nAfter the spread.`, resources }, config);
34
+ const pages = comicPages(doc);
35
+ expect(pages).toHaveLength(2);
36
+ const [left, right] = pages;
37
+ // Page 1 stands alone: a parity blank; the spread takes pages 2 and 3.
38
+ expect(doc.pages[0].blankForParity).toBe(true);
39
+ expect(doc.pages[0].role).toBe('blank');
40
+ expect(left.index).toBe(1);
41
+ expect(right.index).toBe(2);
42
+ expect(left.role).toBe('comic');
43
+ expect(right.role).toBe('comic');
44
+ expect(left.comic.spread).toBe('left');
45
+ expect(right.comic.spread).toBe('right');
46
+ // The text after it opens the next page.
47
+ expect(doc.pages[3].columns.some((c) => c.blocks.length > 0)).toBe(true);
48
+ expect(doc.pages).toHaveLength(4);
49
+ // Inner margins dropped: each half of the frame runs to the spine.
50
+ const trim = trimOf(doc, left);
51
+ const lf = left.comic.frame;
52
+ const rf = right.comic.frame;
53
+ expect(lf.x).toBeCloseTo(left.contentArea.x, 3);
54
+ expect(lf.x + lf.width).toBeCloseTo(trim.x + trim.width, 3);
55
+ expect(rf.x).toBeCloseTo(trim.x, 3);
56
+ expect(rf.x + rf.width).toBeCloseTo(right.contentArea.x + right.contentArea.width, 3);
57
+ // Panels by reading order: 0 (top, across), 1 (left), 2 (across the
58
+ // spine), 3 (right).
59
+ const indexes = (c) => c.panels.map((p) => p.index);
60
+ expect(indexes(left.comic)).toEqual([0, 1, 2]);
61
+ expect(indexes(right.comic)).toEqual([0, 2, 3]);
62
+ // A panel across the spine is cut past the sheet's edge on each page
63
+ // (no border along the spine), and its picture is drawn on both.
64
+ const topL = left.comic.panels[0];
65
+ const topR = right.comic.panels[0];
66
+ expect(topL.bbox.x + topL.bbox.width).toBeGreaterThan(left.width);
67
+ expect(topR.bbox.x).toBeLessThan(0);
68
+ expect(topL.art?.resourceId).toBe('vista');
69
+ expect(topR.art?.resourceId).toBe('vista');
70
+ // The same picture, its box shifted by the width of a page.
71
+ expect(topL.art.box.width).toBeCloseTo(topR.art.box.width, 3);
72
+ expect(topL.art.box.x - topR.art.box.x).toBeCloseTo(trim.width, 3);
73
+ expect(topL.radius).toBe(0);
74
+ // A panel on one side keeps its whole outline.
75
+ const p1 = left.comic.panels[1];
76
+ expect(p1.bbox.x + p1.bbox.width).toBeLessThan(trim.x + trim.width);
77
+ });
78
+ it('gives each page the split lines on it, with the split value range', () => {
79
+ const md = spread;
80
+ const doc = buildDocument({ markdown: md, resources }, config);
81
+ const [left, right] = comicPages(doc);
82
+ const trim = trimOf(doc, left);
83
+ const rowsL = left.comic.splitters.filter((s) => s.axis === 'rows');
84
+ const rowsR = right.comic.splitters.filter((s) => s.axis === 'rows');
85
+ // The line between the tiers crosses the spine: half on each page.
86
+ expect(rowsL).toHaveLength(1);
87
+ expect(rowsR).toHaveLength(1);
88
+ expect(Math.max(rowsL[0].a.x, rowsL[0].b.x)).toBeCloseTo(trim.x + trim.width, 3);
89
+ expect(Math.min(rowsR[0].a.x, rowsR[0].b.x)).toBeCloseTo(trim.x, 3);
90
+ // The two column lines of the bottom tier: one on each page.
91
+ expect(left.comic.splitters.filter((s) => s.axis === 'columns')).toHaveLength(1);
92
+ expect(right.comic.splitters.filter((s) => s.axis === 'columns')).toHaveLength(1);
93
+ for (const s of [...left.comic.splitters, ...right.comic.splitters]) {
94
+ expect(md.slice(s.sourceStart, s.sourceEnd)).toBe('40 / * [* | * | *]');
95
+ }
96
+ });
97
+ it('opens on the next page when it is already a verso', () => {
98
+ const doc = buildDocument({ markdown: `Page one.\n\n${spread}`, resources }, config);
99
+ const [left, right] = comicPages(doc);
100
+ expect(left.index).toBe(1);
101
+ expect(right.index).toBe(2);
102
+ expect(doc.pages.some((p) => p.blankForParity)).toBe(false);
103
+ });
104
+ it('pads to a verso after an even page', () => {
105
+ const doc = buildDocument({ markdown: `Page one.\n\n:::pagebreak\n\nPage two.\n\n${spread}`, resources }, config);
106
+ const [left] = comicPages(doc);
107
+ expect(left.index).toBe(3);
108
+ expect(doc.pages[2].blankForParity).toBe(true);
109
+ });
110
+ it('counts pages as printed in a chapter laid out after others', () => {
111
+ // Page 1 of this chapter is page 2 of the book: a verso.
112
+ const doc = buildDocument({ markdown: spread, resources, continuation: { pageIndexOffset: 1 } }, config);
113
+ const pages = comicPages(doc);
114
+ expect(pages[0].index).toBe(0);
115
+ expect(doc.pages.some((p) => p.blankForParity)).toBe(false);
116
+ // Page 3 of the book stands as a recto: a blank, then pages 4 and 5.
117
+ const odd = buildDocument({ markdown: spread, resources, continuation: { pageIndexOffset: 2 } }, config);
118
+ expect(comicPages(odd)[0].index).toBe(1);
119
+ expect(odd.pages[0].blankForParity).toBe(true);
120
+ });
121
+ it('starts on the right page of a right-bound book, read right to left', () => {
122
+ const doc = buildDocument({ markdown: `نص.\n\n${spread}`, resources }, { ...config, locale: 'ar' });
123
+ expect(doc.config.page.binding).toBe('right');
124
+ const [verso, recto] = comicPages(doc);
125
+ // The verso (page 2) is the right page of the open book.
126
+ expect(verso.index).toBe(1);
127
+ expect(verso.comic.spread).toBe('right');
128
+ expect(recto.comic.spread).toBe('left');
129
+ expect(verso.comic.direction).toBe('rtl');
130
+ // Reading order from the right: the top panel, then the bottom-right
131
+ // panel on the verso, the bottom-left one on the recto.
132
+ expect(verso.comic.panels.map((p) => p.index)).toEqual([0, 1, 2]);
133
+ expect(recto.comic.panels.map((p) => p.index)).toEqual([0, 2, 3]);
134
+ // The verso's frame runs from the spine (its left edge) to its outer
135
+ // margin.
136
+ const trim = trimOf(doc, verso);
137
+ expect(verso.comic.frame.x).toBeCloseTo(trim.x, 3);
138
+ expect(recto.comic.frame.x + recto.comic.frame.width).toBeCloseTo(trim.x + trim.width, 3);
139
+ });
140
+ it('bleeds through the outer edges only', () => {
141
+ const md = ':::page{spread split="*" bleed}\n::panel{art=vista}\n:::';
142
+ const doc = buildDocument({ markdown: md, resources }, { ...config, page: { ...config.page, cutLines: { enabled: true, bleed: { value: 3, unit: 'mm' } } } });
143
+ const [left, right] = comicPages(doc);
144
+ const bleed = (3 / 25.4) * doc.config.page.dpi;
145
+ const trim = trimOf(doc, left);
146
+ const l = left.comic.panels[0].bbox;
147
+ const r = right.comic.panels[0].bbox;
148
+ // Head, foot and fore edges: out to the bleed.
149
+ expect(l.x).toBeCloseTo(trim.x - bleed, 1);
150
+ expect(l.y).toBeCloseTo(doc.trimOffset - bleed, 1);
151
+ expect(r.x + r.width).toBeCloseTo(trim.x + trim.width + bleed, 1);
152
+ expect(r.y + r.height).toBeCloseTo(right.height - doc.trimOffset + bleed, 1);
153
+ });
154
+ it('two spreads in a row take four pages, no blank between', () => {
155
+ const doc = buildDocument({ markdown: `Page one.\n\n${spread}\n\n${spread}`, resources }, config);
156
+ const pages = comicPages(doc);
157
+ expect(pages.map((p) => p.index)).toEqual([1, 2, 3, 4]);
158
+ expect(pages.map((p) => p.comic.spread)).toEqual(['left', 'right', 'left', 'right']);
159
+ });
160
+ });
161
+ //# sourceMappingURL=spread.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spread.test.js","sourceRoot":"","sources":["../../../src/__tests__/comics/spread.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=strip.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/comics/strip.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,231 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { parseMarkdown } from '../../parse';
4
+ import { comicBlockOnSheet, comicSplitGrid, comicStripPlacement, pageComics, parseComicAspect, parseComicSplit, translateSvgPath } from '../../comics';
5
+ import { flowRectToPage } from '../../vdt';
6
+ // Deterministic text measurement stub (no DOM in the node test env).
7
+ class StubCtx {
8
+ font = '';
9
+ measureText(s) {
10
+ return { width: s.length * 7 };
11
+ }
12
+ }
13
+ globalThis.OffscreenCanvas = class {
14
+ getContext() {
15
+ return new StubCtx();
16
+ }
17
+ };
18
+ const picture = (id, width, height, extra = {}) => ({
19
+ id,
20
+ typeId: 'figure',
21
+ kind: 'bitmap',
22
+ createdAt: 0,
23
+ updatedAt: 0,
24
+ bitmap: { fileId: `file-${id}`, format: 'png', width, height },
25
+ ...extra,
26
+ });
27
+ const resources = [
28
+ picture('d1', 1000, 1000),
29
+ picture('wide', 3000, 1000, { safeArea: { x: 0.3, y: 0, width: 0.4, height: 1 } }),
30
+ ];
31
+ const para = (n, tag = 'Paragraph') => Array.from({ length: n }, (_, i) => `${tag} ${i} lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.`).join('\n\n');
32
+ const daily = ':::strip{split="* | * | *"}\n::panel{art=d1}\nana: Morning!\n::panel\n::panel\n:::';
33
+ const strips = (doc) => doc.pages.flatMap((page) => [
34
+ ...page.columns.flatMap((c) => c.blocks).filter((b) => b.comic).map((block) => ({ page, block, float: false })),
35
+ ...(page.floats ?? []).filter((b) => b.comic).map((block) => ({ page, block, float: true })),
36
+ ]);
37
+ describe(':::strip — parsing and attributes', () => {
38
+ it('reads a strip as a comic directive whose panels sit side by side without a split', () => {
39
+ const blocks = parseMarkdown(':::strip{aspect=4}\n::panel\n::panel\n::panel\n:::\n\nAfter.');
40
+ expect(blocks[0].type).toBe('directive');
41
+ expect(blocks[0].directiveName).toBe('strip');
42
+ expect(blocks[0].comic.kind).toBe('strip');
43
+ expect(blocks[0].comic.splitParse.tree.axis).toBe('columns');
44
+ expect(blocks[0].comic.splitParse.tree.items).toHaveLength(3);
45
+ expect(blocks[1].type).toBe('paragraph');
46
+ });
47
+ it('reads span, placement, height and aspect', () => {
48
+ expect(comicStripPlacement({})).toEqual({ span: 'column', position: 'here' });
49
+ expect(comicStripPlacement({ span: 'page', placement: 'top', height: '4cm', aspect: '4/1' })).toEqual({
50
+ span: 'page', position: 'top', height: { value: 4, unit: 'cm' }, aspect: 4,
51
+ });
52
+ expect(comicStripPlacement({ placement: 'nowhere', height: 'tall' })).toEqual({ span: 'column', position: 'here' });
53
+ expect(parseComicAspect('4:1')).toBe(4);
54
+ expect(parseComicAspect('2.5')).toBe(2.5);
55
+ expect(parseComicAspect('0')).toBeUndefined();
56
+ // Square panels by default: 3 across, or 2 across 2 tiers.
57
+ expect(comicSplitGrid(parseComicSplit('* | * | *').tree)).toEqual({ across: 3, down: 1 });
58
+ expect(comicSplitGrid(parseComicSplit('* [* | *] / *').tree)).toEqual({ across: 2, down: 2 });
59
+ expect(comicSplitGrid(parseComicSplit('60 | * [50 / *]').tree)).toEqual({ across: 2, down: 2 });
60
+ });
61
+ it('moves an SVG path by an offset, absolute coordinates only', () => {
62
+ expect(translateSvgPath('M0 0 L10 10 h5 v5 C1 2 3 4 5 6 A2 2 0 0 1 4 4 Z', 1, 2))
63
+ .toBe('M 1 2 L 11 12 h 5 v 5 C 2 4 4 6 6 8 A 2 2 0 0 1 5 6 Z');
64
+ expect(translateSvgPath('m1 1 l2 2 H3 V4', 10, 20)).toBe('m 11 21 l 2 2 H 13 V 24');
65
+ });
66
+ });
67
+ describe(':::strip — in the flow', () => {
68
+ const config = { page: { sizePreset: '17x24' } };
69
+ it('sets a strip here, a column wide, its panels cut from its own box', () => {
70
+ const md = `# Title\n\n${para(2)}\n\n${daily}\n\n${para(2, 'After')}`;
71
+ const doc = buildDocument({ markdown: md, resources }, config);
72
+ const found = strips(doc);
73
+ expect(found).toHaveLength(1);
74
+ const { page, block, float } = found[0];
75
+ expect(float).toBe(false);
76
+ expect(block.type).toBe('resource');
77
+ expect(block.resourceBlock).toBeUndefined();
78
+ const col = page.columns[block.columnIndex];
79
+ expect(block.bbox.width).toBeCloseTo(col.bbox.width, 3);
80
+ // Three square panels: a third as tall as wide.
81
+ expect(block.bbox.height).toBeCloseTo(col.bbox.width / 3, 3);
82
+ const comic = block.comic;
83
+ expect(comic.frame).toEqual({ x: 0, y: 0, width: block.bbox.width, height: block.bbox.height });
84
+ expect(comic.panels).toHaveLength(3);
85
+ for (const p of comic.panels) {
86
+ expect(p.bbox.x).toBeGreaterThanOrEqual(-0.01);
87
+ expect(p.bbox.x + p.bbox.width).toBeLessThanOrEqual(block.bbox.width + 0.01);
88
+ }
89
+ expect(comic.panels[0].bbox.x).toBeLessThan(comic.panels[1].bbox.x);
90
+ expect(comic.panels[0].art?.resourceId).toBe('d1');
91
+ // The splitters carry the range of the split value.
92
+ expect(comic.splitters).toHaveLength(2);
93
+ for (const s of comic.splitters)
94
+ expect(md.slice(s.sourceStart, s.sourceEnd)).toBe('* | * | *');
95
+ expect(md.slice(block.sourceStart, block.sourceEnd)).toBe(daily);
96
+ expect(md.slice(comic.panels[0].sourceStart, comic.panels[0].sourceEnd)).toBe('::panel{art=d1}\nana: Morning!');
97
+ // The text after it follows it in the same column, a float gap below.
98
+ const after = col.blocks[col.blocks.indexOf(block) + 1];
99
+ expect(after.bbox.y).toBeGreaterThanOrEqual(block.bbox.y + block.bbox.height - 0.01);
100
+ // On the sheet: moved by the block's place.
101
+ const onSheet = comicBlockOnSheet(page, block);
102
+ expect(onSheet.panels[0].bbox.x).toBeCloseTo(comic.panels[0].bbox.x + block.bbox.x, 3);
103
+ expect(onSheet.panels[0].bbox.y).toBeCloseTo(comic.panels[0].bbox.y + block.bbox.y, 3);
104
+ expect(onSheet.splitters[0].a.y).toBeCloseTo(comic.splitters[0].a.y + block.bbox.y, 3);
105
+ expect(pageComics(page)).toEqual([onSheet]);
106
+ });
107
+ it('takes the measure of its column on a page of two columns', () => {
108
+ const md = `${para(3)}\n\n${daily}\n\n${para(20, 'After')}`;
109
+ const doc = buildDocument({ markdown: md, resources }, { ...config, layout: { layoutType: 'double' } });
110
+ const [{ page, block }] = strips(doc);
111
+ const textCols = page.columns.filter((c) => c.kind !== 'span' && c.kind !== 'side');
112
+ expect(textCols.length).toBe(2);
113
+ expect(block.bbox.width).toBeCloseTo(textCols[0].bbox.width, 3);
114
+ expect(block.bbox.width).toBeLessThan(page.contentArea.width / 2);
115
+ expect(block.comic.panels).toHaveLength(3);
116
+ });
117
+ it('keeps a strip together: one that does not fit moves whole to the next column, with the heading before it', () => {
118
+ // Fill most of the first column, then a heading and a tall strip.
119
+ const md = `${para(11)}\n\n## Comic\n\n:::strip{height=9cm}\n::panel\n::panel\n:::\n\n${para(4, 'After')}`;
120
+ const doc = buildDocument({ markdown: md, resources }, { ...config, layout: { layoutType: 'double' } });
121
+ const found = strips(doc);
122
+ expect(found).toHaveLength(1);
123
+ const { page, block } = found[0];
124
+ // Never cut: one block, its whole height inside its column.
125
+ const col = page.columns[block.columnIndex];
126
+ expect(block.bbox.height).toBeCloseTo((9 / 2.54) * doc.config.page.dpi, 1);
127
+ expect(block.bbox.y + block.bbox.height).toBeLessThanOrEqual(col.bbox.y + col.bbox.height + 0.5);
128
+ // It did not fit under the text of the first column.
129
+ const first = doc.pages[0].columns[0];
130
+ expect(first.blocks.includes(block)).toBe(false);
131
+ // The heading goes on with it.
132
+ const heading = doc.blocks.find((b) => b.type === 'heading');
133
+ expect(heading.pageIndex).toBe(block.pageIndex);
134
+ expect(heading.columnIndex).toBe(block.columnIndex);
135
+ });
136
+ it('never makes a strip taller than a column', () => {
137
+ const md = `Text.\n\n:::strip{aspect=0.1}\n::panel\n:::`;
138
+ const doc = buildDocument({ markdown: md, resources }, config);
139
+ const [{ page, block }] = strips(doc);
140
+ expect(block.bbox.height).toBeLessThanOrEqual(page.contentArea.height + 0.01);
141
+ });
142
+ it('floats a strip to the head of a page, across the columns', () => {
143
+ const md = `${para(3)}\n\n:::strip{span=page placement=top aspect=5}\n::panel\n::panel\n::panel\n::panel\n:::\n\n${para(60, 'After')}`;
144
+ const doc = buildDocument({ markdown: md, resources }, { ...config, layout: { layoutType: 'double' } });
145
+ const found = strips(doc);
146
+ expect(found).toHaveLength(1);
147
+ const { page, block, float } = found[0];
148
+ expect(float).toBe(true);
149
+ expect(block.bbox.width).toBeCloseTo(page.contentArea.width, 3);
150
+ expect(block.bbox.height).toBeCloseTo(page.contentArea.width / 5, 3);
151
+ expect(block.bbox.y).toBeCloseTo(page.contentArea.y, 3);
152
+ // The text of that page flows under it.
153
+ for (const c of page.columns)
154
+ for (const b of c.blocks)
155
+ expect(b.bbox.y).toBeGreaterThanOrEqual(block.bbox.y + block.bbox.height - 0.01);
156
+ expect(pageComics(page)).toHaveLength(1);
157
+ });
158
+ it('floats a page-wide strip set here on a page of several columns', () => {
159
+ const md = `${para(3)}\n\n:::strip{span=page}\n::panel\n::panel\n:::\n\n${para(40, 'After')}`;
160
+ const doc = buildDocument({ markdown: md, resources }, { ...config, layout: { layoutType: 'double' } });
161
+ const [{ page, block, float }] = strips(doc);
162
+ expect(float).toBe(true);
163
+ expect(block.bbox.width).toBeCloseTo(page.contentArea.width, 3);
164
+ });
165
+ it('floats a strip to the foot of a page', () => {
166
+ const md = `${para(2)}\n\n:::strip{placement=bottom aspect=4}\n::panel\n::panel\n:::\n\n${para(30, 'After')}`;
167
+ const doc = buildDocument({ markdown: md, resources }, config);
168
+ const [{ page, block, float }] = strips(doc);
169
+ expect(float).toBe(true);
170
+ // At the foot: under the page's text, on the last grid line or so.
171
+ const bottom = page.contentArea.y + page.contentArea.height;
172
+ expect(block.bbox.y + block.bbox.height).toBeLessThanOrEqual(bottom + 0.01);
173
+ expect(block.bbox.y + block.bbox.height).toBeGreaterThan(bottom - doc.baselineGrid - 0.01);
174
+ for (const c of page.columns)
175
+ for (const b of c.blocks)
176
+ expect(b.bbox.y + b.bbox.height).toBeLessThanOrEqual(block.bbox.y + 0.01);
177
+ });
178
+ it('reads its panels from the right in a right-to-left document', () => {
179
+ const md = `نص.\n\n${daily}\n\nنص.`;
180
+ const doc = buildDocument({ markdown: md, resources }, { ...config, locale: 'ar' });
181
+ const [{ page, block }] = strips(doc);
182
+ const comic = block.comic;
183
+ expect(comic.direction).toBe('rtl');
184
+ expect(comic.panels[0].bbox.x).toBeGreaterThan(comic.panels[1].bbox.x);
185
+ const sheet = flowRectToPage(page, block.bbox);
186
+ const onSheet = comicBlockOnSheet(page, block);
187
+ expect(onSheet.frame.x).toBeCloseTo(sheet.x, 3);
188
+ });
189
+ it('turns its box onto the sheet in a vertical document', () => {
190
+ const md = '本文。\n\n:::strip{split="* / * / * / *" aspect=0.25}\n::panel\n::panel\n::panel\n::panel\n:::\n\n本文。';
191
+ const doc = buildDocument({ markdown: md, resources }, { ...config, locale: 'ja', layout: { writingMode: 'vertical-rl' } });
192
+ const [{ page, block }] = strips(doc);
193
+ const sheet = flowRectToPage(page, block.bbox);
194
+ const comic = block.comic;
195
+ // A yonkoma down the column: four tiers, tall on the sheet.
196
+ expect(comic.frame.width).toBeCloseTo(sheet.width, 3);
197
+ expect(comic.frame.height).toBeCloseTo(sheet.height, 3);
198
+ expect(comic.frame.height).toBeGreaterThan(comic.frame.width);
199
+ expect(comic.panels.map((p) => p.bbox.y)).toEqual([...comic.panels.map((p) => p.bbox.y)].sort((a, b) => a - b));
200
+ const onSheet = comicBlockOnSheet(page, block);
201
+ expect(onSheet.frame.x).toBeGreaterThanOrEqual(0);
202
+ expect(onSheet.frame.x + onSheet.frame.width).toBeLessThanOrEqual(page.width);
203
+ });
204
+ it('reports a letterboxed panel of a strip on the page it landed on', () => {
205
+ const md = `${para(30)}\n\n:::strip{aspect=0.6}\n::panel{art=wide}\n:::`;
206
+ const doc = buildDocument({ markdown: md, resources }, config);
207
+ const [{ page }] = strips(doc);
208
+ const w = (doc.contentWarnings ?? []).find((x) => x.kind === 'comicPanelLetterbox');
209
+ expect(w).toBeDefined();
210
+ expect(w.pageIndex).toBe(page.index);
211
+ });
212
+ it('letters a strip in its own box, and moves the balloons onto the sheet with it', () => {
213
+ const doc = buildDocument({ markdown: daily, resources }, config);
214
+ const { page, block } = strips(doc)[0];
215
+ const comic = block.comic;
216
+ expect(comic.balloons).toHaveLength(1);
217
+ const b = comic.balloons[0];
218
+ expect(b.kind).toBe('balloon');
219
+ expect(b.panelIndex).toBe(0);
220
+ // Block-relative: inside the strip's own frame.
221
+ const p0 = comic.panels[0].bbox;
222
+ expect(b.bbox.x).toBeGreaterThanOrEqual(p0.x - 1);
223
+ expect(b.bbox.x + b.bbox.width).toBeLessThanOrEqual(p0.x + p0.width + 1);
224
+ const onSheet = pageComics(page).find((c) => c.sourceStart === comic.sourceStart);
225
+ const dx = onSheet.frame.x - comic.frame.x;
226
+ const dy = onSheet.frame.y - comic.frame.y;
227
+ expect(onSheet.balloons[0].bbox.x).toBeCloseTo(b.bbox.x + dx, 6);
228
+ expect(onSheet.balloons[0].bbox.y).toBeCloseTo(b.bbox.y + dy, 6);
229
+ });
230
+ });
231
+ //# sourceMappingURL=strip.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip.test.js","sourceRoot":"","sources":["../../../src/__tests__/comics/strip.test.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,8 @@ describe("package exports", () => {
74
74
  "renderToHtmlIndexed",
75
75
  "anchoredResourceIds",
76
76
  "HTML_TEXT_RESET",
77
+ "renderComicHtml",
78
+ "comicPanelSvg",
77
79
  "dimensionToPx",
78
80
  "computePageTextExtent",
79
81
  "columnRuleSegments",
@@ -150,6 +152,93 @@ describe("package exports", () => {
150
152
  "safeAreaHeightRange",
151
153
  "safeAreaSource",
152
154
  "uncroppedPictureBox",
155
+ "parseComicSplit",
156
+ "serializeComicSplit",
157
+ "moveComicSplitLine",
158
+ "splitComicCell",
159
+ "mergeComicCells",
160
+ "comicSplitLines",
161
+ "comicSplitLeaves",
162
+ "comicSplitListAt",
163
+ "COMIC_MIN_CELL_PERCENT",
164
+ "parseComicScript",
165
+ "parseComicPoint",
166
+ "readBalloonText",
167
+ "parseComicFence",
168
+ "isComicFence",
169
+ "COMIC_FENCES",
170
+ "comicGeometry",
171
+ "pointInPolygon",
172
+ "polygonBBox",
173
+ "physicalSide",
174
+ "comicArtCrop",
175
+ "comicCropFeasibleRange",
176
+ "comicArtPointToPage",
177
+ "comicArtRectToPage",
178
+ "anchorsOutsideSafeArea",
179
+ "layoutComicPage",
180
+ "comicViewerLeaf",
181
+ "letterPanels",
182
+ "comicPageDirection",
183
+ "comicPanelPadding",
184
+ "parseComicDimension",
185
+ "comicPageLayoutWarnings",
186
+ "comicSourceWarnings",
187
+ "COMIC_RESERVED_KEYS",
188
+ "layoutComicFrame",
189
+ "comicPageFrame",
190
+ "layoutComicStrip",
191
+ "comicStripPlacement",
192
+ "comicStripExtent",
193
+ "comicStripAspect",
194
+ "comicSplitGrid",
195
+ "parseComicAspect",
196
+ "layoutComicSpread",
197
+ "isComicSpread",
198
+ "translateComicPage",
199
+ "translateComicPanel",
200
+ "translateComicSplitter",
201
+ "translateComicBalloon",
202
+ "translateSvgPath",
203
+ "comicBlockOnSheet",
204
+ "pageComics",
205
+ "comicLetteringStyle",
206
+ "comicLetteringLocale",
207
+ "comicLetteringVertical",
208
+ "comicFontFamilies",
209
+ "markdownHasComics",
210
+ "letterPanel",
211
+ "letterPanelDetailed",
212
+ "presetLetteringStyles",
213
+ "comicBalloonKind",
214
+ "comicBalloonText",
215
+ "comicSpeakerName",
216
+ "comicBalloonGroups",
217
+ "comicPanelPathData",
218
+ "comicBorderPathData",
219
+ "polygonPathData",
220
+ "comicPanelContinues",
221
+ "isComicSpreadPartner",
222
+ "joinComicSpread",
223
+ "renderComicPanels",
224
+ "renderComicPanel",
225
+ "comicPanelPath",
226
+ "comicRoughBorder",
227
+ "renderComicBalloons",
228
+ "renderComicBalloon",
229
+ "renderComicPage",
230
+ "DEFAULT_PANEL_STYLE",
231
+ "DEFAULT_COMIC_GUTTER",
232
+ "DEFAULT_LETTERING_STATIC",
233
+ "DEFAULT_BALLOON_STYLES",
234
+ "DEFAULT_BALLOON_STYLE_IDS",
235
+ "defaultComicFont",
236
+ "defaultComicSfxFont",
237
+ "resolveComicsConfig",
238
+ "resolvedComics",
239
+ "pickPanelStyle",
240
+ "pickBalloonStyle",
241
+ "stripComicsDefaults",
153
242
  "layoutVideo",
154
243
  "playMarkTriangle",
155
244
  "qrModuleRuns",
@@ -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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"}
@@ -16,7 +16,7 @@ const expectSourceMapAligned = (markdown, block) => {
16
16
  describe('fenced containers', () => {
17
17
  it('exposes the known names', () => {
18
18
  expect([...KNOWN_CONTAINERS]).toEqual(['callout', 'paragraphs', 'part', 'columns', 'paper']);
19
- expect([...KNOWN_DIRECTIVES]).toEqual(['pagebreak', 'numbering', 'columnbreak', 'space', 'toc', 'index', 'bibliography', 'references', 'verse']);
19
+ expect([...KNOWN_DIRECTIVES]).toEqual(['pagebreak', 'numbering', 'columnbreak', 'space', 'toc', 'index', 'bibliography', 'references', 'verse', 'page', 'strip']);
20
20
  });
21
21
  it('parses callout fence into start/end markers with attrs and matching containerId', () => {
22
22
  const md = ':::callout{style="note" title=\'Heads up\'}\nInside.\n:::\n';