postext 1.36.0 → 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 (178) hide show
  1. package/dist/__tests__/composed/continuation.test.d.ts +2 -0
  2. package/dist/__tests__/composed/continuation.test.d.ts.map +1 -0
  3. package/dist/__tests__/composed/continuation.test.js +352 -0
  4. package/dist/__tests__/composed/continuation.test.js.map +1 -0
  5. package/dist/__tests__/composed/contrast.test.d.ts +2 -0
  6. package/dist/__tests__/composed/contrast.test.d.ts.map +1 -0
  7. package/dist/__tests__/composed/contrast.test.js +124 -0
  8. package/dist/__tests__/composed/contrast.test.js.map +1 -0
  9. package/dist/__tests__/composed/corpus.test.js +7 -1
  10. package/dist/__tests__/composed/corpus.test.js.map +1 -1
  11. package/dist/__tests__/composed/fit.test.js +9 -6
  12. package/dist/__tests__/composed/fit.test.js.map +1 -1
  13. package/dist/__tests__/composed/groups.test.js +14 -0
  14. package/dist/__tests__/composed/groups.test.js.map +1 -1
  15. package/dist/__tests__/composed/headingDesigns.test.d.ts +2 -0
  16. package/dist/__tests__/composed/headingDesigns.test.d.ts.map +1 -0
  17. package/dist/__tests__/composed/headingDesigns.test.js +262 -0
  18. package/dist/__tests__/composed/headingDesigns.test.js.map +1 -0
  19. package/dist/__tests__/composed/labels.test.d.ts +2 -0
  20. package/dist/__tests__/composed/labels.test.d.ts.map +1 -0
  21. package/dist/__tests__/composed/labels.test.js +326 -0
  22. package/dist/__tests__/composed/labels.test.js.map +1 -0
  23. package/dist/__tests__/composed/outsidePrint.test.js +5 -2
  24. package/dist/__tests__/composed/outsidePrint.test.js.map +1 -1
  25. package/dist/__tests__/composed/sourceMap.test.js +26 -0
  26. package/dist/__tests__/composed/sourceMap.test.js.map +1 -1
  27. package/dist/__tests__/composed/spreadLabels.test.d.ts +2 -0
  28. package/dist/__tests__/composed/spreadLabels.test.d.ts.map +1 -0
  29. package/dist/__tests__/composed/spreadLabels.test.js +131 -0
  30. package/dist/__tests__/composed/spreadLabels.test.js.map +1 -0
  31. package/dist/__tests__/exports.test.js +11 -0
  32. package/dist/__tests__/exports.test.js.map +1 -1
  33. package/dist/__tests__/migrate/fixtures/textbookPort.d.ts +14 -0
  34. package/dist/__tests__/migrate/fixtures/textbookPort.d.ts.map +1 -0
  35. package/dist/__tests__/migrate/fixtures/textbookPort.js +116 -0
  36. package/dist/__tests__/migrate/fixtures/textbookPort.js.map +1 -0
  37. package/dist/__tests__/migrate/textToMarkdown.test.d.ts +2 -0
  38. package/dist/__tests__/migrate/textToMarkdown.test.d.ts.map +1 -0
  39. package/dist/__tests__/migrate/textToMarkdown.test.js +268 -0
  40. package/dist/__tests__/migrate/textToMarkdown.test.js.map +1 -0
  41. package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts +2 -0
  42. package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts.map +1 -0
  43. package/dist/__tests__/paragraphStyleLetterSpacing.test.js +89 -0
  44. package/dist/__tests__/paragraphStyleLetterSpacing.test.js.map +1 -0
  45. package/dist/__tests__/pictureBelowPrintSize.test.d.ts +2 -0
  46. package/dist/__tests__/pictureBelowPrintSize.test.d.ts.map +1 -0
  47. package/dist/__tests__/pictureBelowPrintSize.test.js +82 -0
  48. package/dist/__tests__/pictureBelowPrintSize.test.js.map +1 -0
  49. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +1 -1
  50. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  51. package/dist/canvas-backend/composed.d.ts +5 -2
  52. package/dist/canvas-backend/composed.d.ts.map +1 -1
  53. package/dist/canvas-backend/composed.js +5 -3
  54. package/dist/canvas-backend/composed.js.map +1 -1
  55. package/dist/canvas-backend/index.d.ts.map +1 -1
  56. package/dist/canvas-backend/index.js +37 -19
  57. package/dist/canvas-backend/index.js.map +1 -1
  58. package/dist/canvas-backend/renderResourceBlock.d.ts +5 -1
  59. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  60. package/dist/canvas-backend/renderResourceBlock.js +60 -1
  61. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  62. package/dist/composed/continuation.d.ts +102 -0
  63. package/dist/composed/continuation.d.ts.map +1 -0
  64. package/dist/composed/continuation.js +87 -0
  65. package/dist/composed/continuation.js.map +1 -0
  66. package/dist/composed/labels.d.ts +154 -0
  67. package/dist/composed/labels.d.ts.map +1 -0
  68. package/dist/composed/labels.js +524 -0
  69. package/dist/composed/labels.js.map +1 -0
  70. package/dist/composed/pageMemo.d.ts +3 -2
  71. package/dist/composed/pageMemo.d.ts.map +1 -1
  72. package/dist/composed/pageMemo.js +3 -1
  73. package/dist/composed/pageMemo.js.map +1 -1
  74. package/dist/composed/paint.d.ts +8 -2
  75. package/dist/composed/paint.d.ts.map +1 -1
  76. package/dist/composed/paint.js +8 -2
  77. package/dist/composed/paint.js.map +1 -1
  78. package/dist/composed/reflowLog.d.ts +3 -1
  79. package/dist/composed/reflowLog.d.ts.map +1 -1
  80. package/dist/composed/reflowLog.js +20 -6
  81. package/dist/composed/reflowLog.js.map +1 -1
  82. package/dist/composed/sourceMap.d.ts +0 -21
  83. package/dist/composed/sourceMap.d.ts.map +1 -1
  84. package/dist/composed/sourceMap.js +87 -7
  85. package/dist/composed/sourceMap.js.map +1 -1
  86. package/dist/composed/spread.d.ts +3 -0
  87. package/dist/composed/spread.d.ts.map +1 -1
  88. package/dist/composed/spread.js +1 -1
  89. package/dist/composed/spread.js.map +1 -1
  90. package/dist/configWarnings.d.ts +15 -0
  91. package/dist/configWarnings.d.ts.map +1 -1
  92. package/dist/configWarnings.js +29 -17
  93. package/dist/configWarnings.js.map +1 -1
  94. package/dist/contrast.d.ts +5 -3
  95. package/dist/contrast.d.ts.map +1 -1
  96. package/dist/contrast.js +46 -5
  97. package/dist/contrast.js.map +1 -1
  98. package/dist/defaults/paragraphStyles.d.ts +1 -1
  99. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  100. package/dist/defaults/paragraphStyles.js +5 -1
  101. package/dist/defaults/paragraphStyles.js.map +1 -1
  102. package/dist/design/slots.d.ts +12 -10
  103. package/dist/design/slots.d.ts.map +1 -1
  104. package/dist/design/slots.js +26 -2
  105. package/dist/design/slots.js.map +1 -1
  106. package/dist/fonts/faces.d.ts.map +1 -1
  107. package/dist/fonts/faces.js +6 -0
  108. package/dist/fonts/faces.js.map +1 -1
  109. package/dist/highlightMarks.d.ts.map +1 -1
  110. package/dist/highlightMarks.js +6 -0
  111. package/dist/highlightMarks.js.map +1 -1
  112. package/dist/html-backend.d.ts.map +1 -1
  113. package/dist/html-backend.js +40 -2
  114. package/dist/html-backend.js.map +1 -1
  115. package/dist/index.d.ts +7 -3
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +5 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/migrate/markdownRuns.d.ts +70 -0
  120. package/dist/migrate/markdownRuns.d.ts.map +1 -0
  121. package/dist/migrate/markdownRuns.js +215 -0
  122. package/dist/migrate/markdownRuns.js.map +1 -0
  123. package/dist/migrate/pageDesign.d.ts +119 -0
  124. package/dist/migrate/pageDesign.d.ts.map +1 -0
  125. package/dist/migrate/pageDesign.js +446 -0
  126. package/dist/migrate/pageDesign.js.map +1 -0
  127. package/dist/migrate/textToMarkdown.d.ts +124 -0
  128. package/dist/migrate/textToMarkdown.d.ts.map +1 -0
  129. package/dist/migrate/textToMarkdown.js +716 -0
  130. package/dist/migrate/textToMarkdown.js.map +1 -0
  131. package/dist/pipeline/build.d.ts.map +1 -1
  132. package/dist/pipeline/build.js +192 -24
  133. package/dist/pipeline/build.js.map +1 -1
  134. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  135. package/dist/pipeline/buildMeasurement.js +12 -1
  136. package/dist/pipeline/buildMeasurement.js.map +1 -1
  137. package/dist/pipeline/calloutLayout.d.ts +20 -1
  138. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  139. package/dist/pipeline/calloutLayout.js +30 -2
  140. package/dist/pipeline/calloutLayout.js.map +1 -1
  141. package/dist/pipeline/composedLayout.d.ts +16 -2
  142. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  143. package/dist/pipeline/composedLayout.js +107 -37
  144. package/dist/pipeline/composedLayout.js.map +1 -1
  145. package/dist/pipeline/contentWarnings.d.ts +15 -0
  146. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  147. package/dist/pipeline/contentWarnings.js +85 -0
  148. package/dist/pipeline/contentWarnings.js.map +1 -1
  149. package/dist/pipeline/frameLayout.d.ts +4 -1
  150. package/dist/pipeline/frameLayout.d.ts.map +1 -1
  151. package/dist/pipeline/frameLayout.js +5 -2
  152. package/dist/pipeline/frameLayout.js.map +1 -1
  153. package/dist/pipeline/headerFooter.d.ts +11 -1
  154. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  155. package/dist/pipeline/headerFooter.js +169 -66
  156. package/dist/pipeline/headerFooter.js.map +1 -1
  157. package/dist/pipeline/mirrorFrame.d.ts.map +1 -1
  158. package/dist/pipeline/mirrorFrame.js +25 -2
  159. package/dist/pipeline/mirrorFrame.js.map +1 -1
  160. package/dist/pipeline/resourceLayout.d.ts +28 -0
  161. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  162. package/dist/pipeline/resourceLayout.js +21 -0
  163. package/dist/pipeline/resourceLayout.js.map +1 -1
  164. package/dist/pipeline/styles.d.ts +1 -1
  165. package/dist/pipeline/styles.d.ts.map +1 -1
  166. package/dist/pipeline/styles.js +4 -0
  167. package/dist/pipeline/styles.js.map +1 -1
  168. package/dist/types.d.ts +13 -0
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/vdt.d.ts +138 -7
  171. package/dist/vdt.d.ts.map +1 -1
  172. package/dist/vdt.js.map +1 -1
  173. package/dist/word/toDocx.d.ts.map +1 -1
  174. package/dist/word/toDocx.js +14 -0
  175. package/dist/word/toDocx.js.map +1 -1
  176. package/dist/word/word.test.js +11 -1
  177. package/dist/word/word.test.js.map +1 -1
  178. package/package.json +1 -1
@@ -0,0 +1,524 @@
1
+ /**
2
+ * Figure labels drawn on their picture (#860, DESIGN §2.6, §3.3).
3
+ *
4
+ * A `:::figure` lists `::label[TEXT]{at style}` lines; the resource holds
5
+ * the anchors (points in fractions of the whole picture, shared by every
6
+ * locale). Each label is set as a small caption (inline Markdown: bold,
7
+ * italic, chips, marks, references, formulas) in its label style, wrapped
8
+ * within its anchor's `width` and, when a word is still too wide, set
9
+ * smaller down to the style's `minScale`. Its box stands at the anchor's
10
+ * point as `align` / `verticalAlign` say (start and end follow the label's
11
+ * own direction), turned by `rotate` degrees about that point.
12
+ *
13
+ * The label's geometry is kept in its own frame (origin at the anchor
14
+ * point) and the point itself relative to the picture's body, so the
15
+ * label moves with its block wherever placement, frames, spreads or the
16
+ * memo put it, and the painters only add the body's corner:
17
+ * {@link figureLabelMatrix}. Once the pages exist the build stamps each
18
+ * label's `rect` (for `sourceAt`) and reports the anchors a figure names
19
+ * wrongly or leaves without a word ({@link figureLabelWarnings}).
20
+ */
21
+ import { buildFontString, measureTextWidth } from '../measure';
22
+ import { dimensionToPx } from '../units';
23
+ import { resolveColorValue } from '../defaults/shared';
24
+ import { layoutLabelLines } from '../pipeline/resourceLayout';
25
+ import { uppercasePreservingLength } from '../pipeline/buildBlockKind';
26
+ import { firstStrongDirection } from '../design/bidiText';
27
+ import { BREAK_PLACEHOLDER } from '../parse/inlineFormatting';
28
+ /** The line pitch of a label, in ems, when no paragraph style lends one. */
29
+ const LABEL_LINE_HEIGHT = 1.15;
30
+ /** Measure of a label with no `width`: as good as unbounded. */
31
+ const NO_MEASURE = 1e6;
32
+ const hexOf = (value, resolved, fallback) => resolveColorValue(value, resolved.colorPalette, fallback).hex;
33
+ const px = (dim, dpi, em) => {
34
+ if (!dim || typeof dim.value !== 'number' || !Number.isFinite(dim.value))
35
+ return undefined;
36
+ try {
37
+ return dimensionToPx(dim, dpi, em);
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ };
43
+ /**
44
+ * The look of a label set in style `styleId` (the label's own `style`,
45
+ * else its anchor's): the body text's type, under the paragraph style the
46
+ * label style borrows (`paragraphStyle`), under the label style's own
47
+ * fields. An unknown or absent style is the body text's type.
48
+ */
49
+ export function resolveLabelLook(styleId, resolved) {
50
+ const dpi = resolved.page.dpi;
51
+ const body = resolved.bodyText;
52
+ const style = styleId !== undefined ? resolved.labelStyles?.find((s) => s.id === styleId) : undefined;
53
+ const para = style?.paragraphStyle
54
+ ? resolved.paragraphStyles.find((p) => p.id === style.paragraphStyle)
55
+ : undefined;
56
+ const bodyPx = px(body.fontSize, dpi, 16) ?? 16;
57
+ const paraPx = para ? px(para.fontSize, dpi, bodyPx) ?? bodyPx : bodyPx;
58
+ const fontPx = px(style?.fontSize, dpi, paraPx) ?? paraPx;
59
+ const lineHeight = para
60
+ ? Math.max(0.8, (px(para.lineHeight, dpi, paraPx) ?? paraPx * LABEL_LINE_HEIGHT) / paraPx)
61
+ : LABEL_LINE_HEIGHT;
62
+ const haloWidth = style?.halo ? px(style.halo.width, dpi, fontPx) : undefined;
63
+ return {
64
+ ...(style ? { styleId: style.id } : {}),
65
+ fontFamily: style?.fontFamily ?? para?.fontFamily ?? body.fontFamily,
66
+ fontPx,
67
+ weight: style?.fontWeight ?? para?.fontWeight ?? body.fontWeight,
68
+ boldWeight: Math.max(para?.boldFontWeight ?? body.boldFontWeight, style?.fontWeight ?? 0),
69
+ // A borrowed paragraph style's slant and capitals hold unless the
70
+ // label style turns them on itself.
71
+ italic: style?.fontStyle === 'italic' || para?.italic === true,
72
+ color: hexOf(style?.color ?? para?.color, resolved, body.color),
73
+ uppercase: style?.textTransform === 'uppercase' || para?.textTransform === 'uppercase',
74
+ letterSpacing: typeof style?.letterSpacing === 'number' && Number.isFinite(style.letterSpacing) ? style.letterSpacing : 0,
75
+ lineHeight,
76
+ ...(style?.halo && haloWidth !== undefined && haloWidth > 0
77
+ ? { halo: { color: hexOf(style.halo.color, resolved, { hex: '#ffffff', model: 'hex' }), widthPx: haloWidth } }
78
+ : {}),
79
+ ...(style?.background ? { background: hexOf(style.background, resolved, { hex: '#ffffff', model: 'hex' }) } : {}),
80
+ paddingPx: Math.max(0, px(style?.padding, dpi, fontPx) ?? 0),
81
+ minScale: style ? Math.min(1, Math.max(0.1, style.minScale)) : 0.85,
82
+ };
83
+ }
84
+ /** The place of `label` on `resource`; undefined when it names an anchor
85
+ * the resource lacks. */
86
+ export function labelPlace(label, resource) {
87
+ if ('anchor' in label.at) {
88
+ const id = label.at.anchor;
89
+ const anchor = resource.anchors?.find((a) => a.id === id);
90
+ if (!anchor || !Number.isFinite(anchor.x) || !Number.isFinite(anchor.y))
91
+ return undefined;
92
+ return { x: anchor.x, y: anchor.y, anchor };
93
+ }
94
+ const { x, y } = label.at;
95
+ return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;
96
+ }
97
+ /** A point of the whole picture (fractions) in px from the top-left of the
98
+ * body as drawn: through its crop (`bodySource`) and its size. */
99
+ export function pictureToBody(rb, fx, fy) {
100
+ const src = rb.bodySource ?? { x: 0, y: 0, width: 1, height: 1 };
101
+ const w = src.width > 0 ? src.width : 1;
102
+ const h = src.height > 0 ? src.height : 1;
103
+ return { x: ((fx - src.x) / w) * rb.bodyRect.width, y: ((fy - src.y) / h) * rb.bodyRect.height };
104
+ }
105
+ /** The width of the whole picture in px, as its body draws it. */
106
+ const pictureWidthPx = (rb) => rb.bodyRect.width / (rb.bodySource && rb.bodySource.width > 0 ? rb.bodySource.width : 1);
107
+ const upperSpans = (spans) => spans.map((s) => (s.text ? { ...s, text: uppercasePreservingLength(s.text) } : s)).map((s) => s.chip ? { ...s, chip: { ...s.chip, spans: s.chip.spans.map((c) => ({ ...c, text: uppercasePreservingLength(c.text) })) } } : s);
108
+ const moveLine = (line, dx, dy) => ({
109
+ ...line,
110
+ bbox: { x: line.bbox.x + dx, y: line.bbox.y + dy, width: line.bbox.width, height: line.bbox.height },
111
+ baseline: line.baseline + dy,
112
+ ...(line.measure ? { measure: { ...line.measure, x: line.measure.x + dx } } : {}),
113
+ });
114
+ /** A label's spans with each `\\` that ends a word made a forced line
115
+ * break, as in a caption: two characters for two (the break and a space
116
+ * the next line drops), so the source map holds. */
117
+ function withForcedBreaks(spans) {
118
+ return spans.map((s) => (s.text.includes('\\\\') ? { ...s, text: s.text.replace(/\\\\(?=\s|$)/g, `${BREAK_PLACEHOLDER} `) } : s));
119
+ }
120
+ /** The plain text a label's spans read as (a chip's words included). */
121
+ function spanText(spans) {
122
+ return spans.map((s) => (s.chip ? s.chip.spans.map((c) => c.text).join('') : s.text)).join('');
123
+ }
124
+ /**
125
+ * Lay out one label: its lines in its look, wrapped within `widthPx` (none:
126
+ * one line per forced break), set smaller (down to `minScale`) while a
127
+ * line is wider, then placed about the anchor point by `align` and
128
+ * `verticalAlign`.
129
+ */
130
+ export function layOutLabel(spans, look, place, ctx) {
131
+ const text = withForcedBreaks(look.uppercase ? upperSpans(spans) : [...spans]);
132
+ const plain = spanText(text);
133
+ if (plain.trim().length === 0)
134
+ return undefined;
135
+ const rtl = firstStrongDirection(plain) === 'rtl';
136
+ const widthPx = place.widthPx !== undefined && place.widthPx > 0 ? place.widthPx : undefined;
137
+ const fontsAt = (sizePx) => {
138
+ const w = look.weight === 400 ? 'normal' : String(look.weight);
139
+ const b = String(look.boldWeight);
140
+ const slant = look.italic ? 'italic' : 'normal';
141
+ const flip = look.italic ? 'normal' : 'italic';
142
+ return [
143
+ buildFontString(look.fontFamily, sizePx, w, slant),
144
+ buildFontString(look.fontFamily, sizePx, b, slant),
145
+ buildFontString(look.fontFamily, sizePx, w, flip),
146
+ buildFontString(look.fontFamily, sizePx, b, flip),
147
+ ];
148
+ };
149
+ const measure = (scale) => {
150
+ const sizePx = look.fontPx * scale;
151
+ const fonts = fontsAt(sizePx);
152
+ const lines = layoutLabelLines({
153
+ spans: text,
154
+ fonts,
155
+ fontPx: sizePx,
156
+ lineHeightPx: sizePx * look.lineHeight,
157
+ maxWidthPx: widthPx ?? NO_MEASURE,
158
+ ...(look.letterSpacing !== 0 ? { letterSpacingPx: look.letterSpacing * sizePx } : {}),
159
+ direction: rtl ? 'rtl' : 'ltr',
160
+ resolved: ctx.resolved,
161
+ ...(ctx.resourceNumbering ? { resourceNumbering: ctx.resourceNumbering } : {}),
162
+ ...(ctx.resourceTypes ? { resourceTypes: ctx.resourceTypes } : {}),
163
+ ...(ctx.resources ? { resources: ctx.resources } : {}),
164
+ ...(ctx.cache ? { cache: ctx.cache } : {}),
165
+ });
166
+ const widest = lines.reduce((m, l) => Math.max(m, l.bbox.width), 0);
167
+ // A word wider than the measure is divided by the measurer: the label
168
+ // does not fit.
169
+ const cut = widthPx !== undefined && (widest > widthPx + 0.01 || lines.some((l) => l.hyphenated && !l.hardHyphen));
170
+ return { lines, fonts, widest, sizePx, cut };
171
+ };
172
+ let scale = 1;
173
+ if (widthPx !== undefined) {
174
+ // The widest word sets the first guess.
175
+ const font = fontsAt(look.fontPx)[0];
176
+ const tracking = look.letterSpacing * look.fontPx;
177
+ const word = plain.split(/\s+/).reduce((m, w) => Math.max(m, measureTextWidth(w, font) + tracking * [...w].length), 0);
178
+ if (word > widthPx)
179
+ scale = Math.max(look.minScale, (widthPx / word) * 0.999);
180
+ }
181
+ let set = measure(scale);
182
+ // Still cut or wider than the measure: a little smaller, down to the
183
+ // style's floor.
184
+ for (let round = 0; round < 6 && set.cut && scale > look.minScale + 1e-6; round++) {
185
+ scale = Math.max(look.minScale, scale * Math.min(0.97, widthPx / Math.max(set.widest, widthPx + 1e-6)));
186
+ set = measure(scale);
187
+ }
188
+ if (set.lines.length === 0)
189
+ return undefined;
190
+ const boxW = set.widest;
191
+ const pitch = set.sizePx * look.lineHeight;
192
+ const boxH = Math.max(pitch * set.lines.length, set.lines.reduce((m, l) => Math.max(m, l.bbox.y + l.bbox.height), 0));
193
+ const align = place.align ?? 'center';
194
+ // `start` is the label's own start: its left edge, its right edge right
195
+ // to left.
196
+ const side = align === 'center' ? 'center' : (align === 'start') !== rtl ? 'left' : 'right';
197
+ const left = side === 'center' ? -boxW / 2 : side === 'left' ? 0 : -boxW;
198
+ const vAlign = place.verticalAlign ?? 'middle';
199
+ const top = vAlign === 'top' ? 0 : vAlign === 'bottom' ? -boxH : -boxH / 2;
200
+ const lines = set.lines.map((line) => {
201
+ const slack = Math.max(0, boxW - line.bbox.width);
202
+ const dx = side === 'center' ? slack / 2 : side === 'left' ? 0 : slack;
203
+ return moveLine(line, left + dx - line.bbox.x, top);
204
+ });
205
+ const box = { x: left, y: top, width: boxW, height: boxH };
206
+ const pad = look.paddingPx;
207
+ const rotate = place.rotate !== undefined && Number.isFinite(place.rotate) && Math.abs(place.rotate % 360) > 1e-9 ? place.rotate % 360 : undefined;
208
+ return {
209
+ x: place.x,
210
+ y: place.y,
211
+ ...(rotate !== undefined ? { rotate } : {}),
212
+ lines,
213
+ box,
214
+ fontString: set.fonts[0],
215
+ boldFontString: set.fonts[1],
216
+ italicFontString: set.fonts[2],
217
+ boldItalicFontString: set.fonts[3],
218
+ color: look.color,
219
+ ...(look.halo ? { halo: { color: look.halo.color, widthPx: look.halo.widthPx * scale } } : {}),
220
+ ...(look.background ? { background: { color: look.background, rect: { x: left - pad, y: top - pad, width: boxW + 2 * pad, height: boxH + 2 * pad } } } : {}),
221
+ ...(scale < 1 - 1e-6 ? { scale } : {}),
222
+ ...(set.cut ? { overflow: true } : {}),
223
+ ...(look.styleId !== undefined ? { styleId: look.styleId } : {}),
224
+ ...(rtl ? { direction: 'rtl' } : {}),
225
+ };
226
+ }
227
+ /**
228
+ * The labels of a figure laid out on its picture: `labels` (the VDT's,
229
+ * `figureLabels`) with the `layout` of each one that can be drawn, read
230
+ * from `parsed` (the parser's, the same order) for its inline Markdown.
231
+ * A table, a video or a picture with no body draws none; a label whose
232
+ * anchor is unknown is left without a layout.
233
+ */
234
+ export function layOutFigureLabels(labels, parsed, rb, ctx) {
235
+ if (rb.kind !== 'bitmap' && rb.kind !== 'svg')
236
+ return [...labels];
237
+ if (!(rb.bodyRect.width > 0) || !(rb.bodyRect.height > 0))
238
+ return [...labels];
239
+ const pictureW = pictureWidthPx(rb);
240
+ return labels.map((label, i) => {
241
+ const place = labelPlace(label, rb.resource);
242
+ if (!place)
243
+ return label;
244
+ const anchor = place.anchor;
245
+ const at = pictureToBody(rb, place.x, place.y);
246
+ const look = resolveLabelLook(label.style ?? anchor?.style, ctx.resolved);
247
+ const spans = parsed?.[i]?.spans ?? [{ text: label.text, bold: false, italic: false }];
248
+ const layout = layOutLabel(spans, look, {
249
+ x: at.x,
250
+ y: at.y,
251
+ ...(anchor?.width !== undefined && anchor.width > 0 ? { widthPx: anchor.width * pictureW } : {}),
252
+ ...(anchor?.align ? { align: anchor.align } : {}),
253
+ ...(anchor?.verticalAlign ? { verticalAlign: anchor.verticalAlign } : {}),
254
+ ...(anchor?.rotate !== undefined ? { rotate: anchor.rotate } : {}),
255
+ }, ctx);
256
+ return layout ? { ...label, layout } : label;
257
+ });
258
+ }
259
+ // ---------------------------------------------------------------------------
260
+ // Painting and hit-testing
261
+ // ---------------------------------------------------------------------------
262
+ /** The matrix that puts a label's frame on the block's frame, the body's
263
+ * top-left corner at (`bodyX`, `bodyY`): `translate(body + point) ·
264
+ * rotate(rotate)`. */
265
+ export function figureLabelMatrix(layout, bodyX, bodyY) {
266
+ const t = ((layout.rotate ?? 0) * Math.PI) / 180;
267
+ const cos = Math.cos(t);
268
+ const sin = Math.sin(t);
269
+ // A quarter turn lands exactly (no 1e-17 shear).
270
+ const c = Math.abs(cos) < 1e-12 ? 0 : cos;
271
+ const s = Math.abs(sin) < 1e-12 ? 0 : sin;
272
+ return [c, s, -s, c, bodyX + layout.x, bodyY + layout.y];
273
+ }
274
+ /** What a label paints in its own frame: its background, else its lines'
275
+ * box. */
276
+ export function figureLabelExtent(layout) {
277
+ return layout.background?.rect ?? layout.box;
278
+ }
279
+ const apply = (m, x, y) => [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]];
280
+ /** The upright box a label covers in the block's frame. */
281
+ export function figureLabelBounds(layout, bodyX, bodyY) {
282
+ const m = figureLabelMatrix(layout, bodyX, bodyY);
283
+ const r = figureLabelExtent(layout);
284
+ const pts = [apply(m, r.x, r.y), apply(m, r.x + r.width, r.y), apply(m, r.x, r.y + r.height), apply(m, r.x + r.width, r.y + r.height)];
285
+ const xs = pts.map((p) => p[0]);
286
+ const ys = pts.map((p) => p[1]);
287
+ const x = Math.min(...xs);
288
+ const y = Math.min(...ys);
289
+ return { x, y, width: Math.max(...xs) - x, height: Math.max(...ys) - y };
290
+ }
291
+ /** The point `(x, y)` of the block's frame in a label's own frame. */
292
+ export function pointInLabel(layout, bodyX, bodyY, x, y) {
293
+ const m = figureLabelMatrix(layout, bodyX, bodyY);
294
+ const dx = x - m[4];
295
+ const dy = y - m[5];
296
+ // The inverse of a rotation is its transpose.
297
+ return { x: m[0] * dx + m[1] * dy, y: m[2] * dx + m[3] * dy };
298
+ }
299
+ /** The top-left corner of a resource block's body in its own frame, and
300
+ * the quarter turn that puts that frame on the block's (a rotated
301
+ * block). */
302
+ function bodyFrame(block) {
303
+ const rb = block.resourceBlock;
304
+ const rot = rb.rotation;
305
+ if (!rot)
306
+ return { bx: block.bbox.x + rb.bodyRect.x, by: block.bbox.y + rb.bodyRect.y };
307
+ const turn = rot.direction === 'ccw' ? [0, -1, 1, 0, rot.originX, rot.originY] : [0, 1, -1, 0, rot.originX, rot.originY];
308
+ return { bx: rb.bodyRect.x, by: rb.bodyRect.y, turn };
309
+ }
310
+ /**
311
+ * Stamp `rect` on every drawn label of the document (#860): the upright
312
+ * box it covers in its block's frame, through a quarter-turned block's
313
+ * turn. A label not drawn loses any `rect` it had.
314
+ */
315
+ export function stampFigureLabelRects(doc) {
316
+ const seen = new Set();
317
+ const visit = (block) => {
318
+ if (seen.has(block))
319
+ return;
320
+ seen.add(block);
321
+ const labels = block.resourceBlock?.labels;
322
+ if (!labels || labels.length === 0)
323
+ return;
324
+ const { bx, by, turn } = bodyFrame(block);
325
+ for (const label of labels) {
326
+ if (!label.layout) {
327
+ delete label.rect;
328
+ continue;
329
+ }
330
+ let r = figureLabelBounds(label.layout, bx, by);
331
+ if (turn) {
332
+ const pts = [apply(turn, r.x, r.y), apply(turn, r.x + r.width, r.y), apply(turn, r.x, r.y + r.height), apply(turn, r.x + r.width, r.y + r.height)];
333
+ const xs = pts.map((p) => p[0]);
334
+ const ys = pts.map((p) => p[1]);
335
+ const x = Math.min(...xs);
336
+ const y = Math.min(...ys);
337
+ r = { x, y, width: Math.max(...xs) - x, height: Math.max(...ys) - y };
338
+ }
339
+ label.rect = r;
340
+ }
341
+ };
342
+ for (const block of doc.blocks)
343
+ visit(block);
344
+ for (const page of doc.pages) {
345
+ for (const col of page.columns)
346
+ for (const block of col.blocks)
347
+ visit(block);
348
+ for (const block of page.floats ?? [])
349
+ visit(block);
350
+ // The half of a spread frame painted on the facing page (#861) is a
351
+ // copy of its blocks moved onto that page: its labels get their boxes
352
+ // there, so the facing page answers for the labels it shows.
353
+ for (const frame of page.composed?.frames ?? [])
354
+ for (const block of frame.facingBlocks ?? [])
355
+ visit(block);
356
+ }
357
+ }
358
+ /**
359
+ * The glyph of a drawn label under the point `(x, y)` of its block's
360
+ * frame: the index into `label.text`'s source map, or undefined off its
361
+ * lines. Lines are read from their plain ranges; a label whose lines lack
362
+ * them spreads its text over its lines in order.
363
+ */
364
+ export function labelGlyphAt(label, block, x, y) {
365
+ const layout = label.layout;
366
+ if (!layout || layout.lines.length === 0)
367
+ return undefined;
368
+ const { bx, by, turn } = bodyFrame(block);
369
+ let px = x;
370
+ let py = y;
371
+ if (turn) {
372
+ // Into the block's upright frame: the transpose of the quarter turn.
373
+ const dx = x - turn[4];
374
+ const dy = y - turn[5];
375
+ px = turn[0] * dx + turn[1] * dy;
376
+ py = turn[2] * dx + turn[3] * dy;
377
+ }
378
+ const p = pointInLabel(layout, bx, by, px, py);
379
+ let li = 0;
380
+ let best = Infinity;
381
+ layout.lines.forEach((line, i) => {
382
+ const d = p.y < line.bbox.y ? line.bbox.y - p.y : p.y > line.bbox.y + line.bbox.height ? p.y - line.bbox.y - line.bbox.height : 0;
383
+ if (d < best) {
384
+ best = d;
385
+ li = i;
386
+ }
387
+ });
388
+ const line = layout.lines[li];
389
+ const n = label.text.length;
390
+ if (n === 0)
391
+ return undefined;
392
+ const start = line.plainStart ?? Math.floor((li * n) / layout.lines.length);
393
+ const end = line.plainEnd ?? Math.floor(((li + 1) * n) / layout.lines.length);
394
+ const len = Math.max(1, end - start);
395
+ let frac = line.bbox.width > 0 ? (p.x - line.bbox.x) / line.bbox.width : 0;
396
+ frac = Math.max(0, Math.min(0.9999, frac));
397
+ if (layout.direction === 'rtl')
398
+ frac = 0.9999 - frac;
399
+ return Math.max(0, Math.min(n - 1, start + Math.floor(frac * len)));
400
+ }
401
+ // ---------------------------------------------------------------------------
402
+ // Right-to-left pages
403
+ // ---------------------------------------------------------------------------
404
+ /** Layouts already turned for a mirrored page. */
405
+ const mirrored = new WeakSet();
406
+ /**
407
+ * A label layout for the flow of a mirrored page (a right-to-left book):
408
+ * its point, its turn and its lines reflected about the body's vertical
409
+ * axis, so that the page's reflection puts it back where the picture shows
410
+ * it, reading as written. `bodyWidth` is the body's width; `orient` turns
411
+ * a line's run order for the frame as the build does for captions.
412
+ */
413
+ export function mirrorLabelLayout(layout, bodyWidth, orient) {
414
+ if (mirrored.has(layout))
415
+ return layout;
416
+ const flipBox = (r) => ({ ...r, x: -(r.x + r.width) });
417
+ const out = {
418
+ ...layout,
419
+ x: bodyWidth - layout.x,
420
+ ...(layout.rotate !== undefined ? { rotate: -layout.rotate } : {}),
421
+ lines: layout.lines.map((line) => {
422
+ const o = orient(line);
423
+ return {
424
+ ...o,
425
+ bbox: { ...o.bbox, x: -(o.bbox.x + o.bbox.width) },
426
+ ...(o.measure ? { measure: { ...o.measure, x: -(o.measure.x + o.measure.width) } } : {}),
427
+ };
428
+ }),
429
+ box: flipBox(layout.box),
430
+ ...(layout.background ? { background: { ...layout.background, rect: flipBox(layout.background.rect) } } : {}),
431
+ };
432
+ mirrored.add(out);
433
+ return out;
434
+ }
435
+ // ---------------------------------------------------------------------------
436
+ // Reading
437
+ // ---------------------------------------------------------------------------
438
+ /** The labels of a figure that are not drawn as text: what its picture's
439
+ * alternative text still names (`altWithLabels`). */
440
+ export function undrawnLabels(labels) {
441
+ if (!labels)
442
+ return undefined;
443
+ const out = labels.filter((l) => !l.layout);
444
+ return out.length > 0 ? out : undefined;
445
+ }
446
+ /** A drawn label's words as read, its lines joined by a space. */
447
+ export function figureLabelReading(label) {
448
+ const lines = label.layout?.lines;
449
+ const text = lines && lines.length > 0 ? lines.map((l) => l.text).join(' ') : label.text;
450
+ return text.replace(/[]/g, '').replace(/\s+/g, ' ').trim();
451
+ }
452
+ // ---------------------------------------------------------------------------
453
+ // Warnings
454
+ // ---------------------------------------------------------------------------
455
+ /**
456
+ * The anchors the figures of `doc` name wrongly (`labelAnchorUnknown`, at
457
+ * the label's text) or leave without a word (`anchorUnlabelled`, a note
458
+ * at the figure: an anchor that names a label style and that no label of
459
+ * the figure stands at), each on the page its figure landed on.
460
+ */
461
+ export function figureLabelWarnings(doc, figureSource) {
462
+ const out = [];
463
+ const locale = doc.config?.locale;
464
+ const seen = new Set();
465
+ const visit = (block) => {
466
+ const rb = block.resourceBlock;
467
+ const labels = rb?.labels;
468
+ if (!rb || !labels || labels.length === 0 || block.pageIndex < 0)
469
+ return;
470
+ // A figure laid out more than once (the slices of a table, a picture
471
+ // met twice): once.
472
+ const key = `${rb.resource.id}@${labels[0].sourceStart}`;
473
+ if (seen.has(key))
474
+ return;
475
+ seen.add(key);
476
+ const anchors = rb.resource.anchors ?? [];
477
+ const known = anchors.map((a) => a.id);
478
+ const used = new Set();
479
+ for (const label of labels) {
480
+ if (!('anchor' in label.at))
481
+ continue;
482
+ const id = label.at.anchor;
483
+ used.add(id);
484
+ if (known.includes(id))
485
+ continue;
486
+ out.push({
487
+ kind: 'labelAnchorUnknown',
488
+ resourceId: rb.resource.id,
489
+ anchor: id,
490
+ known,
491
+ ...(locale ? { locale } : {}),
492
+ ...(label.id ? { labelId: label.id } : {}),
493
+ sourceStart: label.sourceStart,
494
+ sourceEnd: label.sourceEnd,
495
+ pageIndex: block.pageIndex,
496
+ });
497
+ }
498
+ const where = figureSource(block);
499
+ for (const a of anchors) {
500
+ if (!a.style || used.has(a.id))
501
+ continue;
502
+ out.push({
503
+ kind: 'anchorUnlabelled',
504
+ resourceId: rb.resource.id,
505
+ anchor: a.id,
506
+ style: a.style,
507
+ ...(locale ? { locale } : {}),
508
+ ...(where ? { sourceStart: where.start, sourceEnd: where.end } : {}),
509
+ pageIndex: block.pageIndex,
510
+ });
511
+ }
512
+ };
513
+ for (const page of doc.pages) {
514
+ for (const col of page.columns)
515
+ for (const block of col.blocks)
516
+ visit(block);
517
+ for (const block of page.floats ?? [])
518
+ visit(block);
519
+ }
520
+ for (const block of doc.blocks)
521
+ visit(block);
522
+ return out;
523
+ }
524
+ //# sourceMappingURL=labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/composed/labels.ts"],"names":[],"mappings":"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"}
@@ -13,8 +13,9 @@
13
13
  * indices, container ids and page index are moved to where the page now
14
14
  * stands. A page whose layout reads what this key does not hold (a
15
15
  * footnote, a cross-reference, a citation, a contents or index listing, a
16
- * comic strip) or that leaves notes for the pass (a drop cap's warning, a
17
- * joining script's tracking) is always laid out afresh.
16
+ * comic strip), that leaves notes for the pass (a drop cap's warning, a
17
+ * joining script's tracking) or whose content goes on on pages it adds
18
+ * (#859) is always laid out afresh.
18
19
  */
19
20
  import type { ContentBlock, InlineSpan } from '../parse/types';
20
21
  import type { VDTPage } from '../vdt';
@@ -1 +1 @@
1
- {"version":3,"file":"pageMemo.d.ts","sourceRoot":"","sources":["../../src/composed/pageMemo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAsB,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEjH,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,SAAS,IAAI,MAAM,CAAC;IACpB;4EACwE;IACxE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzD,qEAAqE;IACrE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CAClD;AAmBD,oEAAoE;AACpE,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAGrD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAEvG;AAID;4EAC4E;AAC5E,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAkBvD;AAED;uEACuE;AACvE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GAAG,OAAO,CAMlF;AAED;qBACqB;AACrB,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAKxD;AAoGD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,mBAAmB,GAAG,kBAAkB,CAuD7G;AAMD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAetE"}
1
+ {"version":3,"file":"pageMemo.d.ts","sourceRoot":"","sources":["../../src/composed/pageMemo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAsB,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEjH,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,SAAS,IAAI,MAAM,CAAC;IACpB;4EACwE;IACxE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzD,qEAAqE;IACrE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CAClD;AAmBD,oEAAoE;AACpE,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAGrD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAEvG;AAID;4EAC4E;AAC5E,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAkBvD;AAED;uEACuE;AACvE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GAAG,OAAO,CAMlF;AAED;qBACqB;AACrB,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAKxD;AAoGD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,mBAAmB,GAAG,kBAAkB,CAyD7G;AAMD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAetE"}
@@ -242,7 +242,9 @@ export function layoutComposedPageMemo(input, ctx) {
242
242
  return layout;
243
243
  }
244
244
  const layout = layoutComposedPage(input);
245
- if (ctx.sideEffectsIn(from, to) || !selfContained(layout, new Set(ids), from, to)) {
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)) {
246
248
  stats.skipped++;
247
249
  return layout;
248
250
  }