postext 1.22.3 → 1.23.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 (288) hide show
  1. package/dist/__tests__/bundle.test.js +1 -1
  2. package/dist/__tests__/codeBlocks.test.d.ts +2 -0
  3. package/dist/__tests__/codeBlocks.test.d.ts.map +1 -0
  4. package/dist/__tests__/codeBlocks.test.js +550 -0
  5. package/dist/__tests__/codeBlocks.test.js.map +1 -0
  6. package/dist/__tests__/exports.test.js +19 -0
  7. package/dist/__tests__/exports.test.js.map +1 -1
  8. package/dist/__tests__/hardBreaks.test.d.ts +2 -0
  9. package/dist/__tests__/hardBreaks.test.d.ts.map +1 -0
  10. package/dist/__tests__/hardBreaks.test.js +226 -0
  11. package/dist/__tests__/hardBreaks.test.js.map +1 -0
  12. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  13. package/dist/__tests__/headingLetterSpacing.test.js +1 -1
  14. package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
  15. package/dist/__tests__/lineNumbers.test.d.ts +2 -0
  16. package/dist/__tests__/lineNumbers.test.d.ts.map +1 -0
  17. package/dist/__tests__/lineNumbers.test.js +304 -0
  18. package/dist/__tests__/lineNumbers.test.js.map +1 -0
  19. package/dist/__tests__/mathSizeMigration.test.js +2 -2
  20. package/dist/__tests__/paragraphDropCap.test.d.ts +2 -0
  21. package/dist/__tests__/paragraphDropCap.test.d.ts.map +1 -0
  22. package/dist/__tests__/paragraphDropCap.test.js +442 -0
  23. package/dist/__tests__/paragraphDropCap.test.js.map +1 -0
  24. package/dist/__tests__/paragraphStyleIndent.test.js +26 -2
  25. package/dist/__tests__/paragraphStyleIndent.test.js.map +1 -1
  26. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  27. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
  28. package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
  29. package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
  30. package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
  31. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
  32. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
  33. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
  34. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +7 -1
  35. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  36. package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
  37. package/dist/__tests__/tabStops.test.d.ts +2 -0
  38. package/dist/__tests__/tabStops.test.d.ts.map +1 -0
  39. package/dist/__tests__/tabStops.test.js +394 -0
  40. package/dist/__tests__/tabStops.test.js.map +1 -0
  41. package/dist/__tests__/verseLines.test.d.ts +2 -0
  42. package/dist/__tests__/verseLines.test.d.ts.map +1 -0
  43. package/dist/__tests__/verseLines.test.js +375 -0
  44. package/dist/__tests__/verseLines.test.js.map +1 -0
  45. package/dist/bundle/configVersion.d.ts +77 -7
  46. package/dist/bundle/configVersion.d.ts.map +1 -1
  47. package/dist/bundle/configVersion.js +239 -5
  48. package/dist/bundle/configVersion.js.map +1 -1
  49. package/dist/bundle/index.d.ts +1 -1
  50. package/dist/bundle/index.d.ts.map +1 -1
  51. package/dist/bundle/index.js +1 -1
  52. package/dist/bundle/index.js.map +1 -1
  53. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  54. package/dist/canvas-backend/blockRender.js +39 -5
  55. package/dist/canvas-backend/blockRender.js.map +1 -1
  56. package/dist/canvas-backend/index.d.ts.map +1 -1
  57. package/dist/canvas-backend/index.js +3 -0
  58. package/dist/canvas-backend/index.js.map +1 -1
  59. package/dist/cjkMarks.js +1 -1
  60. package/dist/cjkMarks.js.map +1 -1
  61. package/dist/code/highlight.d.ts +34 -0
  62. package/dist/code/highlight.d.ts.map +1 -0
  63. package/dist/code/highlight.js +406 -0
  64. package/dist/code/highlight.js.map +1 -0
  65. package/dist/configWarnings.d.ts.map +1 -1
  66. package/dist/configWarnings.js +192 -3
  67. package/dist/configWarnings.js.map +1 -1
  68. package/dist/defaults/bodyText.d.ts.map +1 -1
  69. package/dist/defaults/bodyText.js +25 -0
  70. package/dist/defaults/bodyText.js.map +1 -1
  71. package/dist/defaults/calloutStyles.d.ts.map +1 -1
  72. package/dist/defaults/calloutStyles.js +7 -0
  73. package/dist/defaults/calloutStyles.js.map +1 -1
  74. package/dist/defaults/codeStyle.d.ts +29 -0
  75. package/dist/defaults/codeStyle.d.ts.map +1 -0
  76. package/dist/defaults/codeStyle.js +284 -0
  77. package/dist/defaults/codeStyle.js.map +1 -0
  78. package/dist/defaults/dropCap.d.ts +49 -0
  79. package/dist/defaults/dropCap.d.ts.map +1 -0
  80. package/dist/defaults/dropCap.js +66 -0
  81. package/dist/defaults/dropCap.js.map +1 -0
  82. package/dist/defaults/headings.d.ts +1 -1
  83. package/dist/defaults/headings.d.ts.map +1 -1
  84. package/dist/defaults/headings.js +11 -0
  85. package/dist/defaults/headings.js.map +1 -1
  86. package/dist/defaults/index.d.ts +3 -0
  87. package/dist/defaults/index.d.ts.map +1 -1
  88. package/dist/defaults/index.js +19 -0
  89. package/dist/defaults/index.js.map +1 -1
  90. package/dist/defaults/lineNumbers.d.ts +19 -0
  91. package/dist/defaults/lineNumbers.d.ts.map +1 -0
  92. package/dist/defaults/lineNumbers.js +101 -0
  93. package/dist/defaults/lineNumbers.js.map +1 -0
  94. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  95. package/dist/defaults/paragraphStyles.js +20 -0
  96. package/dist/defaults/paragraphStyles.js.map +1 -1
  97. package/dist/defaults/tabStops.d.ts +29 -0
  98. package/dist/defaults/tabStops.d.ts.map +1 -0
  99. package/dist/defaults/tabStops.js +94 -0
  100. package/dist/defaults/tabStops.js.map +1 -0
  101. package/dist/defaults/verse.d.ts +10 -0
  102. package/dist/defaults/verse.d.ts.map +1 -0
  103. package/dist/defaults/verse.js +52 -0
  104. package/dist/defaults/verse.js.map +1 -0
  105. package/dist/fonts/usage.d.ts +7 -0
  106. package/dist/fonts/usage.d.ts.map +1 -1
  107. package/dist/fonts/usage.js +71 -0
  108. package/dist/fonts/usage.js.map +1 -1
  109. package/dist/html-backend.d.ts.map +1 -1
  110. package/dist/html-backend.js +85 -11
  111. package/dist/html-backend.js.map +1 -1
  112. package/dist/index.d.ts +8 -5
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +4 -2
  115. package/dist/index.js.map +1 -1
  116. package/dist/measure/bidiLines.js +2 -2
  117. package/dist/measure/bidiLines.js.map +1 -1
  118. package/dist/measure/cache.js +2 -2
  119. package/dist/measure/cache.js.map +1 -1
  120. package/dist/measure/cjkCompose.d.ts.map +1 -1
  121. package/dist/measure/cjkCompose.js +5 -5
  122. package/dist/measure/cjkCompose.js.map +1 -1
  123. package/dist/measure/hardBreaks.d.ts +46 -0
  124. package/dist/measure/hardBreaks.d.ts.map +1 -0
  125. package/dist/measure/hardBreaks.js +216 -0
  126. package/dist/measure/hardBreaks.js.map +1 -0
  127. package/dist/measure/index.d.ts +1 -0
  128. package/dist/measure/index.d.ts.map +1 -1
  129. package/dist/measure/index.js +1 -0
  130. package/dist/measure/index.js.map +1 -1
  131. package/dist/measure/leader.d.ts +20 -0
  132. package/dist/measure/leader.d.ts.map +1 -0
  133. package/dist/measure/leader.js +46 -0
  134. package/dist/measure/leader.js.map +1 -0
  135. package/dist/measure/links.js +1 -1
  136. package/dist/measure/links.js.map +1 -1
  137. package/dist/measure/plain.d.ts.map +1 -1
  138. package/dist/measure/plain.js +18 -25
  139. package/dist/measure/plain.js.map +1 -1
  140. package/dist/measure/rich.d.ts +19 -0
  141. package/dist/measure/rich.d.ts.map +1 -1
  142. package/dist/measure/rich.js +211 -38
  143. package/dist/measure/rich.js.map +1 -1
  144. package/dist/measure/tabs.d.ts +103 -0
  145. package/dist/measure/tabs.d.ts.map +1 -0
  146. package/dist/measure/tabs.js +123 -0
  147. package/dist/measure/tabs.js.map +1 -0
  148. package/dist/measure/types.d.ts +26 -2
  149. package/dist/measure/types.d.ts.map +1 -1
  150. package/dist/measure/types.js +23 -3
  151. package/dist/measure/types.js.map +1 -1
  152. package/dist/parse/blockParser.d.ts +13 -6
  153. package/dist/parse/blockParser.d.ts.map +1 -1
  154. package/dist/parse/blockParser.js +457 -87
  155. package/dist/parse/blockParser.js.map +1 -1
  156. package/dist/parse/codeFence.d.ts +18 -0
  157. package/dist/parse/codeFence.d.ts.map +1 -0
  158. package/dist/parse/codeFence.js +52 -0
  159. package/dist/parse/codeFence.js.map +1 -0
  160. package/dist/parse/index.d.ts +1 -1
  161. package/dist/parse/index.d.ts.map +1 -1
  162. package/dist/parse/index.js.map +1 -1
  163. package/dist/parse/indexMarks.d.ts +3 -1
  164. package/dist/parse/indexMarks.d.ts.map +1 -1
  165. package/dist/parse/indexMarks.js +22 -2
  166. package/dist/parse/indexMarks.js.map +1 -1
  167. package/dist/parse/inlineFormatting.d.ts +50 -0
  168. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  169. package/dist/parse/inlineFormatting.js +94 -0
  170. package/dist/parse/inlineFormatting.js.map +1 -1
  171. package/dist/parse/sourceMapping.d.ts.map +1 -1
  172. package/dist/parse/sourceMapping.js +65 -1
  173. package/dist/parse/sourceMapping.js.map +1 -1
  174. package/dist/parse/types.d.ts +144 -9
  175. package/dist/parse/types.d.ts.map +1 -1
  176. package/dist/pipeline/build.d.ts.map +1 -1
  177. package/dist/pipeline/build.js +143 -18
  178. package/dist/pipeline/build.js.map +1 -1
  179. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  180. package/dist/pipeline/buildBlockKind.js +60 -1
  181. package/dist/pipeline/buildBlockKind.js.map +1 -1
  182. package/dist/pipeline/buildHelpers.d.ts +3 -0
  183. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  184. package/dist/pipeline/buildHelpers.js +7 -2
  185. package/dist/pipeline/buildHelpers.js.map +1 -1
  186. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  187. package/dist/pipeline/calloutLayout.js +33 -2
  188. package/dist/pipeline/calloutLayout.js.map +1 -1
  189. package/dist/pipeline/chips.d.ts.map +1 -1
  190. package/dist/pipeline/chips.js +4 -0
  191. package/dist/pipeline/chips.js.map +1 -1
  192. package/dist/pipeline/codeBlocks.d.ts +38 -0
  193. package/dist/pipeline/codeBlocks.d.ts.map +1 -0
  194. package/dist/pipeline/codeBlocks.js +146 -0
  195. package/dist/pipeline/codeBlocks.js.map +1 -0
  196. package/dist/pipeline/codeInline.d.ts +22 -0
  197. package/dist/pipeline/codeInline.d.ts.map +1 -0
  198. package/dist/pipeline/codeInline.js +93 -0
  199. package/dist/pipeline/codeInline.js.map +1 -0
  200. package/dist/pipeline/codeLines.d.ts +91 -0
  201. package/dist/pipeline/codeLines.d.ts.map +1 -0
  202. package/dist/pipeline/codeLines.js +399 -0
  203. package/dist/pipeline/codeLines.js.map +1 -0
  204. package/dist/pipeline/config.d.ts.map +1 -1
  205. package/dist/pipeline/config.js +8 -1
  206. package/dist/pipeline/config.js.map +1 -1
  207. package/dist/pipeline/contentWarnings.d.ts +9 -0
  208. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  209. package/dist/pipeline/contentWarnings.js +60 -2
  210. package/dist/pipeline/contentWarnings.js.map +1 -1
  211. package/dist/pipeline/continuation.d.ts.map +1 -1
  212. package/dist/pipeline/continuation.js +9 -2
  213. package/dist/pipeline/continuation.js.map +1 -1
  214. package/dist/pipeline/dropCap.d.ts +128 -0
  215. package/dist/pipeline/dropCap.d.ts.map +1 -0
  216. package/dist/pipeline/dropCap.js +412 -0
  217. package/dist/pipeline/dropCap.js.map +1 -0
  218. package/dist/pipeline/hardBreaks.d.ts +19 -0
  219. package/dist/pipeline/hardBreaks.d.ts.map +1 -0
  220. package/dist/pipeline/hardBreaks.js +36 -0
  221. package/dist/pipeline/hardBreaks.js.map +1 -0
  222. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  223. package/dist/pipeline/headerFooter.js +4 -1
  224. package/dist/pipeline/headerFooter.js.map +1 -1
  225. package/dist/pipeline/lineNumbers.d.ts +37 -0
  226. package/dist/pipeline/lineNumbers.d.ts.map +1 -0
  227. package/dist/pipeline/lineNumbers.js +441 -0
  228. package/dist/pipeline/lineNumbers.js.map +1 -0
  229. package/dist/pipeline/measureContentBlock.d.ts +31 -5
  230. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  231. package/dist/pipeline/measureContentBlock.js +274 -68
  232. package/dist/pipeline/measureContentBlock.js.map +1 -1
  233. package/dist/pipeline/partPalette.d.ts +1 -1
  234. package/dist/pipeline/partPalette.d.ts.map +1 -1
  235. package/dist/pipeline/partPalette.js +24 -2
  236. package/dist/pipeline/partPalette.js.map +1 -1
  237. package/dist/pipeline/styles.d.ts +18 -2
  238. package/dist/pipeline/styles.d.ts.map +1 -1
  239. package/dist/pipeline/styles.js +15 -3
  240. package/dist/pipeline/styles.js.map +1 -1
  241. package/dist/pipeline/tabs.d.ts +35 -0
  242. package/dist/pipeline/tabs.d.ts.map +1 -0
  243. package/dist/pipeline/tabs.js +99 -0
  244. package/dist/pipeline/tabs.js.map +1 -0
  245. package/dist/pipeline/toc.d.ts.map +1 -1
  246. package/dist/pipeline/toc.js +3 -38
  247. package/dist/pipeline/toc.js.map +1 -1
  248. package/dist/pipeline/verseLines.d.ts +78 -0
  249. package/dist/pipeline/verseLines.d.ts.map +1 -0
  250. package/dist/pipeline/verseLines.js +245 -0
  251. package/dist/pipeline/verseLines.js.map +1 -0
  252. package/dist/preflight.d.ts.map +1 -1
  253. package/dist/preflight.js +1 -0
  254. package/dist/preflight.js.map +1 -1
  255. package/dist/types.d.ts +560 -4
  256. package/dist/types.d.ts.map +1 -1
  257. package/dist/vdt.d.ts +240 -7
  258. package/dist/vdt.d.ts.map +1 -1
  259. package/dist/vdt.js +6 -0
  260. package/dist/vdt.js.map +1 -1
  261. package/dist/word/docxRead.d.ts.map +1 -1
  262. package/dist/word/docxRead.js +15 -0
  263. package/dist/word/docxRead.js.map +1 -1
  264. package/dist/word/inline.d.ts +6 -1
  265. package/dist/word/inline.d.ts.map +1 -1
  266. package/dist/word/inline.js +35 -1
  267. package/dist/word/inline.js.map +1 -1
  268. package/dist/word/model.d.ts +14 -0
  269. package/dist/word/model.d.ts.map +1 -1
  270. package/dist/word/model.js.map +1 -1
  271. package/dist/word/template.d.ts +12 -3
  272. package/dist/word/template.d.ts.map +1 -1
  273. package/dist/word/template.js +13 -3
  274. package/dist/word/template.js.map +1 -1
  275. package/dist/word/toDocx.d.ts.map +1 -1
  276. package/dist/word/toDocx.js +52 -8
  277. package/dist/word/toDocx.js.map +1 -1
  278. package/dist/word/toMarkdown.d.ts +5 -1
  279. package/dist/word/toMarkdown.d.ts.map +1 -1
  280. package/dist/word/toMarkdown.js +117 -6
  281. package/dist/word/toMarkdown.js.map +1 -1
  282. package/dist/word/word.test.js +124 -2
  283. package/dist/word/word.test.js.map +1 -1
  284. package/dist/worker/fonts.d.ts +2 -1
  285. package/dist/worker/fonts.d.ts.map +1 -1
  286. package/dist/worker/fonts.js +6 -2
  287. package/dist/worker/fonts.js.map +1 -1
  288. package/package.json +1 -1
@@ -0,0 +1,441 @@
1
+ // Line numbers in the margin (#621). A pass over the finished layout:
2
+ // once a pass has placed every line and stamped its page labels, the
3
+ // lines are walked in reading order (page by page, column by column, top
4
+ // to bottom), counted, and every Nth one gets its number in a design slot
5
+ // of its page (`VDTPage.lineNumbers`). The numbers are painted where the
6
+ // layout leaves room for them and never move a line, so balancing and
7
+ // re-breaks cannot invalidate them: each pass counts its own layout.
8
+ //
9
+ // What is counted (`lineNumbers.count`):
10
+ // - `'verse'`: the lines of `:::verse` poems, once per line of verse — a
11
+ // turnover (`VDTLine.verseLine.turnover`, the ʿajuz of a staggered
12
+ // bayt) takes no number;
13
+ // - `'all'`: every line of body paragraphs, list items, quotations and
14
+ // verse.
15
+ // Never: headings, captions, tables and pictures, display maths, design
16
+ // text, notes, the contents and the index, and the text of a callout —
17
+ // unless the paragraph style the text is set in says `lineNumbers: true`
18
+ // (a style with `lineNumbers: false` is never counted).
19
+ //
20
+ // The count starts again at `lineNumbers.restart` (a chapter, a section,
21
+ // a page, a poem), at a `:::numbering{lines=N}` directive, and at a poem
22
+ // whose fence sets `lineStart=N`.
23
+ import { createBoundingBox, flowRectToPage, pageIsVertical, } from '../vdt';
24
+ import { buildFontString } from '../measure';
25
+ import { measureTextWidth } from '../measure/canvas';
26
+ import { dimensionToPx } from '../units';
27
+ import { formatNumeral, parseNumberFormat } from '../numbering';
28
+ import { isRtlScriptChar } from '../bidi';
29
+ import { resolvedLocale } from './config';
30
+ /** A whole number ≥ `min` written in a directive attribute. */
31
+ function wholeAttr(value, min) {
32
+ if (value === undefined)
33
+ return undefined;
34
+ const n = Number(value.trim());
35
+ return Number.isInteger(n) && n >= min ? n : undefined;
36
+ }
37
+ /** The numbering a poem's fence asks for. */
38
+ export function poemNumbering(attrs) {
39
+ const numbered = attrs?.numbered?.trim().toLowerCase();
40
+ const interval = wholeAttr(attrs?.interval, 1);
41
+ const lineStart = wholeAttr(attrs?.lineStart, 0);
42
+ return {
43
+ numbered: numbered !== 'false' && numbered !== 'no' && numbered !== '0',
44
+ ...(interval !== undefined ? { interval } : {}),
45
+ ...(lineStart !== undefined ? { lineStart } : {}),
46
+ };
47
+ }
48
+ /** The poem a content block sets, as numbered in the document (bayt
49
+ * poems, one block each, are numbered after their index). */
50
+ function poemKey(block, index) {
51
+ return block.verse?.stanza ? block.verse.stanza.poem : -1 - index;
52
+ }
53
+ /** Whether a content block opens a poem. */
54
+ function opensPoem(block) {
55
+ return block.verse !== undefined && (block.verse.stanza === undefined || block.verse.stanza.index === 0);
56
+ }
57
+ /** The events of `blocks`, by content index. */
58
+ function lineCountEvents(blocks) {
59
+ const events = new Map();
60
+ const push = (i, e) => {
61
+ const list = events.get(i);
62
+ if (list)
63
+ list.push(e);
64
+ else
65
+ events.set(i, [e]);
66
+ };
67
+ blocks.forEach((b, i) => {
68
+ if (b.type === 'heading' && b.level)
69
+ push(i, { kind: 'heading', level: b.level });
70
+ else if (b.type === 'directive' && b.directiveName === 'numbering') {
71
+ const next = wholeAttr(b.directiveAttrs?.lines, 0);
72
+ if (next !== undefined)
73
+ push(i, { kind: 'numbering', next });
74
+ }
75
+ else if (opensPoem(b)) {
76
+ const { lineStart } = poemNumbering(b.verse.attrs);
77
+ push(i, { kind: 'poem', poem: poemKey(b, i), ...(lineStart !== undefined ? { lineStart } : {}) });
78
+ }
79
+ });
80
+ return events;
81
+ }
82
+ /** The running count: the last number given, whether the next counted
83
+ * line is the first after a restart, and whether the count restarted. */
84
+ class LineCounter {
85
+ cfg;
86
+ value;
87
+ fresh;
88
+ restarted = false;
89
+ constructor(cfg, inherited) {
90
+ this.cfg = cfg;
91
+ const continues = inherited !== undefined && cfg.restart !== 'page' && cfg.restart !== 'poem';
92
+ this.value = continues ? inherited : cfg.startAt - 1;
93
+ this.fresh = !continues;
94
+ if (!continues && inherited !== undefined)
95
+ this.restarted = true;
96
+ }
97
+ /** Start again so that the next line is numbered `next`. */
98
+ restart(next = this.cfg.startAt) {
99
+ this.value = next - 1;
100
+ this.fresh = true;
101
+ this.restarted = true;
102
+ }
103
+ apply(e) {
104
+ if (e.kind === 'numbering')
105
+ this.restart(e.next);
106
+ else if (e.kind === 'heading') {
107
+ if ((this.cfg.restart === 'chapter' && e.level === 1) || (this.cfg.restart === 'section' && e.level <= 2))
108
+ this.restart();
109
+ }
110
+ else if (e.lineStart !== undefined)
111
+ this.restart(e.lineStart);
112
+ else if (this.cfg.restart === 'poem')
113
+ this.restart();
114
+ }
115
+ /** Count one line: its number, and whether it is printed. */
116
+ next(interval) {
117
+ this.value += 1;
118
+ const first = this.fresh;
119
+ this.fresh = false;
120
+ return { n: this.value, printed: this.value % interval === 0 || (first && this.cfg.numberFirst) };
121
+ }
122
+ }
123
+ /** Whether the text of a paragraph style is counted: its own
124
+ * `lineNumbers`, else `fallback`. */
125
+ function styleCounts(resolved, styleId, fallback) {
126
+ if (!styleId)
127
+ return fallback;
128
+ const own = resolved.paragraphStyles.find((s) => s.id === styleId)?.lineNumbers;
129
+ return own ?? fallback;
130
+ }
131
+ /** Blocks whose lines are never counted. */
132
+ function neverCounted(block) {
133
+ return block.type === 'heading' || block.type === 'resource' || block.type === 'mathDisplay' || block.type === 'callout'
134
+ || block.hidden === true || block.designOverlay !== undefined
135
+ || block.footnoteNote !== undefined || block.tocEntry !== undefined || block.tocPart !== undefined
136
+ || block.indexLevel !== undefined || block.bibEntry !== undefined || block.comic !== undefined;
137
+ }
138
+ /** How the lines of `block` are counted: not at all, as verse (a line of
139
+ * verse once, its turnovers not), or line by line (prose). */
140
+ function blockCounting(block, raw, resolved, cfg) {
141
+ if (neverCounted(block))
142
+ return 'none';
143
+ const styleId = block.paragraphStyleId;
144
+ // A box's text is counted only when its style opts in.
145
+ if (block.containerId !== undefined) {
146
+ if (!styleCounts(resolved, styleId, false))
147
+ return 'none';
148
+ return raw?.verse ? 'verse' : 'prose';
149
+ }
150
+ if (raw?.verse) {
151
+ if (!poemNumbering(raw.verse.attrs).numbered)
152
+ return 'none';
153
+ return styleCounts(resolved, styleId, true) ? 'verse' : 'none';
154
+ }
155
+ return styleCounts(resolved, styleId, cfg.count === 'all') ? 'prose' : 'none';
156
+ }
157
+ /** Whether a line of a poem takes a number: a line of verse, not a
158
+ * turnover or the second line of a staggered bayt. */
159
+ function isLineOfVerse(line) {
160
+ if (line.verseLine)
161
+ return !line.verseLine.turnover;
162
+ if (line.verse)
163
+ return line.verse.part !== 'ajuz';
164
+ return false;
165
+ }
166
+ /** The overlaps of side-column numbers with floats, per document. */
167
+ const overlapWarnings = new WeakMap();
168
+ /** The `lineNumberOverlap` warnings of the last pass laid out as `doc`. */
169
+ export function lineNumberWarnings(doc) {
170
+ return overlapWarnings.get(doc) ?? [];
171
+ }
172
+ /**
173
+ * Count the lines of `doc` and set the numbers of the printed ones in
174
+ * `page.lineNumbers` (with `page.lineNumberMarks`), and the last number in
175
+ * `doc.lastLineNumber`. `blocks` are the parsed content blocks the layout
176
+ * was built from (`VDTBlock.contentIndex` points into them);
177
+ * `continuation.lineNumber` is the number the count goes on from. A
178
+ * vertical document gets no numbers.
179
+ */
180
+ export function buildLineNumbers(doc, blocks, continuation) {
181
+ const resolved = doc.config;
182
+ const cfg = resolved.lineNumbers;
183
+ if (!cfg?.enabled || resolved.layout.writingMode === 'vertical-rl')
184
+ return;
185
+ const dpi = resolved.page.dpi;
186
+ const bodyPx = dimensionToPx(resolved.bodyText.fontSize, dpi);
187
+ const sizePx = dimensionToPx(cfg.fontSize, dpi, bodyPx);
188
+ const gapPx = dimensionToPx(cfg.gap, dpi, sizePx);
189
+ const font = buildFontString(cfg.fontFamily, sizePx, cfg.fontWeight === 400 ? 'normal' : String(cfg.fontWeight), cfg.italic ? 'italic' : 'normal');
190
+ const style = parseNumberFormat(cfg.format, resolvedLocale(resolved)) ?? 'decimal';
191
+ const events = lineCountEvents(blocks);
192
+ const eventIndices = [...events.keys()].sort((a, b) => a - b);
193
+ let nextEvent = 0;
194
+ const counter = new LineCounter(cfg, continuation?.lineNumber);
195
+ const poems = new Map();
196
+ const warnings = [];
197
+ const offset = doc.pageIndexOffset ?? 0;
198
+ for (const page of doc.pages) {
199
+ if (pageIsVertical(page))
200
+ continue;
201
+ if (cfg.restart === 'page')
202
+ counter.restart();
203
+ const pending = [];
204
+ for (const column of page.columns) {
205
+ if (column.kind === 'side')
206
+ continue;
207
+ for (const block of column.blocks) {
208
+ const c = block.contentIndex;
209
+ if (c !== undefined) {
210
+ while (nextEvent < eventIndices.length && eventIndices[nextEvent] <= c) {
211
+ for (const e of events.get(eventIndices[nextEvent]))
212
+ counter.apply(e);
213
+ nextEvent++;
214
+ }
215
+ }
216
+ const raw = c !== undefined ? blocks[c] : undefined;
217
+ const counting = blockCounting(block, raw, resolved, cfg);
218
+ if (counting === 'none')
219
+ continue;
220
+ let interval = cfg.interval;
221
+ if (raw?.verse) {
222
+ const key = poemKey(raw, c);
223
+ let poem = poems.get(key);
224
+ if (!poem) {
225
+ poem = poemNumbering(raw.verse.attrs);
226
+ poems.set(key, poem);
227
+ }
228
+ interval = poem.interval ?? interval;
229
+ }
230
+ block.lines.forEach((line, lineIndex) => {
231
+ if (counting === 'verse' ? !isLineOfVerse(line) : line.text.length === 0 && !line.segments?.length)
232
+ return;
233
+ const { n, printed } = counter.next(interval);
234
+ if (!printed)
235
+ return;
236
+ pending.push({
237
+ mark: { number: n, label: formatNumeral(n, style, resolved.numerals), columnIndex: column.index, blockId: block.id, lineIndex },
238
+ baseline: line.baseline,
239
+ column,
240
+ line,
241
+ block,
242
+ });
243
+ });
244
+ }
245
+ }
246
+ if (pending.length > 0)
247
+ placeNumbers(page, pending, { cfg, resolved, font, sizePx, gapPx, offset, warnings });
248
+ }
249
+ doc.lastLineNumber = counter.value;
250
+ if (counter.restarted)
251
+ doc.lineNumberRestarted = true;
252
+ if (warnings.length > 0)
253
+ overlapWarnings.set(doc, warnings);
254
+ }
255
+ /** The physical side of a column the numbers of `position` stand on
256
+ * (`'side'` is placed apart). */
257
+ function sideFor(position, page, ctx) {
258
+ const recto = (page.index + ctx.offset) % 2 === 0;
259
+ const outerRight = recto !== (ctx.resolved.page.binding === 'right');
260
+ const rtl = ctx.resolved.direction === 'rtl';
261
+ switch (position) {
262
+ case 'left': return 'left';
263
+ case 'right': return 'right';
264
+ case 'inner': return outerRight ? 'left' : 'right';
265
+ case 'start': return rtl ? 'right' : 'left';
266
+ case 'end': return rtl ? 'left' : 'right';
267
+ default: return outerRight ? 'right' : 'left';
268
+ }
269
+ }
270
+ /** Set the numbers of one page in its slot. */
271
+ function placeNumbers(page, pending, ctx) {
272
+ const { cfg, font, sizePx, gapPx } = ctx;
273
+ const widths = pending.map((p) => measureTextWidth(p.mark.label, font));
274
+ const widest = Math.max(...widths);
275
+ const ascent = sizePx * 0.8;
276
+ const physical = new Map();
277
+ const rectOf = (col) => {
278
+ let r = physical.get(col);
279
+ if (!r) {
280
+ r = flowRectToPage(page, col.bbox);
281
+ physical.set(col, r);
282
+ }
283
+ return r;
284
+ };
285
+ const sideColumns = page.columns.filter((c) => c.kind === 'side');
286
+ // Text columns side by side in one band.
287
+ const bandColumns = (col) => page.columns
288
+ .filter((c) => (c.kind ?? 'text') === 'text' && (c.band ?? 0) === (col.band ?? 0))
289
+ .sort((a, b) => rectOf(a).x - rectOf(b).x);
290
+ const sideRule = (col) => {
291
+ const base = sideFor(cfg.position === 'side' ? 'outer' : cfg.position, page, ctx);
292
+ if ((col.kind ?? 'text') !== 'text')
293
+ return base;
294
+ const band = bandColumns(col);
295
+ if (band.length < 2)
296
+ return base;
297
+ const at = band.indexOf(col);
298
+ if (cfg.multiColumn === 'gutter')
299
+ return at === 0 ? 'right' : 'left';
300
+ if (cfg.multiColumn === 'outer-edges') {
301
+ if (at === 0)
302
+ return 'left';
303
+ if (at === band.length - 1)
304
+ return 'right';
305
+ }
306
+ return base;
307
+ };
308
+ // The side column beside a text column, when numbers go there.
309
+ const sideColumnOf = (col, baseline) => {
310
+ if (cfg.position !== 'side' || sideColumns.length === 0)
311
+ return undefined;
312
+ return sideColumns.find((s) => {
313
+ const r = rectOf(s);
314
+ return baseline >= r.y && baseline <= r.y + r.height;
315
+ }) ?? sideColumns.find((s) => (s.band ?? 0) === (col.band ?? 0)) ?? sideColumns[0];
316
+ };
317
+ const floats = cfg.position === 'side'
318
+ ? [...(page.floats ?? []), ...sideColumns.flatMap((s) => s.blocks)].map((b) => ({ block: b, rect: flowRectToPage(page, b.bbox) }))
319
+ : [];
320
+ const textBlocks = [];
321
+ const marks = [];
322
+ pending.forEach((p, i) => {
323
+ const w = widths[i];
324
+ const col = rectOf(p.column);
325
+ const side = sideColumnOf(p.column, p.baseline);
326
+ let x;
327
+ if (side) {
328
+ const s = rectOf(side);
329
+ if (s.x >= col.x) {
330
+ // The side column on the right: flush with its left edge.
331
+ x = cfg.align === 'right' ? s.x + widest - w : s.x;
332
+ }
333
+ else {
334
+ const edge = s.x + s.width;
335
+ x = cfg.align === 'left' ? edge - widest : edge - w;
336
+ }
337
+ }
338
+ else if (sideRule(p.column) === 'left') {
339
+ const edge = col.x - gapPx;
340
+ x = cfg.align === 'left' ? edge - widest : edge - w;
341
+ }
342
+ else {
343
+ const edge = col.x + col.width + gapPx;
344
+ x = cfg.align === 'right' ? edge + widest - w : edge;
345
+ }
346
+ const bbox = createBoundingBox(x, p.baseline - ascent, w, sizePx);
347
+ if (side) {
348
+ const hit = floats.find((f) => f.rect.x < bbox.x + bbox.width && bbox.x < f.rect.x + f.rect.width
349
+ && f.rect.y < bbox.y + bbox.height && bbox.y < f.rect.y + f.rect.height);
350
+ if (hit) {
351
+ const start = p.line.sourceStart ?? p.block.sourceStart;
352
+ const end = p.line.sourceEnd ?? p.block.sourceEnd;
353
+ ctx.warnings.push({
354
+ kind: 'lineNumberOverlap',
355
+ number: p.mark.label,
356
+ pageIndex: page.index,
357
+ ...(start !== undefined && end !== undefined ? { sourceStart: start, sourceEnd: end } : {}),
358
+ });
359
+ }
360
+ }
361
+ const label = p.mark.label;
362
+ const rtl = [...label].some((ch) => isRtlScriptChar(ch.codePointAt(0)));
363
+ textBlocks.push({
364
+ kind: 'text',
365
+ bbox,
366
+ fontString: font,
367
+ color: cfg.color.hex,
368
+ lines: [{
369
+ text: label,
370
+ xOffset: 0,
371
+ baselineY: p.baseline,
372
+ width: w,
373
+ ...(rtl ? { runs: [{ text: label, fontString: font, width: w, rtl: true }] } : {}),
374
+ }],
375
+ clip: false,
376
+ artifact: true,
377
+ ...(rtl ? { direction: 'rtl' } : {}),
378
+ });
379
+ marks.push(p.mark);
380
+ });
381
+ const left = Math.min(...textBlocks.map((b) => b.bbox.x));
382
+ const top = Math.min(...textBlocks.map((b) => b.bbox.y));
383
+ const right = Math.max(...textBlocks.map((b) => b.bbox.x + b.bbox.width));
384
+ const bottom = Math.max(...textBlocks.map((b) => b.bbox.y + b.bbox.height));
385
+ page.lineNumbers = { bbox: createBoundingBox(left, top, right - left, bottom - top), blocks: textBlocks };
386
+ page.lineNumberMarks = marks;
387
+ }
388
+ /** Recolour the numbers of the pages whose part or section palette
389
+ * overrides the entry `lineNumbers.color` links to. */
390
+ export function recolorLineNumbers(doc, palettes) {
391
+ const linked = doc.config.lineNumbers?.color.paletteId;
392
+ if (!linked)
393
+ return;
394
+ for (const page of doc.pages) {
395
+ const hex = palettes[page.index]?.[linked];
396
+ if (!hex || !page.lineNumbers)
397
+ continue;
398
+ for (const b of page.lineNumbers.blocks)
399
+ if (b.kind === 'text')
400
+ b.color = hex;
401
+ }
402
+ }
403
+ /**
404
+ * The number of the last line of verse in `blocks` (#621), counted from
405
+ * `before` as the layout counts it, when `lineNumbers` counts verse: a
406
+ * book laid out one chapter at a time hands it on (`continuationAfter`).
407
+ * Undefined when the count does not depend on the text alone (line
408
+ * numbers off, or every line counted, which only the layout knows), so
409
+ * the caller keeps what it had.
410
+ */
411
+ export function lastVerseLineNumber(blocks, resolved, before) {
412
+ const cfg = resolved.lineNumbers;
413
+ if (!cfg?.enabled || cfg.count !== 'verse' || cfg.restart === 'page' || resolved.layout.writingMode === 'vertical-rl')
414
+ return undefined;
415
+ // Prose styles that opt in are counted line by line: only the layout
416
+ // knows their lines.
417
+ if (resolved.paragraphStyles.some((s) => s.lineNumbers === true))
418
+ return undefined;
419
+ const counter = new LineCounter(cfg, before);
420
+ const events = lineCountEvents(blocks);
421
+ let insideBox = 0;
422
+ blocks.forEach((b, i) => {
423
+ for (const e of events.get(i) ?? [])
424
+ counter.apply(e);
425
+ if (b.type === 'containerStart' && b.containerName === 'callout')
426
+ insideBox++;
427
+ else if (b.type === 'containerEnd' && b.containerName === 'callout')
428
+ insideBox = Math.max(0, insideBox - 1);
429
+ if (!b.verse || !poemNumbering(b.verse.attrs).numbered)
430
+ return;
431
+ // A poem in a box is counted only when its style opts in.
432
+ const styleId = b.verse.attrs.style?.trim();
433
+ if (!styleCounts(resolved, styleId, insideBox === 0))
434
+ return;
435
+ const lines = b.verse.stanza ? b.verse.stanza.lines.length : b.text.split('\n').filter((l) => l.trim().length > 0).length;
436
+ for (let k = 0; k < lines; k++)
437
+ counter.next(1);
438
+ });
439
+ return counter.value;
440
+ }
441
+ //# sourceMappingURL=lineNumbers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineNumbers.js","sourceRoot":"","sources":["../../src/pipeline/lineNumbers.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ import { type BlockKind, type BlockKindContext } from './buildBlockKind';
17
17
  import { type AnchorRefContext } from './resourceLayout';
18
18
  import type { ResourceNumberingMap } from './resourceNumbering';
19
19
  import type { CaptionCitations } from './citations';
20
+ import { type MeasuredDropCap } from './dropCap';
21
+ import type { VDTBlock } from '../vdt';
20
22
  /** Everything `measureContentBlock` needs that is constant across one
21
23
  * placement pass. Built once before the loop; `blockIdx` and the paragraph
22
24
  * style override are per-call (see `measureContentBlock` arguments). */
@@ -52,6 +54,17 @@ export interface BlockMeasureContext extends Omit<BlockKindContext, 'blockIdx' |
52
54
  * script (Arabic…), which is set without it. The build reports them
53
55
  * (`joiningScriptLetterSpacing`). */
54
56
  joiningLetterSpacing?: Set<number>;
57
+ /** Filled by the measurement: the content indices of the paragraphs a
58
+ * drop cap was meant to open and could not as configured (#623), and
59
+ * why; the build reports them (`dropCap` content warnings). */
60
+ dropCapNotes?: Map<number, DropCapNote>;
61
+ }
62
+ /** Why a paragraph's drop cap was not set as configured (see
63
+ * `BlockMeasureContext.dropCapNotes`). */
64
+ export interface DropCapNote {
65
+ reason: 'shortParagraph' | 'joiningScript' | 'verticalText' | 'noLetter' | 'split';
66
+ handling?: 'reserve' | 'shrink' | 'skip';
67
+ lines?: number;
55
68
  }
56
69
  export interface MeasuredContentBlock {
57
70
  kind: BlockKind;
@@ -68,6 +81,15 @@ export interface MeasuredContentBlock {
68
81
  /** Tracking the text was measured with (px per glyph), when column
69
82
  * balancing asked for it — renderers must paint the block with it. */
70
83
  letterSpacingPx?: number;
84
+ /** A paragraph a drop cap opens (#623): the letter, relative to the
85
+ * column. Its lines were set short of it. */
86
+ dropCap?: MeasuredDropCap;
87
+ /** A code listing (#624): its language, numbers and fit (see
88
+ * `VDTBlock.code`). */
89
+ code?: NonNullable<VDTBlock['code']>;
90
+ /** A code listing set from the far side of a mirrored frame (#624): its
91
+ * block reads left to right. */
92
+ direction?: 'ltr';
71
93
  }
72
94
  export interface MeasureContentBlockOptions {
73
95
  /** Column-balancing "run a paragraph long" — Knuth-Plass looseness. Left
@@ -103,11 +125,15 @@ export interface MeasureContentBlockOptions {
103
125
  fromLine: number;
104
126
  columnWidth: number;
105
127
  }[];
128
+ /** Internal to the drop cap (#623): the paragraph measured again set
129
+ * without it (`skip`), with the initial over `lines` lines (a short
130
+ * paragraph's `'shrink'`), or with a lead-in of `leadInWords` words
131
+ * (the first line's, counted by the first setting). */
132
+ dropCap?: {
133
+ skip?: true;
134
+ lines?: number;
135
+ leadInWords?: number;
136
+ };
106
137
  }
107
- /**
108
- * Resolve and measure one content block at `columnWidth`. Returns `null` when
109
- * there is nothing to place inline: empty text, an unknown resource id, or a
110
- * resource that floats to a page band.
111
- */
112
138
  export declare function measureContentBlock(rawBlock: ContentBlock, blockIdx: number, columnWidth: number, ctx: BlockMeasureContext, opts?: MeasureContentBlockOptions): MeasuredContentBlock | null;
113
139
  //# sourceMappingURL=measureContentBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"measureContentBlock.d.ts","sourceRoot":"","sources":["../../src/pipeline/measureContentBlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measureContentBlock.d.ts","sourceRoot":"","sources":["../../src/pipeline/measureContentBlock.ts"],"names":[],"mappings":"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"}