postext 1.22.3 → 1.24.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 (427) hide show
  1. package/dist/__tests__/bundle/bitmapInfo.test.d.ts +2 -0
  2. package/dist/__tests__/bundle/bitmapInfo.test.d.ts.map +1 -0
  3. package/dist/__tests__/bundle/bitmapInfo.test.js +78 -0
  4. package/dist/__tests__/bundle/bitmapInfo.test.js.map +1 -0
  5. package/dist/__tests__/bundle/designOverflowPin.test.d.ts +2 -0
  6. package/dist/__tests__/bundle/designOverflowPin.test.d.ts.map +1 -0
  7. package/dist/__tests__/bundle/designOverflowPin.test.js +87 -0
  8. package/dist/__tests__/bundle/designOverflowPin.test.js.map +1 -0
  9. package/dist/__tests__/bundle.test.js +1 -1
  10. package/dist/__tests__/bundle.test.js.map +1 -1
  11. package/dist/__tests__/codeBlocks.test.d.ts +2 -0
  12. package/dist/__tests__/codeBlocks.test.d.ts.map +1 -0
  13. package/dist/__tests__/codeBlocks.test.js +550 -0
  14. package/dist/__tests__/codeBlocks.test.js.map +1 -0
  15. package/dist/__tests__/design/designTextOverflow.test.d.ts +2 -0
  16. package/dist/__tests__/design/designTextOverflow.test.d.ts.map +1 -0
  17. package/dist/__tests__/design/designTextOverflow.test.js +102 -0
  18. package/dist/__tests__/design/designTextOverflow.test.js.map +1 -0
  19. package/dist/__tests__/exports.test.js +30 -0
  20. package/dist/__tests__/exports.test.js.map +1 -1
  21. package/dist/__tests__/frontmatterInvalid.test.d.ts +2 -0
  22. package/dist/__tests__/frontmatterInvalid.test.d.ts.map +1 -0
  23. package/dist/__tests__/frontmatterInvalid.test.js +101 -0
  24. package/dist/__tests__/frontmatterInvalid.test.js.map +1 -0
  25. package/dist/__tests__/hardBreaks.test.d.ts +2 -0
  26. package/dist/__tests__/hardBreaks.test.d.ts.map +1 -0
  27. package/dist/__tests__/hardBreaks.test.js +226 -0
  28. package/dist/__tests__/hardBreaks.test.js.map +1 -0
  29. package/dist/__tests__/headingFirstLineIndent.test.d.ts +2 -0
  30. package/dist/__tests__/headingFirstLineIndent.test.d.ts.map +1 -0
  31. package/dist/__tests__/headingFirstLineIndent.test.js +185 -0
  32. package/dist/__tests__/headingFirstLineIndent.test.js.map +1 -0
  33. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  34. package/dist/__tests__/headingInlineMarks.test.js.map +1 -1
  35. package/dist/__tests__/headingLetterSpacing.test.js +1 -1
  36. package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
  37. package/dist/__tests__/lineNumbers.test.d.ts +2 -0
  38. package/dist/__tests__/lineNumbers.test.d.ts.map +1 -0
  39. package/dist/__tests__/lineNumbers.test.js +304 -0
  40. package/dist/__tests__/lineNumbers.test.js.map +1 -0
  41. package/dist/__tests__/mathSizeMigration.test.js +2 -2
  42. package/dist/__tests__/mathSizeMigration.test.js.map +1 -1
  43. package/dist/__tests__/paragraphDropCap.test.d.ts +2 -0
  44. package/dist/__tests__/paragraphDropCap.test.d.ts.map +1 -0
  45. package/dist/__tests__/paragraphDropCap.test.js +442 -0
  46. package/dist/__tests__/paragraphDropCap.test.js.map +1 -0
  47. package/dist/__tests__/paragraphStyleIndent.test.js +26 -2
  48. package/dist/__tests__/paragraphStyleIndent.test.js.map +1 -1
  49. package/dist/__tests__/pipeline/bitmapResolution.test.d.ts +2 -0
  50. package/dist/__tests__/pipeline/bitmapResolution.test.d.ts.map +1 -0
  51. package/dist/__tests__/pipeline/bitmapResolution.test.js +139 -0
  52. package/dist/__tests__/pipeline/bitmapResolution.test.js.map +1 -0
  53. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  54. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js.map +1 -1
  55. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
  56. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js.map +1 -1
  57. package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
  58. package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
  59. package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
  60. package/dist/__tests__/pipeline/compoundBreaks.test.js.map +1 -1
  61. package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
  62. package/dist/__tests__/pipeline/dashBreaks.test.js.map +1 -1
  63. package/dist/__tests__/pipeline/designTextTruncated.test.d.ts +2 -0
  64. package/dist/__tests__/pipeline/designTextTruncated.test.d.ts.map +1 -0
  65. package/dist/__tests__/pipeline/designTextTruncated.test.js +116 -0
  66. package/dist/__tests__/pipeline/designTextTruncated.test.js.map +1 -0
  67. package/dist/__tests__/pipeline/floatPlacement.test.js +3 -3
  68. package/dist/__tests__/pipeline/floatPlacement.test.js.map +1 -1
  69. package/dist/__tests__/pipeline/floatShrink.test.d.ts +2 -0
  70. package/dist/__tests__/pipeline/floatShrink.test.d.ts.map +1 -0
  71. package/dist/__tests__/pipeline/floatShrink.test.js +298 -0
  72. package/dist/__tests__/pipeline/floatShrink.test.js.map +1 -0
  73. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
  74. package/dist/__tests__/pipeline/headingSplitOrphans.test.js.map +1 -1
  75. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
  76. package/dist/__tests__/pipeline/inlineFigureSpace.test.js.map +1 -1
  77. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
  78. package/dist/__tests__/pipeline/paragraphContainerTail.test.js.map +1 -1
  79. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +7 -1
  80. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  81. package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
  82. package/dist/__tests__/pipeline/raggedOptimal.test.js.map +1 -1
  83. package/dist/__tests__/pipeline/textWrap.test.d.ts +2 -0
  84. package/dist/__tests__/pipeline/textWrap.test.d.ts.map +1 -0
  85. package/dist/__tests__/pipeline/textWrap.test.js +453 -0
  86. package/dist/__tests__/pipeline/textWrap.test.js.map +1 -0
  87. package/dist/__tests__/preflight.test.js +30 -1
  88. package/dist/__tests__/preflight.test.js.map +1 -1
  89. package/dist/__tests__/presets/showcaseDesignOverflow.test.d.ts +2 -0
  90. package/dist/__tests__/presets/showcaseDesignOverflow.test.d.ts.map +1 -0
  91. package/dist/__tests__/presets/showcaseDesignOverflow.test.js +58 -0
  92. package/dist/__tests__/presets/showcaseDesignOverflow.test.js.map +1 -0
  93. package/dist/__tests__/tabStops.test.d.ts +2 -0
  94. package/dist/__tests__/tabStops.test.d.ts.map +1 -0
  95. package/dist/__tests__/tabStops.test.js +394 -0
  96. package/dist/__tests__/tabStops.test.js.map +1 -0
  97. package/dist/__tests__/table/booktabs.test.d.ts +2 -0
  98. package/dist/__tests__/table/booktabs.test.d.ts.map +1 -0
  99. package/dist/__tests__/table/booktabs.test.js +290 -0
  100. package/dist/__tests__/table/booktabs.test.js.map +1 -0
  101. package/dist/__tests__/textWrapMeasure.test.d.ts +2 -0
  102. package/dist/__tests__/textWrapMeasure.test.d.ts.map +1 -0
  103. package/dist/__tests__/textWrapMeasure.test.js +162 -0
  104. package/dist/__tests__/textWrapMeasure.test.js.map +1 -0
  105. package/dist/__tests__/verseLines.test.d.ts +2 -0
  106. package/dist/__tests__/verseLines.test.d.ts.map +1 -0
  107. package/dist/__tests__/verseLines.test.js +505 -0
  108. package/dist/__tests__/verseLines.test.js.map +1 -0
  109. package/dist/bitmapResolution.d.ts +42 -0
  110. package/dist/bitmapResolution.d.ts.map +1 -0
  111. package/dist/bitmapResolution.js +82 -0
  112. package/dist/bitmapResolution.js.map +1 -0
  113. package/dist/bundle/codec.d.ts +9 -2
  114. package/dist/bundle/codec.d.ts.map +1 -1
  115. package/dist/bundle/codec.js +24 -2
  116. package/dist/bundle/codec.js.map +1 -1
  117. package/dist/bundle/configVersion.d.ts +119 -8
  118. package/dist/bundle/configVersion.d.ts.map +1 -1
  119. package/dist/bundle/configVersion.js +395 -6
  120. package/dist/bundle/configVersion.js.map +1 -1
  121. package/dist/bundle/index.d.ts +3 -3
  122. package/dist/bundle/index.d.ts.map +1 -1
  123. package/dist/bundle/index.js +2 -2
  124. package/dist/bundle/index.js.map +1 -1
  125. package/dist/bundle/manifest.d.ts +12 -2
  126. package/dist/bundle/manifest.d.ts.map +1 -1
  127. package/dist/bundle/manifest.js +132 -6
  128. package/dist/bundle/manifest.js.map +1 -1
  129. package/dist/bundle/types.d.ts +28 -2
  130. package/dist/bundle/types.d.ts.map +1 -1
  131. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  132. package/dist/canvas-backend/blockRender.js +45 -9
  133. package/dist/canvas-backend/blockRender.js.map +1 -1
  134. package/dist/canvas-backend/index.d.ts.map +1 -1
  135. package/dist/canvas-backend/index.js +3 -0
  136. package/dist/canvas-backend/index.js.map +1 -1
  137. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  138. package/dist/canvas-backend/renderResourceBlock.js +15 -1
  139. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  140. package/dist/cjkMarks.js +1 -1
  141. package/dist/cjkMarks.js.map +1 -1
  142. package/dist/code/highlight.d.ts +34 -0
  143. package/dist/code/highlight.d.ts.map +1 -0
  144. package/dist/code/highlight.js +406 -0
  145. package/dist/code/highlight.js.map +1 -0
  146. package/dist/configWarnings.d.ts.map +1 -1
  147. package/dist/configWarnings.js +220 -4
  148. package/dist/configWarnings.js.map +1 -1
  149. package/dist/defaults/bodyText.d.ts.map +1 -1
  150. package/dist/defaults/bodyText.js +25 -0
  151. package/dist/defaults/bodyText.js.map +1 -1
  152. package/dist/defaults/calloutStyles.d.ts.map +1 -1
  153. package/dist/defaults/calloutStyles.js +7 -0
  154. package/dist/defaults/calloutStyles.js.map +1 -1
  155. package/dist/defaults/codeStyle.d.ts +29 -0
  156. package/dist/defaults/codeStyle.d.ts.map +1 -0
  157. package/dist/defaults/codeStyle.js +284 -0
  158. package/dist/defaults/codeStyle.js.map +1 -0
  159. package/dist/defaults/dropCap.d.ts +49 -0
  160. package/dist/defaults/dropCap.d.ts.map +1 -0
  161. package/dist/defaults/dropCap.js +66 -0
  162. package/dist/defaults/dropCap.js.map +1 -0
  163. package/dist/defaults/headerFooter.d.ts +21 -6
  164. package/dist/defaults/headerFooter.d.ts.map +1 -1
  165. package/dist/defaults/headerFooter.js +37 -14
  166. package/dist/defaults/headerFooter.js.map +1 -1
  167. package/dist/defaults/headings.d.ts +5 -4
  168. package/dist/defaults/headings.d.ts.map +1 -1
  169. package/dist/defaults/headings.js +26 -4
  170. package/dist/defaults/headings.js.map +1 -1
  171. package/dist/defaults/index.d.ts +4 -1
  172. package/dist/defaults/index.d.ts.map +1 -1
  173. package/dist/defaults/index.js +20 -1
  174. package/dist/defaults/index.js.map +1 -1
  175. package/dist/defaults/layout.d.ts +30 -1
  176. package/dist/defaults/layout.d.ts.map +1 -1
  177. package/dist/defaults/layout.js +105 -1
  178. package/dist/defaults/layout.js.map +1 -1
  179. package/dist/defaults/lineNumbers.d.ts +19 -0
  180. package/dist/defaults/lineNumbers.d.ts.map +1 -0
  181. package/dist/defaults/lineNumbers.js +101 -0
  182. package/dist/defaults/lineNumbers.js.map +1 -0
  183. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  184. package/dist/defaults/paragraphStyles.js +20 -0
  185. package/dist/defaults/paragraphStyles.js.map +1 -1
  186. package/dist/defaults/parts.js +4 -4
  187. package/dist/defaults/parts.js.map +1 -1
  188. package/dist/defaults/tabStops.d.ts +29 -0
  189. package/dist/defaults/tabStops.d.ts.map +1 -0
  190. package/dist/defaults/tabStops.js +94 -0
  191. package/dist/defaults/tabStops.js.map +1 -0
  192. package/dist/defaults/tableStyle.d.ts.map +1 -1
  193. package/dist/defaults/tableStyle.js +44 -0
  194. package/dist/defaults/tableStyle.js.map +1 -1
  195. package/dist/defaults/toc.js +2 -2
  196. package/dist/defaults/verse.d.ts +11 -0
  197. package/dist/defaults/verse.d.ts.map +1 -0
  198. package/dist/defaults/verse.js +57 -0
  199. package/dist/defaults/verse.js.map +1 -0
  200. package/dist/design/layout.d.ts +15 -1
  201. package/dist/design/layout.d.ts.map +1 -1
  202. package/dist/design/layout.js +28 -4
  203. package/dist/design/layout.js.map +1 -1
  204. package/dist/fonts/usage.d.ts +7 -0
  205. package/dist/fonts/usage.d.ts.map +1 -1
  206. package/dist/fonts/usage.js +71 -0
  207. package/dist/fonts/usage.js.map +1 -1
  208. package/dist/frontmatter.d.ts +20 -0
  209. package/dist/frontmatter.d.ts.map +1 -1
  210. package/dist/frontmatter.js +69 -3
  211. package/dist/frontmatter.js.map +1 -1
  212. package/dist/html-backend.d.ts.map +1 -1
  213. package/dist/html-backend.js +107 -15
  214. package/dist/html-backend.js.map +1 -1
  215. package/dist/index.d.ts +18 -10
  216. package/dist/index.d.ts.map +1 -1
  217. package/dist/index.js +9 -4
  218. package/dist/index.js.map +1 -1
  219. package/dist/measure/bidiLines.d.ts +4 -3
  220. package/dist/measure/bidiLines.d.ts.map +1 -1
  221. package/dist/measure/bidiLines.js +14 -9
  222. package/dist/measure/bidiLines.js.map +1 -1
  223. package/dist/measure/cache.js +2 -2
  224. package/dist/measure/cache.js.map +1 -1
  225. package/dist/measure/cjkCompose.d.ts.map +1 -1
  226. package/dist/measure/cjkCompose.js +10 -6
  227. package/dist/measure/cjkCompose.js.map +1 -1
  228. package/dist/measure/hardBreaks.d.ts +46 -0
  229. package/dist/measure/hardBreaks.d.ts.map +1 -0
  230. package/dist/measure/hardBreaks.js +228 -0
  231. package/dist/measure/hardBreaks.js.map +1 -0
  232. package/dist/measure/index.d.ts +4 -3
  233. package/dist/measure/index.d.ts.map +1 -1
  234. package/dist/measure/index.js +5 -4
  235. package/dist/measure/index.js.map +1 -1
  236. package/dist/measure/leader.d.ts +20 -0
  237. package/dist/measure/leader.d.ts.map +1 -0
  238. package/dist/measure/leader.js +46 -0
  239. package/dist/measure/leader.js.map +1 -0
  240. package/dist/measure/links.js +1 -1
  241. package/dist/measure/links.js.map +1 -1
  242. package/dist/measure/plain.d.ts.map +1 -1
  243. package/dist/measure/plain.js +23 -26
  244. package/dist/measure/plain.js.map +1 -1
  245. package/dist/measure/rich.d.ts +19 -0
  246. package/dist/measure/rich.d.ts.map +1 -1
  247. package/dist/measure/rich.js +215 -39
  248. package/dist/measure/rich.js.map +1 -1
  249. package/dist/measure/tabs.d.ts +103 -0
  250. package/dist/measure/tabs.d.ts.map +1 -0
  251. package/dist/measure/tabs.js +123 -0
  252. package/dist/measure/tabs.js.map +1 -0
  253. package/dist/measure/types.d.ts +72 -2
  254. package/dist/measure/types.d.ts.map +1 -1
  255. package/dist/measure/types.js +87 -3
  256. package/dist/measure/types.js.map +1 -1
  257. package/dist/parse/blockParser.d.ts +13 -6
  258. package/dist/parse/blockParser.d.ts.map +1 -1
  259. package/dist/parse/blockParser.js +457 -87
  260. package/dist/parse/blockParser.js.map +1 -1
  261. package/dist/parse/codeFence.d.ts +18 -0
  262. package/dist/parse/codeFence.d.ts.map +1 -0
  263. package/dist/parse/codeFence.js +52 -0
  264. package/dist/parse/codeFence.js.map +1 -0
  265. package/dist/parse/index.d.ts +1 -1
  266. package/dist/parse/index.d.ts.map +1 -1
  267. package/dist/parse/index.js.map +1 -1
  268. package/dist/parse/indexMarks.d.ts +3 -1
  269. package/dist/parse/indexMarks.d.ts.map +1 -1
  270. package/dist/parse/indexMarks.js +22 -2
  271. package/dist/parse/indexMarks.js.map +1 -1
  272. package/dist/parse/inlineFormatting.d.ts +50 -0
  273. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  274. package/dist/parse/inlineFormatting.js +94 -0
  275. package/dist/parse/inlineFormatting.js.map +1 -1
  276. package/dist/parse/sourceMapping.d.ts.map +1 -1
  277. package/dist/parse/sourceMapping.js +65 -1
  278. package/dist/parse/sourceMapping.js.map +1 -1
  279. package/dist/parse/types.d.ts +144 -9
  280. package/dist/parse/types.d.ts.map +1 -1
  281. package/dist/pipeline/build.d.ts.map +1 -1
  282. package/dist/pipeline/build.js +629 -47
  283. package/dist/pipeline/build.js.map +1 -1
  284. package/dist/pipeline/buildBlockKind.d.ts +5 -0
  285. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  286. package/dist/pipeline/buildBlockKind.js +74 -2
  287. package/dist/pipeline/buildBlockKind.js.map +1 -1
  288. package/dist/pipeline/buildHelpers.d.ts +3 -0
  289. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  290. package/dist/pipeline/buildHelpers.js +7 -2
  291. package/dist/pipeline/buildHelpers.js.map +1 -1
  292. package/dist/pipeline/buildMeasurement.js +1 -1
  293. package/dist/pipeline/buildMeasurement.js.map +1 -1
  294. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  295. package/dist/pipeline/calloutLayout.js +33 -2
  296. package/dist/pipeline/calloutLayout.js.map +1 -1
  297. package/dist/pipeline/chips.d.ts.map +1 -1
  298. package/dist/pipeline/chips.js +4 -0
  299. package/dist/pipeline/chips.js.map +1 -1
  300. package/dist/pipeline/codeBlocks.d.ts +38 -0
  301. package/dist/pipeline/codeBlocks.d.ts.map +1 -0
  302. package/dist/pipeline/codeBlocks.js +146 -0
  303. package/dist/pipeline/codeBlocks.js.map +1 -0
  304. package/dist/pipeline/codeInline.d.ts +22 -0
  305. package/dist/pipeline/codeInline.d.ts.map +1 -0
  306. package/dist/pipeline/codeInline.js +93 -0
  307. package/dist/pipeline/codeInline.js.map +1 -0
  308. package/dist/pipeline/codeLines.d.ts +91 -0
  309. package/dist/pipeline/codeLines.d.ts.map +1 -0
  310. package/dist/pipeline/codeLines.js +399 -0
  311. package/dist/pipeline/codeLines.js.map +1 -0
  312. package/dist/pipeline/columnBalancing.d.ts.map +1 -1
  313. package/dist/pipeline/columnBalancing.js +5 -0
  314. package/dist/pipeline/columnBalancing.js.map +1 -1
  315. package/dist/pipeline/config.d.ts.map +1 -1
  316. package/dist/pipeline/config.js +8 -1
  317. package/dist/pipeline/config.js.map +1 -1
  318. package/dist/pipeline/contentWarnings.d.ts +25 -0
  319. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  320. package/dist/pipeline/contentWarnings.js +173 -19
  321. package/dist/pipeline/contentWarnings.js.map +1 -1
  322. package/dist/pipeline/continuation.d.ts.map +1 -1
  323. package/dist/pipeline/continuation.js +9 -2
  324. package/dist/pipeline/continuation.js.map +1 -1
  325. package/dist/pipeline/dropCap.d.ts +128 -0
  326. package/dist/pipeline/dropCap.d.ts.map +1 -0
  327. package/dist/pipeline/dropCap.js +412 -0
  328. package/dist/pipeline/dropCap.js.map +1 -0
  329. package/dist/pipeline/floatPlacement.d.ts +34 -4
  330. package/dist/pipeline/floatPlacement.d.ts.map +1 -1
  331. package/dist/pipeline/floatPlacement.js +35 -5
  332. package/dist/pipeline/floatPlacement.js.map +1 -1
  333. package/dist/pipeline/floatSlots.d.ts +7 -0
  334. package/dist/pipeline/floatSlots.d.ts.map +1 -1
  335. package/dist/pipeline/floatSlots.js.map +1 -1
  336. package/dist/pipeline/hardBreaks.d.ts +19 -0
  337. package/dist/pipeline/hardBreaks.d.ts.map +1 -0
  338. package/dist/pipeline/hardBreaks.js +36 -0
  339. package/dist/pipeline/hardBreaks.js.map +1 -0
  340. package/dist/pipeline/headerFooter.d.ts +4 -1
  341. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  342. package/dist/pipeline/headerFooter.js +23 -6
  343. package/dist/pipeline/headerFooter.js.map +1 -1
  344. package/dist/pipeline/lineNumbers.d.ts +37 -0
  345. package/dist/pipeline/lineNumbers.d.ts.map +1 -0
  346. package/dist/pipeline/lineNumbers.js +441 -0
  347. package/dist/pipeline/lineNumbers.js.map +1 -0
  348. package/dist/pipeline/measureContentBlock.d.ts +38 -5
  349. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  350. package/dist/pipeline/measureContentBlock.js +284 -69
  351. package/dist/pipeline/measureContentBlock.js.map +1 -1
  352. package/dist/pipeline/partPalette.d.ts +1 -1
  353. package/dist/pipeline/partPalette.d.ts.map +1 -1
  354. package/dist/pipeline/partPalette.js +24 -2
  355. package/dist/pipeline/partPalette.js.map +1 -1
  356. package/dist/pipeline/placement.d.ts.map +1 -1
  357. package/dist/pipeline/placement.js +7 -0
  358. package/dist/pipeline/placement.js.map +1 -1
  359. package/dist/pipeline/resourceLayout.d.ts +15 -0
  360. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  361. package/dist/pipeline/resourceLayout.js +95 -15
  362. package/dist/pipeline/resourceLayout.js.map +1 -1
  363. package/dist/pipeline/styles.d.ts +18 -2
  364. package/dist/pipeline/styles.d.ts.map +1 -1
  365. package/dist/pipeline/styles.js +23 -8
  366. package/dist/pipeline/styles.js.map +1 -1
  367. package/dist/pipeline/tabs.d.ts +35 -0
  368. package/dist/pipeline/tabs.d.ts.map +1 -0
  369. package/dist/pipeline/tabs.js +99 -0
  370. package/dist/pipeline/tabs.js.map +1 -0
  371. package/dist/pipeline/textWrap.d.ts +94 -0
  372. package/dist/pipeline/textWrap.d.ts.map +1 -0
  373. package/dist/pipeline/textWrap.js +188 -0
  374. package/dist/pipeline/textWrap.js.map +1 -0
  375. package/dist/pipeline/toc.d.ts.map +1 -1
  376. package/dist/pipeline/toc.js +3 -38
  377. package/dist/pipeline/toc.js.map +1 -1
  378. package/dist/pipeline/verseLines.d.ts +98 -0
  379. package/dist/pipeline/verseLines.d.ts.map +1 -0
  380. package/dist/pipeline/verseLines.js +293 -0
  381. package/dist/pipeline/verseLines.js.map +1 -0
  382. package/dist/preflight.d.ts +46 -1
  383. package/dist/preflight.d.ts.map +1 -1
  384. package/dist/preflight.js +43 -7
  385. package/dist/preflight.js.map +1 -1
  386. package/dist/table/booktabs.d.ts +37 -0
  387. package/dist/table/booktabs.d.ts.map +1 -0
  388. package/dist/table/booktabs.js +82 -0
  389. package/dist/table/booktabs.js.map +1 -0
  390. package/dist/types.d.ts +787 -12
  391. package/dist/types.d.ts.map +1 -1
  392. package/dist/vdt.d.ts +367 -9
  393. package/dist/vdt.d.ts.map +1 -1
  394. package/dist/vdt.js +9 -2
  395. package/dist/vdt.js.map +1 -1
  396. package/dist/word/docxRead.d.ts.map +1 -1
  397. package/dist/word/docxRead.js +15 -0
  398. package/dist/word/docxRead.js.map +1 -1
  399. package/dist/word/index.d.ts +1 -1
  400. package/dist/word/index.d.ts.map +1 -1
  401. package/dist/word/index.js +1 -1
  402. package/dist/word/index.js.map +1 -1
  403. package/dist/word/inline.d.ts +6 -1
  404. package/dist/word/inline.d.ts.map +1 -1
  405. package/dist/word/inline.js +35 -1
  406. package/dist/word/inline.js.map +1 -1
  407. package/dist/word/model.d.ts +14 -0
  408. package/dist/word/model.d.ts.map +1 -1
  409. package/dist/word/model.js.map +1 -1
  410. package/dist/word/template.d.ts +12 -3
  411. package/dist/word/template.d.ts.map +1 -1
  412. package/dist/word/template.js +13 -3
  413. package/dist/word/template.js.map +1 -1
  414. package/dist/word/toDocx.d.ts.map +1 -1
  415. package/dist/word/toDocx.js +52 -8
  416. package/dist/word/toDocx.js.map +1 -1
  417. package/dist/word/toMarkdown.d.ts +15 -1
  418. package/dist/word/toMarkdown.d.ts.map +1 -1
  419. package/dist/word/toMarkdown.js +133 -7
  420. package/dist/word/toMarkdown.js.map +1 -1
  421. package/dist/word/word.test.js +124 -2
  422. package/dist/word/word.test.js.map +1 -1
  423. package/dist/worker/fonts.d.ts +2 -1
  424. package/dist/worker/fonts.d.ts.map +1 -1
  425. package/dist/worker/fonts.js +6 -2
  426. package/dist/worker/fonts.js.map +1 -1
  427. package/package.json +1 -1
package/dist/types.d.ts CHANGED
@@ -88,7 +88,79 @@ export interface ResourcePlacement {
88
88
  * figure's top (its bottom for a bottom float). A page without such a
89
89
  * column keeps the caption under the figure. Column floats only. */
90
90
  captionSide?: boolean;
91
- }
91
+ /** Scale a floated picture (bitmap, SVG, a video's poster) down, keeping
92
+ * its proportions, to the room a slot has, instead of moving it on
93
+ * (#626). `'never'`: a float either fits a slot at its size or waits
94
+ * for a later one. `'page'`: a float too tall for the band of a fresh
95
+ * page — the content area less what already stands there: an opener,
96
+ * other floats, footnotes, the float gap — shrinks to that band.
97
+ * `'slot'`: as `'page'`, and a float too tall for a slot of the page it
98
+ * is cited on (or for a fresh page's band beside another float) shrinks
99
+ * to it when it fits there at {@link minScale} or more; the slots are
100
+ * tried in their usual order. A picture with a safe area is cropped
101
+ * within it first. Tables (which split), floated boxes, comic strips,
102
+ * rotated floats and inline embeds are never scaled by it. Default:
103
+ * the type's `defaultPlacement`, then `layout.floatShrink.mode`, then
104
+ * `'never'`. */
105
+ shrink?: FloatShrinkMode;
106
+ /** The smallest scale {@link shrink} sets a picture at, 0 to 1 (default
107
+ * 0.7, then `layout.floatShrink.minScale`). A slot that needs less is
108
+ * passed over; on a fresh page, where the float has nowhere else to go,
109
+ * it is set at this scale and runs past the band. */
110
+ minScale?: number;
111
+ /** The measure of a picture's caption and note when the picture is
112
+ * narrower than its slot (scaled by {@link shrink} or
113
+ * `layout.fitFiguresToPage`, or a bitmap smaller than the column):
114
+ * `'slot'` (the default) keeps the slot's measure; `'body'` sets them
115
+ * as wide as the picture, under it per {@link align}. */
116
+ captionMeasure?: 'slot' | 'body';
117
+ /** Run the text beside the resource (#627): it sits at this side of its
118
+ * column, and the lines beside it are set to the measure left over,
119
+ * {@link wrapGap} clear of its box (caption included), then return to
120
+ * the full measure under it. `'left'` / `'right'` are sides of the body
121
+ * flow, as {@link align}'s (on a right-to-left document's mirrored
122
+ * pages `'left'` is the sheet's right); `'start'` / `'end'` are the
123
+ * same sides by their logical names. Applies to an inline embed
124
+ * (`position: 'here'`, the text after the `::resource` line runs beside
125
+ * it) and to a `span: 'column'` float at the head or foot of one column
126
+ * (the column's first or last lines run beside it); a page-span float,
127
+ * a float across several columns, a side-column float, a rotated one
128
+ * and anything in vertical text keep their whole band. The resource
129
+ * takes {@link width} of the column, or `layout.wrap.defaultWidth`
130
+ * when it sets none. Where the text left beside it would be narrower
131
+ * than `layout.wrap.minTextWidth`, or the resource shorter than
132
+ * `layout.wrap.minLinesBeside` lines, it takes its band whole and a
133
+ * `textWrap` warning says so. Default `'none'`. */
134
+ wrap?: WrapSide;
135
+ /** The space between a wrapped resource's box (caption included) and
136
+ * the text beside it, and under it before the text runs full width
137
+ * again (rounded up to whole grid lines). Default `layout.wrap.gap`,
138
+ * else one body line, the float gap. */
139
+ wrapGap?: Dimension;
140
+ }
141
+ /** The side of its column a resource or a box sits on with text running
142
+ * beside it (see `ResourcePlacement.wrap`, #627). */
143
+ export type WrapSide = 'none' | 'left' | 'right' | 'start' | 'end';
144
+ /** The document's text wrap settings (`LayoutConfig.wrap`, #627). */
145
+ export interface TextWrapConfig {
146
+ /** Default `ResourcePlacement.wrapGap`: the space between a wrapped
147
+ * picture and the text. Default: one body line (the float gap). */
148
+ gap?: Dimension;
149
+ /** The narrowest measure the text beside a wrapped picture may take: a
150
+ * length, or a share of the column (`0.3`). Narrower, the picture takes
151
+ * its band whole (`textWrap` warning). Default 12 em of body text. */
152
+ minTextWidth?: Dimension | number;
153
+ /** The fewest lines of text worth setting beside a picture. A picture
154
+ * shorter than that (gap included) takes its band whole (`textWrap`
155
+ * warning). Default 2. */
156
+ minLinesBeside?: number;
157
+ /** The share of the column a wrapped resource takes when its placement
158
+ * sets no `width`, 0 to 1. Default 0.45. */
159
+ defaultWidth?: number;
160
+ }
161
+ /** How a floated picture is scaled to the room of a slot (see
162
+ * `ResourcePlacement.shrink`). */
163
+ export type FloatShrinkMode = 'never' | 'page' | 'slot';
92
164
  /** A user-definable category of resource (e.g. "Figure", "Table"). Drives
93
165
  * numbering, caption prefixes, and inline-reference labels. */
94
166
  export interface ResourceType {
@@ -351,8 +423,21 @@ export interface Resource {
351
423
  bitmap?: {
352
424
  fileId: string;
353
425
  format: string;
426
+ /** The file's width in pixels (not its print size). */
354
427
  width: number;
428
+ /** The file's height in pixels. */
355
429
  height: number;
430
+ /** Pixels per inch of the picture at its natural print size (#631):
431
+ * its natural width in layout px is `width × page.dpi / resolution`
432
+ * (the height likewise), and the column still caps it. Absent:
433
+ * `layout.bitmapResolution` decides (by default the pixels are read
434
+ * at `page.dpi`). */
435
+ resolution?: number;
436
+ /** The resolution stored in the file (PNG `pHYs`, JPEG JFIF / EXIF,
437
+ * WebP EXIF; a Word picture's printed extent), as the host read it,
438
+ * horizontal ppi. Used under `layout.bitmapResolution: 'file'`, where
439
+ * 72 and 96 count as unset; shown by the Sandbox. */
440
+ fileResolution?: number;
356
441
  };
357
442
  /** Present when `kind === 'svg'`. */
358
443
  svg?: {
@@ -604,6 +689,13 @@ export interface LayoutContinuation {
604
689
  * numbered through the book (`footnotes.numbering: 'document'`) go on
605
690
  * from it. */
606
691
  footnoteNumber?: number;
692
+ /** The number of the last line the preceding content counted (#621), so
693
+ * line numbers counted through the book (`lineNumbers.restart:
694
+ * 'document'`) go on from it. `continuationAfter` counts the lines of
695
+ * verse from the text; a count of every line (`count: 'all'`) depends
696
+ * on the layout, and the host takes it from the previous chapter's
697
+ * `VDTDocument.lastLineNumber`. */
698
+ lineNumber?: number;
607
699
  /** The `:::part` in effect at the end of the preceding content — the last
608
700
  * part opened, whether or not its fence has closed — so a chapter laid
609
701
  * out on its own keeps `{partTitle}` / `{partNumber}` and the part's
@@ -749,6 +841,10 @@ export interface PageConfig {
749
841
  width?: Dimension;
750
842
  height?: Dimension;
751
843
  margins?: PageMargins;
844
+ /** Layout px per inch: every length is converted at this rate, and a
845
+ * bitmap without a resolution of its own (see `Resource.bitmap.resolution`
846
+ * and `layout.bitmapResolution`) is laid out one pixel per layout px.
847
+ * Default 300. */
752
848
  dpi?: number;
753
849
  cutLines?: CutLinesConfig;
754
850
  baselineGrid?: BaselineGridConfig;
@@ -850,6 +946,25 @@ export interface LayoutConfig {
850
946
  * pages are sized for their figures; the HTML viewer, whose pages are as
851
947
  * tall as the screen, turns it on. */
852
948
  fitFiguresToPage?: boolean;
949
+ /** How a bitmap without its own `resolution` takes its natural print
950
+ * size (#631): `'document'` (default) reads its pixels at `page.dpi`;
951
+ * a number is the ppi of every such bitmap; `'file'` uses the
952
+ * resolution read from the file (`Resource.bitmap.fileResolution`),
953
+ * 72 and 96 counting as unset, else `page.dpi`. The column caps the
954
+ * natural size either way; a smaller picture is never enlarged. */
955
+ bitmapResolution?: BitmapResolution;
956
+ /** The document's default for scaling a floated picture to the room of
957
+ * its slot (#626): `mode` as `ResourcePlacement.shrink`, `minScale` as
958
+ * `ResourcePlacement.minScale` (default 0.7). A resource's placement,
959
+ * then its type's `defaultPlacement`, override it. Default
960
+ * `{ mode: 'never' }`. Unlike {@link fitFiguresToPage}, a hard cap at
961
+ * the content area, this looks at the band the float would take. */
962
+ floatShrink?: FloatShrinkConfig;
963
+ /** Text wrap round a resource or a box narrower than its column (#627):
964
+ * the gap, the narrowest text measure, the fewest lines beside and the
965
+ * default width (see {@link TextWrapConfig}). A resource opts in with
966
+ * `placement.wrap`, a box with its `wrap` attribute. */
967
+ wrap?: TextWrapConfig;
853
968
  /** On the closing page of a chapter (and of the document), move the
854
969
  * page-wide figures and tables set below the last band of text up to sit
855
970
  * one float gap under it, stacked in their order, instead of at the page
@@ -902,6 +1017,22 @@ export interface LayoutConfig {
902
1017
  * document's writing mode unless it sets its own. */
903
1018
  writingMode?: WritingMode;
904
1019
  }
1020
+ /** How bitmaps without a resolution of their own are sized (see
1021
+ * `LayoutConfig.bitmapResolution`): `'document'`, `'file'` or a ppi. */
1022
+ export type BitmapResolution = 'document' | 'file' | number;
1023
+ /** The document default for scaling floated pictures (see
1024
+ * `LayoutConfig.floatShrink`). */
1025
+ export interface FloatShrinkConfig {
1026
+ mode?: FloatShrinkMode;
1027
+ minScale?: number;
1028
+ }
1029
+ /** {@link TextWrapConfig} resolved; `gap` absent is one body line. */
1030
+ export interface ResolvedTextWrapConfig {
1031
+ gap?: Dimension;
1032
+ minTextWidth: Dimension | number;
1033
+ minLinesBeside: number;
1034
+ defaultWidth: number;
1035
+ }
905
1036
  /** Where an inline resource keeps the float gap (see
906
1037
  * `LayoutConfig.inlineResourceGap`). */
907
1038
  export type InlineResourceGap = 'around' | 'above';
@@ -920,6 +1051,12 @@ export interface ResolvedLayoutConfig {
920
1051
  lineWidth: Dimension;
921
1052
  };
922
1053
  fitFiguresToPage: boolean;
1054
+ bitmapResolution: BitmapResolution;
1055
+ floatShrink: {
1056
+ mode: FloatShrinkMode;
1057
+ minScale: number;
1058
+ };
1059
+ wrap: ResolvedTextWrapConfig;
923
1060
  hugClosingFloats: boolean;
924
1061
  inlineResourceGap: InlineResourceGap;
925
1062
  inlineResourceGapInBoxes: boolean;
@@ -1154,6 +1291,28 @@ export interface BodyTextConfig {
1154
1291
  * `pinLegacyHyphenBreaks`). Applies to the running text, headings, lists,
1155
1292
  * blockquotes and boxes. */
1156
1293
  breakAfterHyphens?: boolean;
1294
+ /** Read a backslash at the end of a source line, and `\\` before a space,
1295
+ * as a forced line break inside a paragraph, a quotation or a list item
1296
+ * (CommonMark's hard break, #620): the next words start a new line
1297
+ * of the same paragraph, and the line before the break is set at its
1298
+ * natural width, as a paragraph's last line is. A backslash that ends
1299
+ * the paragraph prints. Two trailing spaces are no break (they are
1300
+ * invisible, and editors leave them behind). Default `true`. `false`
1301
+ * keeps postext 1.22's reading: the backslashes print and the lines
1302
+ * join with a space (configurations stored before `configVersion` 9
1303
+ * whose text has such a backslash read with it, see
1304
+ * `pinLegacyHardBreaks`). Titles (`\\` in a heading), captions, notes
1305
+ * and table cells break at `\\` either way. */
1306
+ hardLineBreaks?: boolean;
1307
+ /** Tab stops of every paragraph, list item and quotation (#622): where a
1308
+ * tab (`:tab`, or a tab character in the text) sends the words after
1309
+ * it. A paragraph style or a callout body that sets its own replaces
1310
+ * them. Unset: none; a tab character is then a word space, as before. */
1311
+ tabStops?: TabStop[];
1312
+ /** Default stops every `tabInterval` past the last of {@link tabStops}
1313
+ * (#622), from the start of the measure. Unset: a tab past the last stop
1314
+ * is a word space. */
1315
+ tabInterval?: Dimension;
1157
1316
  /** Start the line after a break at a compound's hyphen with a hyphen too:
1158
1317
  * "vencer-" | "-se", as Portuguese spelling and the Spanish Academy's
1159
1318
  * 2010 rules ask ("léxico-" | "-semántico"), so the reader knows the
@@ -1170,6 +1329,9 @@ export interface BodyTextConfig {
1170
1329
  * postext 1.4 gave them: grey (`#666666`), italic, the body's first-line
1171
1330
  * indent and no side indent. */
1172
1331
  blockquote?: BlockquoteConfig;
1332
+ /** How `:::verse` poems in the line layout are set (#620): each fence
1333
+ * attribute of the same name overrides the setting for its poem. */
1334
+ verse?: VerseConfig;
1173
1335
  /** When true, discourage a paragraph from ending with fewer than `orphanMinLines`
1174
1336
  * lines at the top of the next column. Soft (penalty-based). Default true. */
1175
1337
  avoidOrphans?: boolean;
@@ -1357,6 +1519,359 @@ export interface BlockquoteConfig {
1357
1519
  * the body's `firstLineIndent`. */
1358
1520
  firstLineIndent?: Dimension;
1359
1521
  }
1522
+ /** How a turnover of verse is set (#620): `'hang'` on a line of its own,
1523
+ * indented from the line's start; `'right'` flush with the end side,
1524
+ * behind an opening bracket (`turnoverMark`), the custom of English and
1525
+ * Spanish editions of poetry. */
1526
+ export type VerseTurnover = 'hang' | 'right';
1527
+ /** The defaults of `:::verse` poems (#620). A poem's fence names any of
1528
+ * them for itself (`:::verse{indentStep=1em turnover=right}`). */
1529
+ export interface VerseConfig {
1530
+ /** How a poem whose fence names no `layout` is set. `'auto'` (default):
1531
+ * as bayts (#378) when a line carries a hemistich separator (`||`, a
1532
+ * spaced `\\`), line by line otherwise. `'bayt'`: as bayts always, a
1533
+ * poem with no separator as centred single hemistichs, as postext 1.22
1534
+ * set it (configurations stored before #620 are read with it when they
1535
+ * hold such a poem). */
1536
+ layout?: 'auto' | 'bayt';
1537
+ /** The width of one leading space of a line of verse (a tab counts four,
1538
+ * an ideographic space two); `em` is the poem's size. Default `0.5em`:
1539
+ * two spaces indent a line one em. */
1540
+ indentStep?: Dimension;
1541
+ /** How a line wider than the measure turns over. Default `'hang'`. */
1542
+ turnover?: VerseTurnover;
1543
+ /** The indent of a hanging turnover, from its line's own start, when
1544
+ * the poem's paragraph style sets no `hangingIndent`; `em` is the
1545
+ * poem's size. Default `2em`. */
1546
+ hang?: Dimension;
1547
+ /** The mark before a turnover set flush right (`turnover: 'right'`).
1548
+ * Default `[`. */
1549
+ turnoverMark?: string;
1550
+ /** The space between two stanzas, in lines of the poem's leading. On
1551
+ * the baseline grid it comes out a whole number of grid lines (a
1552
+ * paragraph style with `snapToGrid: false` keeps it exact). Default
1553
+ * `1`. */
1554
+ stanzaSpace?: number;
1555
+ /** Keep any stanza of this many lines of verse or fewer whole in one
1556
+ * column (a haiku, a tanka): it moves on whole when it does not fit.
1557
+ * Default `0`, off. */
1558
+ keepStanzas?: number;
1559
+ /** A line of verse a little wider than the measure tightens its word
1560
+ * spaces, down to `bodyText.minWordSpacing` of their natural width, and
1561
+ * stays on one line; only a line that does not fit even then turns
1562
+ * over. `false`: every line wider than the measure turns over, as
1563
+ * postext 1.23 set them (configurations stored by 1.23 are read with it
1564
+ * when they hold a poem set line by line). Default `true`. */
1565
+ tighten?: boolean;
1566
+ }
1567
+ export interface ResolvedVerseConfig {
1568
+ layout: 'auto' | 'bayt';
1569
+ indentStep: Dimension;
1570
+ turnover: VerseTurnover;
1571
+ hang: Dimension;
1572
+ turnoverMark: string;
1573
+ stanzaSpace: number;
1574
+ keepStanzas: number;
1575
+ tighten: boolean;
1576
+ }
1577
+ /** What `lineNumbers` counts (#621): `'verse'`, the lines of `:::verse`
1578
+ * poems (a turnover takes no number); `'all'`, every laid-out line of the
1579
+ * body text — paragraphs, list items, quotations and verse. */
1580
+ export type LineNumbersCount = 'verse' | 'all';
1581
+ /** Where the line count starts again (#621): never (`'document'`, which
1582
+ * runs on through the chapters of a book), at every level-1 heading
1583
+ * (`'chapter'`), at every level-1 or level-2 heading (`'section'`), on
1584
+ * every page (`'page'`) or at every `:::verse` poem (`'poem'`). */
1585
+ export type LineNumbersRestart = 'document' | 'chapter' | 'section' | 'page' | 'poem';
1586
+ /** The side of the text the numbers stand on (#621): the outer margin
1587
+ * (away from the spine: right on a recto, left on a verso), the inner
1588
+ * one, the physical `'left'` or `'right'`, the start or end side of the
1589
+ * document's direction (`'start'` is the right of a right-to-left
1590
+ * book), or the side column of a one-and-a-half layout (`'side'`, set
1591
+ * flush with its edge next to the text). */
1592
+ export type LineNumbersPosition = 'outer' | 'inner' | 'left' | 'right' | 'start' | 'end' | 'side';
1593
+ /** Where the numbers of a page of two or more text columns go (#621):
1594
+ * beside every column on the {@link LineNumbersPosition} side (`'each'`),
1595
+ * in the gutters (`'gutter'`: the first column's on its right, the
1596
+ * others' on their left) or on the outer edges of the first and last
1597
+ * columns (`'outer-edges'`, columns between them as `'each'`). */
1598
+ export type LineNumbersMultiColumn = 'each' | 'gutter' | 'outer-edges';
1599
+ /** Line numbers in the margin (#621): every Nth line of the text gets its
1600
+ * number beside it, as critical editions, poetry, legal texts and
1601
+ * line-referenced school texts print them. The numbers are painted on
1602
+ * the line's baseline and never move a line. Off unless `enabled`. */
1603
+ export interface LineNumbersConfig {
1604
+ /** Default `false`. */
1605
+ enabled?: boolean;
1606
+ /** What is counted. Default `'verse'`. */
1607
+ count?: LineNumbersCount;
1608
+ /** Print the number of every Nth line (the multiples of N). Default
1609
+ * `5`; a `:::verse` fence sets its own with `interval=N`. */
1610
+ interval?: number;
1611
+ /** Also print the number of the first line after each restart. Default
1612
+ * `false`. */
1613
+ numberFirst?: boolean;
1614
+ /** Where the count starts again. Default `'poem'` when {@link count} is
1615
+ * `'verse'`, `'page'` when it is `'all'`. `:::numbering{lines=N}`
1616
+ * restarts it anywhere. */
1617
+ restart?: LineNumbersRestart;
1618
+ /** The number of the first line after a restart. Default `1`. */
1619
+ startAt?: number;
1620
+ /** Default `'outer'`. */
1621
+ position?: LineNumbersPosition;
1622
+ /** Pages of two or more text columns. Default `'outer-edges'`. */
1623
+ multiColumn?: LineNumbersMultiColumn;
1624
+ /** The distance from the column's edge to the number; `em` is the
1625
+ * number's size. Default `1em`. Not used with `position: 'side'`, where
1626
+ * the number stands flush with the side column's edge. */
1627
+ gap?: Dimension;
1628
+ /** How a number aligns: `'auto'` flush toward the text (right-aligned
1629
+ * in a left margin, left-aligned in a right one), `'left'` or
1630
+ * `'right'` within the width of the widest number of the page. Default
1631
+ * `'auto'`. */
1632
+ align?: 'auto' | 'left' | 'right';
1633
+ /** Default: the body font family. */
1634
+ fontFamily?: string;
1635
+ /** Default: 0.8 of the body font size. */
1636
+ fontSize?: Dimension;
1637
+ /** Default: the body font weight. */
1638
+ fontWeight?: number;
1639
+ /** Default `false`. */
1640
+ italic?: boolean;
1641
+ /** Default: the body text colour. A palette-linked colour follows part
1642
+ * and section palettes. */
1643
+ color?: ColorValue;
1644
+ /** The numbering format, in any spelling a list or a page number takes
1645
+ * (`decimal`, `lower-roman`, `arabic-indic`, `一`…). Default decimal,
1646
+ * in the document's digits (`numerals`). */
1647
+ format?: string;
1648
+ }
1649
+ export interface ResolvedLineNumbersConfig {
1650
+ enabled: boolean;
1651
+ count: LineNumbersCount;
1652
+ interval: number;
1653
+ numberFirst: boolean;
1654
+ restart: LineNumbersRestart;
1655
+ startAt: number;
1656
+ position: LineNumbersPosition;
1657
+ multiColumn: LineNumbersMultiColumn;
1658
+ gap: Dimension;
1659
+ align: 'auto' | 'left' | 'right';
1660
+ fontFamily: string;
1661
+ fontSize: Dimension;
1662
+ fontWeight: number;
1663
+ italic: boolean;
1664
+ color: ColorValue;
1665
+ /** As written; unset for decimal. */
1666
+ format?: string;
1667
+ }
1668
+ /** The kinds of token a code listing is coloured by (#624): what the
1669
+ * built-in tokenizer and a registered highlighter
1670
+ * (`registerCodeHighlighter`) name, and what `codeStyle.tokens` colours.
1671
+ * `prompt` and `output` are a shell session's (`console`): the prompt and
1672
+ * what the program prints. */
1673
+ export type CodeTokenKind = 'keyword' | 'string' | 'number' | 'comment' | 'function' | 'type' | 'operator' | 'punctuation' | 'variable' | 'meta' | 'prompt' | 'output';
1674
+ /** How a code line wider than its box is set (#624): `'wrap'` turns it
1675
+ * over, `'shrink'` sets the whole listing smaller, `'clip'` cuts it at the
1676
+ * box's inner edge. */
1677
+ export type CodeOverflow = 'wrap' | 'shrink' | 'clip';
1678
+ /** The look of one kind of token. Unset fields keep the listing's own. */
1679
+ export interface CodeTokenStyle {
1680
+ color?: ColorValue;
1681
+ bold?: boolean;
1682
+ italic?: boolean;
1683
+ }
1684
+ /** Inline code (`` `x` ``) set in a code face (#624). The span is set as
1685
+ * one unit, as a chip is: it never breaks across lines. */
1686
+ export interface InlineCodeStyleConfig {
1687
+ /** Default: `codeStyle.fontFamily`. */
1688
+ fontFamily?: string;
1689
+ /** Size; `em` is the surrounding text's. Default `0.9em`. */
1690
+ fontSize?: Dimension;
1691
+ /** Default: the surrounding text's colour. */
1692
+ color?: ColorValue;
1693
+ bold?: boolean;
1694
+ italic?: boolean;
1695
+ /** A fill behind the span. Default none. */
1696
+ background?: ColorValue;
1697
+ /** Outline colour. Default none. */
1698
+ borderColor?: ColorValue;
1699
+ /** Outline width. Default `0.5pt` when a border colour is set. */
1700
+ borderWidth?: Dimension;
1701
+ /** Corner radius; `em` is the span's size. Default `0.2em`. */
1702
+ borderRadius?: Dimension;
1703
+ /** Room left and right of the text inside the fill; `em` is the span's
1704
+ * size. Default `0.2em` with a fill or a border, `0` without. */
1705
+ paddingX?: Dimension;
1706
+ /** Room above and below the text band; paints outside the line box.
1707
+ * Default `0.1em`. */
1708
+ paddingY?: Dimension;
1709
+ }
1710
+ /** Code listings (#624): ```` ``` ```` and `~~~` fences, and indented code
1711
+ * behind {@link indentedCode}, set line by line in a box. */
1712
+ export interface CodeStyleConfig {
1713
+ /** Read fences as code blocks. Default `true`; `false` reads a fence's
1714
+ * lines as Markdown, as postext 1.22 did (stored documents written
1715
+ * before #624 get it, see `pinLegacyCodeBlocks`). */
1716
+ blocks?: boolean;
1717
+ /** Read a run of lines indented by four spaces (or a tab) after a blank
1718
+ * line as a code block. Default `false`: Postext text often indents
1719
+ * with spaces, and nested lists read leading spaces. */
1720
+ indentedCode?: boolean;
1721
+ /** Default `'Source Code Pro'`. */
1722
+ fontFamily?: string;
1723
+ /** `em` is the body's size. Default `0.85em`. */
1724
+ fontSize?: Dimension;
1725
+ fontWeight?: number;
1726
+ /** Weight of bold tokens. Default `700`. */
1727
+ boldFontWeight?: number;
1728
+ /** Leading of the code lines; `em` is the code's size. Default: the
1729
+ * body's baseline grid line. */
1730
+ lineHeight?: Dimension;
1731
+ /** The text after a listing goes back to the baseline grid. Default
1732
+ * `true`; `false` keeps the exact `marginBottom`. */
1733
+ snapToGrid?: boolean;
1734
+ /** Default: the body text colour. */
1735
+ color?: ColorValue;
1736
+ /** Default `true`. */
1737
+ backgroundEnabled?: boolean;
1738
+ /** Default `#f4f4f4`. */
1739
+ background?: ColorValue;
1740
+ /** Default `0.6em` on every side. */
1741
+ padding?: CalloutPaddingConfig;
1742
+ /** Default off, `#cccccc`, `0.5pt`. */
1743
+ border?: CalloutBorderConfig;
1744
+ /** Default `0`. */
1745
+ borderRadius?: Dimension;
1746
+ /** Default `0.75em`. */
1747
+ marginTop?: Dimension;
1748
+ /** Default `0.75em`. */
1749
+ marginBottom?: Dimension;
1750
+ /** Default `'column'`; a fence sets its own with `span=page`. */
1751
+ span?: 'column' | 'page';
1752
+ /** Columns a tab advances to. Default `4`. */
1753
+ tabSize?: number;
1754
+ /** Default `'wrap'`. */
1755
+ overflow?: CodeOverflow;
1756
+ /** Indent of a wrapped line's continuations, in character cells.
1757
+ * Default `2`. */
1758
+ wrapIndent?: number;
1759
+ /** Set in the indent of a continuation line. Default `'»'` (a mark
1760
+ * every Latin face carries; `'↪'` is missing from most code faces);
1761
+ * `''` sets none. */
1762
+ wrapMarker?: string;
1763
+ /** `'shrink'`: the smallest size the listing is set at, as a share of
1764
+ * `fontSize`; past it the lines wrap. Default `0.8`. */
1765
+ minFontScale?: number;
1766
+ /** Number the lines of every listing. Default `false`; a fence sets its
1767
+ * own with `lineNumbers` / `lineNumbers=false` and `start=N`. */
1768
+ lineNumbers?: boolean;
1769
+ /** Default `#8a8a8a`. */
1770
+ lineNumberColor?: ColorValue;
1771
+ /** Room between the numbers and the code; `em` is the code's size.
1772
+ * Default `1em`. */
1773
+ lineNumberGap?: Dimension;
1774
+ /** The tint behind the lines a fence's `highlight="3,5-7"` names.
1775
+ * Default `#fff4c2`. */
1776
+ highlightBackground?: ColorValue;
1777
+ /** Default `false`: a listing splits between lines across columns and
1778
+ * pages. */
1779
+ keepTogether?: boolean;
1780
+ /** Fewest lines on each side of a split. Default `2`. */
1781
+ splitMinLines?: number;
1782
+ /** Repeat the title on each continuation. Default `false`. */
1783
+ repeatTitle?: boolean;
1784
+ /** Mark a part that goes on ("Continued"). Default `false`. */
1785
+ continuesMarkerEnabled?: boolean;
1786
+ /** Default `"Continued"` in the document language. */
1787
+ continuesMarker?: string;
1788
+ /** The title row a fence's `title` prints. Default: the code face at
1789
+ * 0.85 of the code size, bold. */
1790
+ titleStyle?: CalloutTitleStyleConfig;
1791
+ /** When set, the fence's `title` prints in a label tab on the box's top
1792
+ * edge (a callout label) instead of a title row. */
1793
+ label?: CalloutLabelConfig;
1794
+ /** Default `'builtin'`: the built-in tokenizer colours `js`/`ts`,
1795
+ * `json`, `python`, `bash`/`sh`/`zsh`, `console`, `css`, `html`/`xml`,
1796
+ * `markdown` and `sql`; a registered highlighter takes precedence.
1797
+ * `'none'` sets every listing plain. */
1798
+ highlight?: 'builtin' | 'none';
1799
+ /** The look of each kind of token. Defaults: a muted palette (see
1800
+ * `DEFAULT_CODE_TOKENS`). */
1801
+ tokens?: Partial<Record<CodeTokenKind, CodeTokenStyle>>;
1802
+ /** Inline code in a code face. Unset: inline code is set in the body
1803
+ * face, as before #624. */
1804
+ inline?: InlineCodeStyleConfig;
1805
+ }
1806
+ export interface ResolvedInlineCodeStyleConfig {
1807
+ fontFamily: string;
1808
+ fontSize: Dimension;
1809
+ color?: ColorValue;
1810
+ bold: boolean;
1811
+ italic: boolean;
1812
+ background?: ColorValue;
1813
+ borderColor?: ColorValue;
1814
+ borderWidth: Dimension;
1815
+ borderRadius: Dimension;
1816
+ paddingX: Dimension;
1817
+ paddingY: Dimension;
1818
+ }
1819
+ export interface ResolvedCodeStyleConfig {
1820
+ blocks: boolean;
1821
+ indentedCode: boolean;
1822
+ fontFamily: string;
1823
+ fontSize: Dimension;
1824
+ fontWeight: number;
1825
+ boldFontWeight: number;
1826
+ /** Absent: the body's baseline grid line. */
1827
+ lineHeight?: Dimension;
1828
+ snapToGrid: boolean;
1829
+ color: ColorValue;
1830
+ backgroundEnabled: boolean;
1831
+ background: ColorValue;
1832
+ padding: {
1833
+ top: Dimension;
1834
+ right: Dimension;
1835
+ bottom: Dimension;
1836
+ left: Dimension;
1837
+ };
1838
+ border: {
1839
+ enabled: boolean;
1840
+ color: ColorValue;
1841
+ width: Dimension;
1842
+ };
1843
+ borderRadius: Dimension;
1844
+ marginTop: Dimension;
1845
+ marginBottom: Dimension;
1846
+ span: 'column' | 'page';
1847
+ tabSize: number;
1848
+ overflow: CodeOverflow;
1849
+ wrapIndent: number;
1850
+ wrapMarker: string;
1851
+ minFontScale: number;
1852
+ lineNumbers: boolean;
1853
+ lineNumberColor: ColorValue;
1854
+ lineNumberGap: Dimension;
1855
+ highlightBackground: ColorValue;
1856
+ keepTogether: boolean;
1857
+ splitMinLines: number;
1858
+ repeatTitle: boolean;
1859
+ continuesMarkerEnabled: boolean;
1860
+ /** Absent: the document language's. */
1861
+ continuesMarker?: string;
1862
+ /** As written; absent: the default title row. */
1863
+ titleStyle?: CalloutTitleStyleConfig;
1864
+ /** As written; absent: no label tab. */
1865
+ label?: CalloutLabelConfig;
1866
+ highlight: 'builtin' | 'none';
1867
+ tokens: Record<CodeTokenKind, {
1868
+ color?: ColorValue;
1869
+ bold: boolean;
1870
+ italic: boolean;
1871
+ }>;
1872
+ /** Absent: inline code in the body face. */
1873
+ inline?: ResolvedInlineCodeStyleConfig;
1874
+ }
1360
1875
  export interface ResolvedBlockquoteConfig {
1361
1876
  color: ColorValue;
1362
1877
  italic: boolean;
@@ -1400,8 +1915,14 @@ export interface ResolvedBodyTextConfig {
1400
1915
  optimalRagged: boolean;
1401
1916
  breakAfterDashes: boolean;
1402
1917
  breakAfterHyphens: boolean;
1918
+ hardLineBreaks: boolean;
1919
+ /** Absent when unset (see {@link BodyTextConfig.tabStops}). */
1920
+ tabStops?: TabStop[];
1921
+ /** Absent when unset (see {@link BodyTextConfig.tabInterval}). */
1922
+ tabInterval?: Dimension;
1403
1923
  repeatHyphen: boolean;
1404
1924
  blockquote: ResolvedBlockquoteConfig;
1925
+ verse: ResolvedVerseConfig;
1405
1926
  avoidOrphans: boolean;
1406
1927
  orphanMinLines: number;
1407
1928
  orphanPenalty: number;
@@ -1492,14 +2013,50 @@ export interface TableStyleConfig {
1492
2013
  borderWidth?: Dimension;
1493
2014
  /** Inner padding inside each cell. Default `0.375em`. */
1494
2015
  cellPadding?: Dimension;
1495
- /** Which rules to stroke when {@link borders} is on. Default `'grid'`. */
2016
+ /** Which rules to stroke when {@link borders} is on. Default `'grid'`.
2017
+ * `'booktabs'` strokes its own widths ({@link heavyRuleWidth},
2018
+ * {@link lightRuleWidth}, {@link spanRuleWidth}) and ignores
2019
+ * {@link borderWidth}. */
1496
2020
  rules?: TableRules;
1497
2021
  /** Corner radius of the table's outer frame. Default `0` (square). The
1498
2022
  * cell fills are clipped to the rounded frame, whatever the rules (with
1499
2023
  * `'none'` the fills alone show the rounded shape); the inner rules stay
1500
2024
  * straight. A table split across pages rounds the top corners of its
1501
- * first part and the bottom corners of its last. */
2025
+ * first part and the bottom corners of its last. `'booktabs'` rules
2026
+ * have no frame to round: they stay straight (the fills are still
2027
+ * clipped). */
1502
2028
  borderRadius?: Dimension;
2029
+ /** `'booktabs'` (#625): width of the rules above the table and under its
2030
+ * last row (LaTeX `\heavyrulewidth`). An `em` value is relative to
2031
+ * {@link bodyFontSize}. Default `0.08em`. */
2032
+ heavyRuleWidth?: Dimension;
2033
+ /** `'booktabs'`: width of the rule under the header rows and of the
2034
+ * group rules (`\lightrulewidth`). An `em` value is relative to
2035
+ * {@link bodyFontSize}. Default `0.05em`. */
2036
+ lightRuleWidth?: Dimension;
2037
+ /** `'booktabs'`: width of the rules under header cells that span several
2038
+ * columns (`\cmidrulewidth`). An `em` value is relative to
2039
+ * {@link bodyFontSize}. Default `0.03em`. */
2040
+ spanRuleWidth?: Dimension;
2041
+ /** `'booktabs'`: the rules under header cells that span more than one
2042
+ * column, above the last header row: shortened at both ends by
2043
+ * {@link spanRuleTrim} so neighbouring rules do not touch
2044
+ * (`'trimmed'`, the default, `\cmidrule(lr)`), across the whole cell
2045
+ * (`'full'`), or none (`'none'`). */
2046
+ spanRules?: TableSpanRules;
2047
+ /** `'booktabs'`: how much a `'trimmed'` span rule is shortened at each
2048
+ * end. An `em` value is relative to {@link bodyFontSize}. Default
2049
+ * `0.5em`. */
2050
+ spanRuleTrim?: Dimension;
2051
+ /** `'booktabs'`: a light rule above every body row that heads a group
2052
+ * (one cell across every column, or all header cells), except one that
2053
+ * opens a page. Default `false`. */
2054
+ groupRules?: boolean;
2055
+ /** `'booktabs'`: the rule that closes a part of a split table that goes
2056
+ * on overleaf: the heavy bottom rule (`'bottom'`), a light rule
2057
+ * (`'light'`, the default: the heavy rule closes only the real last
2058
+ * row), or none (`'none'`). */
2059
+ continuedFootRule?: TableContinuedFootRule;
1503
2060
  /** What happens to a table taller than the space a page offers: continue
1504
2061
  * it on the following pages (`'split'`, the default), keep only the rows
1505
2062
  * that fit (`'clip'`), or leave it out (`'hide'`). See {@link TableOverflow}. */
@@ -1531,8 +2088,17 @@ export interface ResolvedNamedTableStyleConfig extends ResolvedTableStyleConfig
1531
2088
  /** Letter case of a table's header cells (`TableStyleConfig.headerTextTransform`). */
1532
2089
  export type TableTextTransform = 'none' | 'uppercase';
1533
2090
  /** Rule pattern of a table: the full cell grid, horizontal rules only (top
1534
- * and bottom edge of every row), the outer frame only, or none. */
1535
- export type TableRules = 'grid' | 'horizontal' | 'outer' | 'none';
2091
+ * and bottom edge of every row), the outer frame only, none, or the
2092
+ * booktabs pattern of journal tables (#625): a heavy rule above the table
2093
+ * and under its last row, a light rule under the header, short rules
2094
+ * under spanning header cells and no vertical rules. */
2095
+ export type TableRules = 'grid' | 'horizontal' | 'outer' | 'none' | 'booktabs';
2096
+ /** Rules of a `'booktabs'` table under header cells that span several
2097
+ * columns (`TableStyleConfig.spanRules`). */
2098
+ export type TableSpanRules = 'trimmed' | 'full' | 'none';
2099
+ /** What closes a part of a `'booktabs'` table that continues on the next
2100
+ * page (`TableStyleConfig.continuedFootRule`). */
2101
+ export type TableContinuedFootRule = 'bottom' | 'light' | 'none';
1536
2102
  /** Behaviour of a table taller than the page: `'split'` breaks it between
1537
2103
  * rows and continues on the following pages, repeating the header rows and
1538
2104
  * suffixing the caption; `'clip'` keeps the leading rows that fit and drops
@@ -1561,6 +2127,13 @@ export interface ResolvedTableStyleConfig {
1561
2127
  cellPadding: Dimension;
1562
2128
  rules: TableRules;
1563
2129
  borderRadius: Dimension;
2130
+ heavyRuleWidth: Dimension;
2131
+ lightRuleWidth: Dimension;
2132
+ spanRuleWidth: Dimension;
2133
+ spanRules: TableSpanRules;
2134
+ spanRuleTrim: Dimension;
2135
+ groupRules: boolean;
2136
+ continuedFootRule: TableContinuedFootRule;
1564
2137
  overflow: TableOverflow;
1565
2138
  continuedSuffix: string;
1566
2139
  continuesMarkerEnabled: boolean;
@@ -1768,6 +2341,86 @@ export interface ResolvedVideoStyleConfig {
1768
2341
  * optional and inherits the body text when unset, so a style only needs to
1769
2342
  * spell out what differs from running text. See
1770
2343
  * {@link ResolvedParagraphStyleConfig}. */
2344
+ /** How a drop cap treats an opening quote, `¿`, `¡` or bracket before
2345
+ * the letter (#623; see {@link ParagraphDropCap.punctuation}). */
2346
+ export type DropCapPunctuation = 'with-cap' | 'hang' | 'text';
2347
+ /** What a drop cap does in a paragraph of fewer lines than it sinks
2348
+ * (#623; see {@link ParagraphDropCap.shortParagraph}). */
2349
+ export type DropCapShortParagraph = 'reserve' | 'shrink' | 'skip';
2350
+ /** The first words after a drop cap set in small capitals or capitals
2351
+ * (#623; see {@link ParagraphDropCap.leadIn}). */
2352
+ export interface DropCapLeadIn {
2353
+ /** How many words, or `'line'` for the whole first line. */
2354
+ words?: number | 'line';
2355
+ /** Small capitals (as `:smallcaps[…]`). Default `true` unless
2356
+ * {@link uppercase} is set. */
2357
+ smallCaps?: boolean;
2358
+ /** Capitals. Default `false`. */
2359
+ uppercase?: boolean;
2360
+ }
2361
+ /**
2362
+ * A drop cap (or a raised initial) opening a body paragraph (#623): the
2363
+ * first letter set large at the start of the paragraph, its first
2364
+ * {@link sink} lines shortened around it on the start side (the left in
2365
+ * Latin text, the right in Arabic and Hebrew). The paragraph is broken,
2366
+ * justified and hyphenated as any other, and it never breaks before its
2367
+ * line {@link sink}, so the letter keeps its lines across columns and
2368
+ * pages. Set by a paragraph style (the first paragraph of a
2369
+ * `:::paragraphs{style=…}` group, or every one with {@link each}) or a
2370
+ * heading level or style (the first body paragraph after the heading);
2371
+ * `{dropcap}`, `{dropcap=false}` and `{dropcap=N}` on the group's fence or
2372
+ * the heading line switch it on, off or set its lines.
2373
+ */
2374
+ export interface ParagraphDropCap {
2375
+ /** Lines the initial spans, from the top of its capitals to its
2376
+ * baseline. Default `3`; `1` with a larger {@link fontSize} is a raised
2377
+ * initial standing on the first baseline. */
2378
+ lines?: number;
2379
+ /** Lines the initial drops into the text: it stands on the baseline of
2380
+ * line `sink`, and those lines are shortened. Fewer than {@link lines}
2381
+ * raises the initial above the first line, and the paragraph keeps that
2382
+ * rise clear above it (whole grid lines). Default {@link lines} (a true
2383
+ * drop cap). */
2384
+ sink?: number;
2385
+ /** Grapheme clusters set large: `É`, a letter with a combining mark, a
2386
+ * surrogate pair each count one. Default `1`. */
2387
+ characters?: number;
2388
+ /** Face of the initial. Default the paragraph's. */
2389
+ fontFamily?: string;
2390
+ /** Default the paragraph's weight. */
2391
+ fontWeight?: number;
2392
+ /** Default `false`. */
2393
+ italic?: boolean;
2394
+ /** Size of the initial. Default: the size that sets the top of its
2395
+ * capitals level with the capitals of the first line while it stands
2396
+ * {@link lines} lines down, both cap heights measured from the faces
2397
+ * (0.72 of the size when a face gives none). */
2398
+ fontSize?: Dimension;
2399
+ /** Default the paragraph's colour; a palette-linked colour follows part
2400
+ * and section palettes. */
2401
+ color?: ColorValue;
2402
+ /** Space between the initial and the shortened lines. Default `0.15em`
2403
+ * of the text size. */
2404
+ gap?: Dimension;
2405
+ /** An opening quote, `¿`, `¡` or bracket before the letter:
2406
+ * `'with-cap'` sets it at the initial's size as part of it, `'hang'`
2407
+ * at text size outside the measure before the initial, `'text'` at text
2408
+ * size at the start of the first line, after the initial. Default
2409
+ * `'with-cap'`. */
2410
+ punctuation?: DropCapPunctuation;
2411
+ /** The first words after the initial in small capitals or capitals. */
2412
+ leadIn?: DropCapLeadIn;
2413
+ /** A paragraph of fewer lines than {@link sink}: `'reserve'` keeps the
2414
+ * block {@link sink} lines tall so the next block clears the initial,
2415
+ * `'shrink'` sets the initial over the paragraph's own lines, `'skip'`
2416
+ * sets the paragraph without one. A content warning says so in each
2417
+ * case. Default `'reserve'`. */
2418
+ shortParagraph?: DropCapShortParagraph;
2419
+ /** A paragraph style's drop cap opens every paragraph of its group (a
2420
+ * catalogue of entries), not the first only. Read on paragraph styles
2421
+ * alone. Default `false`. */
2422
+ each?: boolean;
2423
+ }
1771
2424
  export interface ParagraphStyleConfig {
1772
2425
  /** Identifier referenced from `:::paragraphs{style="…"}`. */
1773
2426
  id: string;
@@ -1822,12 +2475,19 @@ export interface ParagraphStyleConfig {
1822
2475
  * N字上げ) is `textAlign: 'end'` with `endIndent: 'Nem'`; 地付き is the
1823
2476
  * same at `0`. Default `0`; a negative value counts as `0`. */
1824
2477
  endIndent?: Dimension;
1825
- /** Defaults to the body first-line indent. Ignored when
1826
- * {@link hangingIndent} is non-zero. */
2478
+ /** Indent of the first line, from {@link indent}. Defaults to the body
2479
+ * first-line indent. With a non-zero {@link hangingIndent} it applies
2480
+ * only when the style sets it itself: the first line starts at
2481
+ * `indent + firstLineIndent` and its turnovers at `indent +
2482
+ * hangingIndent` (a line of verse indented one em that hangs its
2483
+ * turnover three, #620); inherited from the body it gives way, and the
2484
+ * first line starts at `indent`. */
1827
2485
  firstLineIndent?: Dimension;
1828
2486
  /** Indent applied to every line except the first (bibliographies,
1829
- * glossaries), from {@link indent}. Non-zero replaces
1830
- * {@link firstLineIndent}. Default `0`. */
2487
+ * glossaries, the turnover of a line of verse), from {@link indent}.
2488
+ * The first line starts at {@link indent}, or at `indent +
2489
+ * firstLineIndent` when the style sets {@link firstLineIndent} itself.
2490
+ * Default `0`. */
1831
2491
  hangingIndent?: Dimension;
1832
2492
  /** Vertical gap between consecutive paragraphs in the container. Default
1833
2493
  * `0` — entries abut, off the baseline grid until the container closes. */
@@ -1857,6 +2517,53 @@ export interface ParagraphStyleConfig {
1857
2517
  * punctuation (phrase-spaced kana text, 分かち書き), `'normal'` between
1858
2518
  * any two characters. Unset: the document's `cjk.wordBreak`. */
1859
2519
  wordBreak?: CjkWordBreak;
2520
+ /** Whether line numbers (`lineNumbers`, #621) count the lines of the
2521
+ * style's paragraphs. Unset: counted when `lineNumbers.count` is
2522
+ * `'all'` (or, in a poem set in the style, when it counts verse);
2523
+ * `true` counts them under `'verse'` too, and inside a callout, whose
2524
+ * text is otherwise never counted; `false` never. */
2525
+ lineNumbers?: boolean;
2526
+ /** Tab stops of the style's paragraphs (#622; see {@link TabStop}). A
2527
+ * tab character in their text is then a tab, and `:tab` goes to them.
2528
+ * Unset: the body's (`bodyText.tabStops`). An empty list sets none. */
2529
+ tabStops?: TabStop[];
2530
+ /** Default stops past the last of {@link tabStops}. Unset: the body's. */
2531
+ tabInterval?: Dimension;
2532
+ /** A drop cap opening the first paragraph of each `:::paragraphs` group
2533
+ * in the style (#623; every paragraph with `each: true`). Unset: none. */
2534
+ dropCap?: ParagraphDropCap;
2535
+ }
2536
+ /** Where a tab stop stands (#622): a length from the start edge of the
2537
+ * paragraph's measure (after a paragraph style's `indent`; `em` being the
2538
+ * paragraph's own size), `'end'` for the measure's end edge, or a share of
2539
+ * the measure (`'50%'`). */
2540
+ export type TabStopPosition = Dimension | 'end' | `${number}%`;
2541
+ /** How the text after a tab sits at its stop (#622): `'start'` starts
2542
+ * there, `'end'` ends there, `'center'` is centred on it and `'decimal'`
2543
+ * puts its decimal separator on it (a run with none ends there). */
2544
+ export type TabStopAlign = 'start' | 'end' | 'center' | 'decimal';
2545
+ /**
2546
+ * A tab stop of body text (#622): a menu's prices flush right, a cast
2547
+ * list's actors after a dot leader, an exam's marks at the margin. A tab
2548
+ * goes to the first stop past the text before it; a line holding a tab is
2549
+ * set by the line-by-line breaker (never Knuth–Plass), and in justified
2550
+ * text only its word spaces after the last tab take the slack.
2551
+ */
2552
+ export interface TabStop {
2553
+ position: TabStopPosition;
2554
+ /** Default `'start'`. */
2555
+ align?: TabStopAlign;
2556
+ /** Repeated over the room before the stop, flush with its end so the
2557
+ * leaders of several lines line up: `'.'`, `'. '`, `'·'`, `'_'`, `'-'`
2558
+ * or any short text in the paragraph's face; `'rule'` draws a line on
2559
+ * the baseline (a form's blank). Default none. */
2560
+ leader?: string;
2561
+ /** Room kept between the text and the leader, and between the leader and
2562
+ * the text at the stop. Default `0.5em` (the contents' `leader.gap`). */
2563
+ leaderGap?: Dimension;
2564
+ /** `'decimal'` stops: the separator. Default the document language's
2565
+ * (`.` in English, `,` in Spanish, Catalan, Portuguese…). */
2566
+ decimalChar?: string;
1860
2567
  }
1861
2568
  export type ParagraphTextTransform = 'none' | 'uppercase';
1862
2569
  export interface ResolvedParagraphStyleConfig {
@@ -1875,10 +2582,17 @@ export interface ResolvedParagraphStyleConfig {
1875
2582
  italic: boolean;
1876
2583
  smallCaps: boolean;
1877
2584
  hyphenation: boolean;
2585
+ /** The style sets {@link hyphenation} itself: a poem in the style
2586
+ * hyphenates its turnovers only then (#620). Absent when inherited. */
2587
+ ownHyphenation?: true;
1878
2588
  indent: Dimension;
1879
2589
  /** Absent when the style sets none (or `0`). */
1880
2590
  endIndent?: Dimension;
1881
2591
  firstLineIndent: Dimension;
2592
+ /** The style sets {@link firstLineIndent} itself (it is not the body's):
2593
+ * with a non-zero {@link hangingIndent} the two pair up (#620). Absent
2594
+ * when inherited. */
2595
+ ownFirstLineIndent?: true;
1882
2596
  hangingIndent: Dimension;
1883
2597
  spaceBetween: Dimension;
1884
2598
  marginTop: Dimension;
@@ -1887,6 +2601,15 @@ export interface ResolvedParagraphStyleConfig {
1887
2601
  textTransform: ParagraphTextTransform;
1888
2602
  /** Absent when the style sets none (the document's `cjk.wordBreak`). */
1889
2603
  wordBreak?: CjkWordBreak;
2604
+ /** Absent when the style sets none (see
2605
+ * {@link ParagraphStyleConfig.lineNumbers}). */
2606
+ lineNumbers?: boolean;
2607
+ /** Absent when the style sets none: its paragraphs take the body's. */
2608
+ tabStops?: TabStop[];
2609
+ /** Absent when the style sets none. */
2610
+ tabInterval?: Dimension;
2611
+ /** Absent when the style sets none (#623). */
2612
+ dropCap?: ParagraphDropCap;
1890
2613
  }
1891
2614
  /** Horizontal extent of a callout: its column, or the full content width. */
1892
2615
  /** `'side'` sets the box in the float-only side column of a `oneAndHalf`
@@ -2108,6 +2831,11 @@ export interface CalloutBodyStyleConfig {
2108
2831
  hyphenation?: boolean;
2109
2832
  paragraphSpacing?: boolean;
2110
2833
  firstLineIndent?: Dimension;
2834
+ /** Tab stops of the box's paragraphs and list items (#622). Unset: the
2835
+ * body's (`bodyText.tabStops`). */
2836
+ tabStops?: TabStop[];
2837
+ /** Default stops past the last of {@link tabStops}. Unset: the body's. */
2838
+ tabInterval?: Dimension;
2111
2839
  }
2112
2840
  /** List typography inside the callout. Every field inherits
2113
2841
  * `unorderedLists` (`color`, `indent`, `gap`, `itemSpacing` also apply to
@@ -2429,6 +3157,9 @@ export interface ResolvedCalloutStyleConfig {
2429
3157
  hyphenation: boolean;
2430
3158
  paragraphSpacing: boolean;
2431
3159
  firstLineIndent: Dimension;
3160
+ /** Absent when the style sets none. */
3161
+ tabStops?: TabStop[];
3162
+ tabInterval?: Dimension;
2432
3163
  };
2433
3164
  lists: {
2434
3165
  bulletChar: string;
@@ -2717,6 +3448,18 @@ export interface HeadingLevelConfig {
2717
3448
  * book). The measure narrows by it; a centred heading centres in what is
2718
3449
  * left. Default `0`. */
2719
3450
  indent?: Dimension;
3451
+ /** Indent of the heading's first line only (#636), measured from
3452
+ * {@link indent} (so the first line starts `indent + firstLineIndent`
3453
+ * in): the lines it wraps onto start at `indent`, as a body paragraph's
3454
+ * turnover lines start at the margin. GB/T 9704 sets every level of
3455
+ * head two cells in with its turnover back at the margin:
3456
+ * `{ value: 2, unit: 'em' }`. `em` is the BODY size, as for `indent`,
3457
+ * so two ems are two cells of the body grid at any heading size. A
3458
+ * numbered heading's number comes after the indent. A centred heading
3459
+ * takes it as a centred body paragraph does: its first line centres in
3460
+ * the room after the indent. A heading overrides it with
3461
+ * `{firstLineIndent=N}` (`0` clears it). Default `0`. */
3462
+ firstLineIndent?: Dimension;
2720
3463
  /** 字取り (jidori, JLReq §3.7.3, §4.1): a heading shorter than this many
2721
3464
  * of its own characters is spaced out evenly to fill exactly that width
2722
3465
  * (`jidori: 3` sets 序章 as 序 章). Applies to a heading that fits one
@@ -2724,6 +3467,12 @@ export interface HeadingLevelConfig {
2724
3467
  * `{jidori=N}` (`{jidori=0}` turns it off). Unset (default): no
2725
3468
  * spacing. */
2726
3469
  jidori?: number;
3470
+ /** A drop cap opening the first body paragraph after a heading of this
3471
+ * level or style (#623), found past markers, boxes that left the flow
3472
+ * and floated figures; never a paragraph inside a box. A heading turns
3473
+ * it off with `{dropcap=false}` or sets its lines with `{dropcap=N}`; a
3474
+ * heading style turns its level's off with `false`. Unset: none. */
3475
+ dropCap?: ParagraphDropCap | false;
2727
3476
  }
2728
3477
  export type HeadingTextTransform = 'none' | 'uppercase';
2729
3478
  export interface ResolvedHeadingLevelConfig {
@@ -2760,8 +3509,13 @@ export interface ResolvedHeadingLevelConfig {
2760
3509
  lineSpan?: number;
2761
3510
  /** Absent unless set (see {@link HeadingLevelConfig.indent}). */
2762
3511
  indent?: Dimension;
3512
+ /** Absent unless set (see {@link HeadingLevelConfig.firstLineIndent}). */
3513
+ firstLineIndent?: Dimension;
2763
3514
  /** Absent unless set (see {@link HeadingLevelConfig.jidori}). */
2764
3515
  jidori?: number;
3516
+ /** Absent unless set (see {@link HeadingLevelConfig.dropCap}); a heading
3517
+ * style's `false` lays an explicit `undefined` over its level's. */
3518
+ dropCap?: ParagraphDropCap;
2765
3519
  }
2766
3520
  export interface HeadingsConfig {
2767
3521
  fontFamily?: string;
@@ -4443,7 +5197,16 @@ export interface ElementBoxStyle {
4443
5197
  * mid-word only when what the boundary leaves, that punctuation dropped,
4444
5198
  * is less than half of what fits (a long word, a URL). A no-break space
4445
5199
  * or hyphen (U+2011) is no boundary. `'ellipsis-middle'` cuts anywhere but
4446
- * drops the spaces beside it. */
5200
+ * drops the spaces beside it.
5201
+ *
5202
+ * An element that sets none takes its slot's default (#628): `'wrap'` in a
5203
+ * heading design (`advancedDesign.slot`, an opener or an in-column title)
5204
+ * and on a part page (`parts.design`, `parts.versoDesign`), where a long
5205
+ * title should break onto more lines; `'ellipsis-end'` in a running head
5206
+ * or folio (`header`, `footer`, a heading style's own) and in a contents
5207
+ * part row (`toc.parts.design`, whose row has a fixed height). A line cut
5208
+ * by an ellipsis, or clipped with ink past the box, is reported as a
5209
+ * `designTextTruncated` content warning. */
4447
5210
  export type TextOverflow = 'wrap' | 'ellipsis-start' | 'ellipsis-end' | 'ellipsis-middle' | 'clip';
4448
5211
  /** Outline drawn around the glyphs of a design text (a hollow display
4449
5212
  * number, a title that stands off a photograph). */
@@ -4524,7 +5287,11 @@ export interface DesignTextElement {
4524
5287
  * number, a malformed dimension) sets the default leading. */
4525
5288
  lineHeight?: number | Dimension;
4526
5289
  letterSpacing?: Dimension;
4527
- overflow: TextOverflow;
5290
+ /** What a line wider than the element's room does (see
5291
+ * {@link TextOverflow}). Unset, the slot decides: `'wrap'` in heading
5292
+ * and part designs, `'ellipsis-end'` in running heads, folios and
5293
+ * contents part rows. */
5294
+ overflow?: TextOverflow;
4528
5295
  /** When true, break long words at syllable boundaries while wrapping.
4529
5296
  * Uses the document's active hyphenation locale. */
4530
5297
  hyphenate?: boolean;
@@ -4647,8 +5414,10 @@ export interface DesignSlot {
4647
5414
  /** Array order = paint order: first = back, last = front. */
4648
5415
  elements: DesignElement[];
4649
5416
  }
4650
- export interface ResolvedDesignTextElement extends Omit<DesignTextElement, 'fontFamily' | 'fontWeight' | 'italic' | 'color' | 'align' | 'verticalAlign' | 'lineHeight' | 'parity'> {
5417
+ export interface ResolvedDesignTextElement extends Omit<DesignTextElement, 'fontFamily' | 'fontWeight' | 'italic' | 'color' | 'align' | 'verticalAlign' | 'lineHeight' | 'parity' | 'overflow'> {
4651
5418
  parity: PageParity;
5419
+ /** The element's own `overflow`, else its slot's default. */
5420
+ overflow: TextOverflow;
4652
5421
  fontFamily: string;
4653
5422
  fontWeight: number;
4654
5423
  italic: boolean;
@@ -5599,6 +6368,12 @@ export interface PostextConfig {
5599
6368
  /** East Asian typography: line breaking and justification of Chinese,
5600
6369
  * Japanese and Korean text (see {@link CjkConfig}). */
5601
6370
  cjk?: CjkConfig;
6371
+ /** Line numbers in the margin, for verse or for every line of the text
6372
+ * (#621). Off by default. */
6373
+ lineNumbers?: LineNumbersConfig;
6374
+ /** Code listings (fenced and indented code blocks) and inline code
6375
+ * (#624). */
6376
+ codeStyle?: CodeStyleConfig;
5602
6377
  header?: HeaderFooterSlot;
5603
6378
  footer?: HeaderFooterSlot;
5604
6379
  /** Document language, a BCP 47 tag (see {@link LocaleTag}). The fallback