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,119 @@
1
+ /**
2
+ * One page design of a book that keeps its text in heading styles (#874):
3
+ * the elements of a style's running head split into the text that moves to
4
+ * the Markdown (grouped into frames by geometry and look) and the
5
+ * decoration that stays in the configuration. Pure; lengths in mm.
6
+ */
7
+ import type { ChipStyleConfig, ColorValue, DesignElement, DesignTextElement, Dimension } from '../types';
8
+ import type { PageSide } from '../composed/types';
9
+ /** The look of a design text a paragraph style has to reproduce. */
10
+ export interface TextLook {
11
+ fontFamily?: string;
12
+ fontSize: Dimension;
13
+ fontWeight: number;
14
+ italic: boolean;
15
+ color?: ColorValue;
16
+ align: 'left' | 'center' | 'right' | 'justify' | 'start' | 'end';
17
+ /** Leading as a multiple of the size. */
18
+ lineHeight: number;
19
+ uppercase: boolean;
20
+ hyphenate: boolean;
21
+ direction?: 'ltr' | 'rtl';
22
+ writingMode?: 'vertical-rl';
23
+ /** Tracking in ems of the text's size (#907); absent when none. */
24
+ letterSpacing?: Dimension;
25
+ }
26
+ /** A text element that moves to the Markdown. */
27
+ export interface TextPiece {
28
+ id: string;
29
+ side?: PageSide;
30
+ /** Top-left on the trim, mm; only for elements anchored to the page's
31
+ * top-left (the others keep their placement and are never merged). */
32
+ x?: number;
33
+ y?: number;
34
+ width?: number;
35
+ /** Estimated height (lines × leading). */
36
+ height?: number;
37
+ /** The height is the text's own lines (no line was guessed to wrap). */
38
+ heightSure?: boolean;
39
+ lineMm: number;
40
+ look: TextLook;
41
+ lookKey: string;
42
+ element: DesignTextElement;
43
+ /** The text as Markdown lines (inline marks kept, chips for highlights). */
44
+ lines: string[];
45
+ chars: number;
46
+ notes: string[];
47
+ }
48
+ /** A frame the migration writes: one or more pieces of one look, under one
49
+ * another at an even spacing. */
50
+ export interface PlannedFrame {
51
+ side?: PageSide;
52
+ pieces: TextPiece[];
53
+ look: TextLook;
54
+ lookKey: string;
55
+ /** mm between pieces (paragraph spacing). */
56
+ gap: number;
57
+ width?: number;
58
+ /** Assigned when templates are built. */
59
+ name?: string;
60
+ /** Geometry key for template sharing. */
61
+ key: string;
62
+ }
63
+ export interface DesignInput {
64
+ key: string;
65
+ elements: DesignElement[];
66
+ /** The slot each element comes from (same order as `elements`). */
67
+ origins: ('header' | 'footer')[];
68
+ page: {
69
+ width: number;
70
+ height: number;
71
+ };
72
+ isContent: (content: string) => boolean;
73
+ /** Existing chip styles, matched by background colour for highlights. */
74
+ chipStyles: readonly ChipStyleConfig[];
75
+ highlightsToChips: boolean;
76
+ merge: boolean;
77
+ }
78
+ export interface PlannedDesign {
79
+ key: string;
80
+ frames: PlannedFrame[];
81
+ /** Elements that stay, in their order (anchors to moved text remapped
82
+ * once frames have names: see {@link remapDecorationAnchors}). */
83
+ decoration: DesignElement[];
84
+ /** Element id → index of the frame its text went to. */
85
+ movedTo: Map<string, number>;
86
+ /** Elements that stay in the template's own running heads: anchored
87
+ * to the slot's container (or the outer margin), or to such an element. */
88
+ header: DesignElement[];
89
+ footer: DesignElement[];
90
+ /** The full-page picture, replaced by `{attr.background}`. */
91
+ background?: string;
92
+ /** Text elements left in the decoration, and why. */
93
+ kept: {
94
+ id: string;
95
+ reason: 'placeholder' | 'anchor';
96
+ }[];
97
+ /** Highlight boxes turned into chips. */
98
+ chips: number;
99
+ /** Chip styles this design needs that the book lacks, by id. */
100
+ newChipStyles: Map<string, ChipStyleConfig>;
101
+ notes: string[];
102
+ movedChars: number;
103
+ movedElements: number;
104
+ }
105
+ /** A length in mm; `em` against `emMm`. */
106
+ export declare function toMm(d: Dimension | undefined, emMm?: number): number | undefined;
107
+ /** A design text's look. */
108
+ export declare function lookOf(el: DesignTextElement): TextLook;
109
+ /** Whether a design text holds a placeholder (`{pageNumber}`, `{attr.x}`). */
110
+ export declare function hasPlaceholder(content: string): boolean;
111
+ /** The Markdown of a frame's paragraph: the lines joined by forced breaks
112
+ * (a backslash at the end of the line; ` \\ ` on the same line when the
113
+ * next one would start a block). */
114
+ export declare function joinLines(lines: readonly string[]): string;
115
+ /** Split one page design. */
116
+ export declare function planDesign(input: DesignInput): PlannedDesign;
117
+ /** Decoration anchors that named a text now in a frame name the frame. */
118
+ export declare function remapDecorationAnchors(decoration: DesignElement[], movedTo: Map<string, number>, frames: readonly PlannedFrame[]): DesignElement[];
119
+ //# sourceMappingURL=pageDesign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageDesign.d.ts","sourceRoot":"","sources":["../../src/migrate/pageDesign.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,446 @@
1
+ import { stripPlaceholders } from '../pipeline/placeholders';
2
+ import { stableStringify } from '../util/stableHash';
3
+ const MM_PER = { mm: 1, cm: 10, in: 25.4, pt: 25.4 / 72, px: 25.4 / 96 };
4
+ /** A length in mm; `em` against `emMm`. */
5
+ export function toMm(d, emMm = 0) {
6
+ if (!d || typeof d !== 'object' || typeof d.value !== 'number')
7
+ return undefined;
8
+ if (d.unit === 'em' || d.unit === 'rem')
9
+ return d.value * emMm;
10
+ const f = MM_PER[d.unit];
11
+ return f === undefined ? undefined : d.value * f;
12
+ }
13
+ function lineHeightOf(el) {
14
+ const lh = el.lineHeight;
15
+ if (typeof lh === 'number')
16
+ return lh > 0 ? lh : 1.2;
17
+ if (lh && typeof lh === 'object') {
18
+ if (lh.unit === 'em' || lh.unit === 'rem')
19
+ return lh.value > 0 ? lh.value : 1.2;
20
+ const size = toMm(el.fontSize) ?? 0;
21
+ const abs = toMm(lh);
22
+ if (abs && size > 0)
23
+ return abs / size;
24
+ }
25
+ return 1.2;
26
+ }
27
+ /** A design text's look. */
28
+ export function lookOf(el) {
29
+ return {
30
+ ...(el.fontFamily ? { fontFamily: el.fontFamily } : {}),
31
+ fontSize: el.fontSize,
32
+ fontWeight: el.fontWeight ?? 400,
33
+ italic: el.italic === true,
34
+ ...(el.color ? { color: el.color } : {}),
35
+ align: (el.align ?? 'center'),
36
+ lineHeight: Math.round(lineHeightOf(el) * 100) / 100,
37
+ uppercase: el.textTransform === 'uppercase',
38
+ hyphenate: el.hyphenate === true,
39
+ ...(el.direction === 'rtl' || el.direction === 'ltr' ? { direction: el.direction } : {}),
40
+ ...(el.writingMode === 'vertical-rl' ? { writingMode: 'vertical-rl' } : {}),
41
+ ...trackingOf(el),
42
+ };
43
+ }
44
+ /** A design text's tracking as ems of its size, the unit a paragraph
45
+ * style reads it in (#907): `{ letterSpacing }`, or nothing when it sets
46
+ * none. */
47
+ function trackingOf(el) {
48
+ const ls = el.letterSpacing;
49
+ if (!ls || typeof ls !== 'object' || typeof ls.value !== 'number' || ls.value === 0)
50
+ return {};
51
+ if (ls.unit === 'em')
52
+ return { letterSpacing: { value: ls.value, unit: 'em' } };
53
+ const sizeMm = toMm(el.fontSize);
54
+ const mm = toMm(ls, sizeMm ?? 0);
55
+ if (!sizeMm || mm === undefined || mm === 0)
56
+ return {};
57
+ return { letterSpacing: { value: Math.round((mm / sizeMm) * 10000) / 10000, unit: 'em' } };
58
+ }
59
+ /** Whether a design text holds a placeholder (`{pageNumber}`, `{attr.x}`). */
60
+ export function hasPlaceholder(content) {
61
+ const plain = content.replace(/\{\{/g, '{').replace(/\}\}/g, '}').replace(/\\n/g, '\n');
62
+ return stripPlaceholders(content) !== plain;
63
+ }
64
+ const sideOf = (el) => el.parity === 'odd' ? 'recto' : el.parity === 'even' ? 'verso' : undefined;
65
+ const isTopLeftPage = (el) => el.placement?.anchor?.to === 'page' && (el.placement.anchor.edge ?? 'top-left') === 'top-left';
66
+ function rectOf(el) {
67
+ if (!isTopLeftPage(el))
68
+ return undefined;
69
+ const p = el.placement;
70
+ const w = typeof p.size?.width === 'object' ? toMm(p.size.width) : undefined;
71
+ const h = typeof p.size?.height === 'object' ? toMm(p.size.height) : undefined;
72
+ return { x: toMm(p.offset?.x) ?? 0, y: toMm(p.offset?.y) ?? 0, ...(w !== undefined ? { w } : {}), ...(h !== undefined ? { h } : {}) };
73
+ }
74
+ /** The lines of a design text: a newline, or the two characters `\n`,
75
+ * starts one; runs of them count once. */
76
+ function contentLines(content) {
77
+ return content.replace(/\{\{/g, '{').replace(/\}\}/g, '}').replace(/\\n/g, '\n').split(/\n+/).map((l) => l.trim());
78
+ }
79
+ function boldRuns(lines) {
80
+ // Per bold run, its piece on each line it crosses.
81
+ const runs = [];
82
+ let open = null;
83
+ lines.forEach((text, line) => {
84
+ let from = 0;
85
+ if (open)
86
+ open.push({ line, start: 0, end: text.length });
87
+ for (let i = 0; i < text.length; i++) {
88
+ if (text[i] === '\\') {
89
+ i++;
90
+ continue;
91
+ }
92
+ if (text[i] === '*' && text[i + 1] === '*') {
93
+ if (!open) {
94
+ open = [];
95
+ from = i + 2;
96
+ open.push({ line, start: from, end: text.length });
97
+ }
98
+ else {
99
+ const last = open[open.length - 1];
100
+ if (last.line === line)
101
+ last.end = i;
102
+ runs.push(open);
103
+ open = null;
104
+ }
105
+ i++;
106
+ }
107
+ }
108
+ });
109
+ return { runs };
110
+ }
111
+ /** Characters with a meaning in Postext Markdown escaped, so the text
112
+ * prints as the design printed it. With `marks`, the inline marks of the
113
+ * design (`**`, `*`, `_`, `^`, `~`) stay marks. */
114
+ function escapeText(text, marks) {
115
+ // One pass over the characters. A backslash before a character that gets
116
+ // escaped is doubled (`\\*` prints a backslash and an escaped asterisk);
117
+ // any other prints as it is. With inline marks a backslash before a
118
+ // marker is the design's own escape (`\*`) and stays, and the markers
119
+ // are left alone.
120
+ const escaped = marks ? '$`' : '*_^~$`';
121
+ let out = '';
122
+ for (let i = 0; i < text.length; i++) {
123
+ const ch = text[i];
124
+ if (ch === '\\') {
125
+ const next = text[i + 1];
126
+ const doubles = next !== undefined && (escaped.includes(next) || (!marks && next === '\\'));
127
+ out += doubles ? '\\\\' : ch;
128
+ continue;
129
+ }
130
+ out += escaped.includes(ch) ? `\\${ch}` : ch;
131
+ }
132
+ return out;
133
+ }
134
+ /** A line that the block parser would read as a list item, a heading, a
135
+ * quotation or a fence. */
136
+ const BLOCK_START = /^([-*+][ \t]|\d+[.)][ \t]|#{1,6}[ \t]|>|:::|\||`{3}|~{3}|\[\^)/;
137
+ /** The Markdown of a frame's paragraph: the lines joined by forced breaks
138
+ * (a backslash at the end of the line; ` \\ ` on the same line when the
139
+ * next one would start a block). */
140
+ export function joinLines(lines) {
141
+ let out = '';
142
+ lines.forEach((l, i) => {
143
+ if (i === 0) {
144
+ out = BLOCK_START.test(l) ? `\u200B${l}` : l;
145
+ return;
146
+ }
147
+ out += BLOCK_START.test(l) ? ` \\\\ ${l}` : `\\\n${l}`;
148
+ });
149
+ return out;
150
+ }
151
+ const hexOf = (c) => {
152
+ const h = c?.hex;
153
+ return typeof h === 'string' ? h.toLowerCase() : undefined;
154
+ };
155
+ /** A box that only fills a colour: a highlight under words. */
156
+ function highlightColour(el) {
157
+ if (el.kind !== 'box')
158
+ return undefined;
159
+ const st = el.style ?? {};
160
+ if (!st.backgroundColor)
161
+ return undefined;
162
+ if (st.borderColor && (toMm(st.borderWidth) ?? 0) > 0)
163
+ return undefined;
164
+ return st.backgroundColor;
165
+ }
166
+ /** The chip style a highlight of colour `c` becomes: the book's own, else a
167
+ * new one (bold, no padding, as the boxes were drawn). */
168
+ function chipStyleFor(c, existing, fresh) {
169
+ const hex = hexOf(c);
170
+ const own = existing.find((s) => s.backgroundEnabled !== false && hexOf(s.background) === hex);
171
+ if (own)
172
+ return own.id;
173
+ const id = `highlight-${(hex ?? 'colour').replace('#', '')}`;
174
+ if (!fresh.has(id)) {
175
+ fresh.set(id, {
176
+ id,
177
+ name: `Highlight ${hex ?? ''}`.trim(),
178
+ backgroundEnabled: true,
179
+ background: c,
180
+ borderWidth: { value: 0, unit: 'pt' },
181
+ borderRadius: { value: 0, unit: 'em' },
182
+ paddingX: { value: 0, unit: 'em' },
183
+ paddingY: { value: 0.04, unit: 'em' },
184
+ bold: true,
185
+ });
186
+ }
187
+ return id;
188
+ }
189
+ /** The pieces' estimated height: their lines, wrapped at the width at about
190
+ * half an em a character. */
191
+ function estimateLines(lines, widthMm, sizeMm) {
192
+ if (!widthMm || widthMm <= 0)
193
+ return Math.max(1, lines.length);
194
+ const perLine = Math.max(1, Math.floor(widthMm / (sizeMm * 0.5)));
195
+ return lines.reduce((n, l) => n + Math.max(1, Math.ceil(l.replace(/\*\*|[*_^~]/g, '').length / perLine)), 0);
196
+ }
197
+ /** Split one page design. */
198
+ export function planDesign(input) {
199
+ const { elements, page } = input;
200
+ const notes = [];
201
+ const kept = [];
202
+ const movedIds = new Set();
203
+ const pieces = [];
204
+ const newChipStyles = new Map();
205
+ for (const el of elements) {
206
+ if (el.kind !== 'text' || typeof el.content !== 'string')
207
+ continue;
208
+ if (!input.isContent(el.content))
209
+ continue;
210
+ if (hasPlaceholder(el.content)) {
211
+ kept.push({ id: el.id, reason: 'placeholder' });
212
+ continue;
213
+ }
214
+ const to = el.placement?.anchor?.to;
215
+ if (to !== 'page' && to !== 'bleed') {
216
+ kept.push({ id: el.id, reason: 'anchor' });
217
+ continue;
218
+ }
219
+ const look = lookOf(el);
220
+ const sizeMm = toMm(el.fontSize) ?? 4.2;
221
+ const lineMm = sizeMm * look.lineHeight;
222
+ const r = rectOf(el);
223
+ const lines = contentLines(el.content);
224
+ const pieceNotes = [];
225
+ if (el.box)
226
+ pieceNotes.push('box');
227
+ if (el.stroke)
228
+ pieceNotes.push('stroke');
229
+ if (el.dropCap)
230
+ pieceNotes.push('dropCap');
231
+ if (el.paragraphIndent)
232
+ pieceNotes.push('paragraphIndent');
233
+ if (typeof el.placement?.size?.height === 'object')
234
+ pieceNotes.push('height');
235
+ const chars = (el.content.match(/[\p{L}\p{N}]/gu) ?? []).length;
236
+ const n = estimateLines(lines, r?.w, sizeMm);
237
+ const sure = n === lines.length;
238
+ pieces.push({
239
+ id: el.id,
240
+ ...(sideOf(el) ? { side: sideOf(el) } : {}),
241
+ ...(r ? { x: r.x, y: r.y, ...(r.w !== undefined ? { width: r.w } : {}), height: n * lineMm, heightSure: sure } : {}),
242
+ lineMm,
243
+ look,
244
+ lookKey: stableStringify(look),
245
+ element: el,
246
+ lines,
247
+ chars,
248
+ notes: pieceNotes,
249
+ });
250
+ movedIds.add(el.id);
251
+ }
252
+ // Highlights: a filled box on a line of a moved text that carries a bold
253
+ // run is that run's chip.
254
+ const usedBoxes = new Set();
255
+ let chips = 0;
256
+ for (const p of pieces) {
257
+ const marks = p.element.inlineMarks === true;
258
+ let lines = p.lines.map((l) => escapeText(l, marks));
259
+ if (input.highlightsToChips && marks && p.x !== undefined && p.y !== undefined && p.width !== undefined && p.height !== undefined) {
260
+ const onLine = new Map();
261
+ const boxes = [];
262
+ for (const el of elements) {
263
+ const colour = highlightColour(el);
264
+ if (!colour || usedBoxes.has(el.id) || sideOf(el) !== p.side)
265
+ continue;
266
+ const r = rectOf(el);
267
+ if (!r || r.w === undefined || r.h === undefined)
268
+ continue;
269
+ if (r.h > p.lineMm * 1.6)
270
+ continue;
271
+ const cy = r.y + r.h / 2;
272
+ if (r.x < p.x - 1 || r.x + r.w > p.x + p.width + 1 || cy < p.y || cy > p.y + p.height)
273
+ continue;
274
+ const line = Math.floor((cy - p.y) / p.lineMm);
275
+ if (line < 0 || line >= p.lines.length)
276
+ continue;
277
+ onLine.set(line, colour);
278
+ boxes.push(el.id);
279
+ }
280
+ if (onLine.size > 0) {
281
+ const { runs } = boldRuns(lines);
282
+ const covered = new Set();
283
+ // Replace from the end so earlier offsets hold.
284
+ const edits = [];
285
+ for (const run of runs) {
286
+ if (!run.some((seg) => onLine.has(seg.line)))
287
+ continue;
288
+ const text = run.map((seg) => lines[seg.line].slice(seg.start, seg.end)).join('');
289
+ if (/[[\]*_]/.test(text))
290
+ continue;
291
+ const colour = onLine.get(run.find((seg) => onLine.has(seg.line)).line);
292
+ const style = chipStyleFor(colour, input.chipStyles, newChipStyles);
293
+ for (const seg of run) {
294
+ edits.push({ line: seg.line, start: seg.start, end: seg.end, style });
295
+ covered.add(seg.line);
296
+ }
297
+ }
298
+ edits.sort((a, b) => b.line - a.line || b.start - a.start);
299
+ lines = lines.slice();
300
+ for (const e of edits) {
301
+ const l = lines[e.line];
302
+ const opens = l.slice(Math.max(0, e.start - 2), e.start) === '**';
303
+ const closes = l.slice(e.end, e.end + 2) === '**';
304
+ const inner = l.slice(e.start, e.end);
305
+ const chip = inner.trim() === '' ? inner : `:chip[${inner}]{style="${e.style}"}`;
306
+ lines[e.line] = l.slice(0, opens ? e.start - 2 : e.start) + chip + l.slice(closes ? e.end + 2 : e.end);
307
+ }
308
+ // A boxed line without a bold run keeps its box.
309
+ for (const id of boxes) {
310
+ const el = elements.find((x) => x.id === id);
311
+ const r = rectOf(el);
312
+ const line = Math.floor((r.y + (r.h ?? 0) / 2 - p.y) / p.lineMm);
313
+ if (covered.has(line))
314
+ usedBoxes.add(id);
315
+ }
316
+ chips += edits.length;
317
+ }
318
+ }
319
+ p.lines = lines;
320
+ }
321
+ // Frames: pieces of one look under one another, at one spacing.
322
+ const ordered = pieces.slice().sort((a, b) => (a.y ?? Infinity) - (b.y ?? Infinity) || (a.x ?? 0) - (b.x ?? 0));
323
+ const frames = [];
324
+ for (const p of ordered) {
325
+ let target;
326
+ if (input.merge && p.x !== undefined && p.y !== undefined) {
327
+ target = frames.find((f) => {
328
+ const last = f.pieces[f.pieces.length - 1];
329
+ if (f.side !== p.side || f.lookKey !== p.lookKey || last.x === undefined || last.y === undefined || last.height === undefined)
330
+ return false;
331
+ if (Math.abs(last.x - p.x) > 0.6)
332
+ return false;
333
+ if (Math.abs((last.width ?? 0) - (p.width ?? 0)) > 2)
334
+ return false;
335
+ // Where the last piece ends must be known, not guessed from a wrap.
336
+ if (!last.heightSure)
337
+ return false;
338
+ const gap = p.y - (last.y + last.height);
339
+ if (gap < -0.35 * p.lineMm || gap > 1.6 * p.lineMm)
340
+ return false;
341
+ if (f.pieces.length > 1 && Math.abs(gap - f.gap) > 0.5)
342
+ return false;
343
+ // Nothing in between: no other text, no edge of a box.
344
+ const top = last.y + last.height - 0.2;
345
+ const bottom = p.y + 0.2;
346
+ const left = Math.min(last.x, p.x);
347
+ const right = Math.max(last.x + (last.width ?? 0), p.x + (p.width ?? 0));
348
+ const across = (x, w) => x < right && x + w > left;
349
+ if (pieces.some((q) => q !== last && q !== p && q.y !== undefined && q.x !== undefined && q.y > top && q.y < bottom && across(q.x, q.width ?? 0)))
350
+ return false;
351
+ if (elements.some((e) => {
352
+ if (e.kind !== 'box' && e.kind !== 'rule')
353
+ return false;
354
+ const r = rectOf(e);
355
+ if (!r)
356
+ return false;
357
+ const edges = [r.y, r.y + (r.h ?? 0)];
358
+ return across(r.x, r.w ?? 0) && edges.some((y) => y > top && y < bottom) && (e.kind === 'rule' || (r.h ?? 0) > p.lineMm * 1.6);
359
+ }))
360
+ return false;
361
+ return true;
362
+ });
363
+ }
364
+ if (target) {
365
+ const last = target.pieces[target.pieces.length - 1];
366
+ if (target.pieces.length === 1)
367
+ target.gap = Math.max(0, Math.round((p.y - (last.y + last.height)) * 10) / 10);
368
+ target.pieces.push(p);
369
+ target.width = Math.max(target.width ?? 0, p.width ?? 0) || undefined;
370
+ continue;
371
+ }
372
+ frames.push({ ...(p.side ? { side: p.side } : {}), pieces: [p], look: p.look, lookKey: p.lookKey, gap: 0, ...(p.width !== undefined ? { width: p.width } : {}), key: '' });
373
+ }
374
+ for (const f of frames) {
375
+ const first = f.pieces[0];
376
+ const round = (v) => (v === undefined ? '-' : (Math.round(v * 2) / 2).toFixed(1));
377
+ f.key = [f.side ?? '', f.lookKey, round(first.x), round(first.y), round(f.width), first.x === undefined ? stableStringify(first.element.placement) : ''].join('|');
378
+ for (const p of f.pieces)
379
+ notes.push(...p.notes.map((n) => `${p.id}:${n}`));
380
+ }
381
+ const movedTo = new Map();
382
+ frames.forEach((f, i) => f.pieces.forEach((p) => movedTo.set(p.id, i)));
383
+ // What did not move: in the template's running heads when it hangs from
384
+ // the slot's own container, else in the decoration, with the full-page
385
+ // picture read from the page's attribute.
386
+ const inSlot = new Set();
387
+ const byId = new Map(elements.map((e) => [e.id, e]));
388
+ for (let changed = true; changed;) {
389
+ changed = false;
390
+ for (const el of elements) {
391
+ if (inSlot.has(el.id))
392
+ continue;
393
+ const to = el.placement?.anchor?.to;
394
+ const slotBound = to === 'container' || to === 'outer' || to === undefined
395
+ || (typeof to === 'string' && to.startsWith('#') && byId.has(to.slice(1)) && inSlot.has(to.slice(1)) && !movedIds.has(to.slice(1)));
396
+ if (slotBound) {
397
+ inSlot.add(el.id);
398
+ changed = true;
399
+ }
400
+ }
401
+ }
402
+ let background;
403
+ const decoration = [];
404
+ const header = [];
405
+ const footer = [];
406
+ elements.forEach((el, i) => {
407
+ if (movedIds.has(el.id) || usedBoxes.has(el.id))
408
+ return;
409
+ const copy = { ...el };
410
+ delete copy.reserve;
411
+ if (inSlot.has(el.id)) {
412
+ (input.origins[i] === 'footer' ? footer : header).push(copy);
413
+ return;
414
+ }
415
+ if (el.kind === 'image' && background === undefined && coversPage(el, page)) {
416
+ background = el.resourceId;
417
+ copy.resourceId = '{attr.background}';
418
+ }
419
+ decoration.push(copy);
420
+ });
421
+ const movedChars = pieces.reduce((n, p) => n + p.chars, 0);
422
+ return { key: input.key, frames, decoration, header, footer, movedTo, ...(background !== undefined ? { background } : {}), kept, chips, newChipStyles, notes, movedChars, movedElements: pieces.length };
423
+ }
424
+ /** An image that covers (nearly) the whole page: the page's art. */
425
+ function coversPage(el, page) {
426
+ const r = rectOf(el);
427
+ if (!r || r.w === undefined || r.h === undefined || page.width <= 0 || page.height <= 0)
428
+ return false;
429
+ if (typeof el.resourceId !== 'string' || el.resourceId.includes('{'))
430
+ return false;
431
+ return r.w * r.h >= 0.8 * page.width * page.height;
432
+ }
433
+ /** Decoration anchors that named a text now in a frame name the frame. */
434
+ export function remapDecorationAnchors(decoration, movedTo, frames) {
435
+ return decoration.map((el) => {
436
+ const to = el.placement?.anchor?.to;
437
+ if (typeof to !== 'string' || !to.startsWith('#'))
438
+ return el;
439
+ const i = movedTo.get(to.slice(1));
440
+ const name = i !== undefined ? frames[i]?.name : undefined;
441
+ if (!name)
442
+ return el;
443
+ return { ...el, placement: { ...el.placement, anchor: { ...el.placement.anchor, to: `#${name}` } } };
444
+ });
445
+ }
446
+ //# sourceMappingURL=pageDesign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageDesign.js","sourceRoot":"","sources":["../../src/migrate/pageDesign.ts"],"names":[],"mappings":"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"}