postext 1.35.1 → 1.37.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 (273) hide show
  1. package/dist/__bench__/composedPage.bench.test.d.ts +2 -0
  2. package/dist/__bench__/composedPage.bench.test.d.ts.map +1 -0
  3. package/dist/__bench__/composedPage.bench.test.js +95 -0
  4. package/dist/__bench__/composedPage.bench.test.js.map +1 -0
  5. package/dist/__tests__/composed/continuation.test.d.ts +2 -0
  6. package/dist/__tests__/composed/continuation.test.d.ts.map +1 -0
  7. package/dist/__tests__/composed/continuation.test.js +352 -0
  8. package/dist/__tests__/composed/continuation.test.js.map +1 -0
  9. package/dist/__tests__/composed/contrast.test.d.ts +2 -0
  10. package/dist/__tests__/composed/contrast.test.d.ts.map +1 -0
  11. package/dist/__tests__/composed/contrast.test.js +124 -0
  12. package/dist/__tests__/composed/contrast.test.js.map +1 -0
  13. package/dist/__tests__/composed/corpus.test.js +7 -1
  14. package/dist/__tests__/composed/corpus.test.js.map +1 -1
  15. package/dist/__tests__/composed/fit.test.d.ts +2 -0
  16. package/dist/__tests__/composed/fit.test.d.ts.map +1 -0
  17. package/dist/__tests__/composed/fit.test.js +408 -0
  18. package/dist/__tests__/composed/fit.test.js.map +1 -0
  19. package/dist/__tests__/composed/groups.test.js +14 -0
  20. package/dist/__tests__/composed/groups.test.js.map +1 -1
  21. package/dist/__tests__/composed/headingDesigns.test.d.ts +2 -0
  22. package/dist/__tests__/composed/headingDesigns.test.d.ts.map +1 -0
  23. package/dist/__tests__/composed/headingDesigns.test.js +262 -0
  24. package/dist/__tests__/composed/headingDesigns.test.js.map +1 -0
  25. package/dist/__tests__/composed/labels.test.d.ts +2 -0
  26. package/dist/__tests__/composed/labels.test.d.ts.map +1 -0
  27. package/dist/__tests__/composed/labels.test.js +326 -0
  28. package/dist/__tests__/composed/labels.test.js.map +1 -0
  29. package/dist/__tests__/composed/layout.test.js +2 -1
  30. package/dist/__tests__/composed/layout.test.js.map +1 -1
  31. package/dist/__tests__/composed/outsidePrint.test.js +5 -2
  32. package/dist/__tests__/composed/outsidePrint.test.js.map +1 -1
  33. package/dist/__tests__/composed/pageMemo.test.d.ts +2 -0
  34. package/dist/__tests__/composed/pageMemo.test.d.ts.map +1 -0
  35. package/dist/__tests__/composed/pageMemo.test.js +128 -0
  36. package/dist/__tests__/composed/pageMemo.test.js.map +1 -0
  37. package/dist/__tests__/composed/sourceMap.test.d.ts +2 -0
  38. package/dist/__tests__/composed/sourceMap.test.d.ts.map +1 -0
  39. package/dist/__tests__/composed/sourceMap.test.js +395 -0
  40. package/dist/__tests__/composed/sourceMap.test.js.map +1 -0
  41. package/dist/__tests__/composed/spreadLabels.test.d.ts +2 -0
  42. package/dist/__tests__/composed/spreadLabels.test.d.ts.map +1 -0
  43. package/dist/__tests__/composed/spreadLabels.test.js +131 -0
  44. package/dist/__tests__/composed/spreadLabels.test.js.map +1 -0
  45. package/dist/__tests__/composed/templateFrameRects.test.d.ts +2 -0
  46. package/dist/__tests__/composed/templateFrameRects.test.d.ts.map +1 -0
  47. package/dist/__tests__/composed/templateFrameRects.test.js +37 -0
  48. package/dist/__tests__/composed/templateFrameRects.test.js.map +1 -0
  49. package/dist/__tests__/design/imageAltText.test.js +2 -1
  50. package/dist/__tests__/design/imageAltText.test.js.map +1 -1
  51. package/dist/__tests__/exports.test.js +33 -0
  52. package/dist/__tests__/exports.test.js.map +1 -1
  53. package/dist/__tests__/migrate/fixtures/textbookPort.d.ts +14 -0
  54. package/dist/__tests__/migrate/fixtures/textbookPort.d.ts.map +1 -0
  55. package/dist/__tests__/migrate/fixtures/textbookPort.js +116 -0
  56. package/dist/__tests__/migrate/fixtures/textbookPort.js.map +1 -0
  57. package/dist/__tests__/migrate/textToMarkdown.test.d.ts +2 -0
  58. package/dist/__tests__/migrate/textToMarkdown.test.d.ts.map +1 -0
  59. package/dist/__tests__/migrate/textToMarkdown.test.js +268 -0
  60. package/dist/__tests__/migrate/textToMarkdown.test.js.map +1 -0
  61. package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts +2 -0
  62. package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts.map +1 -0
  63. package/dist/__tests__/paragraphStyleLetterSpacing.test.js +89 -0
  64. package/dist/__tests__/paragraphStyleLetterSpacing.test.js.map +1 -0
  65. package/dist/__tests__/pictureBelowPrintSize.test.d.ts +2 -0
  66. package/dist/__tests__/pictureBelowPrintSize.test.d.ts.map +1 -0
  67. package/dist/__tests__/pictureBelowPrintSize.test.js +82 -0
  68. package/dist/__tests__/pictureBelowPrintSize.test.js.map +1 -0
  69. package/dist/__tests__/pipeline/contourWrap.test.d.ts +2 -0
  70. package/dist/__tests__/pipeline/contourWrap.test.d.ts.map +1 -0
  71. package/dist/__tests__/pipeline/contourWrap.test.js +412 -0
  72. package/dist/__tests__/pipeline/contourWrap.test.js.map +1 -0
  73. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +1 -1
  74. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  75. package/dist/__tests__/toc.test.js +3 -2
  76. package/dist/__tests__/toc.test.js.map +1 -1
  77. package/dist/bundle/codec.d.ts +16 -0
  78. package/dist/bundle/codec.d.ts.map +1 -1
  79. package/dist/bundle/codec.js +44 -2
  80. package/dist/bundle/codec.js.map +1 -1
  81. package/dist/bundle/index.d.ts +1 -1
  82. package/dist/bundle/index.d.ts.map +1 -1
  83. package/dist/bundle/index.js +1 -1
  84. package/dist/bundle/index.js.map +1 -1
  85. package/dist/canvas-backend/composed.d.ts +5 -2
  86. package/dist/canvas-backend/composed.d.ts.map +1 -1
  87. package/dist/canvas-backend/composed.js +10 -5
  88. package/dist/canvas-backend/composed.js.map +1 -1
  89. package/dist/canvas-backend/index.d.ts.map +1 -1
  90. package/dist/canvas-backend/index.js +37 -19
  91. package/dist/canvas-backend/index.js.map +1 -1
  92. package/dist/canvas-backend/renderResourceBlock.d.ts +5 -1
  93. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  94. package/dist/canvas-backend/renderResourceBlock.js +60 -1
  95. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  96. package/dist/composed/continuation.d.ts +102 -0
  97. package/dist/composed/continuation.d.ts.map +1 -0
  98. package/dist/composed/continuation.js +87 -0
  99. package/dist/composed/continuation.js.map +1 -0
  100. package/dist/composed/contour.d.ts +21 -0
  101. package/dist/composed/contour.d.ts.map +1 -0
  102. package/dist/composed/contour.js +34 -0
  103. package/dist/composed/contour.js.map +1 -0
  104. package/dist/composed/geometry.d.ts +8 -0
  105. package/dist/composed/geometry.d.ts.map +1 -1
  106. package/dist/composed/geometry.js +26 -0
  107. package/dist/composed/geometry.js.map +1 -1
  108. package/dist/composed/ids.d.ts +22 -0
  109. package/dist/composed/ids.d.ts.map +1 -0
  110. package/dist/composed/ids.js +32 -0
  111. package/dist/composed/ids.js.map +1 -0
  112. package/dist/composed/labels.d.ts +154 -0
  113. package/dist/composed/labels.d.ts.map +1 -0
  114. package/dist/composed/labels.js +524 -0
  115. package/dist/composed/labels.js.map +1 -0
  116. package/dist/composed/pageMemo.d.ts +73 -0
  117. package/dist/composed/pageMemo.d.ts.map +1 -0
  118. package/dist/composed/pageMemo.js +289 -0
  119. package/dist/composed/pageMemo.js.map +1 -0
  120. package/dist/composed/paint.d.ts +29 -9
  121. package/dist/composed/paint.d.ts.map +1 -1
  122. package/dist/composed/paint.js +41 -7
  123. package/dist/composed/paint.js.map +1 -1
  124. package/dist/composed/reflowLog.d.ts +14 -2
  125. package/dist/composed/reflowLog.d.ts.map +1 -1
  126. package/dist/composed/reflowLog.js +64 -7
  127. package/dist/composed/reflowLog.js.map +1 -1
  128. package/dist/composed/slotChecks.d.ts.map +1 -1
  129. package/dist/composed/slotChecks.js +3 -1
  130. package/dist/composed/slotChecks.js.map +1 -1
  131. package/dist/composed/sourceMap.d.ts +97 -0
  132. package/dist/composed/sourceMap.d.ts.map +1 -0
  133. package/dist/composed/sourceMap.js +748 -0
  134. package/dist/composed/sourceMap.js.map +1 -0
  135. package/dist/composed/spread.d.ts +3 -0
  136. package/dist/composed/spread.d.ts.map +1 -1
  137. package/dist/composed/spread.js +11 -12
  138. package/dist/composed/spread.js.map +1 -1
  139. package/dist/composed/templates.d.ts +1 -0
  140. package/dist/composed/templates.d.ts.map +1 -1
  141. package/dist/composed/templates.js +4 -0
  142. package/dist/composed/templates.js.map +1 -1
  143. package/dist/composed/types.d.ts +15 -32
  144. package/dist/composed/types.d.ts.map +1 -1
  145. package/dist/composed/validate.d.ts.map +1 -1
  146. package/dist/composed/validate.js +3 -2
  147. package/dist/composed/validate.js.map +1 -1
  148. package/dist/composed/wrap.d.ts.map +1 -1
  149. package/dist/composed/wrap.js +7 -1
  150. package/dist/composed/wrap.js.map +1 -1
  151. package/dist/configWarnings.d.ts +15 -0
  152. package/dist/configWarnings.d.ts.map +1 -1
  153. package/dist/configWarnings.js +29 -17
  154. package/dist/configWarnings.js.map +1 -1
  155. package/dist/contour/index.d.ts +134 -0
  156. package/dist/contour/index.d.ts.map +1 -0
  157. package/dist/contour/index.js +354 -0
  158. package/dist/contour/index.js.map +1 -0
  159. package/dist/contour/png.d.ts +16 -0
  160. package/dist/contour/png.d.ts.map +1 -0
  161. package/dist/contour/png.js +173 -0
  162. package/dist/contour/png.js.map +1 -0
  163. package/dist/contrast.d.ts +5 -3
  164. package/dist/contrast.d.ts.map +1 -1
  165. package/dist/contrast.js +46 -5
  166. package/dist/contrast.js.map +1 -1
  167. package/dist/defaults/paragraphStyles.d.ts +1 -1
  168. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  169. package/dist/defaults/paragraphStyles.js +5 -1
  170. package/dist/defaults/paragraphStyles.js.map +1 -1
  171. package/dist/design/slots.d.ts +12 -10
  172. package/dist/design/slots.d.ts.map +1 -1
  173. package/dist/design/slots.js +26 -2
  174. package/dist/design/slots.js.map +1 -1
  175. package/dist/fonts/faces.d.ts.map +1 -1
  176. package/dist/fonts/faces.js +6 -0
  177. package/dist/fonts/faces.js.map +1 -1
  178. package/dist/highlightMarks.d.ts.map +1 -1
  179. package/dist/highlightMarks.js +6 -0
  180. package/dist/highlightMarks.js.map +1 -1
  181. package/dist/html-backend.d.ts.map +1 -1
  182. package/dist/html-backend.js +42 -4
  183. package/dist/html-backend.js.map +1 -1
  184. package/dist/index.d.ts +18 -7
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +18 -4
  187. package/dist/index.js.map +1 -1
  188. package/dist/measure/rich.d.ts.map +1 -1
  189. package/dist/measure/rich.js +2 -0
  190. package/dist/measure/rich.js.map +1 -1
  191. package/dist/migrate/markdownRuns.d.ts +70 -0
  192. package/dist/migrate/markdownRuns.d.ts.map +1 -0
  193. package/dist/migrate/markdownRuns.js +215 -0
  194. package/dist/migrate/markdownRuns.js.map +1 -0
  195. package/dist/migrate/pageDesign.d.ts +119 -0
  196. package/dist/migrate/pageDesign.d.ts.map +1 -0
  197. package/dist/migrate/pageDesign.js +446 -0
  198. package/dist/migrate/pageDesign.js.map +1 -0
  199. package/dist/migrate/textToMarkdown.d.ts +124 -0
  200. package/dist/migrate/textToMarkdown.d.ts.map +1 -0
  201. package/dist/migrate/textToMarkdown.js +716 -0
  202. package/dist/migrate/textToMarkdown.js.map +1 -0
  203. package/dist/parse/blockParser.d.ts.map +1 -1
  204. package/dist/parse/blockParser.js +44 -3
  205. package/dist/parse/blockParser.js.map +1 -1
  206. package/dist/parse/types.d.ts +20 -0
  207. package/dist/parse/types.d.ts.map +1 -1
  208. package/dist/pipeline/build.d.ts.map +1 -1
  209. package/dist/pipeline/build.js +298 -30
  210. package/dist/pipeline/build.js.map +1 -1
  211. package/dist/pipeline/buildMeasurement.d.ts +7 -2
  212. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  213. package/dist/pipeline/buildMeasurement.js +21 -5
  214. package/dist/pipeline/buildMeasurement.js.map +1 -1
  215. package/dist/pipeline/calloutLayout.d.ts +39 -14
  216. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  217. package/dist/pipeline/calloutLayout.js +50 -4
  218. package/dist/pipeline/calloutLayout.js.map +1 -1
  219. package/dist/pipeline/composedLayout.d.ts +51 -6
  220. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  221. package/dist/pipeline/composedLayout.js +633 -78
  222. package/dist/pipeline/composedLayout.js.map +1 -1
  223. package/dist/pipeline/contentWarnings.d.ts +15 -0
  224. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  225. package/dist/pipeline/contentWarnings.js +98 -4
  226. package/dist/pipeline/contentWarnings.js.map +1 -1
  227. package/dist/pipeline/floatPlacement.d.ts +2 -0
  228. package/dist/pipeline/floatPlacement.d.ts.map +1 -1
  229. package/dist/pipeline/floatPlacement.js +1 -0
  230. package/dist/pipeline/floatPlacement.js.map +1 -1
  231. package/dist/pipeline/frameLayout.d.ts +7 -4
  232. package/dist/pipeline/frameLayout.d.ts.map +1 -1
  233. package/dist/pipeline/frameLayout.js +5 -2
  234. package/dist/pipeline/frameLayout.js.map +1 -1
  235. package/dist/pipeline/headerFooter.d.ts +20 -1
  236. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  237. package/dist/pipeline/headerFooter.js +225 -70
  238. package/dist/pipeline/headerFooter.js.map +1 -1
  239. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  240. package/dist/pipeline/measureContentBlock.js +1 -0
  241. package/dist/pipeline/measureContentBlock.js.map +1 -1
  242. package/dist/pipeline/mirrorFrame.d.ts.map +1 -1
  243. package/dist/pipeline/mirrorFrame.js +25 -2
  244. package/dist/pipeline/mirrorFrame.js.map +1 -1
  245. package/dist/pipeline/outline.d.ts.map +1 -1
  246. package/dist/pipeline/outline.js +2 -0
  247. package/dist/pipeline/outline.js.map +1 -1
  248. package/dist/pipeline/resourceLayout.d.ts +28 -0
  249. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  250. package/dist/pipeline/resourceLayout.js +21 -0
  251. package/dist/pipeline/resourceLayout.js.map +1 -1
  252. package/dist/pipeline/styles.d.ts +1 -1
  253. package/dist/pipeline/styles.d.ts.map +1 -1
  254. package/dist/pipeline/styles.js +4 -0
  255. package/dist/pipeline/styles.js.map +1 -1
  256. package/dist/pipeline/textWrap.d.ts +4 -1
  257. package/dist/pipeline/textWrap.d.ts.map +1 -1
  258. package/dist/pipeline/textWrap.js +17 -3
  259. package/dist/pipeline/textWrap.js.map +1 -1
  260. package/dist/pipeline/toc.d.ts.map +1 -1
  261. package/dist/pipeline/toc.js +1 -0
  262. package/dist/pipeline/toc.js.map +1 -1
  263. package/dist/types.d.ts +77 -2
  264. package/dist/types.d.ts.map +1 -1
  265. package/dist/vdt.d.ts +290 -15
  266. package/dist/vdt.d.ts.map +1 -1
  267. package/dist/vdt.js.map +1 -1
  268. package/dist/word/toDocx.d.ts.map +1 -1
  269. package/dist/word/toDocx.js +14 -0
  270. package/dist/word/toDocx.js.map +1 -1
  271. package/dist/word/word.test.js +11 -1
  272. package/dist/word/word.test.js.map +1 -1
  273. package/package.json +1 -1
@@ -0,0 +1,289 @@
1
+ import { measurementGeneration } from '../measure/canvas';
2
+ import { layoutComposedPage } from '../pipeline/composedLayout';
3
+ const MEMO_SLOTS = 96;
4
+ const memo = new Map();
5
+ const stats = { hits: 0, misses: 0, skipped: 0 };
6
+ let enabled = true;
7
+ /** Drop every kept page (tests; a host that wants a cold build). */
8
+ export function clearComposedPageMemo() {
9
+ memo.clear();
10
+ stats.hits = 0;
11
+ stats.misses = 0;
12
+ stats.skipped = 0;
13
+ }
14
+ /** Turn the memo off (every composed page laid out afresh) or on again. */
15
+ export function setComposedPageMemo(on) {
16
+ enabled = on;
17
+ if (!on)
18
+ memo.clear();
19
+ }
20
+ /** Pages reused, laid out and kept, and laid out without keeping. */
21
+ export function composedPageMemoStats() {
22
+ return { ...stats, size: memo.size };
23
+ }
24
+ const configKeys = new WeakMap();
25
+ /** A 64-bit digest of `parts` (two 32-bit FNV-style lanes, mixed) and
26
+ * their total length: the memo's keys stay short whatever a page holds. */
27
+ export function digest(parts) {
28
+ let h1 = 0xdeadbeef;
29
+ let h2 = 0x41c6ce57;
30
+ let len = 0;
31
+ for (const p of parts) {
32
+ for (let i = 0; i < p.length; i++) {
33
+ const c = p.charCodeAt(i);
34
+ h1 = Math.imul(h1 ^ c, 2654435761);
35
+ h2 = Math.imul(h2 ^ c, 1597334677);
36
+ }
37
+ // A separator, so ["ab", "c"] and ["a", "bc"] differ.
38
+ h1 = Math.imul(h1 ^ 0x1f, 2654435761);
39
+ h2 = Math.imul(h2 ^ 0x1f, 1597334677);
40
+ len += p.length + 1;
41
+ }
42
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
43
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
44
+ return `${(h1 >>> 0).toString(36)}.${(h2 >>> 0).toString(36)}.${len}`;
45
+ }
46
+ /** A key of a resolved configuration (or any plain object the layout
47
+ * does not change, a resolved template), computed once per object. */
48
+ export function configKeyOf(resolved) {
49
+ const known = configKeys.get(resolved);
50
+ if (known !== undefined)
51
+ return known;
52
+ const key = digest([JSON.stringify(resolved)]);
53
+ configKeys.set(resolved, key);
54
+ return key;
55
+ }
56
+ /** Spans the memo cannot key: what prints something set elsewhere. */
57
+ export function spansReadOutside(spans) {
58
+ for (const s of spans ?? []) {
59
+ if (s.ref || s.footnote || s.citation)
60
+ return true;
61
+ if (s.chip && spansReadOutside(s.chip.spans))
62
+ return true;
63
+ }
64
+ return false;
65
+ }
66
+ /** Whether content block `b` lays out from what it holds and the key's
67
+ * context alone. */
68
+ export function blockMemoisable(b) {
69
+ if (spansReadOutside(b.spans))
70
+ return false;
71
+ if (b.type === 'directive' && (b.directiveName === 'toc' || b.directiveName === 'index' || b.directiveName === 'strip' || b.comic))
72
+ return false;
73
+ if (b.toc || b.footnoteDef !== undefined)
74
+ return false;
75
+ return true;
76
+ }
77
+ /** The ids of the containers `blocks` name, in order of first appearance. */
78
+ function containerIdsOf(blocks) {
79
+ const out = [];
80
+ const seen = new Set();
81
+ for (const b of blocks) {
82
+ if (b.containerId !== undefined && !seen.has(b.containerId)) {
83
+ seen.add(b.containerId);
84
+ out.push(b.containerId);
85
+ }
86
+ }
87
+ return out;
88
+ }
89
+ const SOURCE_KEYS = new Set(['sourceStart', 'sourceEnd', 'textStart', 'textEnd']);
90
+ /** The page's blocks as a key: source offsets counted from `base`,
91
+ * container ids by their order. */
92
+ function blocksKey(blocks, base, ids) {
93
+ const ordinal = new Map(ids.map((id, i) => [id, i]));
94
+ return JSON.stringify(blocks, function (key, value) {
95
+ if (typeof value === 'number') {
96
+ if (SOURCE_KEYS.has(key))
97
+ return value - base;
98
+ if (key === 'containerId')
99
+ return `#${ordinal.get(value) ?? value}`;
100
+ }
101
+ // A block's character map follows from the page's Markdown, which the
102
+ // key holds whole.
103
+ if (key === 'sourceMap')
104
+ return undefined;
105
+ if (key === 'attrSources' && value && typeof value === 'object') {
106
+ // A heading's `{ start, end }` per attribute (the `{ sourceStart,
107
+ // sourceEnd }` of the others are read as any source offset).
108
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, Object.fromEntries(Object.entries(v).map(([f, n]) => [f, f === 'start' || f === 'end' ? n - base : n]))]));
109
+ }
110
+ return value;
111
+ });
112
+ }
113
+ /** Move a kept layout to where the page now stands (in place). */
114
+ function moveLayout(value, delta, indexDelta, ids, pageIndex, parentKey = '') {
115
+ if (Array.isArray(value)) {
116
+ if (parentKey === 'sourceMap') {
117
+ for (let i = 0; i < value.length; i++)
118
+ if (typeof value[i] === 'number')
119
+ value[i] += delta;
120
+ return;
121
+ }
122
+ if (parentKey === 'calloutPath') {
123
+ for (let i = 0; i < value.length; i++)
124
+ if (typeof value[i] === 'number')
125
+ value[i] = ids.get(value[i]) ?? value[i];
126
+ return;
127
+ }
128
+ for (const v of value)
129
+ moveLayout(v, delta, indexDelta, ids, pageIndex);
130
+ return;
131
+ }
132
+ if (value instanceof Set || value === null || typeof value !== 'object')
133
+ return;
134
+ const o = value;
135
+ for (const key of Object.keys(o)) {
136
+ const v = o[key];
137
+ if (typeof v === 'number') {
138
+ if (key === 'sourceStart' || key === 'sourceEnd')
139
+ o[key] = v + delta;
140
+ else if ((key === 'start' || key === 'end') && parentKey === 'attr')
141
+ o[key] = v + delta;
142
+ else if (key === 'contentIndex')
143
+ o[key] = v + indexDelta;
144
+ else if (key === 'containerId')
145
+ o[key] = ids.get(v) ?? v;
146
+ else if (key === 'pageIndex')
147
+ o[key] = pageIndex;
148
+ }
149
+ else if (v && typeof v === 'object') {
150
+ // `attrSources` of a block hold `{ start, end }` per attribute.
151
+ if (key === 'attrSources') {
152
+ for (const r of Object.values(v))
153
+ moveLayout(r, delta, indexDelta, ids, pageIndex, 'attr');
154
+ }
155
+ else {
156
+ moveLayout(v, delta, indexDelta, ids, pageIndex, key);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ /** Whether every container id and content index of `layout` falls in the
162
+ * page (so moving it is complete). */
163
+ function selfContained(layout, ids, from, to) {
164
+ let ok = true;
165
+ const visit = (value, parentKey) => {
166
+ if (!ok)
167
+ return;
168
+ if (Array.isArray(value)) {
169
+ if (parentKey === 'calloutPath') {
170
+ for (const v of value)
171
+ if (typeof v === 'number' && !ids.has(v))
172
+ ok = false;
173
+ return;
174
+ }
175
+ for (const v of value)
176
+ visit(v, '');
177
+ return;
178
+ }
179
+ if (value === null || typeof value !== 'object' || value instanceof Set)
180
+ return;
181
+ for (const [key, v] of Object.entries(value)) {
182
+ if (typeof v === 'number') {
183
+ if (key === 'containerId' && !ids.has(v))
184
+ ok = false;
185
+ else if (key === 'contentIndex' && (v < from || v > to))
186
+ ok = false;
187
+ }
188
+ else if (v && typeof v === 'object')
189
+ visit(v, key);
190
+ }
191
+ };
192
+ visit(layout.blocks, '');
193
+ return ok;
194
+ }
195
+ /** `v` with every number rounded to a millionth. */
196
+ const rounded = (v) => JSON.parse(JSON.stringify(v, (_k, x) => (typeof x === 'number' ? Math.round(x * 1e6) / 1e6 : x)));
197
+ /**
198
+ * {@link layoutComposedPage}, kept by what it reads: the same page met
199
+ * again is taken from the memo and moved to where it now stands.
200
+ */
201
+ export function layoutComposedPageMemo(input, ctx) {
202
+ if (!enabled)
203
+ return layoutComposedPage(input);
204
+ const blocks = input.pass.contentBlocks;
205
+ const from = input.startIdx;
206
+ const to = input.endIdx;
207
+ const range = blocks.slice(from, to + 1);
208
+ const context = range.every(blockMemoisable) ? ctx.contextKey(from, to) : undefined;
209
+ if (context === undefined) {
210
+ stats.skipped++;
211
+ return layoutComposedPage(input);
212
+ }
213
+ const first = range[0];
214
+ const last = range[range.length - 1];
215
+ const ids = containerIdsOf(range);
216
+ const key = digest([
217
+ '1',
218
+ ctx.configKey(),
219
+ String(measurementGeneration()),
220
+ configKeyOf(input.template),
221
+ String(input.fence.fenceIndex),
222
+ ctx.markdown.slice(first.sourceStart, last.sourceEnd),
223
+ blocksKey(range, first.sourceStart, ids),
224
+ // Geometry to a millionth of a pixel: a verso and a recto of the same
225
+ // margins differ in the last digits only.
226
+ JSON.stringify(rounded([input.areas, input.dpi, input.emPx, input.mirrored, input.pushGapPx, input.page.width, input.page.height, input.page.contentArea])),
227
+ [...input.stories.keys()].join('\u0000'),
228
+ context,
229
+ ]);
230
+ const sourceBase = first.sourceStart + ctx.bodyOffset;
231
+ const hit = memo.get(key);
232
+ if (hit) {
233
+ memo.delete(key);
234
+ memo.set(key, hit);
235
+ const layout = { ...JSON.parse(hit.layout), laid: new Set(hit.laid) };
236
+ const idMap = new Map(hit.containerIds.map((id, i) => [id, ids[i] ?? id]));
237
+ moveLayout(layout.blocks, sourceBase - hit.sourceBase, from - hit.indexBase, idMap, input.page.index);
238
+ moveLayout(layout.composed, sourceBase - hit.sourceBase, from - hit.indexBase, idMap, input.page.index);
239
+ moveLayout(layout.warnings, sourceBase - hit.sourceBase, from - hit.indexBase, idMap, input.page.index);
240
+ layout.composed.layoutKey = key;
241
+ stats.hits++;
242
+ return layout;
243
+ }
244
+ const layout = layoutComposedPage(input);
245
+ // A page whose content goes on on pages it adds (#859) is laid out
246
+ // afresh with them: the added pages read where it cut its frames.
247
+ if (layout.continuations || ctx.sideEffectsIn(from, to) || !selfContained(layout, new Set(ids), from, to)) {
248
+ stats.skipped++;
249
+ return layout;
250
+ }
251
+ layout.composed.layoutKey = key;
252
+ memo.set(key, { layout: JSON.stringify({ composed: layout.composed, blocks: layout.blocks, warnings: layout.warnings }), laid: [...layout.laid], sourceBase, indexBase: from, containerIds: ids });
253
+ if (memo.size > MEMO_SLOTS) {
254
+ const oldest = memo.keys().next().value;
255
+ if (oldest !== undefined)
256
+ memo.delete(oldest);
257
+ }
258
+ stats.misses++;
259
+ return layout;
260
+ }
261
+ /** Fields of the VDT that say where things come from, not what they look
262
+ * like. */
263
+ const PAINT_FREE_KEYS = new Set(['sourceStart', 'sourceEnd', 'sourceMap', 'contentIndex', 'containerId', 'pageIndex', 'attrSources', 'titleSourceStart', 'titleSourceEnd']);
264
+ /**
265
+ * What a composed page paints, as a key (#857): its frames' layout key
266
+ * with what is laid round them (running heads, decoration, page number,
267
+ * paper, the floats and notes no frame holds). Two pages with the same
268
+ * key paint the same pixels with the same paint options, so a host can
269
+ * keep a page's bitmap across a relayout. Undefined for a page without a
270
+ * layout key (not a composed page, or one laid out afresh every time).
271
+ */
272
+ export function composedPagePaintKey(page) {
273
+ const composed = page.composed;
274
+ if (!composed?.layoutKey)
275
+ return undefined;
276
+ const inFrames = new Set(composed.frames.flatMap((f) => f.blockIds));
277
+ const loose = (page.floats ?? []).filter((b) => !inFrames.has(b.id));
278
+ return digest([
279
+ composed.layoutKey,
280
+ JSON.stringify([
281
+ page.width, page.height, page.pageLabel, page.background ?? null, page.paper ?? null,
282
+ page.header ?? null, page.footer ?? null, composed.decoration ?? null, page.lineNumbers ?? null,
283
+ loose, page.marginNotes ?? null, page.footnoteAreas ?? null,
284
+ // Where the text is written does not change the pixels: an edit on
285
+ // an earlier page moves every offset after it.
286
+ ], (key, value) => (PAINT_FREE_KEYS.has(key) ? undefined : value)),
287
+ ]);
288
+ }
289
+ //# sourceMappingURL=pageMemo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageMemo.js","sourceRoot":"","sources":["../../src/composed/pageMemo.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * How the backends paint a composed page (#855, DESIGN §4): the frames in
3
3
  * layer order with the template's decoration at layer 0, each frame's
4
- * blocks turned by its matrix and clipped to its box when its content
5
- * overflows; on a page of a spread (#861) all of it clipped to the page's
6
- * share of the sheet. Shared by canvas, PDF and HTML so the three agree.
4
+ * blocks turned (and scaled, #858) by its matrix and clipped to its box
5
+ * when its content overflows; on a page of a spread (#861) all of it
6
+ * clipped to the page's share of the sheet. Shared by canvas, PDF and HTML
7
+ * so the three agree.
7
8
  */
8
9
  import type { VDTBlock, VDTComposedPage, VDTFrame, VDTPage } from '../vdt';
9
10
  /** One step of a composed page's paint order. */
@@ -22,11 +23,17 @@ export type ComposedPaintItem =
22
23
  * them with their frames ({@link composedPaintOrder}), not with the
23
24
  * page's other floats. Empty for any other page. */
24
25
  export declare function composedFrameBlockIds(page: VDTPage): Set<string>;
26
+ /** The frames painted under the decoration (`'below'`: layers below 0)
27
+ * or over it (`'above'`), for a backend that paints the decoration
28
+ * apart (a page painted through a flow frame, whose decoration stands on
29
+ * the sheet). */
30
+ export type ComposedPaintPart = 'below' | 'above';
25
31
  /** The paint order of a composed page: frames of a layer below 0, the
26
32
  * decoration (layer 0), then the frames of layer 0 and up; frames of
27
33
  * one layer in template order. Each frame comes with its blocks, in
28
- * `page.floats` order (its box first). */
29
- export declare function composedPaintOrder(page: VDTPage): ComposedPaintItem[];
34
+ * `page.floats` order (its box first). With `part`, only the frames on
35
+ * that side of the decoration, and no decoration item. */
36
+ export declare function composedPaintOrder(page: VDTPage, part?: ComposedPaintPart): ComposedPaintItem[];
30
37
  /** The items of a paint order (`composedPaintOrder`) in reading order
31
38
  * (#862): the decoration first, then the frames by the Markdown order of
32
39
  * their content (the lowest content index of their blocks; a frame with
@@ -45,15 +52,27 @@ export declare function composedSheetClip(page: Pick<VDTPage, 'composed'>): {
45
52
  width: number;
46
53
  height: number;
47
54
  } | undefined;
55
+ type Affine = [number, number, number, number, number, number];
48
56
  /** The affine matrix `[a, b, c, d, e, f]` (canvas `transform` order,
49
- * y down) that turns a frame `rotate` degrees clockwise about the centre
50
- * of its box; undefined for an upright frame. */
51
- export declare function frameMatrix(frame: Pick<VDTFrame, 'rect' | 'rotate'>): [number, number, number, number, number, number] | undefined;
57
+ * y down) that puts a frame's blocks on the sheet: scaled by the frame's
58
+ * text `scale` about the top-left of its box (#858; the blocks are laid
59
+ * out `1 / scale` as large), then turned `rotate` degrees clockwise about
60
+ * the centre of its box. Undefined for an upright frame at full size. */
61
+ export declare function frameMatrix(frame: Pick<VDTFrame, 'rect' | 'rotate'> & Partial<Pick<VDTFrame, 'scale'>>): Affine | undefined;
62
+ /** A frame's box in its blocks' own coordinates: `rect` itself, or, for a
63
+ * frame whose text the reflow ladder scaled (#858), the larger box its
64
+ * content was laid out in. Backends clip to it under {@link frameMatrix}. */
65
+ export declare function frameContentRect(frame: Pick<VDTFrame, 'rect'> & Partial<Pick<VDTFrame, 'scale'>>): {
66
+ x: number;
67
+ y: number;
68
+ width: number;
69
+ height: number;
70
+ };
52
71
  /** Whether a frame's content is clipped to its box: some of it runs past
53
72
  * the frame's foot. */
54
73
  export declare function frameClips(frame: Pick<VDTFrame, 'overflowPx'>): boolean;
55
74
  /** The axis-aligned box a frame covers on the page once turned. */
56
- export declare function frameBounds(frame: Pick<VDTFrame, 'rect' | 'rotate'>): {
75
+ export declare function frameBounds(frame: Pick<VDTFrame, 'rect' | 'rotate'> & Partial<Pick<VDTFrame, 'scale'>>): {
57
76
  x: number;
58
77
  y: number;
59
78
  width: number;
@@ -61,4 +80,5 @@ export declare function frameBounds(frame: Pick<VDTFrame, 'rect' | 'rotate'>): {
61
80
  };
62
81
  /** The frame of `composed` holding block `id`, if any. */
63
82
  export declare function frameOfBlock(composed: VDTComposedPage | undefined, id: string): VDTFrame | undefined;
83
+ export {};
64
84
  //# sourceMappingURL=paint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/composed/paint.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE3E,iDAAiD;AACjD,MAAM,MAAM,iBAAiB;AAC3B;4DAC4D;AAC1D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3B;;qDAEqD;AACrD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAIhE;AAED;;;2CAG2C;AAC3C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,EAAE,CA4BrE;AAED;;;;;;+CAM+C;AAC/C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAoB7F;AAED;;;YAGY;AACZ,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEtI;AAED;;kDAEkD;AAClD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CASlI;AAED;wBACwB;AACxB,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,OAAO,CAEvE;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAa7H;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEpG"}
1
+ {"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/composed/paint.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE3E,iDAAiD;AACjD,MAAM,MAAM,iBAAiB;AAC3B;4DAC4D;AAC1D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3B;;qDAEqD;AACrD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAIhE;AAED;;;kBAGkB;AAClB,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;;;2DAI2D;AAC3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAiC/F;AAED;;;;;;+CAM+C;AAC/C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAoB7F;AAED;;;YAGY;AACZ,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEtI;AAED,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAmB/D;;;;0EAI0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAY3H;AAED;;8EAE8E;AAC9E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI1J;AAED;wBACwB;AACxB,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,OAAO,CAEvE;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAahK;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEpG"}
@@ -11,8 +11,14 @@ export function composedFrameBlockIds(page) {
11
11
  /** The paint order of a composed page: frames of a layer below 0, the
12
12
  * decoration (layer 0), then the frames of layer 0 and up; frames of
13
13
  * one layer in template order. Each frame comes with its blocks, in
14
- * `page.floats` order (its box first). */
15
- export function composedPaintOrder(page) {
14
+ * `page.floats` order (its box first). With `part`, only the frames on
15
+ * that side of the decoration, and no decoration item. */
16
+ export function composedPaintOrder(page, part) {
17
+ if (part) {
18
+ const all = composedPaintOrder(page);
19
+ const at = all.findIndex((item) => item.kind === 'decoration');
20
+ return part === 'below' ? all.slice(0, at) : all.slice(at + 1);
21
+ }
16
22
  const composed = page.composed;
17
23
  if (!composed)
18
24
  return [];
@@ -86,19 +92,47 @@ export function composedReadingOrder(paint) {
86
92
  export function composedSheetClip(page) {
87
93
  return page.composed?.sheetClip;
88
94
  }
95
+ /** `m` then `n` (canvas `transform` order): the matrix of applying `n`
96
+ * first, then `m`. */
97
+ const multiply = (m, n) => [
98
+ m[0] * n[0] + m[2] * n[1],
99
+ m[1] * n[0] + m[3] * n[1],
100
+ m[0] * n[2] + m[2] * n[3],
101
+ m[1] * n[2] + m[3] * n[3],
102
+ m[0] * n[4] + m[2] * n[5] + m[4],
103
+ m[1] * n[4] + m[3] * n[5] + m[5],
104
+ ];
105
+ /** The text scale of a frame, 1 when it has none (#858). */
106
+ const scaleOf = (frame) => {
107
+ const s = frame.scale;
108
+ return s !== undefined && Number.isFinite(s) && s > 0 && Math.abs(s - 1) > 1e-9 ? s : 1;
109
+ };
89
110
  /** The affine matrix `[a, b, c, d, e, f]` (canvas `transform` order,
90
- * y down) that turns a frame `rotate` degrees clockwise about the centre
91
- * of its box; undefined for an upright frame. */
111
+ * y down) that puts a frame's blocks on the sheet: scaled by the frame's
112
+ * text `scale` about the top-left of its box (#858; the blocks are laid
113
+ * out `1 / scale` as large), then turned `rotate` degrees clockwise about
114
+ * the centre of its box. Undefined for an upright frame at full size. */
92
115
  export function frameMatrix(frame) {
116
+ const s = scaleOf(frame);
117
+ const scaled = s === 1 ? undefined : [s, 0, 0, s, frame.rect.x * (1 - s), frame.rect.y * (1 - s)];
93
118
  const deg = frame.rotate % 360;
94
119
  if (!Number.isFinite(deg) || Math.abs(deg) < 1e-9)
95
- return undefined;
120
+ return scaled;
96
121
  const t = (deg * Math.PI) / 180;
97
122
  const cos = Math.cos(t);
98
123
  const sin = Math.sin(t);
99
124
  const cx = frame.rect.x + frame.rect.width / 2;
100
125
  const cy = frame.rect.y + frame.rect.height / 2;
101
- return [cos, sin, -sin, cos, cx - cos * cx + sin * cy, cy - sin * cx - cos * cy];
126
+ const turn = [cos, sin, -sin, cos, cx - cos * cx + sin * cy, cy - sin * cx - cos * cy];
127
+ return scaled ? multiply(turn, scaled) : turn;
128
+ }
129
+ /** A frame's box in its blocks' own coordinates: `rect` itself, or, for a
130
+ * frame whose text the reflow ladder scaled (#858), the larger box its
131
+ * content was laid out in. Backends clip to it under {@link frameMatrix}. */
132
+ export function frameContentRect(frame) {
133
+ const s = scaleOf(frame);
134
+ const r = frame.rect;
135
+ return s === 1 ? { ...r } : { x: r.x, y: r.y, width: r.width / s, height: r.height / s };
102
136
  }
103
137
  /** Whether a frame's content is clipped to its box: some of it runs past
104
138
  * the frame's foot. */
@@ -108,7 +142,7 @@ export function frameClips(frame) {
108
142
  /** The axis-aligned box a frame covers on the page once turned. */
109
143
  export function frameBounds(frame) {
110
144
  const m = frameMatrix(frame);
111
- const r = frame.rect;
145
+ const r = frameContentRect(frame);
112
146
  if (!m)
113
147
  return { ...r };
114
148
  const pts = [[r.x, r.y], [r.x + r.width, r.y], [r.x, r.y + r.height], [r.x + r.width, r.y + r.height]].map(([x, y]) => [
@@ -1 +1 @@
1
- {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../src/composed/paint.ts"],"names":[],"mappings":"AAgBA;;qDAEqD;AACrD,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;QAAE,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;2CAG2C;AAC3C,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;SAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACjC,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;+CAM+C;AAC/C,MAAM,UAAU,oBAAoB,CAAC,KAAmC;IACtE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzF;wEACoE;IACpE,MAAM,KAAK,GAAG,CAAC,KAAe,EAAU,EAAE;QACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;YAAE,CAAC,EAAE,CAAC;QACnK,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,IAAuB,EAAU,EAAE;QACrD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,CAAC,QAAQ,CAAC;QACjD,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,YAAY,GAAG,GAAG;gBAAE,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC;QAC5G,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACxC,CAAC,CAAC;IACF,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC7D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;YAGY;AACZ,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClC,CAAC;AAED;;kDAEkD;AAClD,MAAM,UAAU,WAAW,CAAC,KAAwC;IAClE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;QAAE,OAAO,SAAS,CAAC;IACpE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;AACnF,CAAC;AAED;wBACwB;AACxB,MAAM,UAAU,UAAU,CAAC,KAAmC;IAC5D,OAAO,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;AAChC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,KAAwC;IAClE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IACrB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACrH,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAAC,QAAqC,EAAE,EAAU;IAC5E,OAAO,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"paint.js","sourceRoot":"","sources":["../../src/composed/paint.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * template declares it (its fixed size, or its `minHeight` when its height
6
6
  * follows its content) is compared with the box the layout gave it.
7
7
  */
8
- import type { ReflowEvent, VDTDocument } from '../vdt';
8
+ import type { FrameFitStep, FrameOverflowProposal, ReflowEvent, VDTDocument } from '../vdt';
9
9
  import type { Rect } from './geometry';
10
10
  /** A frame's declared and final boxes, and the names whose change moves
11
11
  * it (what it anchors to, the frames before it in its group), nearest
@@ -20,8 +20,20 @@ export interface FrameMotion {
20
20
  * per frame its size first (height, then width), then its moves. */
21
21
  export declare function reflowEvents(motions: readonly FrameMotion[], pxPerMm: number): ReflowEvent[];
22
22
  /** One event in words, in English (the command line's language):
23
- * «dinero grew 8 mm», «gasto moved down 8 mm», «foto narrowed 4 mm». */
23
+ * «dinero grew 8 mm», «gasto moved down 8 mm», «foto narrowed 4 mm»,
24
+ * «dinero continued on page 9» (the page's index + 1; `composedReflowLog`
25
+ * names it by its printed number). */
24
26
  export declare function describeReflowEvent(e: ReflowEvent): string;
27
+ /** A step of the reflow ladder in words, in English (#858): «text down to
28
+ * 90 %». `scale` / `imageScale`: where the frame's text and pictures were
29
+ * left. */
30
+ export declare function describeFitStep(step: FrameFitStep, at?: {
31
+ scale?: number;
32
+ imageScale?: number;
33
+ }): string;
34
+ /** A fix of a `frameOverflow` in words, in English (#858): «raise
35
+ * maxHeight to 64 mm». */
36
+ export declare function describeFrameOverflowProposal(p: FrameOverflowProposal): string;
25
37
  /** A composed page's log, for the command line and the Sandbox. */
26
38
  export interface ComposedPageReflow {
27
39
  /** Book-absolute page index (`VDTPage.index`). */
@@ -1 +1 @@
1
- {"version":3,"file":"reflowLog.d.ts","sourceRoot":"","sources":["../../src/composed/reflowLog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;aAEa;AACb,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AASD;qEACqE;AACrE,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CA0D5F;AAID;yEACyE;AACzE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CA0B1D;AAED,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,yDAAyD;IACzD,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,CAevF"}
1
+ {"version":3,"file":"reflowLog.d.ts","sourceRoot":"","sources":["../../src/composed/reflowLog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC5F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;aAEa;AACb,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AASD;qEACqE;AACrE,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CA8D5F;AAKD;;;uCAGuC;AACvC,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAE1D;AA8BD;;YAEY;AACZ,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAiB5G;AAID;2BAC2B;AAC3B,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAiB9E;AAED,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,yDAAyD;IACzD,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,CAmBvF"}