postext 0.3.19 → 0.3.21

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 (297) hide show
  1. package/dist/__tests__/columnBalancing.test.js +36 -2
  2. package/dist/__tests__/columnBalancing.test.js.map +1 -1
  3. package/dist/__tests__/defaults/calloutStyles.test.d.ts +2 -0
  4. package/dist/__tests__/defaults/calloutStyles.test.d.ts.map +1 -0
  5. package/dist/__tests__/defaults/calloutStyles.test.js +201 -0
  6. package/dist/__tests__/defaults/calloutStyles.test.js.map +1 -0
  7. package/dist/__tests__/defaults/captionStyle.test.d.ts +2 -0
  8. package/dist/__tests__/defaults/captionStyle.test.d.ts.map +1 -0
  9. package/dist/__tests__/defaults/captionStyle.test.js +87 -0
  10. package/dist/__tests__/defaults/captionStyle.test.js.map +1 -0
  11. package/dist/__tests__/defaults/pageSizePreset.test.d.ts +2 -0
  12. package/dist/__tests__/defaults/pageSizePreset.test.d.ts.map +1 -0
  13. package/dist/__tests__/defaults/pageSizePreset.test.js +24 -0
  14. package/dist/__tests__/defaults/pageSizePreset.test.js.map +1 -0
  15. package/dist/__tests__/defaults/paragraphStyles.test.d.ts +2 -0
  16. package/dist/__tests__/defaults/paragraphStyles.test.d.ts.map +1 -0
  17. package/dist/__tests__/defaults/paragraphStyles.test.js +93 -0
  18. package/dist/__tests__/defaults/paragraphStyles.test.js.map +1 -0
  19. package/dist/__tests__/design/pageAnchors.test.d.ts +2 -0
  20. package/dist/__tests__/design/pageAnchors.test.d.ts.map +1 -0
  21. package/dist/__tests__/design/pageAnchors.test.js +140 -0
  22. package/dist/__tests__/design/pageAnchors.test.js.map +1 -0
  23. package/dist/__tests__/directives.test.js +58 -0
  24. package/dist/__tests__/directives.test.js.map +1 -1
  25. package/dist/__tests__/exports.test.js +19 -0
  26. package/dist/__tests__/exports.test.js.map +1 -1
  27. package/dist/__tests__/mirroredMargins.test.d.ts +2 -0
  28. package/dist/__tests__/mirroredMargins.test.d.ts.map +1 -0
  29. package/dist/__tests__/mirroredMargins.test.js +136 -0
  30. package/dist/__tests__/mirroredMargins.test.js.map +1 -0
  31. package/dist/__tests__/numbering.test.js +54 -0
  32. package/dist/__tests__/numbering.test.js.map +1 -1
  33. package/dist/__tests__/openerTitleSource.test.d.ts +2 -0
  34. package/dist/__tests__/openerTitleSource.test.d.ts.map +1 -0
  35. package/dist/__tests__/openerTitleSource.test.js +108 -0
  36. package/dist/__tests__/openerTitleSource.test.js.map +1 -0
  37. package/dist/__tests__/overStretch.test.d.ts +2 -0
  38. package/dist/__tests__/overStretch.test.d.ts.map +1 -0
  39. package/dist/__tests__/overStretch.test.js +35 -0
  40. package/dist/__tests__/overStretch.test.js.map +1 -0
  41. package/dist/__tests__/pageRoles.test.d.ts +2 -0
  42. package/dist/__tests__/pageRoles.test.d.ts.map +1 -0
  43. package/dist/__tests__/pageRoles.test.js +95 -0
  44. package/dist/__tests__/pageRoles.test.js.map +1 -0
  45. package/dist/__tests__/parse/containers.test.d.ts +2 -0
  46. package/dist/__tests__/parse/containers.test.d.ts.map +1 -0
  47. package/dist/__tests__/parse/containers.test.js +204 -0
  48. package/dist/__tests__/parse/containers.test.js.map +1 -0
  49. package/dist/__tests__/parse/headingAttrs.test.d.ts +2 -0
  50. package/dist/__tests__/parse/headingAttrs.test.d.ts.map +1 -0
  51. package/dist/__tests__/parse/headingAttrs.test.js +62 -0
  52. package/dist/__tests__/parse/headingAttrs.test.js.map +1 -0
  53. package/dist/__tests__/parse/inlineRef.test.js +26 -0
  54. package/dist/__tests__/parse/inlineRef.test.js.map +1 -1
  55. package/dist/__tests__/parts.test.d.ts +2 -0
  56. package/dist/__tests__/parts.test.d.ts.map +1 -0
  57. package/dist/__tests__/parts.test.js +405 -0
  58. package/dist/__tests__/parts.test.js.map +1 -0
  59. package/dist/__tests__/pipeline/calloutLayout.test.d.ts +2 -0
  60. package/dist/__tests__/pipeline/calloutLayout.test.d.ts.map +1 -0
  61. package/dist/__tests__/pipeline/calloutLayout.test.js +273 -0
  62. package/dist/__tests__/pipeline/calloutLayout.test.js.map +1 -0
  63. package/dist/__tests__/pipeline/calloutPlacement.test.d.ts +2 -0
  64. package/dist/__tests__/pipeline/calloutPlacement.test.d.ts.map +1 -0
  65. package/dist/__tests__/pipeline/calloutPlacement.test.js +239 -0
  66. package/dist/__tests__/pipeline/calloutPlacement.test.js.map +1 -0
  67. package/dist/__tests__/pipeline/captionLayout.test.d.ts +2 -0
  68. package/dist/__tests__/pipeline/captionLayout.test.d.ts.map +1 -0
  69. package/dist/__tests__/pipeline/captionLayout.test.js +269 -0
  70. package/dist/__tests__/pipeline/captionLayout.test.js.map +1 -0
  71. package/dist/__tests__/pipeline/inlineRefRender.test.js +53 -0
  72. package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -1
  73. package/dist/__tests__/pipeline/orderedSeparator.test.d.ts +2 -0
  74. package/dist/__tests__/pipeline/orderedSeparator.test.d.ts.map +1 -0
  75. package/dist/__tests__/pipeline/orderedSeparator.test.js +196 -0
  76. package/dist/__tests__/pipeline/orderedSeparator.test.js.map +1 -0
  77. package/dist/__tests__/pipeline/paragraphStyles.test.d.ts +2 -0
  78. package/dist/__tests__/pipeline/paragraphStyles.test.d.ts.map +1 -0
  79. package/dist/__tests__/pipeline/paragraphStyles.test.js +172 -0
  80. package/dist/__tests__/pipeline/paragraphStyles.test.js.map +1 -0
  81. package/dist/__tests__/pipeline/spanBands.test.d.ts +2 -0
  82. package/dist/__tests__/pipeline/spanBands.test.d.ts.map +1 -0
  83. package/dist/__tests__/pipeline/spanBands.test.js +303 -0
  84. package/dist/__tests__/pipeline/spanBands.test.js.map +1 -0
  85. package/dist/__tests__/pipeline/spanBlocks.test.d.ts +2 -0
  86. package/dist/__tests__/pipeline/spanBlocks.test.d.ts.map +1 -0
  87. package/dist/__tests__/pipeline/spanBlocks.test.js +407 -0
  88. package/dist/__tests__/pipeline/spanBlocks.test.js.map +1 -0
  89. package/dist/__tests__/placeholders.test.d.ts +2 -0
  90. package/dist/__tests__/placeholders.test.d.ts.map +1 -0
  91. package/dist/__tests__/placeholders.test.js +130 -0
  92. package/dist/__tests__/placeholders.test.js.map +1 -0
  93. package/dist/__tests__/table/model.test.js +24 -0
  94. package/dist/__tests__/table/model.test.js.map +1 -1
  95. package/dist/__tests__/tracking.test.d.ts +2 -0
  96. package/dist/__tests__/tracking.test.d.ts.map +1 -0
  97. package/dist/__tests__/tracking.test.js +37 -0
  98. package/dist/__tests__/tracking.test.js.map +1 -0
  99. package/dist/__tests__/urlBreaks.test.d.ts +2 -0
  100. package/dist/__tests__/urlBreaks.test.d.ts.map +1 -0
  101. package/dist/__tests__/urlBreaks.test.js +57 -0
  102. package/dist/__tests__/urlBreaks.test.js.map +1 -0
  103. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  104. package/dist/canvas-backend/blockRender.js +20 -1
  105. package/dist/canvas-backend/blockRender.js.map +1 -1
  106. package/dist/canvas-backend/decorations.d.ts +3 -0
  107. package/dist/canvas-backend/decorations.d.ts.map +1 -1
  108. package/dist/canvas-backend/decorations.js +14 -8
  109. package/dist/canvas-backend/decorations.js.map +1 -1
  110. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  111. package/dist/canvas-backend/headerFooter.js +23 -0
  112. package/dist/canvas-backend/headerFooter.js.map +1 -1
  113. package/dist/canvas-backend/index.d.ts.map +1 -1
  114. package/dist/canvas-backend/index.js +4 -2
  115. package/dist/canvas-backend/index.js.map +1 -1
  116. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  117. package/dist/canvas-backend/renderResourceBlock.js +33 -5
  118. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  119. package/dist/columnRule.d.ts +19 -0
  120. package/dist/columnRule.d.ts.map +1 -0
  121. package/dist/columnRule.js +36 -0
  122. package/dist/columnRule.js.map +1 -0
  123. package/dist/defaults/bodyText.js +1 -1
  124. package/dist/defaults/bodyText.js.map +1 -1
  125. package/dist/defaults/calloutStyles.d.ts +61 -0
  126. package/dist/defaults/calloutStyles.d.ts.map +1 -0
  127. package/dist/defaults/calloutStyles.js +292 -0
  128. package/dist/defaults/calloutStyles.js.map +1 -0
  129. package/dist/defaults/captionStyle.d.ts +11 -1
  130. package/dist/defaults/captionStyle.d.ts.map +1 -1
  131. package/dist/defaults/captionStyle.js +127 -2
  132. package/dist/defaults/captionStyle.js.map +1 -1
  133. package/dist/defaults/headerFooter.d.ts.map +1 -1
  134. package/dist/defaults/headerFooter.js +3 -0
  135. package/dist/defaults/headerFooter.js.map +1 -1
  136. package/dist/defaults/headings.d.ts +3 -0
  137. package/dist/defaults/headings.d.ts.map +1 -1
  138. package/dist/defaults/headings.js +33 -6
  139. package/dist/defaults/headings.js.map +1 -1
  140. package/dist/defaults/index.d.ts +4 -1
  141. package/dist/defaults/index.d.ts.map +1 -1
  142. package/dist/defaults/index.js +28 -1
  143. package/dist/defaults/index.js.map +1 -1
  144. package/dist/defaults/orderedLists.d.ts +9 -8
  145. package/dist/defaults/orderedLists.d.ts.map +1 -1
  146. package/dist/defaults/orderedLists.js +66 -4
  147. package/dist/defaults/orderedLists.js.map +1 -1
  148. package/dist/defaults/page.d.ts.map +1 -1
  149. package/dist/defaults/page.js +14 -3
  150. package/dist/defaults/page.js.map +1 -1
  151. package/dist/defaults/paragraphStyles.d.ts +10 -0
  152. package/dist/defaults/paragraphStyles.d.ts.map +1 -0
  153. package/dist/defaults/paragraphStyles.js +67 -0
  154. package/dist/defaults/paragraphStyles.js.map +1 -0
  155. package/dist/defaults/parts.d.ts +22 -0
  156. package/dist/defaults/parts.d.ts.map +1 -0
  157. package/dist/defaults/parts.js +139 -0
  158. package/dist/defaults/parts.js.map +1 -0
  159. package/dist/defaults/shared.d.ts.map +1 -1
  160. package/dist/defaults/shared.js +110 -17
  161. package/dist/defaults/shared.js.map +1 -1
  162. package/dist/defaults/tableStyle.d.ts.map +1 -1
  163. package/dist/defaults/tableStyle.js +6 -0
  164. package/dist/defaults/tableStyle.js.map +1 -1
  165. package/dist/design/layout.d.ts +27 -1
  166. package/dist/design/layout.d.ts.map +1 -1
  167. package/dist/design/layout.js +39 -8
  168. package/dist/design/layout.js.map +1 -1
  169. package/dist/design/placeholders.d.ts +21 -4
  170. package/dist/design/placeholders.d.ts.map +1 -1
  171. package/dist/design/placeholders.js +38 -7
  172. package/dist/design/placeholders.js.map +1 -1
  173. package/dist/html-backend.d.ts.map +1 -1
  174. package/dist/html-backend.js +75 -16
  175. package/dist/html-backend.js.map +1 -1
  176. package/dist/index.d.ts +13 -9
  177. package/dist/index.d.ts.map +1 -1
  178. package/dist/index.js +7 -4
  179. package/dist/index.js.map +1 -1
  180. package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
  181. package/dist/knuthPlass/breakpoints.js +4 -2
  182. package/dist/knuthPlass/breakpoints.js.map +1 -1
  183. package/dist/knuthPlass/constants.d.ts +7 -0
  184. package/dist/knuthPlass/constants.d.ts.map +1 -1
  185. package/dist/knuthPlass/constants.js +7 -0
  186. package/dist/knuthPlass/constants.js.map +1 -1
  187. package/dist/knuthPlass/richAdapter.d.ts +2 -0
  188. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  189. package/dist/knuthPlass/richAdapter.js +6 -6
  190. package/dist/knuthPlass/richAdapter.js.map +1 -1
  191. package/dist/measure/cache.js +2 -2
  192. package/dist/measure/cache.js.map +1 -1
  193. package/dist/measure/rich.d.ts +8 -0
  194. package/dist/measure/rich.d.ts.map +1 -1
  195. package/dist/measure/rich.js +54 -10
  196. package/dist/measure/rich.js.map +1 -1
  197. package/dist/measure/types.d.ts +4 -0
  198. package/dist/measure/types.d.ts.map +1 -1
  199. package/dist/measure/types.js.map +1 -1
  200. package/dist/parse/attrs.d.ts +10 -0
  201. package/dist/parse/attrs.d.ts.map +1 -0
  202. package/dist/parse/attrs.js +20 -0
  203. package/dist/parse/attrs.js.map +1 -0
  204. package/dist/parse/blockParser.d.ts +8 -4
  205. package/dist/parse/blockParser.d.ts.map +1 -1
  206. package/dist/parse/blockParser.js +134 -20
  207. package/dist/parse/blockParser.js.map +1 -1
  208. package/dist/parse/index.d.ts +2 -2
  209. package/dist/parse/index.d.ts.map +1 -1
  210. package/dist/parse/index.js +1 -1
  211. package/dist/parse/index.js.map +1 -1
  212. package/dist/parse/inlineFormatting.d.ts +17 -1
  213. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  214. package/dist/parse/inlineFormatting.js +56 -7
  215. package/dist/parse/inlineFormatting.js.map +1 -1
  216. package/dist/parse/sourceMapping.d.ts.map +1 -1
  217. package/dist/parse/sourceMapping.js +13 -1
  218. package/dist/parse/sourceMapping.js.map +1 -1
  219. package/dist/parse/types.d.ts +55 -5
  220. package/dist/parse/types.d.ts.map +1 -1
  221. package/dist/pipeline/bandCaps.d.ts +86 -0
  222. package/dist/pipeline/bandCaps.d.ts.map +1 -0
  223. package/dist/pipeline/bandCaps.js +142 -0
  224. package/dist/pipeline/bandCaps.js.map +1 -0
  225. package/dist/pipeline/build.d.ts +41 -0
  226. package/dist/pipeline/build.d.ts.map +1 -1
  227. package/dist/pipeline/build.js +675 -168
  228. package/dist/pipeline/build.js.map +1 -1
  229. package/dist/pipeline/buildBlockKind.d.ts +8 -0
  230. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  231. package/dist/pipeline/buildBlockKind.js +40 -11
  232. package/dist/pipeline/buildBlockKind.js.map +1 -1
  233. package/dist/pipeline/buildHelpers.d.ts +23 -1
  234. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  235. package/dist/pipeline/buildHelpers.js +50 -6
  236. package/dist/pipeline/buildHelpers.js.map +1 -1
  237. package/dist/pipeline/calloutLayout.d.ts +107 -0
  238. package/dist/pipeline/calloutLayout.d.ts.map +1 -0
  239. package/dist/pipeline/calloutLayout.js +498 -0
  240. package/dist/pipeline/calloutLayout.js.map +1 -0
  241. package/dist/pipeline/columnBalancing.d.ts +26 -8
  242. package/dist/pipeline/columnBalancing.d.ts.map +1 -1
  243. package/dist/pipeline/columnBalancing.js +50 -18
  244. package/dist/pipeline/columnBalancing.js.map +1 -1
  245. package/dist/pipeline/config.d.ts.map +1 -1
  246. package/dist/pipeline/config.js +17 -5
  247. package/dist/pipeline/config.js.map +1 -1
  248. package/dist/pipeline/headerFooter.d.ts +37 -2
  249. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  250. package/dist/pipeline/headerFooter.js +231 -15
  251. package/dist/pipeline/headerFooter.js.map +1 -1
  252. package/dist/pipeline/lists.d.ts +15 -0
  253. package/dist/pipeline/lists.d.ts.map +1 -1
  254. package/dist/pipeline/lists.js +73 -16
  255. package/dist/pipeline/lists.js.map +1 -1
  256. package/dist/pipeline/measureContentBlock.d.ts +65 -0
  257. package/dist/pipeline/measureContentBlock.d.ts.map +1 -0
  258. package/dist/pipeline/measureContentBlock.js +134 -0
  259. package/dist/pipeline/measureContentBlock.js.map +1 -0
  260. package/dist/pipeline/pageRoles.d.ts +23 -0
  261. package/dist/pipeline/pageRoles.d.ts.map +1 -0
  262. package/dist/pipeline/pageRoles.js +54 -0
  263. package/dist/pipeline/pageRoles.js.map +1 -0
  264. package/dist/pipeline/paragraphContainers.d.ts +32 -0
  265. package/dist/pipeline/paragraphContainers.d.ts.map +1 -0
  266. package/dist/pipeline/paragraphContainers.js +61 -0
  267. package/dist/pipeline/paragraphContainers.js.map +1 -0
  268. package/dist/pipeline/parts.d.ts +47 -0
  269. package/dist/pipeline/parts.d.ts.map +1 -0
  270. package/dist/pipeline/parts.js +230 -0
  271. package/dist/pipeline/parts.js.map +1 -0
  272. package/dist/pipeline/placeholders.d.ts +46 -1
  273. package/dist/pipeline/placeholders.d.ts.map +1 -1
  274. package/dist/pipeline/placeholders.js +93 -11
  275. package/dist/pipeline/placeholders.js.map +1 -1
  276. package/dist/pipeline/placement.d.ts +61 -7
  277. package/dist/pipeline/placement.d.ts.map +1 -1
  278. package/dist/pipeline/placement.js +151 -12
  279. package/dist/pipeline/placement.js.map +1 -1
  280. package/dist/pipeline/resourceLayout.d.ts +18 -5
  281. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  282. package/dist/pipeline/resourceLayout.js +145 -23
  283. package/dist/pipeline/resourceLayout.js.map +1 -1
  284. package/dist/pipeline/styles.d.ts +9 -1
  285. package/dist/pipeline/styles.d.ts.map +1 -1
  286. package/dist/pipeline/styles.js +50 -0
  287. package/dist/pipeline/styles.js.map +1 -1
  288. package/dist/table/model.d.ts.map +1 -1
  289. package/dist/table/model.js +16 -2
  290. package/dist/table/model.js.map +1 -1
  291. package/dist/types.d.ts +468 -2
  292. package/dist/types.d.ts.map +1 -1
  293. package/dist/vdt.d.ts +132 -4
  294. package/dist/vdt.d.ts.map +1 -1
  295. package/dist/vdt.js +2 -1
  296. package/dist/vdt.js.map +1 -1
  297. package/package.json +8 -8
@@ -1,7 +1,11 @@
1
+ import { TITLE_BREAK_RE, applyTitleBreaks } from '../parse/inlineFormatting';
1
2
  import { createBoundingBox, } from '../vdt';
2
- import { computeChapterTitles, computeChapterNumbers } from './placeholders';
3
+ import { computeChapterTitles, computeChapterNumbers, computeChapterAttrs, computePartValues } from './placeholders';
4
+ import { parsePartNumber } from './parts';
3
5
  import { computePageMetrics } from './buildHelpers';
4
6
  import { buildHeadingLevelMap } from './config';
7
+ import { classifyPages } from './pageRoles';
8
+ import { dimensionToPx } from '../units';
5
9
  import { layoutDesignSlot, } from '../design/layout';
6
10
  /** Slots live in the page margin area between the body edge and the page
7
11
  * edge. Header slot container: from `top-margin` edge down to body top.
@@ -15,7 +19,7 @@ import { layoutDesignSlot, } from '../design/layout';
15
19
  * This matches the legacy semantics: `marginFromBody` was "distance from
16
20
  * body edge" — the migration translates that to an offset of the same
17
21
  * magnitude from the body-facing edge. */
18
- function headerContainerBbox(contentArea, _pageHeight) {
22
+ function headerContainerBbox(contentArea) {
19
23
  // Header: spans from top of page to body top.
20
24
  return { x: contentArea.x, y: 0, width: contentArea.width, height: contentArea.y };
21
25
  }
@@ -99,11 +103,23 @@ function boxPrimitiveToBlock(prim) {
99
103
  * rather than below the natural text bottom. Applies to both in-column
100
104
  * headings (overlay in block bbox) and page-spanning openers (width is the
101
105
  * full content area; passed in by the caller). */
102
- export function measureHeadingAdvancedDesignHeight(level, heading, width, dpi, metadata, pageIndex) {
106
+ export function measureHeadingAdvancedDesignHeight(level, heading, width, dpi, metadata, pageIndex,
107
+ /** Page/bleed frames in absolute page px, for `anchor.to: 'page' |
108
+ * 'bleed'` elements. Translated into the stub coordinate system (the
109
+ * heading container's top-left at `origin`) so a band anchored above the
110
+ * heading does not grow the reserved height, while anything extending
111
+ * below the heading's top does. */
112
+ frames,
113
+ /** Absolute page position of the heading container's top-left. Defaults
114
+ * to the frames' page origin when omitted. */
115
+ origin) {
103
116
  if (!level.advancedDesign.enabled)
104
117
  return 0;
118
+ const minHeightPx = level.advancedDesign.minHeight
119
+ ? dimensionToPx(level.advancedDesign.minHeight, dpi)
120
+ : 0;
105
121
  if (level.advancedDesign.slot.elements.length === 0)
106
- return 0;
122
+ return minHeightPx;
107
123
  const stubPage = { index: pageIndex, pageLabel: '1' };
108
124
  const placeholders = {
109
125
  kind: 'heading',
@@ -113,23 +129,90 @@ export function measureHeadingAdvancedDesignHeight(level, heading, width, dpi, m
113
129
  chapterTitleByPageIndex: [],
114
130
  heading,
115
131
  };
116
- const result = layoutDesignSlot(level.advancedDesign.slot, { container: { x: 0, y: 0, width, height: 1e6 }, dpi, placeholders }, pageIndex);
132
+ let stubFrames;
133
+ if (frames) {
134
+ const ox = origin?.x ?? frames.page.x;
135
+ const oy = origin?.y ?? frames.page.y;
136
+ const shift = (f) => ({ x: f.x - ox, y: f.y - oy, width: f.width, height: f.height });
137
+ stubFrames = { page: shift(frames.page), bleed: shift(frames.bleed) };
138
+ }
139
+ const result = layoutDesignSlot(level.advancedDesign.slot, { container: { x: 0, y: 0, width, height: 1e6 }, dpi, placeholders, frames: stubFrames }, pageIndex);
117
140
  let bottom = 0;
118
141
  for (const prim of result.primitives) {
119
142
  bottom = Math.max(bottom, prim.y + prim.height);
120
143
  }
121
- return bottom;
144
+ return Math.max(bottom, minHeightPx);
122
145
  }
123
- export function layoutSlotToVdt(slot, container, pageIndex, placeholders, dpi) {
124
- const result = layoutDesignSlot(slot, { container, dpi, placeholders }, pageIndex);
146
+ export function layoutSlotToVdt(slot, container, pageIndex, placeholders, dpi, extras) {
147
+ const result = layoutDesignSlot(slot, { container, dpi, placeholders, frames: extras?.frames, pageRole: extras?.pageRole }, pageIndex);
125
148
  if (result.primitives.length === 0)
126
149
  return undefined;
127
- const blocks = result.primitives.map(primitiveToBlock);
150
+ const titleElementIds = extras?.titleSource
151
+ ? new Set(slot.elements.filter((el) => el.kind === 'text' && el.content.includes('{titleText}')).map((el) => el.id))
152
+ : undefined;
153
+ const attrElementKeys = new Map();
154
+ if (extras?.attrSources) {
155
+ for (const el of slot.elements) {
156
+ if (el.kind !== 'text')
157
+ continue;
158
+ const m = /^\s*\{attr\.([A-Za-z_][A-Za-z0-9_-]*)\}\s*$/.exec(el.content);
159
+ if (m && extras.attrSources[m[1]])
160
+ attrElementKeys.set(el.id, m[1]);
161
+ }
162
+ }
163
+ const blocks = result.primitives.map((prim) => {
164
+ const block = primitiveToBlock(prim);
165
+ const attrKey = attrElementKeys.get(prim.id);
166
+ if (block.kind === 'text' && attrKey !== undefined && extras?.attrSources?.[attrKey]) {
167
+ const range = extras.attrSources[attrKey];
168
+ const value = extras.attrs?.[attrKey] ?? '';
169
+ block.sourceStart = range.start;
170
+ block.sourceEnd = range.end;
171
+ if (value.length === range.end - range.start) {
172
+ block.sourceText = value;
173
+ block.sourceMap = Array.from({ length: value.length }, (_, i) => range.start + i);
174
+ }
175
+ return block;
176
+ }
177
+ if (block.kind === 'text' && titleElementIds?.has(prim.id) && extras?.titleSource) {
178
+ block.sourceStart = extras.titleSource.start;
179
+ block.sourceEnd = extras.titleSource.end;
180
+ if (extras.titleSource.text !== undefined && extras.titleSource.sourceMap
181
+ && extras.titleSource.sourceMap.length === extras.titleSource.text.length) {
182
+ block.sourceText = extras.titleSource.text;
183
+ block.sourceMap = extras.titleSource.sourceMap;
184
+ }
185
+ }
186
+ return block;
187
+ });
128
188
  return {
129
189
  bbox: createBoundingBox(container.x, container.y, container.width, container.height),
130
190
  blocks,
131
191
  };
132
192
  }
193
+ /** Plain title text of a part (`\\` rendered as a line break) and the
194
+ * source offset of every character of it, for editor cursor mapping. */
195
+ function partTitleSourceMap(rawTitle, sourceStart) {
196
+ let text = '';
197
+ const sourceMap = [];
198
+ const re = /[ \t]*\\\\[ \t]*/g;
199
+ let last = 0;
200
+ let m;
201
+ while ((m = re.exec(rawTitle)) !== null) {
202
+ for (let i = last; i < m.index; i++) {
203
+ text += rawTitle[i];
204
+ sourceMap.push(sourceStart + i);
205
+ }
206
+ text += '\n';
207
+ sourceMap.push(sourceStart + m.index);
208
+ last = m.index + m[0].length;
209
+ }
210
+ for (let i = last; i < rawTitle.length; i++) {
211
+ text += rawTitle[i];
212
+ sourceMap.push(sourceStart + i);
213
+ }
214
+ return { text, sourceMap };
215
+ }
133
216
  /** Container bbox for a page-spanning heading opener band: occupies the
134
217
  * vertical band the heading block reserved in its column, extended
135
218
  * horizontally across the full content area (both columns) — but NOT beyond
@@ -156,7 +239,7 @@ function findOpenerHeading(page, headingLevelByNumber) {
156
239
  .map((ln) => (ln.segments ?? []).map((s) => s.text).join(''))
157
240
  .join(' ');
158
241
  const pref = block.numberPrefix ?? '';
159
- const title = pref && full.startsWith(`${pref} `) ? full.slice(pref.length + 1) : full;
242
+ const title = applyTitleBreaks(pref && full.startsWith(`${pref} `) ? full.slice(pref.length + 1) : full, block.titleBreaks, block.titleLength ?? -1);
160
243
  return { block, level: block.headingLevel, titleText: title, numberPrefix: pref };
161
244
  }
162
245
  }
@@ -173,6 +256,7 @@ function synthesiseDefaultOpenerSlot(level, hasNumberPrefix) {
173
256
  kind: 'text',
174
257
  id: 'defaultHeadingOpener',
175
258
  parity: 'all',
259
+ pages: 'all',
176
260
  placement: {
177
261
  anchor: { to: 'container', edge: 'top-left' },
178
262
  offset: { x: { value: 0, unit: 'pt' }, y: { value: 0, unit: 'pt' } },
@@ -192,17 +276,60 @@ function synthesiseDefaultOpenerSlot(level, hasNumberPrefix) {
192
276
  };
193
277
  return { elements: [textEl] };
194
278
  }
279
+ /** Default opener design of a `:::part` page when `parts.design` is empty:
280
+ * `{number} {titleText}` (or just `{titleText}` without a number) in the
281
+ * H1 typography, anchored at the top-left of the part's body area — the
282
+ * container is the trim box, so the offset is the part margins. Purely
283
+ * decorative: raise `parts.margins.top` to keep the body clear of it. */
284
+ function synthesiseDefaultPartSlot(resolved, page, trimBox, hasNumber) {
285
+ const level = resolved.headings.levels.find((l) => l.level === 1) ?? resolved.headings.levels[0];
286
+ const content = hasNumber ? '{number} {titleText}' : '{titleText}';
287
+ const textEl = {
288
+ kind: 'text',
289
+ id: 'defaultPartOpener',
290
+ parity: 'all',
291
+ pages: 'all',
292
+ placement: {
293
+ anchor: { to: 'container', edge: 'top-left' },
294
+ offset: {
295
+ x: { value: page.contentArea.x - trimBox.x, unit: 'px' },
296
+ y: { value: page.contentArea.y - trimBox.y, unit: 'px' },
297
+ },
298
+ size: { width: { value: page.contentArea.width, unit: 'px' }, height: 'auto' },
299
+ },
300
+ content,
301
+ fontFamily: level.fontFamily,
302
+ fontSize: level.fontSize,
303
+ fontWeight: level.fontWeight,
304
+ italic: level.italic,
305
+ color: level.color,
306
+ align: 'left',
307
+ verticalAlign: 'top',
308
+ lineHeight: level.lineHeight.unit === 'em' ? level.lineHeight.value : 1.2,
309
+ overflow: 'wrap',
310
+ hyphenate: true,
311
+ };
312
+ return { elements: [textEl] };
313
+ }
195
314
  /**
196
315
  * After body placement finishes, attach header/footer slots to every page.
197
316
  */
198
317
  export function buildHeadersAndFooters(doc) {
199
318
  const resolved = doc.config;
200
319
  const dpi = resolved.page.dpi;
201
- const { contentArea } = computePageMetrics(resolved);
320
+ const metrics = computePageMetrics(resolved);
321
+ const frames = { page: metrics.trimBox, bleed: metrics.bleedBox };
322
+ // Page roles drive the per-element `pages` filter of every slot below.
323
+ classifyPages(doc, resolved);
202
324
  const chapterTitleByPageIndex = computeChapterTitles(doc.blocks, doc.pages.length, doc.pages);
203
325
  const chapterNumberByPageIndex = computeChapterNumbers(doc.blocks, doc.pages.length, doc.pages);
326
+ const chapterAttrsByPageIndex = computeChapterAttrs(doc.blocks, doc.pages.length, doc.pages);
327
+ const { partTitleByPageIndex, partNumberByPageIndex } = computePartValues(doc.pages);
204
328
  const headingLevelByNumber = buildHeadingLevelMap(resolved);
205
329
  for (const page of doc.pages) {
330
+ // Per-page content area: mirrored margins swap inner/outer on even pages.
331
+ const contentArea = page.contentArea;
332
+ const extras = { frames, pageRole: page.role };
206
333
  if (resolved.header.elements.length > 0) {
207
334
  const placeholders = {
208
335
  kind: 'header',
@@ -210,8 +337,72 @@ export function buildHeadersAndFooters(doc) {
210
337
  allPages: doc.pages,
211
338
  metadata: doc.metadata,
212
339
  chapterTitleByPageIndex,
340
+ chapterNumberByPageIndex,
341
+ chapterAttrsByPageIndex,
342
+ partTitleByPageIndex,
343
+ partNumberByPageIndex,
213
344
  };
214
- page.header = layoutSlotToVdt(resolved.header, headerContainerBbox(contentArea, page.height), page.index, placeholders, dpi);
345
+ page.header = layoutSlotToVdt(resolved.header, headerContainerBbox(contentArea), page.index, placeholders, dpi, extras);
346
+ }
347
+ // Back of a part divider: a blank page right after a part page takes the
348
+ // part's verso design (the model book tints the whole leaf).
349
+ const prevPage = page.index > 0 ? doc.pages[page.index - 1] : undefined;
350
+ if (!page.partInfo
351
+ && prevPage?.partInfo
352
+ && resolved.parts.versoDesign.elements.length > 0
353
+ && page.columns.every((c) => c.blocks.length === 0)) {
354
+ const { number, title } = prevPage.partInfo;
355
+ const placeholders = {
356
+ kind: 'part',
357
+ page,
358
+ allPages: doc.pages,
359
+ metadata: doc.metadata,
360
+ chapterTitleByPageIndex,
361
+ chapterNumberByPageIndex,
362
+ chapterAttrsByPageIndex,
363
+ partTitleByPageIndex,
364
+ partNumberByPageIndex,
365
+ heading: {
366
+ titleText: title.replace(TITLE_BREAK_RE, '\n'),
367
+ formattedNumber: number,
368
+ numericValue: parsePartNumber(number),
369
+ chapterNumber: chapterNumberByPageIndex[page.index] ?? '',
370
+ },
371
+ };
372
+ page.openerBand = layoutSlotToVdt(resolved.parts.versoDesign, { x: frames.page.x, y: frames.page.y, width: frames.page.width, height: frames.page.height }, page.index, placeholders, dpi, extras);
373
+ }
374
+ // Part-divider page: the opener design covers the full trim box and is
375
+ // purely decorative (the body column already comes from `parts.margins`).
376
+ if (page.partInfo) {
377
+ const { number, title } = page.partInfo;
378
+ const slot = resolved.parts.design.elements.length > 0
379
+ ? resolved.parts.design
380
+ : synthesiseDefaultPartSlot(resolved, page, frames.page, number.length > 0);
381
+ const placeholders = {
382
+ kind: 'part',
383
+ page,
384
+ allPages: doc.pages,
385
+ metadata: doc.metadata,
386
+ chapterTitleByPageIndex,
387
+ chapterNumberByPageIndex,
388
+ chapterAttrsByPageIndex,
389
+ partTitleByPageIndex,
390
+ partNumberByPageIndex,
391
+ heading: {
392
+ titleText: title.replace(TITLE_BREAK_RE, '\n'),
393
+ formattedNumber: number,
394
+ numericValue: parsePartNumber(number),
395
+ chapterNumber: chapterNumberByPageIndex[page.index] ?? '',
396
+ },
397
+ };
398
+ const partTitleSource = page.partInfo.titleSourceStart !== undefined && page.partInfo.titleSourceEnd !== undefined
399
+ ? {
400
+ start: page.partInfo.titleSourceStart,
401
+ end: page.partInfo.titleSourceEnd,
402
+ ...partTitleSourceMap(title, page.partInfo.titleSourceStart),
403
+ }
404
+ : undefined;
405
+ page.openerBand = layoutSlotToVdt(slot, { x: frames.page.x, y: frames.page.y, width: frames.page.width, height: frames.page.height }, page.index, placeholders, dpi, { ...extras, titleSource: partTitleSource });
215
406
  }
216
407
  const opener = findOpenerHeading(page, headingLevelByNumber);
217
408
  if (opener) {
@@ -226,13 +417,29 @@ export function buildHeadersAndFooters(doc) {
226
417
  allPages: doc.pages,
227
418
  metadata: doc.metadata,
228
419
  chapterTitleByPageIndex,
420
+ chapterNumberByPageIndex,
421
+ chapterAttrsByPageIndex,
422
+ partTitleByPageIndex,
423
+ partNumberByPageIndex,
229
424
  heading: {
230
425
  titleText: opener.titleText,
231
426
  formattedNumber: opener.numberPrefix,
232
427
  chapterNumber: chapterNumberByPageIndex[page.index] ?? '',
428
+ attrs: opener.block.attrs,
233
429
  },
234
430
  };
235
- page.openerBand = layoutSlotToVdt(slot, openerContainerBbox(opener.block, contentArea), page.index, placeholders, dpi);
431
+ const headingMap = opener.block.sourceMap;
432
+ const headingTitleSource = headingMap && headingMap.length > 0
433
+ ? {
434
+ start: headingMap[0],
435
+ end: headingMap[headingMap.length - 1] + 1,
436
+ text: opener.titleText,
437
+ sourceMap: headingMap,
438
+ }
439
+ : opener.block.sourceStart !== undefined && opener.block.sourceEnd !== undefined
440
+ ? { start: opener.block.sourceStart, end: opener.block.sourceEnd }
441
+ : undefined;
442
+ page.openerBand = layoutSlotToVdt(slot, openerContainerBbox(opener.block, contentArea), page.index, placeholders, dpi, { ...extras, titleSource: headingTitleSource, attrSources: opener.block.attrSources, attrs: opener.block.attrs });
236
443
  if (page.openerBand) {
237
444
  opener.block.hidden = true;
238
445
  }
@@ -269,13 +476,18 @@ export function buildHeadersAndFooters(doc) {
269
476
  allPages: doc.pages,
270
477
  metadata: doc.metadata,
271
478
  chapterTitleByPageIndex,
479
+ chapterNumberByPageIndex,
480
+ chapterAttrsByPageIndex,
481
+ partTitleByPageIndex,
482
+ partNumberByPageIndex,
272
483
  heading: {
273
484
  titleText: title,
274
485
  formattedNumber: pref,
275
486
  chapterNumber: chapterNumberByPageIndex[page.index] ?? '',
487
+ attrs: block.attrs,
276
488
  },
277
489
  };
278
- const overlay = layoutSlotToVdt(lvl.advancedDesign.slot, { x: block.bbox.x, y: block.bbox.y, width: block.bbox.width, height: block.bbox.height }, page.index, placeholders, dpi);
490
+ const overlay = layoutSlotToVdt(lvl.advancedDesign.slot, { x: block.bbox.x, y: block.bbox.y, width: block.bbox.width, height: block.bbox.height }, page.index, placeholders, dpi, extras);
279
491
  if (overlay)
280
492
  block.designOverlay = overlay;
281
493
  }
@@ -287,8 +499,12 @@ export function buildHeadersAndFooters(doc) {
287
499
  allPages: doc.pages,
288
500
  metadata: doc.metadata,
289
501
  chapterTitleByPageIndex,
502
+ chapterNumberByPageIndex,
503
+ chapterAttrsByPageIndex,
504
+ partTitleByPageIndex,
505
+ partNumberByPageIndex,
290
506
  };
291
- page.footer = layoutSlotToVdt(resolved.footer, footerContainerBbox(contentArea, page.height), page.index, placeholders, dpi);
507
+ page.footer = layoutSlotToVdt(resolved.footer, footerContainerBbox(contentArea, page.height), page.index, placeholders, dpi, extras);
292
508
  }
293
509
  }
294
510
  }
@@ -1 +1 @@
1
- {"version":3,"file":"headerFooter.js","sourceRoot":"","sources":["../../src/pipeline/headerFooter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headerFooter.js","sourceRoot":"","sources":["../../src/pipeline/headerFooter.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,13 @@ export interface ListBulletStyle {
12
12
  itemSpacingPx: number;
13
13
  textFontSizePx: number;
14
14
  verticalOffsetPx: number;
15
+ /** Ordered-list separator drawn as its own run (only when its style
16
+ * differs from the number's). `separatorOffsetPx` is measured from the
17
+ * bullet's left edge. */
18
+ separatorText?: string;
19
+ separatorFontString?: string;
20
+ separatorColor?: string;
21
+ separatorOffsetPx?: number;
15
22
  }
16
23
  export interface ListItemResolved {
17
24
  text: BlockStyle;
@@ -21,9 +28,17 @@ export interface ListItemResolved {
21
28
  strikethroughText: boolean;
22
29
  }
23
30
  export interface OrderedRunMetric {
31
+ /** Formatted number; includes the separator unless a distinct separator
32
+ * run exists (`separatorText` set). */
24
33
  numberText: string;
25
34
  numberWidthPx: number;
26
35
  maxNumberWidthPx: number;
36
+ /** Distinct separator run (style differs from the number's). */
37
+ separatorText?: string;
38
+ separatorFontString?: string;
39
+ separatorColor?: string;
40
+ separatorGapPx?: number;
41
+ separatorWidthPx?: number;
27
42
  }
28
43
  export interface OrderedListMetrics {
29
44
  perBlock: Map<number, OrderedRunMetric>;
@@ -1 +1 @@
1
- {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/pipeline/lists.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,qIAAqI;IACrI,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACxC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAyDD,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhG;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,EAAE,CAcV;AAyCD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,YAAY,EAAE,EAC7B,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,GACrB,kBAAkB,CAwFpB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,GACd,gBAAgB,CA4DlB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CAoDlB"}
1
+ {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/pipeline/lists.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;8BAE0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,qIAAqI;IACrI,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B;4CACwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA4CD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACxC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAyDD,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhG;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,EAAE,CAkBV;AAyCD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,YAAY,EAAE,EAC7B,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,GACrB,kBAAkB,CAuGpB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,GACd,gBAAgB,CA4DlB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CA+DlB"}
@@ -1,6 +1,26 @@
1
1
  import { dimensionToPx } from '../units';
2
2
  import { buildFontString, measureGlyphWidth } from '../measure';
3
3
  import { resolveBodyStyle } from './styles';
4
+ function levelNumberFontString(level, dpi, bodyFontSizePx) {
5
+ const fontSizePx = dimensionToPx(level.fontSize, dpi, bodyFontSizePx);
6
+ return buildFontString(level.fontFamily, fontSizePx, level.fontWeight.toString(), level.italic ? 'italic' : 'normal');
7
+ }
8
+ /**
9
+ * The separator becomes its own run only when its resolved style differs
10
+ * from the number's (font, colour or a positive gap). With the defaults the
11
+ * marker stays a single `number + separator` text run.
12
+ */
13
+ function resolveSeparatorRun(level, numberFontString, dpi, bodyFontSizePx) {
14
+ if (level.separator.length === 0)
15
+ return undefined;
16
+ const fontSizePx = dimensionToPx(level.fontSize, dpi, bodyFontSizePx);
17
+ const fontString = buildFontString(level.separatorFontFamily, fontSizePx, level.separatorFontWeight.toString(), level.separatorItalic ? 'italic' : 'normal');
18
+ const gapPx = dimensionToPx(level.separatorGap, dpi, bodyFontSizePx);
19
+ const color = level.separatorColor.hex;
20
+ if (fontString === numberFontString && color === level.color.hex && gapPx === 0)
21
+ return undefined;
22
+ return { fontString, color, gapPx };
23
+ }
4
24
  /**
5
25
  * Compute the effective indent in px for each list level. User-overridden
6
26
  * `indent` is honored directly. Otherwise level 1 falls back to the general
@@ -46,8 +66,15 @@ export function computeOrderedLevelIndentsPx(resolved, bodyFontSizePx, maxNumber
46
66
  const lists = resolved.orderedLists;
47
67
  return computeIndentCascade(lists.levels, dimensionToPx(lists.indent, dpi, bodyFontSizePx), dimensionToPx(lists.gap, dpi, bodyFontSizePx), dpi, bodyFontSizePx,
48
68
  // 1-based depth of the previous level = prevIndex + 1.
49
- (prev, prevFontString, prevIndex) => maxNumberWidthByDepth.get(prevIndex + 1)
50
- ?? measureGlyphWidth('99' + prev.separator, prevFontString));
69
+ (prev, prevFontString, prevIndex) => {
70
+ const measured = maxNumberWidthByDepth.get(prevIndex + 1);
71
+ if (measured !== undefined)
72
+ return measured;
73
+ const sep = resolveSeparatorRun(prev, prevFontString, dpi, bodyFontSizePx);
74
+ if (!sep)
75
+ return measureGlyphWidth('99' + prev.separator, prevFontString);
76
+ return measureGlyphWidth('99', prevFontString) + sep.gapPx + measureGlyphWidth(prev.separator, sep.fontString);
77
+ });
51
78
  }
52
79
  function toRoman(n) {
53
80
  if (n <= 0 || n >= 4000)
@@ -99,11 +126,10 @@ export function computeOrderedListRunMetrics(contentBlocks, resolved, bodyFontSi
99
126
  const perBlock = new Map();
100
127
  const maxWidthByDepth = new Map();
101
128
  const runsByDepth = new Map();
102
- // Pre-compute per-level font strings (used to measure number widths).
103
- const levelFontStrings = lists.levels.map((lvl) => {
104
- const fontSizePx = dimensionToPx(lvl.fontSize, dpi, bodyFontSizePx);
105
- return buildFontString(lvl.fontFamily, fontSizePx, lvl.fontWeight.toString(), lvl.italic ? 'italic' : 'normal');
106
- });
129
+ // Pre-compute per-level font strings (used to measure number widths) and
130
+ // the separator run style when it differs from the number's.
131
+ const levelFontStrings = lists.levels.map((lvl) => levelNumberFontString(lvl, dpi, bodyFontSizePx));
132
+ const levelSeparatorRuns = lists.levels.map((lvl, i) => resolveSeparatorRun(lvl, levelFontStrings[i], dpi, bodyFontSizePx));
107
133
  const closeRun = (depth) => {
108
134
  const run = runsByDepth.get(depth);
109
135
  if (!run || run.kind !== 'ordered' || run.itemIdxs.length === 0) {
@@ -112,6 +138,10 @@ export function computeOrderedListRunMetrics(contentBlocks, resolved, bodyFontSi
112
138
  }
113
139
  const levelIdx = Math.max(0, Math.min(levelFontStrings.length - 1, depth - 1));
114
140
  const fontString = levelFontStrings[levelIdx];
141
+ const sepRun = levelSeparatorRuns[levelIdx];
142
+ const separator = lists.levels[levelIdx].separator;
143
+ // The separator is the same string in the same font for the whole run.
144
+ const separatorWidthPx = sepRun ? measureGlyphWidth(separator, sepRun.fontString) : 0;
115
145
  let maxWidth = 0;
116
146
  const widths = new Map();
117
147
  for (const idx of run.itemIdxs) {
@@ -129,10 +159,14 @@ export function computeOrderedListRunMetrics(contentBlocks, resolved, bodyFontSi
129
159
  continue;
130
160
  entry.numberWidthPx = widths.get(idx) ?? 0;
131
161
  entry.maxNumberWidthPx = maxWidth;
162
+ if (sepRun)
163
+ entry.separatorWidthPx = separatorWidthPx;
132
164
  }
165
+ // Marker column = right-aligned numbers (+ gap + separator when split).
166
+ const markerWidth = sepRun ? maxWidth + sepRun.gapPx + separatorWidthPx : maxWidth;
133
167
  const prevDepthMax = maxWidthByDepth.get(depth) ?? 0;
134
- if (maxWidth > prevDepthMax)
135
- maxWidthByDepth.set(depth, maxWidth);
168
+ if (markerWidth > prevDepthMax)
169
+ maxWidthByDepth.set(depth, markerWidth);
136
170
  runsByDepth.delete(depth);
137
171
  };
138
172
  const closeAllRuns = () => {
@@ -170,8 +204,20 @@ export function computeOrderedListRunMetrics(contentBlocks, resolved, bodyFontSi
170
204
  run.itemIdxs.push(i);
171
205
  const levelIdx = Math.max(0, Math.min(lists.levels.length - 1, depth - 1));
172
206
  const levelCfg = lists.levels[levelIdx];
173
- const numberText = formatListNumber(counter, levelCfg.numberFormat) + levelCfg.separator;
174
- perBlock.set(i, { numberText, numberWidthPx: 0, maxNumberWidthPx: 0 });
207
+ const sepRun = levelSeparatorRuns[levelIdx];
208
+ const number = formatListNumber(counter, levelCfg.numberFormat);
209
+ perBlock.set(i, sepRun
210
+ ? {
211
+ numberText: number,
212
+ numberWidthPx: 0,
213
+ maxNumberWidthPx: 0,
214
+ separatorText: levelCfg.separator,
215
+ separatorFontString: sepRun.fontString,
216
+ separatorColor: sepRun.color,
217
+ separatorGapPx: sepRun.gapPx,
218
+ separatorWidthPx: 0,
219
+ }
220
+ : { numberText: number + levelCfg.separator, numberWidthPx: 0, maxNumberWidthPx: 0 });
175
221
  }
176
222
  }
177
223
  closeAllRuns();
@@ -236,10 +282,7 @@ export function resolveOrderedListItemStyle(depth, resolved, levelIndentsPx, met
236
282
  const lists = resolved.orderedLists;
237
283
  const levelIdx = Math.max(0, Math.min(lists.levels.length - 1, depth - 1));
238
284
  const levelConfig = lists.levels[levelIdx];
239
- const numberFontSizePx = dimensionToPx(levelConfig.fontSize, dpi, bodyStyle.fontSizePx);
240
- const numberWeight = levelConfig.fontWeight.toString();
241
- const numberStyle = levelConfig.italic ? 'italic' : 'normal';
242
- const numberFontString = buildFontString(levelConfig.fontFamily, numberFontSizePx, numberWeight, numberStyle);
285
+ const numberFontString = levelNumberFontString(levelConfig, dpi, bodyStyle.fontSizePx);
243
286
  const indentPx = levelIndentsPx[levelIdx] ?? 0;
244
287
  const gapPx = dimensionToPx(lists.gap, dpi, bodyStyle.fontSizePx);
245
288
  const itemSpacingPx = dimensionToPx(lists.itemSpacing, dpi, bodyStyle.fontSizePx);
@@ -249,6 +292,14 @@ export function resolveOrderedListItemStyle(depth, resolved, levelIndentsPx, met
249
292
  // Right-align: reserve max width so text starts after `indent + maxWidth + gap`.
250
293
  // The individual number is drawn at `indent + (maxWidth - thisWidth)`.
251
294
  const rightAlignOffsetPx = Math.max(0, metric.maxNumberWidthPx - metric.numberWidthPx);
295
+ // A distinct separator run follows the (right-aligned) number column, so
296
+ // it lands in the same column for every item of the run.
297
+ const separatorGapPx = metric.separatorGapPx ?? 0;
298
+ const separatorWidthPx = metric.separatorWidthPx ?? 0;
299
+ const hasSeparatorRun = metric.separatorText !== undefined;
300
+ const markerWidthPx = hasSeparatorRun
301
+ ? metric.maxNumberWidthPx + separatorGapPx + separatorWidthPx
302
+ : metric.maxNumberWidthPx;
252
303
  const text = {
253
304
  ...bodyStyle,
254
305
  marginTopPx,
@@ -263,13 +314,19 @@ export function resolveOrderedListItemStyle(depth, resolved, levelIndentsPx, met
263
314
  bulletColor: levelConfig.color.hex,
264
315
  // Report the MAX width so the common text-shift math (`indent + bulletWidth + gap`)
265
316
  // still carves out the full numbered column for every item in the run.
266
- bulletWidthPx: metric.maxNumberWidthPx,
317
+ bulletWidthPx: markerWidthPx,
267
318
  gapPx,
268
319
  hangingIndent: lists.hangingIndent,
269
320
  itemSpacingPx,
270
321
  textFontSizePx: bodyStyle.fontSizePx,
271
322
  verticalOffsetPx,
272
323
  };
324
+ if (hasSeparatorRun) {
325
+ bullet.separatorText = metric.separatorText;
326
+ bullet.separatorFontString = metric.separatorFontString;
327
+ bullet.separatorColor = metric.separatorColor;
328
+ bullet.separatorOffsetPx = metric.numberWidthPx + separatorGapPx;
329
+ }
273
330
  return {
274
331
  text,
275
332
  bullet,