postext 1.22.2 → 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,93 @@
1
+ /**
2
+ * Inline code in a code face (#624, `codeStyle.inline`): the characters of
3
+ * a block's `` `x` `` spans (`ContentBlock.inlineCode`, source ranges)
4
+ * become chips set in the code face, at the size, colour and fill the
5
+ * style gives, each one unit as a chip is. A chip span keeps the code's
6
+ * characters as its text, so the block's plain text and source map stay
7
+ * as they are. Without `codeStyle.inline` inline code is set in the text's
8
+ * face, as before #624.
9
+ */
10
+ import { sliceSpan } from '../parse/links';
11
+ import { setsObject } from '../measure/rich';
12
+ import { dimensionToPx } from '../units';
13
+ /** Style id of an inline code chip: no chip style can name it. */
14
+ export const INLINE_CODE_CHIP_STYLE = '__postext-code';
15
+ /** The chip box of inline code in text of `fontSizePx`. */
16
+ function inlineCodeBox(resolved, fontSizePx) {
17
+ const inline = resolved.codeStyle?.inline;
18
+ if (!inline)
19
+ return undefined;
20
+ const dpi = resolved.page.dpi;
21
+ const sizePx = dimensionToPx(inline.fontSize, dpi, fontSizePx);
22
+ const px = (d) => Math.max(0, dimensionToPx(d, dpi, sizePx));
23
+ const borderWidthPx = inline.borderColor ? px(inline.borderWidth) : 0;
24
+ return {
25
+ styleId: INLINE_CODE_CHIP_STYLE,
26
+ fontFamily: inline.fontFamily,
27
+ fontSizePx: sizePx,
28
+ bold: inline.bold,
29
+ italic: inline.italic,
30
+ ...(inline.color ? { color: inline.color.hex } : {}),
31
+ ...(inline.background ? { background: inline.background.hex } : {}),
32
+ ...(borderWidthPx > 0 && inline.borderColor ? { borderColor: inline.borderColor.hex } : {}),
33
+ borderWidthPx,
34
+ borderRadiusPx: px(inline.borderRadius),
35
+ paddingXPx: px(inline.paddingX),
36
+ paddingYPx: px(inline.paddingY),
37
+ gapPx: 0,
38
+ };
39
+ }
40
+ /**
41
+ * `block` (the block being measured: `raw` with its heading number, its
42
+ * capitals…) with the characters of its inline code set as code chips,
43
+ * when `codeStyle.inline` is set and the block has inline code. `raw` is
44
+ * the parsed block, whose source map tells which characters were written
45
+ * between backticks.
46
+ */
47
+ export function withInlineCode(block, raw, resolved, fontSizePx) {
48
+ const ranges = raw.inlineCode;
49
+ if (!ranges || ranges.length === 0 || !resolved.codeStyle?.inline)
50
+ return block;
51
+ const box = inlineCodeBox(resolved, fontSizePx);
52
+ if (!box)
53
+ return block;
54
+ const prefix = block.text.length - raw.text.length;
55
+ const map = raw.sourceMap;
56
+ const isCode = (p) => {
57
+ const i = p - prefix;
58
+ if (i < 0 || i >= map.length)
59
+ return false;
60
+ const at = map[i];
61
+ return ranges.some((r) => at >= r.start && at < r.end);
62
+ };
63
+ const out = [];
64
+ let at = 0;
65
+ let changed = false;
66
+ for (const span of block.spans) {
67
+ const len = span.text.length;
68
+ if (setsObject(span) || span.tab || span.inserted || len === 0) {
69
+ out.push(span);
70
+ at += len;
71
+ continue;
72
+ }
73
+ let k = 0;
74
+ while (k < len) {
75
+ const code = isCode(at + k);
76
+ let j = k + 1;
77
+ while (j < len && isCode(at + j) === code)
78
+ j++;
79
+ if (!code) {
80
+ out.push(k === 0 && j === len ? span : sliceSpan(span, k, j));
81
+ }
82
+ else {
83
+ const text = span.text.slice(k, j);
84
+ out.push({ text, bold: span.bold, italic: span.italic, chip: { style: INLINE_CODE_CHIP_STYLE, spans: [{ text, bold: false, italic: false }], box } });
85
+ changed = true;
86
+ }
87
+ k = j;
88
+ }
89
+ at += len;
90
+ }
91
+ return changed ? { ...block, spans: out } : block;
92
+ }
93
+ //# sourceMappingURL=codeInline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeInline.js","sourceRoot":"","sources":["../../src/pipeline/codeInline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,kEAAkE;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,2DAA2D;AAC3D,SAAS,aAAa,CAAC,QAAwB,EAAE,UAAkB;IACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,CAAC,CAAsC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAClG,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO;QACL,OAAO,EAAE,sBAAsB;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM;QAClB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,aAAa;QACb,cAAc,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACvC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/B,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/B,KAAK,EAAE,CAAC;KACT,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB,EAAE,GAAiB,EAAE,QAAwB,EAAE,UAAkB;IACjH,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;IAC9B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IAChF,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IACnD,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAS,EAAW,EAAE;QACpC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC3C,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,EAAE,IAAI,GAAG,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtJ,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;QACD,EAAE,IAAI,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Code listings line by line (#624): a `code` block (a ```` ``` ```` or
3
+ * `~~~` fence, or indented code) is set one line per source line, as
4
+ * written. No Knuth–Plass, no hyphenation, no justification, no runt or
5
+ * tracking levers: every character keeps its advance in the code face, a
6
+ * run of spaces its width, and a tab goes on to the next multiple of
7
+ * `codeStyle.tabSize` character cells (a tab segment, `\t`, so copied text
8
+ * keeps it). A line wider than the measure is turned over, set smaller or
9
+ * cut (`codeStyle.overflow`). Line numbers stand in a gutter before the
10
+ * code, out of the text (the page's `lineNumbers` slot, see
11
+ * {@link buildCodeLineNumbers}).
12
+ *
13
+ * The lines are built segment by segment here, not by the paragraph
14
+ * breaker, which collapses and trims spaces. Each segment carries its face
15
+ * (`fontString`) and, when a token kind or a highlighter gives one, its
16
+ * colour; the segments' widths are final, from the line's box (`bbox.x`).
17
+ */
18
+ import type { ContentBlock } from '../parse';
19
+ import type { ResolvedCodeStyleConfig } from '../types';
20
+ import { type ResolvedConfig, type VDTDocument, type VDTLine, type ContentWarning } from '../vdt';
21
+ import type { MeasuredBlock } from '../measure';
22
+ /** What a fence asks of its listing, over `codeStyle`. */
23
+ export interface CodeFenceSettings {
24
+ lineNumbers: boolean;
25
+ /** The first line's number. */
26
+ start: number;
27
+ /** Source lines (1-based, as written) the fence highlights. */
28
+ highlight: ReadonlySet<number>;
29
+ }
30
+ /** `highlight="3,5-7"`: the line numbers it names (1-based, from the
31
+ * listing's first line whatever `start` says). */
32
+ export declare function highlightLines(value: string | undefined): Set<number>;
33
+ /** The settings a fence's attributes give its listing. */
34
+ export declare function codeFenceSettings(block: ContentBlock, cs: ResolvedCodeStyleConfig): CodeFenceSettings;
35
+ /** How a listing's lines were fitted, for its warning. */
36
+ export interface CodeFit {
37
+ mode: 'wrap' | 'shrink' | 'clip';
38
+ /** Source lines too wide for the measure. */
39
+ lines: number;
40
+ /** The size the listing was set at, as a share of `fontSize` (below 1
41
+ * when shrunk). */
42
+ scale: number;
43
+ }
44
+ export interface MeasuredCode extends MeasuredBlock {
45
+ /** Set when a line did not fit the measure as written. */
46
+ fit?: CodeFit;
47
+ /** The numbers' look and the room between them and the code, when the
48
+ * listing is numbered. */
49
+ numbers?: {
50
+ gap: number;
51
+ fontString: string;
52
+ color: string;
53
+ };
54
+ /** The size the listing was set at, px (the code size, or less when it
55
+ * was shrunk). */
56
+ fontSizePx: number;
57
+ }
58
+ export interface CodeLinesInput {
59
+ block: ContentBlock;
60
+ /** The code's size and leading (the listing box's body style). */
61
+ fontSizePx: number;
62
+ lineHeightPx: number;
63
+ /** The listing's colour (hex). */
64
+ color: string;
65
+ /** The measure, px. */
66
+ measure: number;
67
+ resolved: ResolvedConfig;
68
+ /** Source offset of the markdown body inside the document. */
69
+ bodyOffset: number;
70
+ /** The frame runs right to left (a mirrored page): the lines keep their
71
+ * left-to-right order and are set from the frame's far side. */
72
+ mirrored?: boolean;
73
+ }
74
+ /** Lay a listing out (see the module comment). */
75
+ export declare function measureCodeLines(input: CodeLinesInput): MeasuredCode;
76
+ /**
77
+ * The line numbers of the listings of `doc` (#624), in each page's
78
+ * `lineNumbers` slot beside any the margin numbers set there (#621): each
79
+ * right-aligned against the end of its listing's gutter, on its line's
80
+ * baseline, an artifact out of the text (the slot's numbers are hidden
81
+ * from assistive technology, left out of a selection, and painted under an
82
+ * empty `/ActualText` in a tagged PDF). Vertical pages get none.
83
+ */
84
+ export declare function buildCodeLineNumbers(doc: VDTDocument): void;
85
+ /** A `codeOverflow` warning for each listing (by content index) one of
86
+ * whose lines did not fit its measure as written (#624). */
87
+ export declare function codeOverflowWarnings(doc: VDTDocument): ContentWarning[];
88
+ /** The plain text of a listing's lines as written (a continuation joins
89
+ * its line, a line feed ends each source line). */
90
+ export declare function codeLinesText(lines: readonly VDTLine[]): string;
91
+ //# sourceMappingURL=codeLines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeLines.d.ts","sourceRoot":"","sources":["../../src/pipeline/codeLines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAiB,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAqD,KAAK,cAAc,EAA0C,KAAK,WAAW,EAAE,KAAK,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAClN,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAShD,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC;AASD;mDACmD;AACnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAUrE;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,uBAAuB,GAAG,iBAAiB,CAUrG;AAoCD,0DAA0D;AAC1D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd;wBACoB;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;+BAC2B;IAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;uBACmB;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB;qEACiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAsOpE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAwC3D;AAED;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,EAAE,CAoBvE;AAED;oDACoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAO/D"}
@@ -0,0 +1,399 @@
1
+ /**
2
+ * Code listings line by line (#624): a `code` block (a ```` ``` ```` or
3
+ * `~~~` fence, or indented code) is set one line per source line, as
4
+ * written. No Knuth–Plass, no hyphenation, no justification, no runt or
5
+ * tracking levers: every character keeps its advance in the code face, a
6
+ * run of spaces its width, and a tab goes on to the next multiple of
7
+ * `codeStyle.tabSize` character cells (a tab segment, `\t`, so copied text
8
+ * keeps it). A line wider than the measure is turned over, set smaller or
9
+ * cut (`codeStyle.overflow`). Line numbers stand in a gutter before the
10
+ * code, out of the text (the page's `lineNumbers` slot, see
11
+ * {@link buildCodeLineNumbers}).
12
+ *
13
+ * The lines are built segment by segment here, not by the paragraph
14
+ * breaker, which collapses and trims spaces. Each segment carries its face
15
+ * (`fontString`) and, when a token kind or a highlighter gives one, its
16
+ * colour; the segments' widths are final, from the line's box (`bbox.x`).
17
+ */
18
+ import { createBoundingBox, flowRectToPage, pageIsVertical } from '../vdt';
19
+ import { buildFontString } from '../measure';
20
+ import { measureTextWidth } from '../measure/canvas';
21
+ import { graphemesOf } from '../measure/graphemes';
22
+ import { lineBaselineOffset } from '../measure/vertical';
23
+ import { dimensionToPx } from '../units';
24
+ import { resolvedCodeStyle } from '../defaults/codeStyle';
25
+ import { highlightCode } from '../code/highlight';
26
+ /** A flag attribute: present and not `false` / `no` / `0`. */
27
+ function flagAttr(value) {
28
+ if (value === undefined)
29
+ return undefined;
30
+ const v = value.trim().toLowerCase();
31
+ return v !== 'false' && v !== 'no' && v !== '0' && v !== 'off';
32
+ }
33
+ /** `highlight="3,5-7"`: the line numbers it names (1-based, from the
34
+ * listing's first line whatever `start` says). */
35
+ export function highlightLines(value) {
36
+ const out = new Set();
37
+ for (const part of (value ?? '').split(/[,\s]+/)) {
38
+ const m = /^(\d+)(?:-(\d+))?$/.exec(part.trim());
39
+ if (!m)
40
+ continue;
41
+ const a = Number(m[1]);
42
+ const b = m[2] !== undefined ? Number(m[2]) : a;
43
+ for (let n = Math.min(a, b); n <= Math.max(a, b) && n - Math.min(a, b) < 10_000; n++)
44
+ out.add(n);
45
+ }
46
+ return out;
47
+ }
48
+ /** The settings a fence's attributes give its listing. */
49
+ export function codeFenceSettings(block, cs) {
50
+ const attrs = block.code?.attrs ?? {};
51
+ const start = /^\s*-?\d+\s*$/.test(attrs.start ?? '') ? Number(attrs.start) : undefined;
52
+ const numbered = flagAttr(attrs.lineNumbers ?? attrs.linenumbers ?? attrs.numbered);
53
+ return {
54
+ // `start=N` numbers a listing on its own.
55
+ lineNumbers: numbered ?? (start !== undefined ? true : cs.lineNumbers),
56
+ start: start ?? 1,
57
+ highlight: highlightLines(attrs.highlight),
58
+ };
59
+ }
60
+ /** East Asian wide and full-width characters: two cells of a grid of
61
+ * character cells (tab stops count them so). */
62
+ const WIDE_RE = /[ᄀ-ᅟ⺀-〾ぁ-㏿㐀-䶿一-鿿ꀀ-꓏가-힣豈-﫿︰-﹏＀-⦆¢-₩]|[\uD840-\uD87F][\uDC00-\uDFFF]/;
63
+ function facesAt(cs, sizePx) {
64
+ const w = cs.fontWeight.toString();
65
+ const b = cs.boldFontWeight.toString();
66
+ return {
67
+ normal: buildFontString(cs.fontFamily, sizePx, w, 'normal'),
68
+ bold: buildFontString(cs.fontFamily, sizePx, b, 'normal'),
69
+ italic: buildFontString(cs.fontFamily, sizePx, w, 'italic'),
70
+ boldItalic: buildFontString(cs.fontFamily, sizePx, b, 'italic'),
71
+ };
72
+ }
73
+ /** Lay a listing out (see the module comment). */
74
+ export function measureCodeLines(input) {
75
+ const { block, resolved } = input;
76
+ const cs = resolvedCodeStyle(resolved);
77
+ const info = block.code;
78
+ if (!info || info.lines.length === 0)
79
+ return { lines: [], totalHeight: 0, fontSizePx: input.fontSizePx };
80
+ const dpi = resolved.page.dpi;
81
+ const fence = codeFenceSettings(block, cs);
82
+ const tokens = highlightCode(info.lines.join('\n'), info.lang, cs.highlight === 'builtin');
83
+ const lineHeight = input.lineHeightPx;
84
+ /** The runs of every line at one size. */
85
+ const runsAt = (faces) => info.lines.map((line, k) => {
86
+ const pieces = tokens?.[k] ?? (line.length > 0 ? [{ text: line }] : []);
87
+ const runs = [];
88
+ let col = 0;
89
+ for (const piece of pieces) {
90
+ const kind = piece.token;
91
+ const look = kind ? cs.tokens[kind] : undefined;
92
+ const bold = look?.bold === true;
93
+ const italic = look?.italic === true;
94
+ const font = bold ? (italic ? faces.boldItalic : faces.bold) : italic ? faces.italic : faces.normal;
95
+ const color = piece.color ?? look?.color?.hex;
96
+ let text = '';
97
+ const flush = () => {
98
+ if (text.length === 0)
99
+ return;
100
+ runs.push({ text, font, ...(color ? { color } : {}), ...(bold ? { bold: true } : {}), ...(italic ? { italic: true } : {}), width: measureTextWidth(text, font) });
101
+ text = '';
102
+ };
103
+ for (const ch of graphemesOf(piece.text)) {
104
+ if (ch === '\t') {
105
+ flush();
106
+ const cells = cs.tabSize - (col % cs.tabSize);
107
+ runs.push({ text: '\t', font: faces.normal, tab: cells, width: cells * measureTextWidth(' ', faces.normal) });
108
+ col += cells;
109
+ }
110
+ else {
111
+ text += ch;
112
+ col += WIDE_RE.test(ch) ? 2 : 1;
113
+ }
114
+ }
115
+ flush();
116
+ }
117
+ return runs;
118
+ });
119
+ const widthOf = (runs) => runs.reduce((s, r) => s + r.width, 0);
120
+ /** The gutter of a numbered listing at one size: the widest number and
121
+ * the gap after it. */
122
+ const lastNumber = fence.start + info.lines.length - 1;
123
+ const numberWidth = (faces) => (fence.lineNumbers ? measureTextWidth(String(Math.max(Math.abs(fence.start), Math.abs(lastNumber))).replace(/\d/g, '0') + (fence.start < 0 ? '-' : ''), faces.normal) : 0);
124
+ const gutterAt = (faces, sizePx) => (fence.lineNumbers ? numberWidth(faces) + Math.max(0, dimensionToPx(cs.lineNumberGap, dpi, sizePx)) : 0);
125
+ // The size the listing is set at: its own, or for `shrink` the largest
126
+ // (down to `minFontScale`) at which its widest line fits.
127
+ let sizePx = input.fontSizePx;
128
+ let faces = facesAt(cs, sizePx);
129
+ let rows = runsAt(faces);
130
+ let gutter = gutterAt(faces, sizePx);
131
+ const widest = Math.max(...rows.map(widthOf));
132
+ const tooWide = rows.filter((r) => gutter + widthOf(r) > input.measure + 0.01).length;
133
+ let scale = 1;
134
+ if (tooWide > 0 && cs.overflow === 'shrink') {
135
+ const fit = Math.max(cs.minFontScale, Math.min(1, input.measure / (gutter + widest)));
136
+ scale = Math.floor(fit * 1000) / 1000;
137
+ sizePx = input.fontSizePx * scale;
138
+ faces = facesAt(cs, sizePx);
139
+ rows = runsAt(faces);
140
+ gutter = gutterAt(faces, sizePx);
141
+ }
142
+ const measure = Math.max(1, input.measure - gutter);
143
+ // What still does not fit wraps (`wrap`, and `shrink` past its floor) or
144
+ // is cut (`clip`).
145
+ const cut = cs.overflow === 'clip';
146
+ const cell = measureTextWidth(' ', faces.normal);
147
+ const marker = cs.wrapMarker;
148
+ const markerWidth = marker ? measureTextWidth(marker, faces.normal) : 0;
149
+ const hang = Math.min(measure / 2, Math.max(cs.wrapIndent * cell, markerWidth > 0 ? markerWidth + cell / 2 : 0));
150
+ const baselineOffset = lineBaselineOffset(lineHeight, faces.normal);
151
+ const lines = [];
152
+ let plainAt = 0;
153
+ /** A run's segment. */
154
+ const segmentOf = (run, text = run.text, width = run.width) => (run.tab !== undefined
155
+ ? { kind: 'space', text: '\t', width, labelTab: true, fontString: run.font }
156
+ : {
157
+ kind: 'text',
158
+ text,
159
+ width,
160
+ fontString: run.font,
161
+ ...(run.color ? { color: run.color } : {}),
162
+ ...(run.bold ? { bold: true } : {}),
163
+ ...(run.italic ? { italic: true } : {}),
164
+ });
165
+ const push = (segments, x, k, plainStart, plainEnd, flags) => {
166
+ const y = lines.length * lineHeight;
167
+ const width = segments.reduce((s, seg) => s + seg.width, 0);
168
+ const text = segments.filter((s) => !s.inserted && !s.leader).map((s) => s.text).join('');
169
+ const map = block.sourceMap;
170
+ const src = (p, end) => {
171
+ if (map.length === 0)
172
+ return block.sourceStart + input.bodyOffset;
173
+ if (end)
174
+ return p > 0 ? map[Math.min(p, map.length) - 1] + 1 + input.bodyOffset : (map[0] ?? block.sourceStart) + input.bodyOffset;
175
+ return (p < map.length ? map[p] : map[map.length - 1] + 1) + input.bodyOffset;
176
+ };
177
+ // A blank line still spans its line end, so the editor can map it.
178
+ const sourceStart = plainStart < map.length ? src(plainStart, false) : (info.lineStarts[k] ?? block.sourceStart) + input.bodyOffset;
179
+ const sourceEnd = plainEnd > plainStart ? src(plainEnd, true) : sourceStart;
180
+ const line = {
181
+ text,
182
+ bbox: createBoundingBox(x, y, width, lineHeight),
183
+ baseline: y + baselineOffset,
184
+ hyphenated: false,
185
+ segments,
186
+ isLastLine: true,
187
+ ragged: true,
188
+ plainStart,
189
+ plainEnd,
190
+ sourceStart,
191
+ sourceEnd,
192
+ codeLine: { line: k, ...flags },
193
+ };
194
+ // Set from the far side of a mirrored frame, as a left-to-right
195
+ // quotation in a right-to-left book is: its span the measure.
196
+ if (input.mirrored) {
197
+ line.measure = { x: 0, width: measure };
198
+ line.bbox.x = 0;
199
+ }
200
+ lines.push(line);
201
+ };
202
+ rows.forEach((runs, k) => {
203
+ const n = fence.start + k;
204
+ const flags = {
205
+ ...(fence.lineNumbers ? { number: String(n) } : {}),
206
+ ...(fence.highlight.has(k + 1) ? { highlight: true } : {}),
207
+ };
208
+ const lineLength = info.lines[k].length;
209
+ const lineStart = plainAt;
210
+ plainAt += lineLength + 1;
211
+ if (widthOf(runs) <= measure + 0.01) {
212
+ push(runs.map((r) => segmentOf(r)), gutter, k, lineStart, lineStart + lineLength, flags);
213
+ return;
214
+ }
215
+ const cells = [];
216
+ let at = lineStart;
217
+ for (const run of runs) {
218
+ if (run.tab !== undefined) {
219
+ cells.push({ run, text: '\t', width: run.width, at });
220
+ at += 1;
221
+ continue;
222
+ }
223
+ for (const g of graphemesOf(run.text)) {
224
+ cells.push({ run, text: g, width: measureTextWidth(g, run.font), at });
225
+ at += g.length;
226
+ }
227
+ }
228
+ /** Segments for cells `[a, b)`: consecutive cells of one run make one
229
+ * segment, measured whole. */
230
+ const segmentsOf = (a, b) => {
231
+ const out = [];
232
+ let i = a;
233
+ while (i < b) {
234
+ const run = cells[i].run;
235
+ let j = i;
236
+ let text = '';
237
+ while (j < b && cells[j].run === run)
238
+ text += cells[j++].text;
239
+ out.push(run.tab !== undefined ? segmentOf(run) : segmentOf(run, text, measureTextWidth(text, run.font)));
240
+ i = j;
241
+ }
242
+ return out;
243
+ };
244
+ if (cut) {
245
+ let w = 0;
246
+ let b = 0;
247
+ while (b < cells.length && w + cells[b].width <= measure + 0.01)
248
+ w += cells[b++].width;
249
+ const end = b < cells.length ? cells[b].at : lineStart + lineLength;
250
+ push(segmentsOf(0, b), gutter, k, lineStart, end, { ...flags, clipped: true });
251
+ return;
252
+ }
253
+ // Turned over: break after the last space or punctuation that fits,
254
+ // else between two characters; the continuations hang by `wrapIndent`
255
+ // cells behind the marker.
256
+ let a = 0;
257
+ let first = true;
258
+ while (a < cells.length) {
259
+ const room = first ? measure : Math.max(cell, measure - hang);
260
+ let w = 0;
261
+ let b = a;
262
+ while (b < cells.length && w + cells[b].width <= room + 0.01)
263
+ w += cells[b++].width;
264
+ if (b === a)
265
+ b = a + 1; // a character wider than the room still goes
266
+ if (b < cells.length) {
267
+ let brk = -1;
268
+ for (let i = b; i > a; i--) {
269
+ if (/[\s,;.:)\]}>/\\\-=+*|&!?]/.test(cells[i - 1].text) && !/\s/.test(cells[i]?.text ?? '')) {
270
+ brk = i;
271
+ break;
272
+ }
273
+ }
274
+ if (brk > a)
275
+ b = brk;
276
+ }
277
+ const segments = segmentsOf(a, b);
278
+ const startAt = cells[a].at;
279
+ const endAt = b < cells.length ? cells[b].at : lineStart + lineLength;
280
+ const more = b < cells.length;
281
+ if (first) {
282
+ push(segments, gutter, k, startAt, endAt, { ...flags, ...(more ? { wrapped: true } : {}) });
283
+ }
284
+ else {
285
+ // The marker in the hang, before the text: no character of it (a
286
+ // leader: out of the copied text, an artifact in a tagged PDF).
287
+ const lead = marker
288
+ ? [{ kind: 'text', text: marker, width: hang, inserted: true, leader: 'text', fontString: faces.normal, color: cs.lineNumberColor.hex }]
289
+ : [{ kind: 'text', text: '', width: hang, inserted: true }];
290
+ const { highlight } = flags;
291
+ push([...lead, ...segments], gutter, k, startAt, endAt, { continued: true, ...(highlight ? { highlight } : {}), ...(more ? { wrapped: true } : {}) });
292
+ }
293
+ first = false;
294
+ a = b;
295
+ }
296
+ });
297
+ if (lines.length === 0)
298
+ return { lines: [], totalHeight: 0, fontSizePx: sizePx };
299
+ const fit = tooWide > 0 ? { mode: cs.overflow, lines: tooWide, scale } : undefined;
300
+ return {
301
+ lines,
302
+ totalHeight: lines.length * lineHeight,
303
+ fontSizePx: sizePx,
304
+ ...(fit ? { fit } : {}),
305
+ ...(fence.lineNumbers ? { numbers: { gap: Math.max(0, dimensionToPx(cs.lineNumberGap, dpi, sizePx)), fontString: faces.normal, color: cs.lineNumberColor.hex } } : {}),
306
+ };
307
+ }
308
+ /**
309
+ * The line numbers of the listings of `doc` (#624), in each page's
310
+ * `lineNumbers` slot beside any the margin numbers set there (#621): each
311
+ * right-aligned against the end of its listing's gutter, on its line's
312
+ * baseline, an artifact out of the text (the slot's numbers are hidden
313
+ * from assistive technology, left out of a selection, and painted under an
314
+ * empty `/ActualText` in a tagged PDF). Vertical pages get none.
315
+ */
316
+ export function buildCodeLineNumbers(doc) {
317
+ for (const page of doc.pages) {
318
+ if (pageIsVertical(page))
319
+ continue;
320
+ const blocks = [];
321
+ const visit = (block) => {
322
+ const numbers = block.type === 'code' ? block.code?.numbers : undefined;
323
+ if (!numbers)
324
+ return;
325
+ for (const line of block.lines) {
326
+ const label = line.codeLine?.number;
327
+ if (label === undefined)
328
+ continue;
329
+ const w = measureTextWidth(label, numbers.fontString);
330
+ const size = /(\d*\.?\d+)px/.exec(numbers.fontString);
331
+ const sizePx = size ? parseFloat(size[1]) : 12;
332
+ // Where the line's code starts on the sheet: its box's left edge,
333
+ // or that of the span it is set in on a mirrored page (#370).
334
+ const span = line.measure ?? { x: line.bbox.x, width: line.bbox.width };
335
+ const sheet = flowRectToPage(page, createBoundingBox(span.x, line.bbox.y, Math.max(0, span.width), line.bbox.height));
336
+ const right = sheet.x - numbers.gap;
337
+ const baseline = sheet.y + (line.baseline - line.bbox.y);
338
+ blocks.push({
339
+ kind: 'text',
340
+ bbox: createBoundingBox(right - w, baseline - sizePx * 0.8, w, sizePx),
341
+ fontString: numbers.fontString,
342
+ color: numbers.color,
343
+ lines: [{ text: label, xOffset: 0, baselineY: baseline, width: w }],
344
+ clip: false,
345
+ artifact: true,
346
+ });
347
+ }
348
+ };
349
+ for (const column of page.columns)
350
+ for (const block of column.blocks)
351
+ visit(block);
352
+ for (const block of page.floats ?? [])
353
+ visit(block);
354
+ if (blocks.length === 0)
355
+ continue;
356
+ const all = [...(page.lineNumbers?.blocks ?? []), ...blocks];
357
+ const left = Math.min(...all.map((b) => b.bbox.x));
358
+ const top = Math.min(...all.map((b) => b.bbox.y));
359
+ const right = Math.max(...all.map((b) => b.bbox.x + b.bbox.width));
360
+ const bottom = Math.max(...all.map((b) => b.bbox.y + b.bbox.height));
361
+ page.lineNumbers = { bbox: createBoundingBox(left, top, right - left, bottom - top), blocks: all };
362
+ }
363
+ }
364
+ /** A `codeOverflow` warning for each listing (by content index) one of
365
+ * whose lines did not fit its measure as written (#624). */
366
+ export function codeOverflowWarnings(doc) {
367
+ const out = [];
368
+ const seen = new Set();
369
+ for (const block of doc.blocks) {
370
+ const fit = block.code?.fit;
371
+ const idx = block.contentIndex;
372
+ if (block.type !== 'code' || !fit || idx === undefined || seen.has(idx))
373
+ continue;
374
+ seen.add(idx);
375
+ out.push({
376
+ kind: 'codeOverflow',
377
+ mode: fit.mode,
378
+ lines: fit.lines,
379
+ ...(fit.mode === 'shrink' ? { scale: fit.scale } : {}),
380
+ ...(block.code?.lang ? { lang: block.code.lang } : {}),
381
+ ...(block.sourceStart !== undefined ? { sourceStart: block.sourceStart } : {}),
382
+ ...(block.sourceEnd !== undefined ? { sourceEnd: block.sourceEnd } : {}),
383
+ ...(block.pageIndex >= 0 ? { pageIndex: block.pageIndex } : {}),
384
+ });
385
+ }
386
+ return out;
387
+ }
388
+ /** The plain text of a listing's lines as written (a continuation joins
389
+ * its line, a line feed ends each source line). */
390
+ export function codeLinesText(lines) {
391
+ let out = '';
392
+ lines.forEach((line, i) => {
393
+ if (i > 0 && !line.codeLine?.continued)
394
+ out += '\n';
395
+ out += line.text;
396
+ });
397
+ return out;
398
+ }
399
+ //# sourceMappingURL=codeLines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeLines.js","sourceRoot":"","sources":["../../src/pipeline/codeLines.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAEpH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;AAsC1F,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAQlF,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,CAU1E;AAgGD;;;sDAGsD;AACtD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAG1F;AAED;mCACmC;AACnC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,KAAK,GAAG,KAAK,CAEzE;AAED;;;aAGa;AACb,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE/D;AAED;;sBAEsB;AACtB,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,CAEtE;AAMD;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,GACvB,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAIzC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAUpE;AAED;;;;;;;6DAO6D;AAC7D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAOrF;AAED;qEACqE;AACrE,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;;;;uCAQuC;AACvC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrG;AAED;;;;;;yCAMyC;AACzC,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,cAAc,EACxB,QAAQ,UAAQ,GACf,WAAW,EAAE,CAgCf;AAED;+CAC+C;AAC/C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAEpE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAEpH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;AAwC1F,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAQlF,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,CAU1E;AAuGD;;;sDAGsD;AACtD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAG1F;AAED;mCACmC;AACnC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,KAAK,GAAG,KAAK,CAEzE;AAED;;;aAGa;AACb,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE/D;AAED;;sBAEsB;AACtB,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,CAEtE;AAMD;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,GACvB,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAIzC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAUpE;AAED;;;;;;;6DAO6D;AAC7D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAOrF;AAED;qEACqE;AACrE,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;;;;uCAQuC;AACvC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrG;AAED;;;;;;yCAMyC;AACzC,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,cAAc,EACxB,QAAQ,UAAQ,GACf,WAAW,EAAE,CAgCf;AAED;+CAC+C;AAC/C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAEpE"}