postext 1.46.4 → 1.48.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 (353) hide show
  1. package/dist/__tests__/bundle/designOverflowPin.test.js +1 -1
  2. package/dist/__tests__/bundle/gridBreakRulesPin.test.js +2 -2
  3. package/dist/__tests__/bundle/shapingLanguagePin.test.js +3 -3
  4. package/dist/__tests__/bundle/taskBoxPin.test.js +1 -1
  5. package/dist/__tests__/bundle.test.js +1 -1
  6. package/dist/__tests__/codeBlocks.test.js +1 -1
  7. package/dist/__tests__/comics/config.test.js +20 -0
  8. package/dist/__tests__/comics/config.test.js.map +1 -1
  9. package/dist/__tests__/composed/cardShapes.test.d.ts +2 -0
  10. package/dist/__tests__/composed/cardShapes.test.d.ts.map +1 -0
  11. package/dist/__tests__/composed/cardShapes.test.js +82 -0
  12. package/dist/__tests__/composed/cardShapes.test.js.map +1 -0
  13. package/dist/__tests__/composed/connectors.test.d.ts +2 -0
  14. package/dist/__tests__/composed/connectors.test.d.ts.map +1 -0
  15. package/dist/__tests__/composed/connectors.test.js +349 -0
  16. package/dist/__tests__/composed/connectors.test.js.map +1 -0
  17. package/dist/__tests__/composed/decorationSidePoints.test.d.ts +2 -0
  18. package/dist/__tests__/composed/decorationSidePoints.test.d.ts.map +1 -0
  19. package/dist/__tests__/composed/decorationSidePoints.test.js +164 -0
  20. package/dist/__tests__/composed/decorationSidePoints.test.js.map +1 -0
  21. package/dist/__tests__/composed/fit.test.js +2 -1
  22. package/dist/__tests__/composed/fit.test.js.map +1 -1
  23. package/dist/__tests__/composed/fixtures/connectors.d.ts +33 -0
  24. package/dist/__tests__/composed/fixtures/connectors.d.ts.map +1 -0
  25. package/dist/__tests__/composed/fixtures/connectors.js +142 -0
  26. package/dist/__tests__/composed/fixtures/connectors.js.map +1 -0
  27. package/dist/__tests__/composed/fixtures/grid.d.ts +32 -0
  28. package/dist/__tests__/composed/fixtures/grid.d.ts.map +1 -0
  29. package/dist/__tests__/composed/fixtures/grid.js +53 -0
  30. package/dist/__tests__/composed/fixtures/grid.js.map +1 -0
  31. package/dist/__tests__/composed/fixtures/legendMap.d.ts +24 -0
  32. package/dist/__tests__/composed/fixtures/legendMap.d.ts.map +1 -0
  33. package/dist/__tests__/composed/fixtures/legendMap.js +117 -0
  34. package/dist/__tests__/composed/fixtures/legendMap.js.map +1 -0
  35. package/dist/__tests__/composed/fixtures/mapParts.d.ts +58 -0
  36. package/dist/__tests__/composed/fixtures/mapParts.d.ts.map +1 -0
  37. package/dist/__tests__/composed/fixtures/mapParts.js +192 -0
  38. package/dist/__tests__/composed/fixtures/mapParts.js.map +1 -0
  39. package/dist/__tests__/composed/fixtures/modules.d.ts +55 -0
  40. package/dist/__tests__/composed/fixtures/modules.d.ts.map +1 -0
  41. package/dist/__tests__/composed/fixtures/modules.js +123 -0
  42. package/dist/__tests__/composed/fixtures/modules.js.map +1 -0
  43. package/dist/__tests__/composed/grid.test.d.ts +2 -0
  44. package/dist/__tests__/composed/grid.test.d.ts.map +1 -0
  45. package/dist/__tests__/composed/grid.test.js +357 -0
  46. package/dist/__tests__/composed/grid.test.js.map +1 -0
  47. package/dist/__tests__/composed/groups.test.js +6 -3
  48. package/dist/__tests__/composed/groups.test.js.map +1 -1
  49. package/dist/__tests__/composed/labelLegend.test.d.ts +2 -0
  50. package/dist/__tests__/composed/labelLegend.test.d.ts.map +1 -0
  51. package/dist/__tests__/composed/labelLegend.test.js +268 -0
  52. package/dist/__tests__/composed/labelLegend.test.js.map +1 -0
  53. package/dist/__tests__/composed/labelsChecks.test.js.map +1 -1
  54. package/dist/__tests__/composed/leaders.test.d.ts +2 -0
  55. package/dist/__tests__/composed/leaders.test.d.ts.map +1 -0
  56. package/dist/__tests__/composed/leaders.test.js +372 -0
  57. package/dist/__tests__/composed/leaders.test.js.map +1 -0
  58. package/dist/__tests__/composed/modules.test.d.ts +2 -0
  59. package/dist/__tests__/composed/modules.test.d.ts.map +1 -0
  60. package/dist/__tests__/composed/modules.test.js +352 -0
  61. package/dist/__tests__/composed/modules.test.js.map +1 -0
  62. package/dist/__tests__/composed/overConnectors.test.d.ts +2 -0
  63. package/dist/__tests__/composed/overConnectors.test.d.ts.map +1 -0
  64. package/dist/__tests__/composed/overConnectors.test.js +232 -0
  65. package/dist/__tests__/composed/overConnectors.test.js.map +1 -0
  66. package/dist/__tests__/composed/overlap.test.d.ts +2 -0
  67. package/dist/__tests__/composed/overlap.test.d.ts.map +1 -0
  68. package/dist/__tests__/composed/overlap.test.js +339 -0
  69. package/dist/__tests__/composed/overlap.test.js.map +1 -0
  70. package/dist/__tests__/composed/viewerLeaf.test.d.ts +2 -0
  71. package/dist/__tests__/composed/viewerLeaf.test.d.ts.map +1 -0
  72. package/dist/__tests__/composed/viewerLeaf.test.js +106 -0
  73. package/dist/__tests__/composed/viewerLeaf.test.js.map +1 -0
  74. package/dist/__tests__/composedTemplates.test.js +1 -1
  75. package/dist/__tests__/design/boxShape.test.d.ts +2 -0
  76. package/dist/__tests__/design/boxShape.test.d.ts.map +1 -0
  77. package/dist/__tests__/design/boxShape.test.js +126 -0
  78. package/dist/__tests__/design/boxShape.test.js.map +1 -0
  79. package/dist/__tests__/design/boxShapePaint.test.d.ts +2 -0
  80. package/dist/__tests__/design/boxShapePaint.test.d.ts.map +1 -0
  81. package/dist/__tests__/design/boxShapePaint.test.js +130 -0
  82. package/dist/__tests__/design/boxShapePaint.test.js.map +1 -0
  83. package/dist/__tests__/design/openerBottomAnchor.test.js.map +1 -1
  84. package/dist/__tests__/design/pathBlock.test.d.ts +2 -0
  85. package/dist/__tests__/design/pathBlock.test.d.ts.map +1 -0
  86. package/dist/__tests__/design/pathBlock.test.js +194 -0
  87. package/dist/__tests__/design/pathBlock.test.js.map +1 -0
  88. package/dist/__tests__/design/pathElement.test.d.ts +2 -0
  89. package/dist/__tests__/design/pathElement.test.d.ts.map +1 -0
  90. package/dist/__tests__/design/pathElement.test.js +257 -0
  91. package/dist/__tests__/design/pathElement.test.js.map +1 -0
  92. package/dist/__tests__/design/svgPath.test.d.ts +2 -0
  93. package/dist/__tests__/design/svgPath.test.d.ts.map +1 -0
  94. package/dist/__tests__/design/svgPath.test.js +144 -0
  95. package/dist/__tests__/design/svgPath.test.js.map +1 -0
  96. package/dist/__tests__/exports.test.js +53 -0
  97. package/dist/__tests__/exports.test.js.map +1 -1
  98. package/dist/__tests__/fontUsage.test.js +46 -0
  99. package/dist/__tests__/fontUsage.test.js.map +1 -1
  100. package/dist/__tests__/hardBreaks.test.js +1 -1
  101. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  102. package/dist/__tests__/labelGlyphPaint.test.d.ts +2 -0
  103. package/dist/__tests__/labelGlyphPaint.test.d.ts.map +1 -0
  104. package/dist/__tests__/labelGlyphPaint.test.js +86 -0
  105. package/dist/__tests__/labelGlyphPaint.test.js.map +1 -0
  106. package/dist/__tests__/mathSizeMigration.test.js +2 -2
  107. package/dist/__tests__/migrate/labelsOnPictures.test.js +1 -1
  108. package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -1
  109. package/dist/__tests__/parse/containers.test.js +1 -1
  110. package/dist/__tests__/parse/containers.test.js.map +1 -1
  111. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  112. package/dist/__tests__/pipeline/calloutLabelGlyph.test.d.ts +2 -0
  113. package/dist/__tests__/pipeline/calloutLabelGlyph.test.d.ts.map +1 -0
  114. package/dist/__tests__/pipeline/calloutLabelGlyph.test.js +198 -0
  115. package/dist/__tests__/pipeline/calloutLabelGlyph.test.js.map +1 -0
  116. package/dist/__tests__/pipeline/calloutShapes.test.d.ts +2 -0
  117. package/dist/__tests__/pipeline/calloutShapes.test.d.ts.map +1 -0
  118. package/dist/__tests__/pipeline/calloutShapes.test.js +159 -0
  119. package/dist/__tests__/pipeline/calloutShapes.test.js.map +1 -0
  120. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
  121. package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
  122. package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
  123. package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
  124. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
  125. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
  126. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
  127. package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
  128. package/dist/__tests__/prepareFonts.test.js +8 -6
  129. package/dist/__tests__/prepareFonts.test.js.map +1 -1
  130. package/dist/__tests__/verseLines.test.js +1 -1
  131. package/dist/bundle/configVersion.d.ts +12 -3
  132. package/dist/bundle/configVersion.d.ts.map +1 -1
  133. package/dist/bundle/configVersion.js +16 -5
  134. package/dist/bundle/configVersion.js.map +1 -1
  135. package/dist/canvas-backend/blockRender.js +3 -3
  136. package/dist/canvas-backend/blockRender.js.map +1 -1
  137. package/dist/canvas-backend/composed.d.ts +4 -2
  138. package/dist/canvas-backend/composed.d.ts.map +1 -1
  139. package/dist/canvas-backend/composed.js +12 -7
  140. package/dist/canvas-backend/composed.js.map +1 -1
  141. package/dist/canvas-backend/headerFooter.d.ts +17 -1
  142. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  143. package/dist/canvas-backend/headerFooter.js +64 -1
  144. package/dist/canvas-backend/headerFooter.js.map +1 -1
  145. package/dist/canvas-backend/index.d.ts.map +1 -1
  146. package/dist/canvas-backend/index.js +7 -1
  147. package/dist/canvas-backend/index.js.map +1 -1
  148. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  149. package/dist/canvas-backend/renderResourceBlock.js +17 -6
  150. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  151. package/dist/canvas-backend/swatch.d.ts +20 -1
  152. package/dist/canvas-backend/swatch.d.ts.map +1 -1
  153. package/dist/canvas-backend/swatch.js +51 -1
  154. package/dist/canvas-backend/swatch.js.map +1 -1
  155. package/dist/comics/fonts.d.ts +19 -0
  156. package/dist/comics/fonts.d.ts.map +1 -1
  157. package/dist/comics/fonts.js +70 -17
  158. package/dist/comics/fonts.js.map +1 -1
  159. package/dist/comics/layoutPage.d.ts.map +1 -1
  160. package/dist/comics/layoutPage.js +6 -1
  161. package/dist/comics/layoutPage.js.map +1 -1
  162. package/dist/composed/continuation.d.ts +10 -2
  163. package/dist/composed/continuation.d.ts.map +1 -1
  164. package/dist/composed/continuation.js +10 -2
  165. package/dist/composed/continuation.js.map +1 -1
  166. package/dist/composed/document.d.ts +45 -1
  167. package/dist/composed/document.d.ts.map +1 -1
  168. package/dist/composed/document.js +76 -17
  169. package/dist/composed/document.js.map +1 -1
  170. package/dist/composed/labelText.d.ts +9 -1
  171. package/dist/composed/labelText.d.ts.map +1 -1
  172. package/dist/composed/labelText.js +23 -1
  173. package/dist/composed/labelText.js.map +1 -1
  174. package/dist/composed/labels.d.ts +57 -3
  175. package/dist/composed/labels.d.ts.map +1 -1
  176. package/dist/composed/labels.js +261 -12
  177. package/dist/composed/labels.js.map +1 -1
  178. package/dist/composed/modules.d.ts +30 -0
  179. package/dist/composed/modules.d.ts.map +1 -0
  180. package/dist/composed/modules.js +194 -0
  181. package/dist/composed/modules.js.map +1 -0
  182. package/dist/composed/overlap.d.ts +52 -0
  183. package/dist/composed/overlap.d.ts.map +1 -0
  184. package/dist/composed/overlap.js +611 -0
  185. package/dist/composed/overlap.js.map +1 -0
  186. package/dist/composed/paint.d.ts +28 -5
  187. package/dist/composed/paint.d.ts.map +1 -1
  188. package/dist/composed/paint.js +26 -5
  189. package/dist/composed/paint.js.map +1 -1
  190. package/dist/composed/reflowLog.d.ts +6 -1
  191. package/dist/composed/reflowLog.d.ts.map +1 -1
  192. package/dist/composed/reflowLog.js +43 -0
  193. package/dist/composed/reflowLog.js.map +1 -1
  194. package/dist/composed/repeat.d.ts +66 -0
  195. package/dist/composed/repeat.d.ts.map +1 -0
  196. package/dist/composed/repeat.js +217 -0
  197. package/dist/composed/repeat.js.map +1 -0
  198. package/dist/composed/slotChecks.d.ts +1 -1
  199. package/dist/composed/slotChecks.d.ts.map +1 -1
  200. package/dist/composed/slotChecks.js +114 -8
  201. package/dist/composed/slotChecks.js.map +1 -1
  202. package/dist/composed/sourceMap.d.ts.map +1 -1
  203. package/dist/composed/sourceMap.js +16 -4
  204. package/dist/composed/sourceMap.js.map +1 -1
  205. package/dist/composed/spread.d.ts.map +1 -1
  206. package/dist/composed/spread.js +6 -2
  207. package/dist/composed/spread.js.map +1 -1
  208. package/dist/composed/templates.d.ts +22 -2
  209. package/dist/composed/templates.d.ts.map +1 -1
  210. package/dist/composed/templates.js +159 -9
  211. package/dist/composed/templates.js.map +1 -1
  212. package/dist/composed/types.d.ts +140 -7
  213. package/dist/composed/types.d.ts.map +1 -1
  214. package/dist/composed/validate.d.ts +1 -1
  215. package/dist/composed/validate.d.ts.map +1 -1
  216. package/dist/composed/validate.js +101 -4
  217. package/dist/composed/validate.js.map +1 -1
  218. package/dist/composed/wrap.d.ts.map +1 -1
  219. package/dist/composed/wrap.js +95 -17
  220. package/dist/composed/wrap.js.map +1 -1
  221. package/dist/configWarnings.d.ts +7 -1
  222. package/dist/configWarnings.d.ts.map +1 -1
  223. package/dist/configWarnings.js +275 -4
  224. package/dist/configWarnings.js.map +1 -1
  225. package/dist/contrast.d.ts.map +1 -1
  226. package/dist/contrast.js +8 -0
  227. package/dist/contrast.js.map +1 -1
  228. package/dist/defaults/calloutStyles.d.ts +10 -1
  229. package/dist/defaults/calloutStyles.d.ts.map +1 -1
  230. package/dist/defaults/calloutStyles.js +46 -7
  231. package/dist/defaults/calloutStyles.js.map +1 -1
  232. package/dist/defaults/comics.d.ts +2 -1
  233. package/dist/defaults/comics.d.ts.map +1 -1
  234. package/dist/defaults/comics.js +18 -3
  235. package/dist/defaults/comics.js.map +1 -1
  236. package/dist/defaults/headerFooter.d.ts.map +1 -1
  237. package/dist/defaults/headerFooter.js +38 -0
  238. package/dist/defaults/headerFooter.js.map +1 -1
  239. package/dist/design/boxShape.d.ts +101 -0
  240. package/dist/design/boxShape.d.ts.map +1 -0
  241. package/dist/design/boxShape.js +398 -0
  242. package/dist/design/boxShape.js.map +1 -0
  243. package/dist/design/connector.d.ts +75 -0
  244. package/dist/design/connector.d.ts.map +1 -0
  245. package/dist/design/connector.js +325 -0
  246. package/dist/design/connector.js.map +1 -0
  247. package/dist/design/layout.d.ts +56 -3
  248. package/dist/design/layout.d.ts.map +1 -1
  249. package/dist/design/layout.js +214 -12
  250. package/dist/design/layout.js.map +1 -1
  251. package/dist/design/logicalEdges.d.ts +7 -0
  252. package/dist/design/logicalEdges.d.ts.map +1 -1
  253. package/dist/design/logicalEdges.js +28 -0
  254. package/dist/design/logicalEdges.js.map +1 -1
  255. package/dist/design/pathBlock.d.ts +69 -0
  256. package/dist/design/pathBlock.d.ts.map +1 -0
  257. package/dist/design/pathBlock.js +286 -0
  258. package/dist/design/pathBlock.js.map +1 -0
  259. package/dist/design/svgPath.d.ts +48 -0
  260. package/dist/design/svgPath.d.ts.map +1 -0
  261. package/dist/design/svgPath.js +402 -0
  262. package/dist/design/svgPath.js.map +1 -0
  263. package/dist/fonts/usage.d.ts +5 -0
  264. package/dist/fonts/usage.d.ts.map +1 -1
  265. package/dist/fonts/usage.js +81 -11
  266. package/dist/fonts/usage.js.map +1 -1
  267. package/dist/html-backend.d.ts.map +1 -1
  268. package/dist/html-backend.js +127 -22
  269. package/dist/html-backend.js.map +1 -1
  270. package/dist/index.d.ts +19 -9
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +13 -5
  273. package/dist/index.js.map +1 -1
  274. package/dist/measure/cache.js +1 -1
  275. package/dist/measure/cache.js.map +1 -1
  276. package/dist/measure/inlineIcon.d.ts +34 -0
  277. package/dist/measure/inlineIcon.d.ts.map +1 -0
  278. package/dist/measure/inlineIcon.js +89 -0
  279. package/dist/measure/inlineIcon.js.map +1 -0
  280. package/dist/measure/rich.d.ts +2 -1
  281. package/dist/measure/rich.d.ts.map +1 -1
  282. package/dist/measure/rich.js +6 -0
  283. package/dist/measure/rich.js.map +1 -1
  284. package/dist/migrate/pageDesign.d.ts.map +1 -1
  285. package/dist/migrate/pageDesign.js +4 -2
  286. package/dist/migrate/pageDesign.js.map +1 -1
  287. package/dist/migrate/textToMarkdown.js +2 -0
  288. package/dist/migrate/textToMarkdown.js.map +1 -1
  289. package/dist/parse/blockParser.d.ts.map +1 -1
  290. package/dist/parse/blockParser.js +171 -20
  291. package/dist/parse/blockParser.js.map +1 -1
  292. package/dist/parse/index.d.ts +1 -1
  293. package/dist/parse/index.d.ts.map +1 -1
  294. package/dist/parse/index.js.map +1 -1
  295. package/dist/parse/inlineFormatting.d.ts +11 -3
  296. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  297. package/dist/parse/inlineFormatting.js +63 -5
  298. package/dist/parse/inlineFormatting.js.map +1 -1
  299. package/dist/parse/inlineSnippet.d.ts +2 -1
  300. package/dist/parse/inlineSnippet.d.ts.map +1 -1
  301. package/dist/parse/inlineSnippet.js +3 -2
  302. package/dist/parse/inlineSnippet.js.map +1 -1
  303. package/dist/parse/sourceMapping.d.ts.map +1 -1
  304. package/dist/parse/sourceMapping.js +8 -1
  305. package/dist/parse/sourceMapping.js.map +1 -1
  306. package/dist/parse/types.d.ts +71 -1
  307. package/dist/parse/types.d.ts.map +1 -1
  308. package/dist/pipeline/build.d.ts.map +1 -1
  309. package/dist/pipeline/build.js +67 -13
  310. package/dist/pipeline/build.js.map +1 -1
  311. package/dist/pipeline/buildHelpers.d.ts +10 -0
  312. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  313. package/dist/pipeline/buildHelpers.js +17 -0
  314. package/dist/pipeline/buildHelpers.js.map +1 -1
  315. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  316. package/dist/pipeline/buildMeasurement.js +23 -11
  317. package/dist/pipeline/buildMeasurement.js.map +1 -1
  318. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  319. package/dist/pipeline/calloutLayout.js +142 -32
  320. package/dist/pipeline/calloutLayout.js.map +1 -1
  321. package/dist/pipeline/composedLayout.d.ts +1 -33
  322. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  323. package/dist/pipeline/composedLayout.js +526 -36
  324. package/dist/pipeline/composedLayout.js.map +1 -1
  325. package/dist/pipeline/config.d.ts.map +1 -1
  326. package/dist/pipeline/config.js +12 -0
  327. package/dist/pipeline/config.js.map +1 -1
  328. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  329. package/dist/pipeline/contentWarnings.js +46 -1
  330. package/dist/pipeline/contentWarnings.js.map +1 -1
  331. package/dist/pipeline/continuation.d.ts.map +1 -1
  332. package/dist/pipeline/continuation.js +3 -2
  333. package/dist/pipeline/continuation.js.map +1 -1
  334. package/dist/pipeline/headerFooter.d.ts +19 -1
  335. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  336. package/dist/pipeline/headerFooter.js +169 -17
  337. package/dist/pipeline/headerFooter.js.map +1 -1
  338. package/dist/pipeline/partPalette.d.ts.map +1 -1
  339. package/dist/pipeline/partPalette.js +40 -1
  340. package/dist/pipeline/partPalette.js.map +1 -1
  341. package/dist/pipeline/resourceLayout.d.ts +1 -1
  342. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  343. package/dist/pipeline/resourceLayout.js +44 -15
  344. package/dist/pipeline/resourceLayout.js.map +1 -1
  345. package/dist/preflight.d.ts.map +1 -1
  346. package/dist/preflight.js +36 -1
  347. package/dist/preflight.js.map +1 -1
  348. package/dist/types.d.ts +319 -22
  349. package/dist/types.d.ts.map +1 -1
  350. package/dist/vdt.d.ts +392 -12
  351. package/dist/vdt.d.ts.map +1 -1
  352. package/dist/vdt.js.map +1 -1
  353. package/package.json +1 -1
@@ -0,0 +1,402 @@
1
+ /** The longest path data read (characters): a design's shape is a few
2
+ * hundred; anything far longer is no decoration. */
3
+ export const MAX_PATH_DATA_LENGTH = 65536;
4
+ /** How many numbers each command takes. */
5
+ const ARITY = {
6
+ M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0,
7
+ };
8
+ function isDigit(c) {
9
+ return c >= 48 && c <= 57;
10
+ }
11
+ function isSpace(c) {
12
+ // Space, tab, line feed, form feed, carriage return (the SVG `wsp`).
13
+ return c === 32 || c === 9 || c === 10 || c === 12 || c === 13;
14
+ }
15
+ /** Reads the data one token at a time. */
16
+ class Scanner {
17
+ s;
18
+ i = 0;
19
+ constructor(s) {
20
+ this.s = s;
21
+ }
22
+ /** Skips white space and at most one comma between them. */
23
+ skipSeparators() {
24
+ const s = this.s;
25
+ while (this.i < s.length && isSpace(s.charCodeAt(this.i)))
26
+ this.i++;
27
+ if (this.i < s.length && s.charCodeAt(this.i) === 44) {
28
+ this.i++;
29
+ while (this.i < s.length && isSpace(s.charCodeAt(this.i)))
30
+ this.i++;
31
+ }
32
+ }
33
+ atEnd() {
34
+ return this.i >= this.s.length;
35
+ }
36
+ /** Whether a number starts here (a sign, a digit or a point). */
37
+ atNumber() {
38
+ const c = this.s.charCodeAt(this.i);
39
+ return isDigit(c) || c === 43 || c === 45 || c === 46;
40
+ }
41
+ /** A number in the SVG grammar: sign, digits, a fraction, an exponent.
42
+ * `undefined` when none starts here. */
43
+ number() {
44
+ const s = this.s;
45
+ const start = this.i;
46
+ let j = start;
47
+ if (j < s.length && (s.charCodeAt(j) === 43 || s.charCodeAt(j) === 45))
48
+ j++;
49
+ let digits = 0;
50
+ while (j < s.length && isDigit(s.charCodeAt(j))) {
51
+ j++;
52
+ digits++;
53
+ }
54
+ if (j < s.length && s.charCodeAt(j) === 46) {
55
+ j++;
56
+ while (j < s.length && isDigit(s.charCodeAt(j))) {
57
+ j++;
58
+ digits++;
59
+ }
60
+ }
61
+ if (digits === 0)
62
+ return undefined;
63
+ // An exponent only when digits follow it (`1e` is the number 1 and a
64
+ // stray letter, which the caller rejects).
65
+ if (j < s.length && (s.charCodeAt(j) === 101 || s.charCodeAt(j) === 69)) {
66
+ let k = j + 1;
67
+ if (k < s.length && (s.charCodeAt(k) === 43 || s.charCodeAt(k) === 45))
68
+ k++;
69
+ const e0 = k;
70
+ while (k < s.length && isDigit(s.charCodeAt(k)))
71
+ k++;
72
+ if (k > e0)
73
+ j = k;
74
+ }
75
+ const v = Number(s.slice(start, j));
76
+ if (!Number.isFinite(v))
77
+ return undefined;
78
+ this.i = j;
79
+ return v;
80
+ }
81
+ /** An arc flag: a single `0` or `1`, which needs no separator after it
82
+ * (`a1 1 0 01 1 1`). */
83
+ flag() {
84
+ const c = this.s.charCodeAt(this.i);
85
+ if (c === 48 || c === 49) {
86
+ this.i++;
87
+ return c === 48 ? 0 : 1;
88
+ }
89
+ return undefined;
90
+ }
91
+ }
92
+ /** The outline `d` describes, in its own units; or why it cannot be read. */
93
+ export function parseSvgPath(d) {
94
+ if (typeof d !== 'string')
95
+ return { ok: false, error: 'path data is not a string', at: 0 };
96
+ if (d.length > MAX_PATH_DATA_LENGTH)
97
+ return { ok: false, error: `path data longer than ${MAX_PATH_DATA_LENGTH} characters`, at: MAX_PATH_DATA_LENGTH };
98
+ const sc = new Scanner(d);
99
+ const subpaths = [];
100
+ let current;
101
+ // The current point, the subpath's start, and the last control point of
102
+ // a cubic or quadratic (for `S` and `T`).
103
+ let x = 0;
104
+ let y = 0;
105
+ let sx = 0;
106
+ let sy = 0;
107
+ let lastCubic;
108
+ let lastQuad;
109
+ let cmd = '';
110
+ let first = true;
111
+ const startSubpath = (px, py) => {
112
+ current = [{ op: 'M', x: px, y: py }];
113
+ subpaths.push(current);
114
+ };
115
+ /** A drawing command after `Z` starts again from the subpath's start. */
116
+ const ensureSubpath = () => {
117
+ if (!current)
118
+ startSubpath(x, y);
119
+ return current;
120
+ };
121
+ sc.skipSeparators();
122
+ while (!sc.atEnd()) {
123
+ const at = sc.i;
124
+ const ch = d.charAt(sc.i);
125
+ const upper = ch.toUpperCase();
126
+ if (ARITY[upper] !== undefined && ch !== 'e' && ch !== 'E') {
127
+ cmd = ch;
128
+ sc.i++;
129
+ sc.skipSeparators();
130
+ }
131
+ else if (!cmd || !sc.atNumber()) {
132
+ return { ok: false, error: `unexpected '${ch}'`, at };
133
+ }
134
+ else if (cmd === 'Z' || cmd === 'z') {
135
+ return { ok: false, error: 'numbers after a close', at };
136
+ }
137
+ // An implicit repeat of a move is a line (SVG 1.1 §8.3.2).
138
+ const op = cmd.toUpperCase();
139
+ const rel = cmd !== op;
140
+ if (first && op !== 'M')
141
+ return { ok: false, error: 'path data must start with a move (M or m)', at };
142
+ first = false;
143
+ if (op === 'Z') {
144
+ if (current)
145
+ current.push({ op: 'Z' });
146
+ x = sx;
147
+ y = sy;
148
+ current = undefined;
149
+ lastCubic = undefined;
150
+ lastQuad = undefined;
151
+ continue;
152
+ }
153
+ // Every set of numbers the command takes, until the next letter.
154
+ let sets = 0;
155
+ do {
156
+ const args = [];
157
+ const n = ARITY[op];
158
+ for (let k = 0; k < n; k++) {
159
+ const isFlag = op === 'A' && (k === 3 || k === 4);
160
+ const v = isFlag ? sc.flag() : sc.number();
161
+ if (v === undefined) {
162
+ return { ok: false, error: isFlag ? `arc flag must be 0 or 1` : `'${cmd}' needs ${n} numbers`, at: sc.i };
163
+ }
164
+ args.push(v);
165
+ sc.skipSeparators();
166
+ }
167
+ sets++;
168
+ const ox = rel ? x : 0;
169
+ const oy = rel ? y : 0;
170
+ switch (op) {
171
+ case 'M': {
172
+ const px = ox + args[0];
173
+ const py = oy + args[1];
174
+ if (sets === 1) {
175
+ startSubpath(px, py);
176
+ sx = px;
177
+ sy = py;
178
+ }
179
+ else {
180
+ ensureSubpath().push({ op: 'L', x: px, y: py });
181
+ }
182
+ x = px;
183
+ y = py;
184
+ lastCubic = undefined;
185
+ lastQuad = undefined;
186
+ break;
187
+ }
188
+ case 'L':
189
+ case 'H':
190
+ case 'V': {
191
+ const px = op === 'V' ? x : ox + args[0];
192
+ const py = op === 'H' ? y : op === 'V' ? (rel ? y : 0) + args[0] : oy + args[1];
193
+ ensureSubpath().push({ op: 'L', x: px, y: py });
194
+ x = px;
195
+ y = py;
196
+ lastCubic = undefined;
197
+ lastQuad = undefined;
198
+ break;
199
+ }
200
+ case 'C':
201
+ case 'S': {
202
+ let x1;
203
+ let y1;
204
+ let rest;
205
+ if (op === 'C') {
206
+ x1 = ox + args[0];
207
+ y1 = oy + args[1];
208
+ rest = args.slice(2);
209
+ }
210
+ else {
211
+ x1 = lastCubic ? 2 * x - lastCubic.x : x;
212
+ y1 = lastCubic ? 2 * y - lastCubic.y : y;
213
+ rest = args;
214
+ }
215
+ const x2 = ox + rest[0];
216
+ const y2 = oy + rest[1];
217
+ const px = ox + rest[2];
218
+ const py = oy + rest[3];
219
+ ensureSubpath().push({ op: 'C', x1, y1, x2, y2, x: px, y: py });
220
+ lastCubic = { x: x2, y: y2 };
221
+ lastQuad = undefined;
222
+ x = px;
223
+ y = py;
224
+ break;
225
+ }
226
+ case 'Q':
227
+ case 'T': {
228
+ let x1;
229
+ let y1;
230
+ let px;
231
+ let py;
232
+ if (op === 'Q') {
233
+ x1 = ox + args[0];
234
+ y1 = oy + args[1];
235
+ px = ox + args[2];
236
+ py = oy + args[3];
237
+ }
238
+ else {
239
+ x1 = lastQuad ? 2 * x - lastQuad.x : x;
240
+ y1 = lastQuad ? 2 * y - lastQuad.y : y;
241
+ px = ox + args[0];
242
+ py = oy + args[1];
243
+ }
244
+ ensureSubpath().push({ op: 'Q', x1, y1, x: px, y: py });
245
+ lastQuad = { x: x1, y: y1 };
246
+ lastCubic = undefined;
247
+ x = px;
248
+ y = py;
249
+ break;
250
+ }
251
+ case 'A': {
252
+ const px = ox + args[5];
253
+ const py = oy + args[6];
254
+ const sub = ensureSubpath();
255
+ for (const c of arcToCubics(x, y, args[0], args[1], args[2], args[3] === 1, args[4] === 1, px, py))
256
+ sub.push(c);
257
+ x = px;
258
+ y = py;
259
+ lastCubic = undefined;
260
+ lastQuad = undefined;
261
+ break;
262
+ }
263
+ }
264
+ } while (!sc.atEnd() && sc.atNumber());
265
+ }
266
+ if (first)
267
+ return { ok: false, error: 'empty path data', at: 0 };
268
+ return { ok: true, subpaths };
269
+ }
270
+ /**
271
+ * An elliptical arc from `(x0, y0)` to `(x, y)` as cubic Bézier curves
272
+ * (SVG 1.1 implementation notes F.6): radii scaled up when too small to
273
+ * reach, a zero radius a straight line, the same point nothing. Each curve
274
+ * spans at most a quarter turn.
275
+ */
276
+ export function arcToCubics(x0, y0, rxIn, ryIn, angleDeg, largeArc, sweep, x, y) {
277
+ if (x0 === x && y0 === y)
278
+ return [];
279
+ let rx = Math.abs(rxIn);
280
+ let ry = Math.abs(ryIn);
281
+ if (rx === 0 || ry === 0)
282
+ return [{ op: 'L', x, y }];
283
+ const phi = ((angleDeg % 360) * Math.PI) / 180;
284
+ const cos = Math.cos(phi);
285
+ const sin = Math.sin(phi);
286
+ // The end points in the ellipse's own frame, centred between them.
287
+ const dx = (x0 - x) / 2;
288
+ const dy = (y0 - y) / 2;
289
+ const x1p = cos * dx + sin * dy;
290
+ const y1p = -sin * dx + cos * dy;
291
+ const lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);
292
+ if (lambda > 1) {
293
+ const s = Math.sqrt(lambda);
294
+ rx *= s;
295
+ ry *= s;
296
+ }
297
+ const rx2 = rx * rx;
298
+ const ry2 = ry * ry;
299
+ const num = rx2 * ry2 - rx2 * y1p * y1p - ry2 * x1p * x1p;
300
+ const den = rx2 * y1p * y1p + ry2 * x1p * x1p;
301
+ let coef = den === 0 ? 0 : Math.sqrt(Math.max(0, num / den));
302
+ if (largeArc === sweep)
303
+ coef = -coef;
304
+ const cxp = coef * ((rx * y1p) / ry);
305
+ const cyp = coef * (-(ry * x1p) / rx);
306
+ const cx = cos * cxp - sin * cyp + (x0 + x) / 2;
307
+ const cy = sin * cxp + cos * cyp + (y0 + y) / 2;
308
+ const angle = (ux, uy, vx, vy) => {
309
+ const dot = ux * vx + uy * vy;
310
+ const len = Math.hypot(ux, uy) * Math.hypot(vx, vy);
311
+ let a = Math.acos(Math.max(-1, Math.min(1, len === 0 ? 1 : dot / len)));
312
+ if (ux * vy - uy * vx < 0)
313
+ a = -a;
314
+ return a;
315
+ };
316
+ const ux = (x1p - cxp) / rx;
317
+ const uy = (y1p - cyp) / ry;
318
+ const vx = (-x1p - cxp) / rx;
319
+ const vy = (-y1p - cyp) / ry;
320
+ const theta1 = angle(1, 0, ux, uy);
321
+ let delta = angle(ux, uy, vx, vy);
322
+ if (!sweep && delta > 0)
323
+ delta -= 2 * Math.PI;
324
+ else if (sweep && delta < 0)
325
+ delta += 2 * Math.PI;
326
+ const segments = Math.max(1, Math.ceil(Math.abs(delta) / (Math.PI / 2) - 1e-9));
327
+ const step = delta / segments;
328
+ // The control arm of a curve over `step`: 4/3 tan(step/4).
329
+ const k = (4 / 3) * Math.tan(step / 4);
330
+ const point = (t) => {
331
+ const ex = rx * Math.cos(t);
332
+ const ey = ry * Math.sin(t);
333
+ return { x: cx + cos * ex - sin * ey, y: cy + sin * ex + cos * ey };
334
+ };
335
+ const tangent = (t) => {
336
+ const ex = -rx * Math.sin(t);
337
+ const ey = ry * Math.cos(t);
338
+ return { x: cos * ex - sin * ey, y: sin * ex + cos * ey };
339
+ };
340
+ const out = [];
341
+ let t = theta1;
342
+ let p = { x: x0, y: y0 };
343
+ for (let s = 0; s < segments; s++) {
344
+ const t2 = t + step;
345
+ const d1 = tangent(t);
346
+ const d2 = tangent(t2);
347
+ // The last curve ends exactly on the given point.
348
+ const q = s === segments - 1 ? { x, y } : point(t2);
349
+ out.push({ op: 'C', x1: p.x + k * d1.x, y1: p.y + k * d1.y, x2: q.x - k * d2.x, y2: q.y - k * d2.y, x: q.x, y: q.y });
350
+ p = q;
351
+ t = t2;
352
+ }
353
+ return out;
354
+ }
355
+ /** `subpaths` mapped by `x' = ox + x·sx`, `y' = oy + y·sy` (a viewBox laid
356
+ * on a box: an affine map, under which a Bézier curve stays one). */
357
+ export function mapPath(subpaths, ox, oy, sx, sy) {
358
+ const X = (v) => ox + v * sx;
359
+ const Y = (v) => oy + v * sy;
360
+ return subpaths.map((sp) => sp.map((c) => {
361
+ switch (c.op) {
362
+ case 'M':
363
+ case 'L':
364
+ return { op: c.op, x: X(c.x), y: Y(c.y) };
365
+ case 'C':
366
+ return { op: 'C', x1: X(c.x1), y1: Y(c.y1), x2: X(c.x2), y2: Y(c.y2), x: X(c.x), y: Y(c.y) };
367
+ case 'Q':
368
+ return { op: 'Q', x1: X(c.x1), y1: Y(c.y1), x: X(c.x), y: Y(c.y) };
369
+ case 'Z':
370
+ return { op: 'Z' };
371
+ }
372
+ }));
373
+ }
374
+ /** Parses kept per data string: the same running-head chevrons are laid on
375
+ * every page. Cleared whole when it grows past this many. */
376
+ const CACHE_LIMIT = 256;
377
+ const cache = new Map();
378
+ /** `parseSvgPath`, remembered per data string. The outline returned is
379
+ * shared: map it (`mapPath`), never change it. */
380
+ export function parseSvgPathCached(d) {
381
+ const hit = cache.get(d);
382
+ if (hit)
383
+ return hit;
384
+ const r = parseSvgPath(d);
385
+ if (cache.size >= CACHE_LIMIT)
386
+ cache.clear();
387
+ cache.set(d, r);
388
+ return r;
389
+ }
390
+ /** The `viewBox` a path element is written in: `[1, 1]` when unset, none
391
+ * when either side is not a positive finite number. */
392
+ export function pathViewBox(vb) {
393
+ if (vb === undefined)
394
+ return [1, 1];
395
+ if (!Array.isArray(vb) || vb.length !== 2)
396
+ return undefined;
397
+ const [w, h] = vb;
398
+ if (typeof w !== 'number' || typeof h !== 'number' || !(w > 0) || !(h > 0) || !Number.isFinite(w) || !Number.isFinite(h))
399
+ return undefined;
400
+ return [w, h];
401
+ }
402
+ //# sourceMappingURL=svgPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svgPath.js","sourceRoot":"","sources":["../../src/design/svgPath.ts"],"names":[],"mappings":"AAmBA;qDACqD;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAM1C,2CAA2C;AAC3C,MAAM,KAAK,GAAqC;IAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC3D,CAAC;AAEF,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,qEAAqE;IACrE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,0CAA0C;AAC1C,MAAM,OAAO;IAEU;IADrB,CAAC,GAAG,CAAC,CAAC;IACN,YAAqB,CAAS;QAAT,MAAC,GAAD,CAAC,CAAQ;IAAG,CAAC;IAElC,4DAA4D;IAC5D,cAAc;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,iEAAiE;IACjE,QAAQ;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACxD,CAAC;IAED;6CACyC;IACzC,MAAM;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAAE,CAAC,EAAE,CAAC;QAC5E,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,MAAM,EAAE,CAAC;QAAC,CAAC;QACnE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC3C,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC;YAAC,CAAC;QACrE,CAAC;QACD,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACnC,qEAAqE;QACrE,2CAA2C;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBAAE,CAAC,EAAE,CAAC;YAC5E,MAAM,EAAE,GAAG,CAAC,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAAE,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,GAAG,EAAE;gBAAE,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED;6BACyB;IACzB,IAAI;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3F,IAAI,CAAC,CAAC,MAAM,GAAG,oBAAoB;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,oBAAoB,aAAa,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC;IACvJ,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,IAAI,OAAqC,CAAC;IAC1C,wEAAwE;IACxE,0CAA0C;IAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,SAA+C,CAAC;IACpD,IAAI,QAA8C,CAAC;IACnD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAE;QAC9C,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,yEAAyE;IACzE,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,OAAO;YAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO,OAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,EAAE,CAAC,cAAc,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3D,GAAG,GAAG,EAAE,CAAC;YACT,EAAE,CAAC,CAAC,EAAE,CAAC;YACP,EAAE,CAAC,cAAc,EAAE,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACxD,CAAC;aAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,EAAE,CAAC;QAC3D,CAAC;QACD,2DAA2D;QAC3D,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;QACvB,IAAI,KAAK,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,EAAE,EAAE,CAAC;QACtG,KAAK,GAAG,KAAK,CAAC;QAEd,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACvC,CAAC,GAAG,EAAE,CAAC;YACP,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,GAAG,SAAS,CAAC;YACpB,SAAS,GAAG,SAAS,CAAC;YACtB,QAAQ,GAAG,SAAS,CAAC;YACrB,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,GAAG,CAAC;YACF,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5G,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,EAAE,CAAC,cAAc,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,QAAQ,EAAE,EAAE,CAAC;gBACX,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;wBACf,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBACrB,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;oBACV,CAAC;yBAAM,CAAC;wBACN,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAClD,CAAC;oBACD,CAAC,GAAG,EAAE,CAAC;oBAAC,CAAC,GAAG,EAAE,CAAC;oBACf,SAAS,GAAG,SAAS,CAAC;oBAAC,QAAQ,GAAG,SAAS,CAAC;oBAC5C,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBAC1C,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBAClF,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAChD,CAAC,GAAG,EAAE,CAAC;oBAAC,CAAC,GAAG,EAAE,CAAC;oBACf,SAAS,GAAG,SAAS,CAAC;oBAAC,QAAQ,GAAG,SAAS,CAAC;oBAC5C,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,IAAI,EAAU,CAAC;oBACf,IAAI,EAAU,CAAC;oBACf,IAAI,IAAc,CAAC;oBACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;wBACf,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;wBAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;wBACvC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzC,IAAI,GAAG,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAChE,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;oBAC7B,QAAQ,GAAG,SAAS,CAAC;oBACrB,CAAC,GAAG,EAAE,CAAC;oBAAC,CAAC,GAAG,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,IAAI,EAAU,CAAC;oBACf,IAAI,EAAU,CAAC;oBACf,IAAI,EAAU,CAAC;oBACf,IAAI,EAAU,CAAC;oBACf,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;wBACf,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;wBAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;wBACvC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;wBAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzC,CAAC;yBAAM,CAAC;wBACN,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;wBAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzC,CAAC;oBACD,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxD,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;oBAC5B,SAAS,GAAG,SAAS,CAAC;oBACtB,CAAC,GAAG,EAAE,CAAC;oBAAC,CAAC,GAAG,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACzB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;oBAC5B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnH,CAAC,GAAG,EAAE,CAAC;oBAAC,CAAC,GAAG,EAAE,CAAC;oBACf,SAAS,GAAG,SAAS,CAAC;oBAAC,QAAQ,GAAG,SAAS,CAAC;oBAC5C,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;IACzC,CAAC;IACD,IAAI,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACjE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,EAAU,EAAE,EAAU,EAAE,IAAY,EAAE,IAAY,EAAE,QAAgB,EACpE,QAAiB,EAAE,KAAc,EAAE,CAAS,EAAE,CAAS;IAEvD,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,mEAAmE;IACnE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,EAAE,IAAI,CAAC,CAAC;QACR,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9C,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,KAAK;QAAE,IAAI,GAAG,CAAC,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE;QAC/D,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SACzC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC9B,2DAA2D;IAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;QAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;IACtE,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;IAC5D,CAAC,CAAC;IACF,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,MAAM,CAAC;IACf,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACvB,kDAAkD;QAClD,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtH,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,EAAE,CAAC;IACT,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;sEACsE;AACtE,MAAM,UAAU,OAAO,CAAC,QAAgD,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IACtH,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IACrC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAkB,EAAE;QACvD,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;YACb,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,KAAK,GAAG;gBACN,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,KAAK,GAAG;gBACN,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,KAAK,GAAG;gBACN,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;8DAC8D;AAC9D,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;AAE9C;mDACmD;AACnD,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,OAAO,CAAC,CAAC;AACX,CAAC;AAED;wDACwD;AACxD,MAAM,UAAU,WAAW,CAAC,EAAW;IACrC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAe,CAAC;IAC/B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3I,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChB,CAAC"}
@@ -11,6 +11,11 @@ export type FontContentText = string | readonly string[] | undefined;
11
11
  * styles, running heads, design elements and comic lettering.
12
12
  */
13
13
  export declare function configFontFamilies(config: PostextConfig, markdown?: FontContentText): string[];
14
+ /** The faces the glyphs of inline symbols are set in (#1058): every
15
+ * `font="…"` of a `:icon[…]{glyph=… font=…}` the text writes (in a
16
+ * figure's labels and its `::caption` / `::note` lines). Read with a scan,
17
+ * not an expression: a long line is never read again from each opening. */
18
+ export declare function iconFontFamilies(markdown: FontContentText): string[];
14
19
  /** The faces code is set in (#624): the listings' when the text holds a
15
20
  * fence (and the configuration reads fences) or the configuration has a
16
21
  * `codeStyle` section, the inline code's when it sets inline code. */
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/fonts/usage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAO7C;;;oEAGoE;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;AAgCrE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAyE9F;AASD;;uEAEuE;AACvE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAO5F;AAED,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE;AAE9E,eAAO,MAAM,sBAAsB,EAAE,SAAS,cAAc,EAK3D,CAAC;AAEF,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC;;;6BAGyB;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;4BACwB;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAKD;;;oDAGoD;AACpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAEzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CA8F9G"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/fonts/usage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQ7C;;;oEAGoE;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;AAgCrE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CA4E9F;AAED;;;4EAG4E;AAC5E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAgBpE;AASD;;uEAEuE;AACvE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAO5F;AAED,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE;AAE9E,eAAO,MAAM,sBAAsB,EAAE,SAAS,cAAc,EAK3D,CAAC;AAEF,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC;;;6BAGyB;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;4BACwB;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAKD;;;oDAGoD;AACpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAEzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CA+G9G"}
@@ -4,9 +4,10 @@
4
4
  // them with its canvas.
5
5
  import { DEFAULT_TEXT_ELEMENT, defaultCjkEmphasis, resolveBodyTextConfig, resolveHeaderFooterConfig, resolveHeadingsConfig, resolveOrderedListsConfig, resolveUnorderedListsConfig } from '../defaults';
6
6
  import { primaryFontFamily } from '../measure/font';
7
- import { comicFontFamilies } from '../comics/fonts';
7
+ import { comicFontFamilies, comicFontUses } from '../comics/fonts';
8
8
  import { DEFAULT_CODE_STYLE } from '../defaults/codeStyle';
9
9
  import { codeFenceOpen } from '../parse/codeFence';
10
+ import { parseDirectiveAttrs } from '../parse/attrs';
10
11
  /** Config keys naming a font family: `fontFamily`, `bodyFontFamily`,
11
12
  * `headerFontFamily`, `separatorFontFamily`, `numberFontFamily`… */
12
13
  const FONT_FAMILY_KEY = /^(?:f|[a-z]\w*F)ontFamily$/;
@@ -64,10 +65,11 @@ export function configFontFamilies(config, markdown) {
64
65
  families.add(level.fontFamily);
65
66
  families.add(level.separatorFontFamily);
66
67
  }
67
- // Callout styles: title, glyph icon / marker and body fonts. Unset fields
68
- // inherit the headings / body families collected above.
68
+ // Callout styles: title, glyph icon / marker, the glyph of the label tab
69
+ // (#1054) and body fonts. Unset fields inherit the headings / body
70
+ // families collected above.
69
71
  for (const style of config.calloutStyles ?? []) {
70
- for (const family of [style.titleStyle?.fontFamily, style.icon?.fontFamily, style.marker?.fontFamily, style.body?.fontFamily]) {
72
+ for (const family of [style.titleStyle?.fontFamily, style.icon?.fontFamily, style.marker?.fontFamily, style.label?.icon?.fontFamily, style.body?.fontFamily]) {
71
73
  if (family)
72
74
  families.add(family);
73
75
  }
@@ -131,10 +133,38 @@ export function configFontFamilies(config, markdown) {
131
133
  // configuration sets one.
132
134
  for (const family of codeFontFamilies(config, markdown))
133
135
  families.add(family);
136
+ // The glyphs of inline symbols (#1058), in the faces the text names.
137
+ for (const family of iconFontFamilies(markdown))
138
+ families.add(family);
134
139
  // A CSS font stack sets its text in the first family (the engine's
135
140
  // `primaryFontFamily`): load that one.
136
141
  return [...new Set(Array.from(families, primaryFontFamily))];
137
142
  }
143
+ /** The faces the glyphs of inline symbols are set in (#1058): every
144
+ * `font="…"` of a `:icon[…]{glyph=… font=…}` the text writes (in a
145
+ * figure's labels and its `::caption` / `::note` lines). Read with a scan,
146
+ * not an expression: a long line is never read again from each opening. */
147
+ export function iconFontFamilies(markdown) {
148
+ if (markdown === undefined)
149
+ return [];
150
+ const out = new Set();
151
+ for (const text of typeof markdown === 'string' ? [markdown] : markdown) {
152
+ for (let at = text.indexOf(':icon['); at >= 0; at = text.indexOf(':icon[', at + 1)) {
153
+ const close = text.indexOf(']{', at);
154
+ const lineEnd = text.indexOf('\n', at);
155
+ if (close < 0 || (lineEnd >= 0 && close > lineEnd))
156
+ continue;
157
+ const end = text.indexOf('}', close);
158
+ if (end < 0 || (lineEnd >= 0 && end > lineEnd))
159
+ continue;
160
+ const attrs = parseDirectiveAttrs(text.slice(close + 2, end));
161
+ const font = attrs.font?.trim();
162
+ if (font && attrs.glyph)
163
+ out.add(primaryFontFamily(font));
164
+ }
165
+ }
166
+ return [...out];
167
+ }
138
168
  /** Whether `text` holds a line that opens a code fence. */
139
169
  function hasCodeFence(text) {
140
170
  if (text === undefined)
@@ -192,6 +222,19 @@ export function collectFontUsage(config, doc) {
192
222
  list.push(use);
193
223
  usage.set(family, list);
194
224
  };
225
+ // Nodes whose weight is not the one they write (#1047): headings, their
226
+ // levels and heading styles (700 by default), comic lettering, balloon
227
+ // styles and cast (bold when a `bold` resolves true, the built-in ones
228
+ // included). Their faces are counted resolved below; their subtrees
229
+ // (designs, elements) are still walked.
230
+ const resolvedElsewhere = new Set([
231
+ config.headings,
232
+ ...(config.headings?.levels ?? []),
233
+ ...(config.headingStyles ?? []),
234
+ config.comics?.lettering,
235
+ ...(config.comics?.balloonStyles ?? []),
236
+ ...(config.comics?.cast ?? []),
237
+ ].filter(Boolean));
195
238
  const walk = (node) => {
196
239
  if (!node || typeof node !== 'object')
197
240
  return;
@@ -201,7 +244,7 @@ export function collectFontUsage(config, doc) {
201
244
  return;
202
245
  }
203
246
  const rec = node;
204
- if (typeof rec.fontFamily === 'string' && rec.fontFamily.trim()) {
247
+ if (typeof rec.fontFamily === 'string' && rec.fontFamily.trim() && !resolvedElsewhere.has(rec)) {
205
248
  const weight = typeof rec.fontWeight === 'number' ? rec.fontWeight : 400;
206
249
  // `fontStyle: 'italic'` (headings) or `italic: true` (titles,
207
250
  // paragraph styles, callout bodies).
@@ -220,6 +263,13 @@ export function collectFontUsage(config, doc) {
220
263
  walk(value);
221
264
  };
222
265
  walk(config);
266
+ for (const h of headingFontUses(config))
267
+ add(primaryFontFamily(h.family), { weight: h.weight, style: h.italic ? 'italic' : 'normal' });
268
+ for (const c of comicFontUses(config, doc?.markdown))
269
+ add(primaryFontFamily(c.family), { weight: c.weight, style: c.style });
270
+ // The glyphs of inline symbols (#1058): upright, regular.
271
+ for (const family of iconFontFamilies(doc?.markdown))
272
+ add(family, { weight: 400, style: 'normal' });
223
273
  const body = config.bodyText?.fontFamily;
224
274
  if (typeof body === 'string' && body.trim()) {
225
275
  const emphasis = config.cjk?.emphasis ?? 'auto';
@@ -367,12 +417,8 @@ function addBoldWeights(config, doc, add) {
367
417
  if (weight !== weightOf(own, 400))
368
418
  bold(family, weight, italic === true ? ['italic'] : ['normal']);
369
419
  };
370
- const headings = config.headings;
371
- heavier(named(headings?.fontFamily), headings?.fontWeight, false);
372
- for (const level of headings?.levels ?? [])
373
- heavier(named(level.fontFamily) ?? named(headings?.fontFamily), level.fontWeight ?? headings?.fontWeight, level.italic);
374
- for (const style of config.headingStyles ?? [])
375
- heavier(named(style.fontFamily), style.fontWeight, style.italic);
420
+ for (const h of headingFontUses(config))
421
+ heavier(primaryFontFamily(h.family), h.weight, h.italic);
376
422
  const toc = config.toc;
377
423
  for (const entry of [toc, ...(toc?.levels ?? []), toc?.unnumbered]) {
378
424
  heavier(named(entry?.fontFamily) ?? named(toc?.fontFamily), entry?.fontWeight ?? toc?.fontWeight, entry?.italic);
@@ -380,4 +426,28 @@ function addBoldWeights(config, doc, add) {
380
426
  const index = config.index;
381
427
  heavier(named(index?.fontFamily), index?.fontWeight, false);
382
428
  }
429
+ /**
430
+ * The faces headings are set in (#1047), resolved as the engine resolves
431
+ * them: each level with what it leaves unset taken from `headings` and the
432
+ * defaults (700, upright), and each heading style laid over every level
433
+ * (`createHeadingLevelResolver`), since the text may set it on any. A
434
+ * heading family named with no weight is asked for its bold, not the 400
435
+ * the configuration as written reads as.
436
+ */
437
+ function headingFontUses(config) {
438
+ const levels = resolveHeadingsConfig(config.headings).levels;
439
+ const out = levels.map((l) => ({ family: l.fontFamily, weight: l.fontWeight, italic: l.italic }));
440
+ for (const style of config.headingStyles ?? []) {
441
+ if (style.fontFamily === undefined && style.fontWeight === undefined && style.italic === undefined)
442
+ continue;
443
+ for (const l of levels) {
444
+ out.push({
445
+ family: style.fontFamily?.trim() || l.fontFamily,
446
+ weight: style.fontWeight ?? l.fontWeight,
447
+ italic: style.italic ?? l.italic,
448
+ });
449
+ }
450
+ }
451
+ return out;
452
+ }
383
453
  //# sourceMappingURL=usage.js.map