@knowvah/dot-engine 0.1.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 (986) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +292 -0
  3. package/dist/api/builder.d.ts +78 -0
  4. package/dist/api/builder.d.ts.map +1 -0
  5. package/dist/api/edge-ops.d.ts +45 -0
  6. package/dist/api/edge-ops.d.ts.map +1 -0
  7. package/dist/api/geometry.d.ts +159 -0
  8. package/dist/api/geometry.d.ts.map +1 -0
  9. package/dist/api/index.d.ts +24 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api.js +719 -0
  12. package/dist/api.js.map +7 -0
  13. package/dist/bundle.js +101 -0
  14. package/dist/cdt/bag.d.ts +58 -0
  15. package/dist/cdt/bag.d.ts.map +1 -0
  16. package/dist/cdt/hash-core.d.ts +40 -0
  17. package/dist/cdt/hash-core.d.ts.map +1 -0
  18. package/dist/cdt/hash.d.ts +74 -0
  19. package/dist/cdt/hash.d.ts.map +1 -0
  20. package/dist/cdt/index.d.ts +16 -0
  21. package/dist/cdt/index.d.ts.map +1 -0
  22. package/dist/cdt/splay-core.d.ts +78 -0
  23. package/dist/cdt/splay-core.d.ts.map +1 -0
  24. package/dist/cdt/splay.d.ts +63 -0
  25. package/dist/cdt/splay.d.ts.map +1 -0
  26. package/dist/cdt/strhash.d.ts +26 -0
  27. package/dist/cdt/strhash.d.ts.map +1 -0
  28. package/dist/cdt/types.d.ts +11 -0
  29. package/dist/cdt/types.d.ts.map +1 -0
  30. package/dist/common/arith.d.ts +35 -0
  31. package/dist/common/arith.d.ts.map +1 -0
  32. package/dist/common/arm-pow-data.d.ts +17 -0
  33. package/dist/common/arm-pow-data.d.ts.map +1 -0
  34. package/dist/common/arm-pow.d.ts +12 -0
  35. package/dist/common/arm-pow.d.ts.map +1 -0
  36. package/dist/common/arrows-constants.d.ts +97 -0
  37. package/dist/common/arrows-constants.d.ts.map +1 -0
  38. package/dist/common/arrows-geometry.d.ts +24 -0
  39. package/dist/common/arrows-geometry.d.ts.map +1 -0
  40. package/dist/common/arrows-miter.d.ts +24 -0
  41. package/dist/common/arrows-miter.d.ts.map +1 -0
  42. package/dist/common/arrows-shapes-poly.d.ts +24 -0
  43. package/dist/common/arrows-shapes-poly.d.ts.map +1 -0
  44. package/dist/common/arrows-shapes-util.d.ts +77 -0
  45. package/dist/common/arrows-shapes-util.d.ts.map +1 -0
  46. package/dist/common/arrows-shapes.d.ts +48 -0
  47. package/dist/common/arrows-shapes.d.ts.map +1 -0
  48. package/dist/common/arrows-types.d.ts +59 -0
  49. package/dist/common/arrows-types.d.ts.map +1 -0
  50. package/dist/common/arrows.d.ts +69 -0
  51. package/dist/common/arrows.d.ts.map +1 -0
  52. package/dist/common/color.d.ts +66 -0
  53. package/dist/common/color.d.ts.map +1 -0
  54. package/dist/common/colorData.d.ts +10 -0
  55. package/dist/common/colorData.d.ts.map +1 -0
  56. package/dist/common/compass-port.d.ts +39 -0
  57. package/dist/common/compass-port.d.ts.map +1 -0
  58. package/dist/common/crand.d.ts +42 -0
  59. package/dist/common/crand.d.ts.map +1 -0
  60. package/dist/common/edge-label-init.d.ts +51 -0
  61. package/dist/common/edge-label-init.d.ts.map +1 -0
  62. package/dist/common/edge-offset.d.ts +66 -0
  63. package/dist/common/edge-offset.d.ts.map +1 -0
  64. package/dist/common/ellipse-wedge.d.ts +10 -0
  65. package/dist/common/ellipse-wedge.d.ts.map +1 -0
  66. package/dist/common/emit-types.d.ts +255 -0
  67. package/dist/common/emit-types.d.ts.map +1 -0
  68. package/dist/common/fma.d.ts +10 -0
  69. package/dist/common/fma.d.ts.map +1 -0
  70. package/dist/common/graph-init.d.ts +61 -0
  71. package/dist/common/graph-init.d.ts.map +1 -0
  72. package/dist/common/html-entities.d.ts +17 -0
  73. package/dist/common/html-entities.d.ts.map +1 -0
  74. package/dist/common/html-string.d.ts +14 -0
  75. package/dist/common/html-string.d.ts.map +1 -0
  76. package/dist/common/htmltable-emit-fill.d.ts +84 -0
  77. package/dist/common/htmltable-emit-fill.d.ts.map +1 -0
  78. package/dist/common/htmltable-emit-rules.d.ts +79 -0
  79. package/dist/common/htmltable-emit-rules.d.ts.map +1 -0
  80. package/dist/common/htmltable-emit.d.ts +63 -0
  81. package/dist/common/htmltable-emit.d.ts.map +1 -0
  82. package/dist/common/htmltable-lex.d.ts +16 -0
  83. package/dist/common/htmltable-lex.d.ts.map +1 -0
  84. package/dist/common/htmltable-parse.d.ts +37 -0
  85. package/dist/common/htmltable-parse.d.ts.map +1 -0
  86. package/dist/common/htmltable-port.d.ts +15 -0
  87. package/dist/common/htmltable-port.d.ts.map +1 -0
  88. package/dist/common/htmltable-pos-runs.d.ts +88 -0
  89. package/dist/common/htmltable-pos-runs.d.ts.map +1 -0
  90. package/dist/common/htmltable-pos.d.ts +192 -0
  91. package/dist/common/htmltable-pos.d.ts.map +1 -0
  92. package/dist/common/htmltable-types.d.ts +237 -0
  93. package/dist/common/htmltable-types.d.ts.map +1 -0
  94. package/dist/common/htmltable.d.ts +74 -0
  95. package/dist/common/htmltable.d.ts.map +1 -0
  96. package/dist/common/layers.d.ts +20 -0
  97. package/dist/common/layers.d.ts.map +1 -0
  98. package/dist/common/make-label.d.ts +60 -0
  99. package/dist/common/make-label.d.ts.map +1 -0
  100. package/dist/common/multicolor.d.ts +46 -0
  101. package/dist/common/multicolor.d.ts.map +1 -0
  102. package/dist/common/nodeinit.d.ts +45 -0
  103. package/dist/common/nodeinit.d.ts.map +1 -0
  104. package/dist/common/poly-gencode.d.ts +40 -0
  105. package/dist/common/poly-gencode.d.ts.map +1 -0
  106. package/dist/common/poly-init.d.ts +51 -0
  107. package/dist/common/poly-init.d.ts.map +1 -0
  108. package/dist/common/poly-inside.d.ts +37 -0
  109. package/dist/common/poly-inside.d.ts.map +1 -0
  110. package/dist/common/poly-shapes-cases.d.ts +31 -0
  111. package/dist/common/poly-shapes-cases.d.ts.map +1 -0
  112. package/dist/common/poly-shapes-cases2.d.ts +25 -0
  113. package/dist/common/poly-shapes-cases2.d.ts.map +1 -0
  114. package/dist/common/poly-shapes-util.d.ts +42 -0
  115. package/dist/common/poly-shapes-util.d.ts.map +1 -0
  116. package/dist/common/poly-shapes.d.ts +39 -0
  117. package/dist/common/poly-shapes.d.ts.map +1 -0
  118. package/dist/common/poly-sizing.d.ts +189 -0
  119. package/dist/common/poly-sizing.d.ts.map +1 -0
  120. package/dist/common/poly-vertices.d.ts +42 -0
  121. package/dist/common/poly-vertices.d.ts.map +1 -0
  122. package/dist/common/postproc.d.ts +49 -0
  123. package/dist/common/postproc.d.ts.map +1 -0
  124. package/dist/common/ps-fontalias.d.ts +36 -0
  125. package/dist/common/ps-fontalias.d.ts.map +1 -0
  126. package/dist/common/random.d.ts +8 -0
  127. package/dist/common/random.d.ts.map +1 -0
  128. package/dist/common/record-port.d.ts +34 -0
  129. package/dist/common/record-port.d.ts.map +1 -0
  130. package/dist/common/record.d.ts +105 -0
  131. package/dist/common/record.d.ts.map +1 -0
  132. package/dist/common/shapeData.d.ts +186 -0
  133. package/dist/common/shapeData.d.ts.map +1 -0
  134. package/dist/common/shapes.d.ts +36 -0
  135. package/dist/common/shapes.d.ts.map +1 -0
  136. package/dist/common/spline-midpoint.d.ts +31 -0
  137. package/dist/common/spline-midpoint.d.ts.map +1 -0
  138. package/dist/common/splines-clip.d.ts +21 -0
  139. package/dist/common/splines-clip.d.ts.map +1 -0
  140. package/dist/common/splines-constants.d.ts +42 -0
  141. package/dist/common/splines-constants.d.ts.map +1 -0
  142. package/dist/common/splines-geom.d.ts +51 -0
  143. package/dist/common/splines-geom.d.ts.map +1 -0
  144. package/dist/common/splines-path-begin.d.ts +17 -0
  145. package/dist/common/splines-path-begin.d.ts.map +1 -0
  146. package/dist/common/splines-path-end.d.ts +17 -0
  147. package/dist/common/splines-path-end.d.ts.map +1 -0
  148. package/dist/common/splines-path-shared.d.ts +53 -0
  149. package/dist/common/splines-path-shared.d.ts.map +1 -0
  150. package/dist/common/splines-routespl.d.ts +40 -0
  151. package/dist/common/splines-routespl.d.ts.map +1 -0
  152. package/dist/common/splines-selfedge.d.ts +21 -0
  153. package/dist/common/splines-selfedge.d.ts.map +1 -0
  154. package/dist/common/splines.d.ts +18 -0
  155. package/dist/common/splines.d.ts.map +1 -0
  156. package/dist/common/style-resolve.d.ts +197 -0
  157. package/dist/common/style-resolve.d.ts.map +1 -0
  158. package/dist/common/subst.d.ts +31 -0
  159. package/dist/common/subst.d.ts.map +1 -0
  160. package/dist/common/taper.d.ts +23 -0
  161. package/dist/common/taper.d.ts.map +1 -0
  162. package/dist/common/textmeasure-factory.d.ts +33 -0
  163. package/dist/common/textmeasure-factory.d.ts.map +1 -0
  164. package/dist/common/textmeasure-lookup.d.ts +17 -0
  165. package/dist/common/textmeasure-lookup.d.ts.map +1 -0
  166. package/dist/common/textmeasure-lut-data-a.d.ts +13 -0
  167. package/dist/common/textmeasure-lut-data-a.d.ts.map +1 -0
  168. package/dist/common/textmeasure-lut-data-b.d.ts +12 -0
  169. package/dist/common/textmeasure-lut-data-b.d.ts.map +1 -0
  170. package/dist/common/textmeasure-lut-data-c.d.ts +13 -0
  171. package/dist/common/textmeasure-lut-data-c.d.ts.map +1 -0
  172. package/dist/common/textmeasure-lut-data.d.ts +27 -0
  173. package/dist/common/textmeasure-lut-data.d.ts.map +1 -0
  174. package/dist/common/textmeasure.d.ts +120 -0
  175. package/dist/common/textmeasure.d.ts.map +1 -0
  176. package/dist/common/types.d.ts +316 -0
  177. package/dist/common/types.d.ts.map +1 -0
  178. package/dist/common/xlabels-place.d.ts +125 -0
  179. package/dist/common/xlabels-place.d.ts.map +1 -0
  180. package/dist/debug.d.ts +58 -0
  181. package/dist/debug.d.ts.map +1 -0
  182. package/dist/errors.d.ts +63 -0
  183. package/dist/errors.d.ts.map +1 -0
  184. package/dist/gvc/anchor.d.ts +86 -0
  185. package/dist/gvc/anchor.d.ts.map +1 -0
  186. package/dist/gvc/context.d.ts +177 -0
  187. package/dist/gvc/context.d.ts.map +1 -0
  188. package/dist/gvc/default-context.d.ts +20 -0
  189. package/dist/gvc/default-context.d.ts.map +1 -0
  190. package/dist/gvc/device-cluster.d.ts +25 -0
  191. package/dist/gvc/device-cluster.d.ts.map +1 -0
  192. package/dist/gvc/device.d.ts +99 -0
  193. package/dist/gvc/device.d.ts.map +1 -0
  194. package/dist/gvc/edge-labels.d.ts +10 -0
  195. package/dist/gvc/edge-labels.d.ts.map +1 -0
  196. package/dist/gvc/emit-walk.d.ts +22 -0
  197. package/dist/gvc/emit-walk.d.ts.map +1 -0
  198. package/dist/gvc/image-resolver.d.ts +44 -0
  199. package/dist/gvc/image-resolver.d.ts.map +1 -0
  200. package/dist/gvc/job.d.ts +234 -0
  201. package/dist/gvc/job.d.ts.map +1 -0
  202. package/dist/gvc/textlayout.d.ts +33 -0
  203. package/dist/gvc/textlayout.d.ts.map +1 -0
  204. package/dist/gvc/textspan-emit.d.ts +41 -0
  205. package/dist/gvc/textspan-emit.d.ts.map +1 -0
  206. package/dist/gvc/usershape.d.ts +25 -0
  207. package/dist/gvc/usershape.d.ts.map +1 -0
  208. package/dist/gvc/viewport.d.ts +71 -0
  209. package/dist/gvc/viewport.d.ts.map +1 -0
  210. package/dist/index.d.ts +54 -0
  211. package/dist/index.d.ts.map +1 -0
  212. package/dist/index.js +52862 -0
  213. package/dist/index.js.map +7 -0
  214. package/dist/label/index.d.ts +74 -0
  215. package/dist/label/index.d.ts.map +1 -0
  216. package/dist/label/node.d.ts +108 -0
  217. package/dist/label/node.d.ts.map +1 -0
  218. package/dist/label/rectangle.d.ts +60 -0
  219. package/dist/label/rectangle.d.ts.map +1 -0
  220. package/dist/label/split-q.d.ts +13 -0
  221. package/dist/label/split-q.d.ts.map +1 -0
  222. package/dist/label/xlabels-geom.d.ts +46 -0
  223. package/dist/label/xlabels-geom.d.ts.map +1 -0
  224. package/dist/label/xlabels-intersect.d.ts +79 -0
  225. package/dist/label/xlabels-intersect.d.ts.map +1 -0
  226. package/dist/label/xlabels.d.ts +67 -0
  227. package/dist/label/xlabels.d.ts.map +1 -0
  228. package/dist/layout/circo/blockpath.d.ts +120 -0
  229. package/dist/layout/circo/blockpath.d.ts.map +1 -0
  230. package/dist/layout/circo/blocks.d.ts +135 -0
  231. package/dist/layout/circo/blocks.d.ts.map +1 -0
  232. package/dist/layout/circo/blocktree.d.ts +51 -0
  233. package/dist/layout/circo/blocktree.d.ts.map +1 -0
  234. package/dist/layout/circo/circular.d.ts +59 -0
  235. package/dist/layout/circo/circular.d.ts.map +1 -0
  236. package/dist/layout/circo/index.d.ts +35 -0
  237. package/dist/layout/circo/index.d.ts.map +1 -0
  238. package/dist/layout/circo/init.d.ts +50 -0
  239. package/dist/layout/circo/init.d.ts.map +1 -0
  240. package/dist/layout/circo/position-helpers.d.ts +33 -0
  241. package/dist/layout/circo/position-helpers.d.ts.map +1 -0
  242. package/dist/layout/circo/position.d.ts +66 -0
  243. package/dist/layout/circo/position.d.ts.map +1 -0
  244. package/dist/layout/dot/acyclic.d.ts +8 -0
  245. package/dist/layout/dot/acyclic.d.ts.map +1 -0
  246. package/dist/layout/dot/aspect.d.ts +17 -0
  247. package/dist/layout/dot/aspect.d.ts.map +1 -0
  248. package/dist/layout/dot/classify.d.ts +52 -0
  249. package/dist/layout/dot/classify.d.ts.map +1 -0
  250. package/dist/layout/dot/cluster-path.d.ts +38 -0
  251. package/dist/layout/dot/cluster-path.d.ts.map +1 -0
  252. package/dist/layout/dot/cluster.d.ts +102 -0
  253. package/dist/layout/dot/cluster.d.ts.map +1 -0
  254. package/dist/layout/dot/compound-clip.d.ts +69 -0
  255. package/dist/layout/dot/compound-clip.d.ts.map +1 -0
  256. package/dist/layout/dot/compound-geom.d.ts +115 -0
  257. package/dist/layout/dot/compound-geom.d.ts.map +1 -0
  258. package/dist/layout/dot/compound.d.ts +56 -0
  259. package/dist/layout/dot/compound.d.ts.map +1 -0
  260. package/dist/layout/dot/conc.d.ts +88 -0
  261. package/dist/layout/dot/conc.d.ts.map +1 -0
  262. package/dist/layout/dot/decomp.d.ts +66 -0
  263. package/dist/layout/dot/decomp.d.ts.map +1 -0
  264. package/dist/layout/dot/edge-order.d.ts +27 -0
  265. package/dist/layout/dot/edge-order.d.ts.map +1 -0
  266. package/dist/layout/dot/edge-route-arrow.d.ts +46 -0
  267. package/dist/layout/dot/edge-route-arrow.d.ts.map +1 -0
  268. package/dist/layout/dot/edge-route-boxes.d.ts +75 -0
  269. package/dist/layout/dot/edge-route-boxes.d.ts.map +1 -0
  270. package/dist/layout/dot/edge-route-chain.d.ts +67 -0
  271. package/dist/layout/dot/edge-route-chain.d.ts.map +1 -0
  272. package/dist/layout/dot/edge-route-clip.d.ts +88 -0
  273. package/dist/layout/dot/edge-route-clip.d.ts.map +1 -0
  274. package/dist/layout/dot/edge-route-faithful.d.ts +94 -0
  275. package/dist/layout/dot/edge-route-faithful.d.ts.map +1 -0
  276. package/dist/layout/dot/edge-route-geom.d.ts +43 -0
  277. package/dist/layout/dot/edge-route-geom.d.ts.map +1 -0
  278. package/dist/layout/dot/edge-route-helpers.d.ts +50 -0
  279. package/dist/layout/dot/edge-route-helpers.d.ts.map +1 -0
  280. package/dist/layout/dot/edge-route-poly.d.ts +48 -0
  281. package/dist/layout/dot/edge-route-poly.d.ts.map +1 -0
  282. package/dist/layout/dot/edge-route-rank.d.ts +57 -0
  283. package/dist/layout/dot/edge-route-rank.d.ts.map +1 -0
  284. package/dist/layout/dot/edge-route-routing.d.ts +99 -0
  285. package/dist/layout/dot/edge-route-routing.d.ts.map +1 -0
  286. package/dist/layout/dot/edge-route.d.ts +57 -0
  287. package/dist/layout/dot/edge-route.d.ts.map +1 -0
  288. package/dist/layout/dot/fastgr.d.ts +147 -0
  289. package/dist/layout/dot/fastgr.d.ts.map +1 -0
  290. package/dist/layout/dot/flat-utils.d.ts +21 -0
  291. package/dist/layout/dot/flat-utils.d.ts.map +1 -0
  292. package/dist/layout/dot/flat.d.ts +152 -0
  293. package/dist/layout/dot/flat.d.ts.map +1 -0
  294. package/dist/layout/dot/graph-label.d.ts +18 -0
  295. package/dist/layout/dot/graph-label.d.ts.map +1 -0
  296. package/dist/layout/dot/index.d.ts +128 -0
  297. package/dist/layout/dot/index.d.ts.map +1 -0
  298. package/dist/layout/dot/init.d.ts +93 -0
  299. package/dist/layout/dot/init.d.ts.map +1 -0
  300. package/dist/layout/dot/label-order.d.ts +45 -0
  301. package/dist/layout/dot/label-order.d.ts.map +1 -0
  302. package/dist/layout/dot/mincross-build.d.ts +52 -0
  303. package/dist/layout/dot/mincross-build.d.ts.map +1 -0
  304. package/dist/layout/dot/mincross-cross.d.ts +80 -0
  305. package/dist/layout/dot/mincross-cross.d.ts.map +1 -0
  306. package/dist/layout/dot/mincross-flat.d.ts +27 -0
  307. package/dist/layout/dot/mincross-flat.d.ts.map +1 -0
  308. package/dist/layout/dot/mincross-order.d.ts +89 -0
  309. package/dist/layout/dot/mincross-order.d.ts.map +1 -0
  310. package/dist/layout/dot/mincross-utils.d.ts +60 -0
  311. package/dist/layout/dot/mincross-utils.d.ts.map +1 -0
  312. package/dist/layout/dot/mincross.d.ts +75 -0
  313. package/dist/layout/dot/mincross.d.ts.map +1 -0
  314. package/dist/layout/dot/ns-core.d.ts +37 -0
  315. package/dist/layout/dot/ns-core.d.ts.map +1 -0
  316. package/dist/layout/dot/ns-range.d.ts +17 -0
  317. package/dist/layout/dot/ns-range.d.ts.map +1 -0
  318. package/dist/layout/dot/ns-subtree.d.ts +78 -0
  319. package/dist/layout/dot/ns-subtree.d.ts.map +1 -0
  320. package/dist/layout/dot/ns.d.ts +86 -0
  321. package/dist/layout/dot/ns.d.ts.map +1 -0
  322. package/dist/layout/dot/ortho-adapter.d.ts +19 -0
  323. package/dist/layout/dot/ortho-adapter.d.ts.map +1 -0
  324. package/dist/layout/dot/pack-components.d.ts +100 -0
  325. package/dist/layout/dot/pack-components.d.ts.map +1 -0
  326. package/dist/layout/dot/position-aux.d.ts +110 -0
  327. package/dist/layout/dot/position-aux.d.ts.map +1 -0
  328. package/dist/layout/dot/position-bbox.d.ts +57 -0
  329. package/dist/layout/dot/position-bbox.d.ts.map +1 -0
  330. package/dist/layout/dot/position-cluster.d.ts +48 -0
  331. package/dist/layout/dot/position-cluster.d.ts.map +1 -0
  332. package/dist/layout/dot/position-ycoords.d.ts +42 -0
  333. package/dist/layout/dot/position-ycoords.d.ts.map +1 -0
  334. package/dist/layout/dot/position.d.ts +47 -0
  335. package/dist/layout/dot/position.d.ts.map +1 -0
  336. package/dist/layout/dot/rank-dot2.d.ts +114 -0
  337. package/dist/layout/dot/rank-dot2.d.ts.map +1 -0
  338. package/dist/layout/dot/rank.d.ts +119 -0
  339. package/dist/layout/dot/rank.d.ts.map +1 -0
  340. package/dist/layout/dot/sameport.d.ts +70 -0
  341. package/dist/layout/dot/sameport.d.ts.map +1 -0
  342. package/dist/layout/dot/self-loop.d.ts +54 -0
  343. package/dist/layout/dot/self-loop.d.ts.map +1 -0
  344. package/dist/layout/dot/splines-clone.d.ts +33 -0
  345. package/dist/layout/dot/splines-clone.d.ts.map +1 -0
  346. package/dist/layout/dot/splines-flat-labeled.d.ts +101 -0
  347. package/dist/layout/dot/splines-flat-labeled.d.ts.map +1 -0
  348. package/dist/layout/dot/splines-flat-multi.d.ts +35 -0
  349. package/dist/layout/dot/splines-flat-multi.d.ts.map +1 -0
  350. package/dist/layout/dot/splines-flat.d.ts +116 -0
  351. package/dist/layout/dot/splines-flat.d.ts.map +1 -0
  352. package/dist/layout/dot/splines-groups.d.ts +38 -0
  353. package/dist/layout/dot/splines-groups.d.ts.map +1 -0
  354. package/dist/layout/dot/splines-label.d.ts +105 -0
  355. package/dist/layout/dot/splines-label.d.ts.map +1 -0
  356. package/dist/layout/dot/splines-route-type.d.ts +28 -0
  357. package/dist/layout/dot/splines-route-type.d.ts.map +1 -0
  358. package/dist/layout/dot/splines-route.d.ts +99 -0
  359. package/dist/layout/dot/splines-route.d.ts.map +1 -0
  360. package/dist/layout/dot/splines.d.ts +157 -0
  361. package/dist/layout/dot/splines.d.ts.map +1 -0
  362. package/dist/layout/dot/straight-edges.d.ts +39 -0
  363. package/dist/layout/dot/straight-edges.d.ts.map +1 -0
  364. package/dist/layout/fdp/cluster-edges.d.ts +31 -0
  365. package/dist/layout/fdp/cluster-edges.d.ts.map +1 -0
  366. package/dist/layout/fdp/comp.d.ts +29 -0
  367. package/dist/layout/fdp/comp.d.ts.map +1 -0
  368. package/dist/layout/fdp/derive.d.ts +39 -0
  369. package/dist/layout/fdp/derive.d.ts.map +1 -0
  370. package/dist/layout/fdp/fdp-model.d.ts +101 -0
  371. package/dist/layout/fdp/fdp-model.d.ts.map +1 -0
  372. package/dist/layout/fdp/grid.d.ts +49 -0
  373. package/dist/layout/fdp/grid.d.ts.map +1 -0
  374. package/dist/layout/fdp/index.d.ts +36 -0
  375. package/dist/layout/fdp/index.d.ts.map +1 -0
  376. package/dist/layout/fdp/init.d.ts +26 -0
  377. package/dist/layout/fdp/init.d.ts.map +1 -0
  378. package/dist/layout/fdp/layout.d.ts +57 -0
  379. package/dist/layout/fdp/layout.d.ts.map +1 -0
  380. package/dist/layout/fdp/normalize.d.ts +18 -0
  381. package/dist/layout/fdp/normalize.d.ts.map +1 -0
  382. package/dist/layout/fdp/ports.d.ts +41 -0
  383. package/dist/layout/fdp/ports.d.ts.map +1 -0
  384. package/dist/layout/fdp/tlayout-init.d.ts +21 -0
  385. package/dist/layout/fdp/tlayout-init.d.ts.map +1 -0
  386. package/dist/layout/fdp/tlayout-parms.d.ts +98 -0
  387. package/dist/layout/fdp/tlayout-parms.d.ts.map +1 -0
  388. package/dist/layout/fdp/tlayout.d.ts +43 -0
  389. package/dist/layout/fdp/tlayout.d.ts.map +1 -0
  390. package/dist/layout/fdp/xlayout.d.ts +26 -0
  391. package/dist/layout/fdp/xlayout.d.ts.map +1 -0
  392. package/dist/layout/neato/bfs.d.ts +43 -0
  393. package/dist/layout/neato/bfs.d.ts.map +1 -0
  394. package/dist/layout/neato/cdt-surface.d.ts +16 -0
  395. package/dist/layout/neato/cdt-surface.d.ts.map +1 -0
  396. package/dist/layout/neato/conjgrad.d.ts +61 -0
  397. package/dist/layout/neato/conjgrad.d.ts.map +1 -0
  398. package/dist/layout/neato/delaunay.d.ts +28 -0
  399. package/dist/layout/neato/delaunay.d.ts.map +1 -0
  400. package/dist/layout/neato/dijkstra.d.ts +80 -0
  401. package/dist/layout/neato/dijkstra.d.ts.map +1 -0
  402. package/dist/layout/neato/fdp-adjust.d.ts +31 -0
  403. package/dist/layout/neato/fdp-adjust.d.ts.map +1 -0
  404. package/dist/layout/neato/index.d.ts +58 -0
  405. package/dist/layout/neato/index.d.ts.map +1 -0
  406. package/dist/layout/neato/init.d.ts +207 -0
  407. package/dist/layout/neato/init.d.ts.map +1 -0
  408. package/dist/layout/neato/legal.d.ts +7 -0
  409. package/dist/layout/neato/legal.d.ts.map +1 -0
  410. package/dist/layout/neato/matrix-ops.d.ts +28 -0
  411. package/dist/layout/neato/matrix-ops.d.ts.map +1 -0
  412. package/dist/layout/neato/multispline-router.d.ts +80 -0
  413. package/dist/layout/neato/multispline-router.d.ts.map +1 -0
  414. package/dist/layout/neato/multispline.d.ts +24 -0
  415. package/dist/layout/neato/multispline.d.ts.map +1 -0
  416. package/dist/layout/neato/overlap-prism.d.ts +26 -0
  417. package/dist/layout/neato/overlap-prism.d.ts.map +1 -0
  418. package/dist/layout/neato/overlap.d.ts +85 -0
  419. package/dist/layout/neato/overlap.d.ts.map +1 -0
  420. package/dist/layout/neato/sc-adjust.d.ts +33 -0
  421. package/dist/layout/neato/sc-adjust.d.ts.map +1 -0
  422. package/dist/layout/neato/sep-factor.d.ts +41 -0
  423. package/dist/layout/neato/sep-factor.d.ts.map +1 -0
  424. package/dist/layout/neato/set-aspect.d.ts +33 -0
  425. package/dist/layout/neato/set-aspect.d.ts.map +1 -0
  426. package/dist/layout/neato/sgd.d.ts +166 -0
  427. package/dist/layout/neato/sgd.d.ts.map +1 -0
  428. package/dist/layout/neato/splines.d.ts +153 -0
  429. package/dist/layout/neato/splines.d.ts.map +1 -0
  430. package/dist/layout/neato/stress-kernel.d.ts +53 -0
  431. package/dist/layout/neato/stress-kernel.d.ts.map +1 -0
  432. package/dist/layout/neato/stress.d.ts +158 -0
  433. package/dist/layout/neato/stress.d.ts.map +1 -0
  434. package/dist/layout/osage/index.d.ts +158 -0
  435. package/dist/layout/osage/index.d.ts.map +1 -0
  436. package/dist/layout/osage/layout.d.ts +49 -0
  437. package/dist/layout/osage/layout.d.ts.map +1 -0
  438. package/dist/layout/osage/types.d.ts +28 -0
  439. package/dist/layout/osage/types.d.ts.map +1 -0
  440. package/dist/layout/pack/array-pack.d.ts +114 -0
  441. package/dist/layout/pack/array-pack.d.ts.map +1 -0
  442. package/dist/layout/pack/index.d.ts +157 -0
  443. package/dist/layout/pack/index.d.ts.map +1 -0
  444. package/dist/layout/pack/poly-pack.d.ts +126 -0
  445. package/dist/layout/pack/poly-pack.d.ts.map +1 -0
  446. package/dist/layout/pack/poly-place.d.ts +27 -0
  447. package/dist/layout/pack/poly-place.d.ts.map +1 -0
  448. package/dist/layout/pack/spiral-search.d.ts +18 -0
  449. package/dist/layout/pack/spiral-search.d.ts.map +1 -0
  450. package/dist/layout/pack/test-helpers.d.ts +7 -0
  451. package/dist/layout/pack/test-helpers.d.ts.map +1 -0
  452. package/dist/layout/pack/types.d.ts +74 -0
  453. package/dist/layout/pack/types.d.ts.map +1 -0
  454. package/dist/layout/patchwork/index.d.ts +136 -0
  455. package/dist/layout/patchwork/index.d.ts.map +1 -0
  456. package/dist/layout/patchwork/tree-map.d.ts +32 -0
  457. package/dist/layout/patchwork/tree-map.d.ts.map +1 -0
  458. package/dist/layout/patchwork/tree-node.d.ts +46 -0
  459. package/dist/layout/patchwork/tree-node.d.ts.map +1 -0
  460. package/dist/layout/sfdp/index.d.ts +39 -0
  461. package/dist/layout/sfdp/index.d.ts.map +1 -0
  462. package/dist/layout/sfdp/init.d.ts +61 -0
  463. package/dist/layout/sfdp/init.d.ts.map +1 -0
  464. package/dist/layout/sfdp/multilevel.d.ts +23 -0
  465. package/dist/layout/sfdp/multilevel.d.ts.map +1 -0
  466. package/dist/layout/sfdp/quadtree.d.ts +45 -0
  467. package/dist/layout/sfdp/quadtree.d.ts.map +1 -0
  468. package/dist/layout/sfdp/sparse-matrix-multiply.d.ts +34 -0
  469. package/dist/layout/sfdp/sparse-matrix-multiply.d.ts.map +1 -0
  470. package/dist/layout/sfdp/sparse-matrix.d.ts +101 -0
  471. package/dist/layout/sfdp/sparse-matrix.d.ts.map +1 -0
  472. package/dist/layout/sfdp/sparse-solve.d.ts +14 -0
  473. package/dist/layout/sfdp/sparse-solve.d.ts.map +1 -0
  474. package/dist/layout/sfdp/spring-driver.d.ts +18 -0
  475. package/dist/layout/sfdp/spring-driver.d.ts.map +1 -0
  476. package/dist/layout/sfdp/spring-electrical.d.ts +61 -0
  477. package/dist/layout/sfdp/spring-electrical.d.ts.map +1 -0
  478. package/dist/layout/twopi/circle.d.ts +83 -0
  479. package/dist/layout/twopi/circle.d.ts.map +1 -0
  480. package/dist/layout/twopi/index.d.ts +24 -0
  481. package/dist/layout/twopi/index.d.ts.map +1 -0
  482. package/dist/layout/twopi/init.d.ts +85 -0
  483. package/dist/layout/twopi/init.d.ts.map +1 -0
  484. package/dist/layout/twopi/pipeline.d.ts +37 -0
  485. package/dist/layout/twopi/pipeline.d.ts.map +1 -0
  486. package/dist/layout/twopi/twopi-test-helpers.d.ts +12 -0
  487. package/dist/layout/twopi/twopi-test-helpers.d.ts.map +1 -0
  488. package/dist/model/algData.d.ts +175 -0
  489. package/dist/model/algData.d.ts.map +1 -0
  490. package/dist/model/cgraph-ops.d.ts +86 -0
  491. package/dist/model/cgraph-ops.d.ts.map +1 -0
  492. package/dist/model/edge.d.ts +80 -0
  493. package/dist/model/edge.d.ts.map +1 -0
  494. package/dist/model/edgeInfo.d.ts +299 -0
  495. package/dist/model/edgeInfo.d.ts.map +1 -0
  496. package/dist/model/geom.d.ts +149 -0
  497. package/dist/model/geom.d.ts.map +1 -0
  498. package/dist/model/graph.d.ts +135 -0
  499. package/dist/model/graph.d.ts.map +1 -0
  500. package/dist/model/graphInfo.d.ts +418 -0
  501. package/dist/model/graphInfo.d.ts.map +1 -0
  502. package/dist/model/index.d.ts +10 -0
  503. package/dist/model/index.d.ts.map +1 -0
  504. package/dist/model/layoutParams.d.ts +85 -0
  505. package/dist/model/layoutParams.d.ts.map +1 -0
  506. package/dist/model/node.d.ts +101 -0
  507. package/dist/model/node.d.ts.map +1 -0
  508. package/dist/model/nodeInfo.d.ts +278 -0
  509. package/dist/model/nodeInfo.d.ts.map +1 -0
  510. package/dist/model/rankEntry.d.ts +80 -0
  511. package/dist/model/rankEntry.d.ts.map +1 -0
  512. package/dist/ortho/chan-dict.d.ts +82 -0
  513. package/dist/ortho/chan-dict.d.ts.map +1 -0
  514. package/dist/ortho/fpq.d.ts +54 -0
  515. package/dist/ortho/fpq.d.ts.map +1 -0
  516. package/dist/ortho/index.d.ts +35 -0
  517. package/dist/ortho/index.d.ts.map +1 -0
  518. package/dist/ortho/maze-channels.d.ts +47 -0
  519. package/dist/ortho/maze-channels.d.ts.map +1 -0
  520. package/dist/ortho/maze.d.ts +27 -0
  521. package/dist/ortho/maze.d.ts.map +1 -0
  522. package/dist/ortho/ortho-parallel.d.ts +26 -0
  523. package/dist/ortho/ortho-parallel.d.ts.map +1 -0
  524. package/dist/ortho/ortho-route.d.ts +31 -0
  525. package/dist/ortho/ortho-route.d.ts.map +1 -0
  526. package/dist/ortho/partition.d.ts +34 -0
  527. package/dist/ortho/partition.d.ts.map +1 -0
  528. package/dist/ortho/rawgraph.d.ts +41 -0
  529. package/dist/ortho/rawgraph.d.ts.map +1 -0
  530. package/dist/ortho/sgraph.d.ts +74 -0
  531. package/dist/ortho/sgraph.d.ts.map +1 -0
  532. package/dist/ortho/trap-query.d.ts +32 -0
  533. package/dist/ortho/trap-query.d.ts.map +1 -0
  534. package/dist/ortho/trap-segment.d.ts +23 -0
  535. package/dist/ortho/trap-segment.d.ts.map +1 -0
  536. package/dist/ortho/trap-types.d.ts +91 -0
  537. package/dist/ortho/trap-types.d.ts.map +1 -0
  538. package/dist/ortho/trap-update.d.ts +12 -0
  539. package/dist/ortho/trap-update.d.ts.map +1 -0
  540. package/dist/ortho/trapezoid.d.ts +18 -0
  541. package/dist/ortho/trapezoid.d.ts.map +1 -0
  542. package/dist/ortho/types.d.ts +241 -0
  543. package/dist/ortho/types.d.ts.map +1 -0
  544. package/dist/parser/ast.d.ts +49 -0
  545. package/dist/parser/ast.d.ts.map +1 -0
  546. package/dist/parser/builder.d.ts +75 -0
  547. package/dist/parser/builder.d.ts.map +1 -0
  548. package/dist/parser/index.d.ts +97 -0
  549. package/dist/parser/index.d.ts.map +1 -0
  550. package/dist/pathplan/index.d.ts +8 -0
  551. package/dist/pathplan/index.d.ts.map +1 -0
  552. package/dist/pathplan/route.d.ts +9 -0
  553. package/dist/pathplan/route.d.ts.map +1 -0
  554. package/dist/pathplan/shortest.d.ts +5 -0
  555. package/dist/pathplan/shortest.d.ts.map +1 -0
  556. package/dist/pathplan/solvers.d.ts +5 -0
  557. package/dist/pathplan/solvers.d.ts.map +1 -0
  558. package/dist/pathplan/triang.d.ts +25 -0
  559. package/dist/pathplan/triang.d.ts.map +1 -0
  560. package/dist/pathplan/types.d.ts +22 -0
  561. package/dist/pathplan/types.d.ts.map +1 -0
  562. package/dist/pathplan/visibility.d.ts +13 -0
  563. package/dist/pathplan/visibility.d.ts.map +1 -0
  564. package/dist/pathplan/vispath.d.ts +9 -0
  565. package/dist/pathplan/vispath.d.ts.map +1 -0
  566. package/dist/rbtree/index.d.ts +127 -0
  567. package/dist/rbtree/index.d.ts.map +1 -0
  568. package/dist/render/color-resolve.d.ts +38 -0
  569. package/dist/render/color-resolve.d.ts.map +1 -0
  570. package/dist/render/dot.d.ts +379 -0
  571. package/dist/render/dot.d.ts.map +1 -0
  572. package/dist/render/index.d.ts +24 -0
  573. package/dist/render/index.d.ts.map +1 -0
  574. package/dist/render/json.d.ts +89 -0
  575. package/dist/render/json.d.ts.map +1 -0
  576. package/dist/render/map-test-helpers.d.ts +13 -0
  577. package/dist/render/map-test-helpers.d.ts.map +1 -0
  578. package/dist/render/map.d.ts +197 -0
  579. package/dist/render/map.d.ts.map +1 -0
  580. package/dist/render/public.d.ts +64 -0
  581. package/dist/render/public.d.ts.map +1 -0
  582. package/dist/render/svg-arrow-ops.d.ts +10 -0
  583. package/dist/render/svg-arrow-ops.d.ts.map +1 -0
  584. package/dist/render/svg-cluster.d.ts +9 -0
  585. package/dist/render/svg-cluster.d.ts.map +1 -0
  586. package/dist/render/svg-edge-ortho-radius.d.ts +31 -0
  587. package/dist/render/svg-edge-ortho-radius.d.ts.map +1 -0
  588. package/dist/render/svg-edge-split.d.ts +48 -0
  589. package/dist/render/svg-edge-split.d.ts.map +1 -0
  590. package/dist/render/svg-gradient.d.ts +46 -0
  591. package/dist/render/svg-gradient.d.ts.map +1 -0
  592. package/dist/render/svg-graph.d.ts +97 -0
  593. package/dist/render/svg-graph.d.ts.map +1 -0
  594. package/dist/render/svg-helpers.d.ts +122 -0
  595. package/dist/render/svg-helpers.d.ts.map +1 -0
  596. package/dist/render/svg-id.d.ts +28 -0
  597. package/dist/render/svg-id.d.ts.map +1 -0
  598. package/dist/render/svg-multicolor.d.ts +60 -0
  599. package/dist/render/svg-multicolor.d.ts.map +1 -0
  600. package/dist/render/svg-parallel-edge.d.ts +28 -0
  601. package/dist/render/svg-parallel-edge.d.ts.map +1 -0
  602. package/dist/render/svg-tapered-edge.d.ts +18 -0
  603. package/dist/render/svg-tapered-edge.d.ts.map +1 -0
  604. package/dist/render/svg.d.ts +104 -0
  605. package/dist/render/svg.d.ts.map +1 -0
  606. package/dist/render/xdot-public.d.ts +95 -0
  607. package/dist/render/xdot-public.d.ts.map +1 -0
  608. package/dist/render/xml-escape.d.ts +21 -0
  609. package/dist/render/xml-escape.d.ts.map +1 -0
  610. package/dist/render.js +52556 -0
  611. package/dist/render.js.map +7 -0
  612. package/dist/util/agxbuf.d.ts +72 -0
  613. package/dist/util/agxbuf.d.ts.map +1 -0
  614. package/dist/util/bsd-qsort.d.ts +22 -0
  615. package/dist/util/bsd-qsort.d.ts.map +1 -0
  616. package/dist/util/index.d.ts +11 -0
  617. package/dist/util/index.d.ts.map +1 -0
  618. package/dist/util/list.d.ts +47 -0
  619. package/dist/util/list.d.ts.map +1 -0
  620. package/dist/util/math.d.ts +54 -0
  621. package/dist/util/math.d.ts.map +1 -0
  622. package/dist/util/mt19937.d.ts +40 -0
  623. package/dist/util/mt19937.d.ts.map +1 -0
  624. package/dist/util/printf-round.d.ts +45 -0
  625. package/dist/util/printf-round.d.ts.map +1 -0
  626. package/dist/util/xml.d.ts +24 -0
  627. package/dist/util/xml.d.ts.map +1 -0
  628. package/dist/vpsc/Block.d.ts +116 -0
  629. package/dist/vpsc/Block.d.ts.map +1 -0
  630. package/dist/vpsc/Blocks.d.ts +66 -0
  631. package/dist/vpsc/Blocks.d.ts.map +1 -0
  632. package/dist/vpsc/Constraint.d.ts +51 -0
  633. package/dist/vpsc/Constraint.d.ts.map +1 -0
  634. package/dist/vpsc/HeapUtils.d.ts +37 -0
  635. package/dist/vpsc/HeapUtils.d.ts.map +1 -0
  636. package/dist/vpsc/Solver.d.ts +107 -0
  637. package/dist/vpsc/Solver.d.ts.map +1 -0
  638. package/dist/vpsc/SweepLine.d.ts +38 -0
  639. package/dist/vpsc/SweepLine.d.ts.map +1 -0
  640. package/dist/vpsc/Variable.d.ts +38 -0
  641. package/dist/vpsc/Variable.d.ts.map +1 -0
  642. package/dist/vpsc/index.d.ts +54 -0
  643. package/dist/vpsc/index.d.ts.map +1 -0
  644. package/dist/vpsc/sweepTypes.d.ts +29 -0
  645. package/dist/vpsc/sweepTypes.d.ts.map +1 -0
  646. package/dist/xdot/index.d.ts +6 -0
  647. package/dist/xdot/index.d.ts.map +1 -0
  648. package/dist/xdot/lex.d.ts +22 -0
  649. package/dist/xdot/lex.d.ts.map +1 -0
  650. package/dist/xdot/misc.d.ts +13 -0
  651. package/dist/xdot/misc.d.ts.map +1 -0
  652. package/dist/xdot/parse.d.ts +21 -0
  653. package/dist/xdot/parse.d.ts.map +1 -0
  654. package/dist/xdot/types.d.ts +152 -0
  655. package/dist/xdot/types.d.ts.map +1 -0
  656. package/package.json +113 -0
  657. package/src/api/builder.ts +277 -0
  658. package/src/api/edge-ops.ts +113 -0
  659. package/src/api/geometry.ts +307 -0
  660. package/src/api/index.ts +46 -0
  661. package/src/cdt/bag.ts +196 -0
  662. package/src/cdt/hash-core.ts +84 -0
  663. package/src/cdt/hash.ts +207 -0
  664. package/src/cdt/index.ts +17 -0
  665. package/src/cdt/splay-core.ts +301 -0
  666. package/src/cdt/splay.ts +191 -0
  667. package/src/cdt/strhash.ts +52 -0
  668. package/src/cdt/types.ts +13 -0
  669. package/src/common/arith.ts +39 -0
  670. package/src/common/arm-pow-data.ts +201 -0
  671. package/src/common/arm-pow.ts +296 -0
  672. package/src/common/arrows-constants.ts +175 -0
  673. package/src/common/arrows-geometry.ts +62 -0
  674. package/src/common/arrows-miter.ts +84 -0
  675. package/src/common/arrows-shapes-poly.ts +241 -0
  676. package/src/common/arrows-shapes-util.ts +162 -0
  677. package/src/common/arrows-shapes.ts +360 -0
  678. package/src/common/arrows-types.ts +59 -0
  679. package/src/common/arrows.ts +209 -0
  680. package/src/common/color.ts +340 -0
  681. package/src/common/colorData.ts +264 -0
  682. package/src/common/compass-port.ts +384 -0
  683. package/src/common/crand.ts +79 -0
  684. package/src/common/edge-label-init.ts +310 -0
  685. package/src/common/edge-offset.ts +140 -0
  686. package/src/common/ellipse-wedge.ts +189 -0
  687. package/src/common/emit-types.ts +332 -0
  688. package/src/common/fma.ts +52 -0
  689. package/src/common/graph-init.ts +359 -0
  690. package/src/common/html-entities.ts +299 -0
  691. package/src/common/html-string.ts +22 -0
  692. package/src/common/htmltable-emit-fill.ts +367 -0
  693. package/src/common/htmltable-emit-rules.ts +293 -0
  694. package/src/common/htmltable-emit.ts +345 -0
  695. package/src/common/htmltable-lex.ts +138 -0
  696. package/src/common/htmltable-parse.ts +539 -0
  697. package/src/common/htmltable-port.ts +32 -0
  698. package/src/common/htmltable-pos-runs.ts +313 -0
  699. package/src/common/htmltable-pos.ts +601 -0
  700. package/src/common/htmltable-types.ts +262 -0
  701. package/src/common/htmltable.ts +477 -0
  702. package/src/common/layers.ts +113 -0
  703. package/src/common/make-label.ts +192 -0
  704. package/src/common/multicolor.ts +167 -0
  705. package/src/common/nodeinit.ts +339 -0
  706. package/src/common/poly-gencode.ts +475 -0
  707. package/src/common/poly-init.ts +133 -0
  708. package/src/common/poly-inside.ts +202 -0
  709. package/src/common/poly-shapes-cases.ts +253 -0
  710. package/src/common/poly-shapes-cases2.ts +170 -0
  711. package/src/common/poly-shapes-util.ts +124 -0
  712. package/src/common/poly-shapes.ts +181 -0
  713. package/src/common/poly-sizing.ts +639 -0
  714. package/src/common/poly-vertices.ts +237 -0
  715. package/src/common/postproc.ts +436 -0
  716. package/src/common/ps-fontalias.ts +112 -0
  717. package/src/common/random.ts +37 -0
  718. package/src/common/record-port.ts +89 -0
  719. package/src/common/record.ts +523 -0
  720. package/src/common/shapeData.ts +502 -0
  721. package/src/common/shapes.ts +187 -0
  722. package/src/common/spline-midpoint.ts +105 -0
  723. package/src/common/splines-clip.ts +449 -0
  724. package/src/common/splines-constants.ts +53 -0
  725. package/src/common/splines-geom.ts +194 -0
  726. package/src/common/splines-path-begin.ts +243 -0
  727. package/src/common/splines-path-end.ts +231 -0
  728. package/src/common/splines-path-shared.ts +258 -0
  729. package/src/common/splines-routespl.ts +444 -0
  730. package/src/common/splines-selfedge.ts +403 -0
  731. package/src/common/splines.ts +33 -0
  732. package/src/common/style-resolve.ts +481 -0
  733. package/src/common/subst.ts +126 -0
  734. package/src/common/taper.ts +219 -0
  735. package/src/common/textmeasure-factory.ts +86 -0
  736. package/src/common/textmeasure-lookup.ts +50 -0
  737. package/src/common/textmeasure-lut-data-a.ts +182 -0
  738. package/src/common/textmeasure-lut-data-b.ts +140 -0
  739. package/src/common/textmeasure-lut-data-c.ts +221 -0
  740. package/src/common/textmeasure-lut-data.ts +78 -0
  741. package/src/common/textmeasure.ts +321 -0
  742. package/src/common/types.ts +425 -0
  743. package/src/common/xlabels-place.ts +475 -0
  744. package/src/debug.ts +38 -0
  745. package/src/errors.ts +95 -0
  746. package/src/gvc/anchor.ts +530 -0
  747. package/src/gvc/context.ts +260 -0
  748. package/src/gvc/default-context.ts +70 -0
  749. package/src/gvc/device-cluster.ts +114 -0
  750. package/src/gvc/device.ts +598 -0
  751. package/src/gvc/edge-labels.ts +116 -0
  752. package/src/gvc/emit-walk.ts +98 -0
  753. package/src/gvc/image-resolver.ts +137 -0
  754. package/src/gvc/job.ts +401 -0
  755. package/src/gvc/textlayout.ts +44 -0
  756. package/src/gvc/textspan-emit.ts +100 -0
  757. package/src/gvc/usershape.ts +33 -0
  758. package/src/gvc/viewport.ts +203 -0
  759. package/src/index.ts +165 -0
  760. package/src/label/index.ts +302 -0
  761. package/src/label/node.ts +278 -0
  762. package/src/label/rectangle.ts +123 -0
  763. package/src/label/split-q.ts +237 -0
  764. package/src/label/xlabels-geom.ts +132 -0
  765. package/src/label/xlabels-intersect.ts +421 -0
  766. package/src/label/xlabels.ts +212 -0
  767. package/src/layout/circo/blockpath.ts +560 -0
  768. package/src/layout/circo/blocks.ts +234 -0
  769. package/src/layout/circo/blocktree.ts +246 -0
  770. package/src/layout/circo/circular.ts +227 -0
  771. package/src/layout/circo/index.ts +90 -0
  772. package/src/layout/circo/init.ts +84 -0
  773. package/src/layout/circo/position-helpers.ts +104 -0
  774. package/src/layout/circo/position.ts +196 -0
  775. package/src/layout/dot/__fixtures__/xcoord-pivot-divergence.gv +79 -0
  776. package/src/layout/dot/acyclic.ts +60 -0
  777. package/src/layout/dot/aspect.ts +22 -0
  778. package/src/layout/dot/classify.ts +462 -0
  779. package/src/layout/dot/cluster-path.ts +200 -0
  780. package/src/layout/dot/cluster.ts +480 -0
  781. package/src/layout/dot/compound-clip.ts +224 -0
  782. package/src/layout/dot/compound-geom.ts +282 -0
  783. package/src/layout/dot/compound.ts +294 -0
  784. package/src/layout/dot/conc.ts +433 -0
  785. package/src/layout/dot/decomp.ts +165 -0
  786. package/src/layout/dot/edge-order.ts +62 -0
  787. package/src/layout/dot/edge-route-arrow.ts +87 -0
  788. package/src/layout/dot/edge-route-boxes.ts +99 -0
  789. package/src/layout/dot/edge-route-chain.ts +420 -0
  790. package/src/layout/dot/edge-route-clip.ts +253 -0
  791. package/src/layout/dot/edge-route-faithful.ts +404 -0
  792. package/src/layout/dot/edge-route-geom.ts +90 -0
  793. package/src/layout/dot/edge-route-helpers.ts +170 -0
  794. package/src/layout/dot/edge-route-poly.ts +174 -0
  795. package/src/layout/dot/edge-route-rank.ts +136 -0
  796. package/src/layout/dot/edge-route-routing.ts +219 -0
  797. package/src/layout/dot/edge-route.ts +490 -0
  798. package/src/layout/dot/fastgr.ts +377 -0
  799. package/src/layout/dot/flat-utils.ts +52 -0
  800. package/src/layout/dot/flat.ts +518 -0
  801. package/src/layout/dot/graph-label.ts +114 -0
  802. package/src/layout/dot/index.ts +302 -0
  803. package/src/layout/dot/init.ts +300 -0
  804. package/src/layout/dot/label-order.ts +161 -0
  805. package/src/layout/dot/mincross-build.ts +373 -0
  806. package/src/layout/dot/mincross-cross.ts +409 -0
  807. package/src/layout/dot/mincross-flat.ts +213 -0
  808. package/src/layout/dot/mincross-order.ts +401 -0
  809. package/src/layout/dot/mincross-utils.ts +170 -0
  810. package/src/layout/dot/mincross.ts +386 -0
  811. package/src/layout/dot/ns-core.ts +122 -0
  812. package/src/layout/dot/ns-range.ts +228 -0
  813. package/src/layout/dot/ns-subtree.ts +347 -0
  814. package/src/layout/dot/ns.ts +506 -0
  815. package/src/layout/dot/ortho-adapter.ts +133 -0
  816. package/src/layout/dot/pack-components.ts +433 -0
  817. package/src/layout/dot/position-aux.ts +382 -0
  818. package/src/layout/dot/position-bbox.ts +221 -0
  819. package/src/layout/dot/position-cluster.ts +286 -0
  820. package/src/layout/dot/position-ycoords.ts +287 -0
  821. package/src/layout/dot/position.ts +194 -0
  822. package/src/layout/dot/rank-dot2.ts +528 -0
  823. package/src/layout/dot/rank.ts +547 -0
  824. package/src/layout/dot/sameport.ts +278 -0
  825. package/src/layout/dot/self-loop.ts +147 -0
  826. package/src/layout/dot/splines-clone.ts +121 -0
  827. package/src/layout/dot/splines-flat-labeled.ts +408 -0
  828. package/src/layout/dot/splines-flat-multi.ts +188 -0
  829. package/src/layout/dot/splines-flat.ts +598 -0
  830. package/src/layout/dot/splines-groups.ts +190 -0
  831. package/src/layout/dot/splines-label.ts +432 -0
  832. package/src/layout/dot/splines-route-type.ts +44 -0
  833. package/src/layout/dot/splines-route.ts +478 -0
  834. package/src/layout/dot/splines.ts +538 -0
  835. package/src/layout/dot/straight-edges.ts +332 -0
  836. package/src/layout/fdp/cluster-edges.ts +0 -0
  837. package/src/layout/fdp/comp.ts +160 -0
  838. package/src/layout/fdp/derive.ts +272 -0
  839. package/src/layout/fdp/fdp-model.ts +238 -0
  840. package/src/layout/fdp/grid.ts +77 -0
  841. package/src/layout/fdp/index.ts +113 -0
  842. package/src/layout/fdp/init.ts +116 -0
  843. package/src/layout/fdp/layout.ts +485 -0
  844. package/src/layout/fdp/normalize.ts +100 -0
  845. package/src/layout/fdp/ports.ts +161 -0
  846. package/src/layout/fdp/tlayout-init.ts +230 -0
  847. package/src/layout/fdp/tlayout-parms.ts +234 -0
  848. package/src/layout/fdp/tlayout.ts +317 -0
  849. package/src/layout/fdp/xlayout.ts +350 -0
  850. package/src/layout/neato/bfs.ts +131 -0
  851. package/src/layout/neato/cdt-surface.ts +693 -0
  852. package/src/layout/neato/conjgrad.ts +159 -0
  853. package/src/layout/neato/delaunay.ts +259 -0
  854. package/src/layout/neato/dijkstra.ts +296 -0
  855. package/src/layout/neato/fdp-adjust.ts +124 -0
  856. package/src/layout/neato/index.ts +310 -0
  857. package/src/layout/neato/init.ts +505 -0
  858. package/src/layout/neato/legal.ts +316 -0
  859. package/src/layout/neato/matrix-ops.ts +112 -0
  860. package/src/layout/neato/multispline-router.ts +417 -0
  861. package/src/layout/neato/multispline.ts +427 -0
  862. package/src/layout/neato/overlap-prism.ts +503 -0
  863. package/src/layout/neato/overlap.ts +158 -0
  864. package/src/layout/neato/sc-adjust.ts +206 -0
  865. package/src/layout/neato/sep-factor.ts +118 -0
  866. package/src/layout/neato/set-aspect.ts +178 -0
  867. package/src/layout/neato/sgd.ts +461 -0
  868. package/src/layout/neato/splines.ts +1014 -0
  869. package/src/layout/neato/stress-kernel.ts +362 -0
  870. package/src/layout/neato/stress.ts +420 -0
  871. package/src/layout/osage/index.ts +548 -0
  872. package/src/layout/osage/layout.ts +254 -0
  873. package/src/layout/osage/types.ts +31 -0
  874. package/src/layout/pack/array-pack.ts +254 -0
  875. package/src/layout/pack/index.ts +570 -0
  876. package/src/layout/pack/poly-pack.ts +266 -0
  877. package/src/layout/pack/poly-place.ts +426 -0
  878. package/src/layout/pack/spiral-search.ts +106 -0
  879. package/src/layout/pack/test-helpers.ts +46 -0
  880. package/src/layout/pack/types.ts +85 -0
  881. package/src/layout/patchwork/index.ts +441 -0
  882. package/src/layout/patchwork/tree-map.ts +183 -0
  883. package/src/layout/patchwork/tree-node.ts +120 -0
  884. package/src/layout/sfdp/index.ts +231 -0
  885. package/src/layout/sfdp/init.ts +224 -0
  886. package/src/layout/sfdp/multilevel.ts +262 -0
  887. package/src/layout/sfdp/quadtree.ts +267 -0
  888. package/src/layout/sfdp/sparse-matrix-multiply.ts +160 -0
  889. package/src/layout/sfdp/sparse-matrix.ts +367 -0
  890. package/src/layout/sfdp/sparse-solve.ts +122 -0
  891. package/src/layout/sfdp/spring-driver.ts +209 -0
  892. package/src/layout/sfdp/spring-electrical.ts +431 -0
  893. package/src/layout/twopi/circle.ts +339 -0
  894. package/src/layout/twopi/index.ts +78 -0
  895. package/src/layout/twopi/init.ts +174 -0
  896. package/src/layout/twopi/pipeline.ts +98 -0
  897. package/src/layout/twopi/twopi-test-helpers.ts +44 -0
  898. package/src/model/algData.ts +194 -0
  899. package/src/model/cgraph-ops.ts +175 -0
  900. package/src/model/edge.ts +104 -0
  901. package/src/model/edgeInfo.ts +431 -0
  902. package/src/model/geom.ts +204 -0
  903. package/src/model/graph.ts +172 -0
  904. package/src/model/graphInfo.ts +528 -0
  905. package/src/model/index.ts +10 -0
  906. package/src/model/layoutParams.ts +127 -0
  907. package/src/model/node.ts +138 -0
  908. package/src/model/nodeInfo.ts +424 -0
  909. package/src/model/rankEntry.ts +95 -0
  910. package/src/ortho/chan-dict.ts +236 -0
  911. package/src/ortho/fpq.ts +149 -0
  912. package/src/ortho/index.ts +206 -0
  913. package/src/ortho/maze-channels.ts +196 -0
  914. package/src/ortho/maze.ts +311 -0
  915. package/src/ortho/ortho-parallel.ts +254 -0
  916. package/src/ortho/ortho-route.ts +349 -0
  917. package/src/ortho/partition.ts +303 -0
  918. package/src/ortho/rawgraph.ts +119 -0
  919. package/src/ortho/sgraph.ts +283 -0
  920. package/src/ortho/trap-query.ts +174 -0
  921. package/src/ortho/trap-segment.ts +303 -0
  922. package/src/ortho/trap-types.ts +171 -0
  923. package/src/ortho/trap-update.ts +89 -0
  924. package/src/ortho/trapezoid.ts +120 -0
  925. package/src/ortho/types.ts +286 -0
  926. package/src/parser/__fixtures__/directed.dot +10 -0
  927. package/src/parser/__fixtures__/simple.dot +7 -0
  928. package/src/parser/__fixtures__/subgraph.dot +17 -0
  929. package/src/parser/ast.ts +64 -0
  930. package/src/parser/builder.ts +401 -0
  931. package/src/parser/dot.d.ts +208 -0
  932. package/src/parser/dot.js +3321 -0
  933. package/src/parser/dot.pegjs +263 -0
  934. package/src/parser/index.ts +353 -0
  935. package/src/pathplan/index.ts +9 -0
  936. package/src/pathplan/route.ts +284 -0
  937. package/src/pathplan/shortest.ts +268 -0
  938. package/src/pathplan/solvers.ts +65 -0
  939. package/src/pathplan/triang.ts +221 -0
  940. package/src/pathplan/types.ts +16 -0
  941. package/src/pathplan/visibility.ts +170 -0
  942. package/src/pathplan/vispath.ts +118 -0
  943. package/src/rbtree/index.ts +418 -0
  944. package/src/render/color-resolve.ts +171 -0
  945. package/src/render/dot.ts +1514 -0
  946. package/src/render/index.ts +29 -0
  947. package/src/render/json.ts +734 -0
  948. package/src/render/map-test-helpers.ts +61 -0
  949. package/src/render/map.ts +528 -0
  950. package/src/render/public.ts +131 -0
  951. package/src/render/svg-arrow-ops.ts +113 -0
  952. package/src/render/svg-cluster.ts +24 -0
  953. package/src/render/svg-edge-ortho-radius.ts +228 -0
  954. package/src/render/svg-edge-split.ts +180 -0
  955. package/src/render/svg-gradient.ts +185 -0
  956. package/src/render/svg-graph.ts +415 -0
  957. package/src/render/svg-helpers.ts +623 -0
  958. package/src/render/svg-id.ts +76 -0
  959. package/src/render/svg-multicolor.ts +313 -0
  960. package/src/render/svg-parallel-edge.ts +123 -0
  961. package/src/render/svg-tapered-edge.ts +56 -0
  962. package/src/render/svg.ts +307 -0
  963. package/src/render/xdot-public.ts +164 -0
  964. package/src/render/xml-escape.ts +56 -0
  965. package/src/util/agxbuf.ts +138 -0
  966. package/src/util/bsd-qsort.ts +251 -0
  967. package/src/util/index.ts +25 -0
  968. package/src/util/list.ts +122 -0
  969. package/src/util/math.ts +104 -0
  970. package/src/util/mt19937.ts +143 -0
  971. package/src/util/printf-round.ts +163 -0
  972. package/src/util/xml.ts +184 -0
  973. package/src/vpsc/Block.ts +375 -0
  974. package/src/vpsc/Blocks.ts +164 -0
  975. package/src/vpsc/Constraint.ts +94 -0
  976. package/src/vpsc/HeapUtils.ts +88 -0
  977. package/src/vpsc/Solver.ts +274 -0
  978. package/src/vpsc/SweepLine.ts +214 -0
  979. package/src/vpsc/Variable.ts +54 -0
  980. package/src/vpsc/index.ts +122 -0
  981. package/src/vpsc/sweepTypes.ts +31 -0
  982. package/src/xdot/index.ts +7 -0
  983. package/src/xdot/lex.ts +151 -0
  984. package/src/xdot/misc.ts +226 -0
  985. package/src/xdot/parse.ts +349 -0
  986. package/src/xdot/types.ts +158 -0
@@ -0,0 +1,367 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Fill, border, and rule-line helpers for HTML label emission.
5
+ * Ports setFill, mkPts, doSide, doBorder from lib/common/htmltable.c.
6
+ *
7
+ * @see lib/common/htmltable.c:setFill
8
+ * @see lib/common/htmltable.c:mkPts
9
+ * @see lib/common/htmltable.c:doSide
10
+ * @see lib/common/htmltable.c:doBorder
11
+ */
12
+
13
+ import type { Point, Box } from '../model/geom.js';
14
+ import type { ObjState, RenderJob } from '../gvc/job.js';
15
+ import { ObjType, EmitState, MapShape } from '../gvc/job.js';
16
+ import type { RendererPlugin } from '../gvc/context.js';
17
+ import { FillType, PenType } from '../gvc/context.js';
18
+ import { transformPoint } from '../gvc/device.js';
19
+ import { resolveRenderColor } from '../render/color-resolve.js';
20
+ import { emitRoundedBezier } from './poly-shapes.js';
21
+ import { parseStyleFlags } from './style-resolve.js';
22
+ import {
23
+ BORDER_LEFT,
24
+ BORDER_TOP,
25
+ BORDER_RIGHT,
26
+ BORDER_BOTTOM,
27
+ BORDER_MASK,
28
+ } from './htmltable-types.js';
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Gradient spec parser
32
+ // ---------------------------------------------------------------------------
33
+
34
+ /**
35
+ * Parse a color spec for gradient: "color1:color2" → [color1, color2].
36
+ * Single-color strings return null (not a gradient spec).
37
+ *
38
+ * @see lib/common/emit.c:findStopColor
39
+ */
40
+ export function parseGradientSpec(color: string): [string, string] | null {
41
+ const idx = color.indexOf(':');
42
+ if (idx < 1) return null;
43
+ const c0 = color.slice(0, idx).trim();
44
+ const c1 = color.slice(idx + 1).trim();
45
+ if (c0.length === 0) return null;
46
+ return [c0, c1.length > 0 ? c1 : 'black'];
47
+ }
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Scoped paint state — the port of C's gvrender set_fillcolor/set_pencolor
51
+ // ---------------------------------------------------------------------------
52
+
53
+ /**
54
+ * Reusable scoped ObjState for HTML decoration painting.
55
+ *
56
+ * The live render path keeps no persistent ObjState (job.obj is null
57
+ * outside the dormant emit family), so decoration drawing pushes this
58
+ * one for the duration of each paint call. Mirrors C's
59
+ * gvrender_set_fillcolor/gvrender_set_pencolor on the active obj
60
+ * before each drawing call in emit_html_tbl / emit_html_cell.
61
+ *
62
+ * Module-level reuse avoids per-decoration allocation (hot-loop rule).
63
+ *
64
+ * @see lib/common/htmltable.c:setFill
65
+ */
66
+ const paintObj: ObjState = {
67
+ parent: null, type: ObjType.Node, graphObj: null,
68
+ emitState: EmitState.NDraw,
69
+ penColor: { type: 'string', s: 'black' },
70
+ fillColor: { type: 'none' },
71
+ stopColor: { type: 'none' },
72
+ gradientAngle: 0, gradientFrac: 0,
73
+ pen: PenType.Solid, fill: FillType.None, penWidth: 1.0,
74
+ rawStyle: [],
75
+ label: null, xlabel: null, tailLabel: null, headLabel: null,
76
+ url: null, id: null, labelUrl: null, tailUrl: null, headUrl: null,
77
+ tooltip: null, labelTooltip: null, tailTooltip: null, headTooltip: null,
78
+ target: null, labelTarget: null, tailTarget: null, headTarget: null,
79
+ explicitTooltip: false, explicitTailTooltip: false,
80
+ explicitHeadTooltip: false, explicitLabelTooltip: false,
81
+ explicitTailTarget: false, explicitHeadTarget: false,
82
+ explicitEdgeTarget: false, explicitTailUrl: false,
83
+ explicitHeadUrl: false, labelEdgeAligned: false,
84
+ urlMapShape: MapShape.Rectangle,
85
+ urlMapPts: [], urlBsplineMapPts: [],
86
+ tailEndMapPts: [], headEndMapPts: [],
87
+ };
88
+
89
+ /** Paint requested for a scoped drawing call. */
90
+ export interface HtmlPaint {
91
+ /** Solid fill color, or the first stop of a gradient when `stop` is set. */
92
+ fill?: string;
93
+ /** Pen (stroke) color; absent → "none" (transparent). */
94
+ pen?: string;
95
+ /** Pen width; default 1.0 (omitted from SVG at 1.0). */
96
+ penWidth?: number;
97
+ /** Style string; "dashed"/"dotted" map to the pen type. */
98
+ penStyle?: string;
99
+ /**
100
+ * Second/stop color of a gradient fill. Presence switches the fill from
101
+ * solid to a gradient (linear, or radial when `radial` is true), mirroring
102
+ * C setFill's findStopColor hit. @see lib/common/htmltable.c:setFill
103
+ */
104
+ stop?: string;
105
+ /** Gradient angle in degrees; defaults to 0. Ignored without `stop`. */
106
+ gradientAngle?: number;
107
+ /** True → radial gradient (RGRADIENT); else linear. Ignored without `stop`. */
108
+ radial?: boolean;
109
+ }
110
+
111
+ // ---------------------------------------------------------------------------
112
+ // HTML fill pen-width state — the port of gvrender's persistent penwidth
113
+ // ---------------------------------------------------------------------------
114
+
115
+ /**
116
+ * The live gvrender pen width during HTML emission. C never resets it before a
117
+ * bgcolor fill: `setFill` sets only the fill color, so a cell/table fill draws
118
+ * at whatever pen width the *previous* `doBorder` left (the oracle emits
119
+ * `stroke-width="N"` on a bordered cell's fill, leaked from the prior cell's
120
+ * border, even though `stroke="none"`). `doBorder` writes it; the bgcolor fill
121
+ * reads it. Reset to 1.0 at each top-level table — the node/cluster shape drew
122
+ * at pen width 1 immediately before, so the first table/cell fill carries no
123
+ * stroke-width. Module-level to mirror gvrender job state and to stay reset per
124
+ * render (multi-diagram safety).
125
+ * @see lib/common/htmltable.c:doBorder (gvrender_set_penwidth(job, dp->border))
126
+ * @see lib/common/htmltable.c:setFill (sets fill color only, not penwidth)
127
+ */
128
+ let htmlFillPen = 1.0;
129
+
130
+ /** Current leaked fill pen width, read by the bgcolor fill for its stroke-width. */
131
+ export function htmlFillPenWidth(): number {
132
+ return htmlFillPen;
133
+ }
134
+
135
+ /** Reset the leaked fill pen width to 1.0 — call at each top-level table entry. */
136
+ export function resetHtmlFillPenWidth(): void {
137
+ htmlFillPen = 1.0;
138
+ }
139
+
140
+ /** Map a style string to the C pen type. @see lib/common/htmltable.c:doBorder */
141
+ function penTypeOf(style: string | undefined): PenType {
142
+ if (style !== undefined && style.includes('dashed')) return PenType.Dashed;
143
+ if (style !== undefined && style.includes('dotted')) return PenType.Dotted;
144
+ return PenType.Solid;
145
+ }
146
+
147
+ /**
148
+ * Run drawFn with a scoped ObjState carrying the given paint colors,
149
+ * then restore the previous (usually null) obj state.
150
+ *
151
+ * @see lib/common/htmltable.c:setFill
152
+ */
153
+ export function withHtmlPaint(paint: HtmlPaint, job: RenderJob, drawFn: () => void): void {
154
+ paintObj.fillColor = paint.fill !== undefined
155
+ ? resolveRenderColor(paint.fill) : { type: 'none' };
156
+ paintObj.penColor = paint.pen !== undefined
157
+ ? resolveRenderColor(paint.pen) : { type: 'string', s: 'transparent' };
158
+ applyHtmlFill(paint);
159
+ paintObj.pen = penTypeOf(paint.penStyle);
160
+ paintObj.penWidth = paint.penWidth !== undefined ? paint.penWidth : 1.0;
161
+ // C sets the default line style ("solid") before each HTML table/cell draw,
162
+ // so xdot emits `S 5 -solid` per border/fill. rawStyle carries it (SVG's
163
+ // style emit treats "solid" as the default → no visible change).
164
+ paintObj.rawStyle = paintObj.pen === PenType.Solid ? ['solid'] : [];
165
+ // Inherit the enclosing object's emit-state (the label state during an HTML
166
+ // label emit) so the fill/border ops route to the same xbuf as the label
167
+ // (_ldraw_), not the shape draw buffer. SVG ignores emit_state, so unchanged.
168
+ paintObj.emitState = job.obj?.emitState ?? EmitState.NDraw;
169
+ job.pushObj(paintObj);
170
+ try { drawFn(); } finally { job.popObj(); }
171
+ }
172
+
173
+ /**
174
+ * Set the fill type + gradient fields on paintObj from a paint request.
175
+ * A `stop` color switches solid → gradient, mirroring C setFill's
176
+ * findStopColor hit (clrs[0] is the fill, clrs[1] the gradient stop).
177
+ * For the "c0:c1" form with no explicit fraction the frac is 0
178
+ * (findStopColor's else branch). @see lib/common/htmltable.c:setFill
179
+ */
180
+ function applyHtmlFill(paint: HtmlPaint): void {
181
+ if (paint.stop !== undefined) {
182
+ paintObj.fill = paint.radial === true ? FillType.Radial : FillType.Linear;
183
+ paintObj.stopColor = resolveRenderColor(paint.stop);
184
+ paintObj.gradientAngle = paint.gradientAngle ?? 0;
185
+ paintObj.gradientFrac = 0;
186
+ return;
187
+ }
188
+ paintObj.fill = paint.fill !== undefined ? FillType.Solid : FillType.None;
189
+ paintObj.stopColor = { type: 'none' };
190
+ paintObj.gradientAngle = 0;
191
+ paintObj.gradientFrac = 0;
192
+ }
193
+
194
+ // ---------------------------------------------------------------------------
195
+ // mkPts
196
+ // ---------------------------------------------------------------------------
197
+
198
+ /**
199
+ * Build the four inset corner points of box b (SW, SE, NE, NW).
200
+ * When border > 1, insets by border/2 on each side.
201
+ *
202
+ * @see lib/common/htmltable.c:mkPts
203
+ */
204
+ export function mkPts(b: Box, border: number, pos: Point): Point[] {
205
+ let llx = b.ll.x + pos.x;
206
+ let lly = b.ll.y + pos.y;
207
+ let urx = b.ur.x + pos.x;
208
+ let ury = b.ur.y + pos.y;
209
+ if (border > 1) {
210
+ const delta = border / 2.0;
211
+ llx += delta; lly += delta;
212
+ urx -= delta; ury -= delta;
213
+ }
214
+ return [
215
+ { x: llx, y: lly }, // SW
216
+ { x: urx, y: lly }, // SE
217
+ { x: urx, y: ury }, // NE
218
+ { x: llx, y: ury }, // NW
219
+ ];
220
+ }
221
+
222
+ // ---------------------------------------------------------------------------
223
+ // doSide
224
+ // ---------------------------------------------------------------------------
225
+
226
+ /**
227
+ * Emit a filled rule box from point p with given width/height.
228
+ * wd=0 means a vertical rule; ht=0 means a horizontal rule.
229
+ *
230
+ * @see lib/common/htmltable.c:doSide
231
+ */
232
+ export function doSide(
233
+ p: Point,
234
+ wd: number,
235
+ ht: number,
236
+ renderer: RendererPlugin,
237
+ job: RenderJob,
238
+ ): void {
239
+ const pts = [
240
+ { x: p.x, y: p.y },
241
+ { x: p.x, y: p.y + ht },
242
+ { x: p.x + wd, y: p.y + ht },
243
+ { x: p.x + wd, y: p.y },
244
+ ].map((pt) => transformPoint(pt, job));
245
+ renderer.polygon(pts, true, job);
246
+ }
247
+
248
+ // ---------------------------------------------------------------------------
249
+ // doBorder — descriptor type + implementation
250
+ // ---------------------------------------------------------------------------
251
+
252
+ /** Parameters for doBorder, grouped to stay within the 5-param limit. */
253
+ export interface BorderSpec {
254
+ box: Box;
255
+ pos: Point;
256
+ border: number;
257
+ color: string;
258
+ /** SIDES bitmask (0 / undefined → full box). */
259
+ sides?: number;
260
+ /** Style string: "dashed", "dotted", etc. */
261
+ style?: string;
262
+ }
263
+
264
+ /**
265
+ * Emit a rectangular border for box b, respecting SIDES bitmask.
266
+ * When sides is 0 or undefined, emits a full-box polygon (unfilled).
267
+ *
268
+ * @see lib/common/htmltable.c:doBorder
269
+ */
270
+ export function doBorder(
271
+ spec: BorderSpec,
272
+ renderer: RendererPlugin,
273
+ job: RenderJob,
274
+ ): void {
275
+ const { box, pos, border, color, sides, style } = spec;
276
+ // C: gvrender_set_penwidth(job, dp->border) before drawing the border; the
277
+ // value persists and leaks into the next bgcolor fill's stroke-width.
278
+ htmlFillPen = border;
279
+ withHtmlPaint({ pen: color, penWidth: border, penStyle: style }, job, () => {
280
+ if (parseStyleFlags(style).rounded) {
281
+ // C: round_corners(job, mkPts(AF,b,border), 4, {rounded}, 0) — unfilled
282
+ // rounded border path; emitRoundedBezier transforms the AF ring itself.
283
+ emitRoundedBezier(mkPts(box, border, pos), { x: 0, y: 0 }, false, { renderer, job });
284
+ return;
285
+ }
286
+ const effSides = (sides !== undefined) ? (sides & BORDER_MASK) : 0;
287
+ if (effSides !== 0) {
288
+ const corners = mkPts(box, border, pos).map((p) => transformPoint(p, job));
289
+ emitSidedPolylines(effSides, corners, renderer, job);
290
+ } else {
291
+ emitFullBoxBorder(box, pos, border, renderer, job);
292
+ }
293
+ });
294
+ }
295
+
296
+ /** Emit an inset full-box border polygon (unfilled). */
297
+ function emitFullBoxBorder(
298
+ box: Box,
299
+ pos: Point,
300
+ border: number,
301
+ renderer: RendererPlugin,
302
+ job: RenderJob,
303
+ ): void {
304
+ const b2: Box = border > 1 ? {
305
+ ll: { x: box.ll.x + border / 2, y: box.ll.y + border / 2 },
306
+ ur: { x: box.ur.x - border / 2, y: box.ur.y - border / 2 },
307
+ } : box;
308
+ const pts = [
309
+ { x: b2.ll.x + pos.x, y: b2.ll.y + pos.y },
310
+ { x: b2.ll.x + pos.x, y: b2.ur.y + pos.y },
311
+ { x: b2.ur.x + pos.x, y: b2.ur.y + pos.y },
312
+ { x: b2.ur.x + pos.x, y: b2.ll.y + pos.y },
313
+ ].map((pt) => transformPoint(pt, job));
314
+ renderer.polygon(pts, false, job);
315
+ }
316
+
317
+ // ---------------------------------------------------------------------------
318
+ // emitSidedPolylines — lookup table, CCN ≤ 4
319
+ // ---------------------------------------------------------------------------
320
+
321
+ // Corner index aliases: 0=SW, 1=SE, 2=NE, 3=NW
322
+ const SW = 0, SE = 1, NE = 2, NW = 3;
323
+ const B = BORDER_BOTTOM, R = BORDER_RIGHT, T = BORDER_TOP, L = BORDER_LEFT;
324
+
325
+ /**
326
+ * Lookup table: sides bitmask → list of polyline sequences (each sequence is
327
+ * an array of corner indices into [SW, SE, NE, NW]).
328
+ * Matches C doBorder switch-case exactly (htmltable.c:278-330).
329
+ *
330
+ * @see lib/common/htmltable.c:doBorder
331
+ */
332
+ const SIDES_TABLE: ReadonlyMap<number, ReadonlyArray<ReadonlyArray<number>>> = new Map([
333
+ [B|R|T|L, [[SW,SE,NE,NW,SW]]],
334
+ [B|R|T, [[SW,SE,NE,NW]] ],
335
+ [R|T|L, [[SE,NE,NW,SW]] ],
336
+ [T|L|B, [[NE,NW,SW,SE]] ],
337
+ [L|B|R, [[NW,SW,SE,NE]] ],
338
+ [B|R, [[SW,SE,NE]] ],
339
+ [R|T, [[SE,NE,NW]] ],
340
+ [T|L, [[NE,NW,SW]] ],
341
+ [L|B, [[NW,SW,SE]] ],
342
+ [T|B, [[SW,SE],[NE,NW]] ],
343
+ [L|R, [[NW,SW],[SE,NE]] ],
344
+ [B, [[SW,SE]] ],
345
+ [R, [[SE,NE]] ],
346
+ [T, [[NE,NW]] ],
347
+ [L, [[NW,SW]] ],
348
+ ]);
349
+
350
+ /**
351
+ * Emit polyline segments for a SIDES bitmask via a lookup table.
352
+ * CCN = 2 (loop + no-match guard).
353
+ *
354
+ * @see lib/common/htmltable.c:doBorder
355
+ */
356
+ function emitSidedPolylines(
357
+ sides: number,
358
+ corners: Point[],
359
+ renderer: RendererPlugin,
360
+ job: RenderJob,
361
+ ): void {
362
+ const seqs = SIDES_TABLE.get(sides & BORDER_MASK);
363
+ if (seqs === undefined) return;
364
+ for (const seq of seqs) {
365
+ renderer.polyline(seq.map((i) => corners[i]!), job);
366
+ }
367
+ }
@@ -0,0 +1,293 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * HTML rule-line emission and anchor helpers.
5
+ * Ports emit_html_rules, initAnchor, endAnchor from lib/common/htmltable.c.
6
+ *
7
+ * @see lib/common/htmltable.c:emit_html_rules
8
+ * @see lib/common/htmltable.c:initAnchor
9
+ * @see lib/common/htmltable.c:endAnchor
10
+ */
11
+
12
+ import type { Point, Box } from '../model/geom.js';
13
+ import type { RenderJob } from '../gvc/job.js';
14
+ import type { RendererPlugin } from '../gvc/context.js';
15
+ import type { PlacedCell, PlacedHtml } from './htmltable-pos.js';
16
+ import { doSide, withHtmlPaint } from './htmltable-emit-fill.js';
17
+
18
+ // ---------------------------------------------------------------------------
19
+ // Rule context
20
+ // ---------------------------------------------------------------------------
21
+
22
+ /** Shared context for rule-line helpers, grouping all inputs. */
23
+ export interface RuleCtx {
24
+ cell: PlacedCell;
25
+ tbl: PlacedHtml;
26
+ pos: Point;
27
+ color: string;
28
+ /** Next cell in row-major order; C passes *cells after increment. */
29
+ nextCell?: PlacedCell;
30
+ renderer: RendererPlugin;
31
+ job: RenderJob;
32
+ }
33
+
34
+ // ---------------------------------------------------------------------------
35
+ // emitHtmlRules
36
+ // ---------------------------------------------------------------------------
37
+
38
+ /**
39
+ * Emit vertical/horizontal rule lines for a cell that has vruled/hruled set.
40
+ * Pen width forced to 1.0 per C (emit_html_tbl:576 comment); rules draw
41
+ * as filled boxes with fill = pen = rule color.
42
+ *
43
+ * @see lib/common/htmltable.c:emit_html_rules
44
+ */
45
+ export function emitHtmlRules(ctx: RuleCtx): void {
46
+ withHtmlPaint({ fill: ctx.color, pen: ctx.color, penWidth: 1 }, ctx.job, () => {
47
+ if (ctx.cell.vruled === true) emitVRuleIfNeeded(ctx);
48
+ if (ctx.cell.hruled === true) emitHRuleIfNeeded(ctx);
49
+ });
50
+ }
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // Vertical rule
54
+ // ---------------------------------------------------------------------------
55
+
56
+ /** Cell position summary used by rule param helpers. */
57
+ interface CellPos {
58
+ idx: number; // row or col index
59
+ span: number; // rowspan or colspan
60
+ count: number; // rowCount or columnCount
61
+ border: number;
62
+ sp: number;
63
+ }
64
+
65
+ /** Base extension and start coordinate for a vertical rule. */
66
+ function vRuleCoords(lly: number, p: CellPos): { ruleY: number; base: number } {
67
+ if (p.idx === 0) {
68
+ return { ruleY: lly - p.sp / 2, base: p.border + p.sp / 2 };
69
+ }
70
+ if (p.idx + p.span === p.count) {
71
+ const base = p.border + p.sp / 2;
72
+ return { ruleY: lly - p.sp / 2 - base, base };
73
+ }
74
+ return { ruleY: lly - p.sp / 2, base: 0 };
75
+ }
76
+
77
+ /** Emit vertical rule if cell does not span to the last column. */
78
+ function emitVRuleIfNeeded(ctx: RuleCtx): void {
79
+ const { cell, tbl, pos, renderer, job } = ctx;
80
+ if (cell.col + cell.colspan >= tbl.columnCount) return;
81
+ const sp = tbl.spacing;
82
+ const lly = cell.box.ll.y + pos.y;
83
+ const ury = cell.box.ur.y + pos.y;
84
+ const urx = cell.box.ur.x + pos.x;
85
+ const p: CellPos = { idx: cell.row, span: cell.rowspan, count: tbl.rowCount, border: tbl.border, sp };
86
+ const { ruleY, base } = vRuleCoords(lly, p);
87
+ doSide({ x: urx + sp / 2, y: ruleY }, 0, base + (ury - lly) + sp, renderer, job);
88
+ }
89
+
90
+ // ---------------------------------------------------------------------------
91
+ // Horizontal rule
92
+ // ---------------------------------------------------------------------------
93
+
94
+ /**
95
+ * Base extension and start coordinate for a horizontal rule.
96
+ * Mirrors the C first/last-column branches, including the base
97
+ * doubling when a col-0 cell is also the last column and the
98
+ * incomplete-row extension to the table edge.
99
+ * @see lib/common/htmltable.c:emit_html_rules (:488-512)
100
+ */
101
+ function hRuleCoords(ctx: RuleCtx, llx: number, urx: number): { ruleX: number; base: number } {
102
+ const { cell, tbl, pos, nextCell } = ctx;
103
+ const sp = tbl.spacing;
104
+ const lastCol = cell.col + cell.colspan === tbl.columnCount;
105
+ // C: nextc && nextc->row != cp->row — incomplete row of cells
106
+ const extend = nextCell !== undefined && nextCell.row !== cell.row
107
+ ? tbl.box.ur.x + pos.x - (urx + sp / 2) : 0;
108
+ if (cell.col === 0) {
109
+ let base = tbl.border + sp / 2;
110
+ const ruleX = llx - base - sp / 2;
111
+ if (lastCol) base *= 2;
112
+ else if (extend !== 0) base += extend;
113
+ return { ruleX, base };
114
+ }
115
+ if (lastCol) {
116
+ return { ruleX: llx - sp / 2, base: tbl.border + sp / 2 };
117
+ }
118
+ return { ruleX: llx - sp / 2, base: extend };
119
+ }
120
+
121
+ /** Emit horizontal rule if cell does not span to the last row. */
122
+ function emitHRuleIfNeeded(ctx: RuleCtx): void {
123
+ const { cell, tbl, pos, renderer, job } = ctx;
124
+ if (cell.row + cell.rowspan >= tbl.rowCount) return;
125
+ const sp = tbl.spacing;
126
+ const llx = cell.box.ll.x + pos.x;
127
+ const urx = cell.box.ur.x + pos.x;
128
+ const lly = cell.box.ll.y + pos.y;
129
+ const { ruleX, base } = hRuleCoords(ctx, llx, urx);
130
+ doSide({ x: ruleX, y: lly - sp / 2 }, base + (urx - llx) + sp, 0, renderer, job);
131
+ }
132
+
133
+ // ---------------------------------------------------------------------------
134
+ // Anchor data + helpers
135
+ // ---------------------------------------------------------------------------
136
+
137
+ /** Anchor metadata extracted from cell/table HTML attributes. */
138
+ export interface AnchorData {
139
+ href?: string;
140
+ title?: string;
141
+ target?: string;
142
+ id?: string;
143
+ }
144
+
145
+ /**
146
+ * Current object context for html anchors. C keeps this on job->obj
147
+ * (set by emit_begin_node/edge/graph); the port's live path has no
148
+ * persistent obj state, so the device walk sets it here before
149
+ * emitting each object's labels.
150
+ * objLabel feeds the C default tooltip (initMapData: tooltip falls
151
+ * back to obj->label — "<TABLE>" for table labels).
152
+ * @see lib/common/emit.c:initMapData (line 163)
153
+ */
154
+ const anchorEnv: { objId: string; objLabel: string | null; imgscale: string } =
155
+ { objId: '', objLabel: null, imgscale: 'false' };
156
+
157
+ /**
158
+ * Effective anchor obj-state, mirroring C's job->obj url/tooltip/target
159
+ * fields as saved/overlaid by initAnchor + initMapData: a cell that declares
160
+ * only TARGET (or only TITLE) still anchors, inheriting url/tooltip from the
161
+ * enclosing table/cell/object scope. Each initHtmlAnchor pushes an overlaid
162
+ * frame; endHtmlAnchor pops (C's htmlmap_data_t save/RESET).
163
+ * @see lib/common/htmltable.c:initAnchor/endAnchor, lib/common/emit.c:initMapData
164
+ */
165
+ interface AnchorFrame {
166
+ url: string | null;
167
+ tooltip: string | null;
168
+ explicitTooltip: boolean;
169
+ target: string | null;
170
+ opened: boolean;
171
+ }
172
+ const anchorBase: AnchorFrame = { url: null, tooltip: null, explicitTooltip: false, target: null, opened: false };
173
+ const anchorStack: AnchorFrame[] = [];
174
+ function anchorTop(): AnchorFrame {
175
+ return anchorStack.length > 0 ? anchorStack[anchorStack.length - 1] : anchorBase;
176
+ }
177
+
178
+ /** Anchor id counter — C's `static int anchorId` in initAnchor, reset per render job (each dot invocation is one process). */
179
+ let anchorSeq = 0;
180
+
181
+ /** Set the current object context for anchor id/tooltip resolution.
182
+ * base seeds the inherited url/tooltip scope from the object's own
183
+ * attributes (C: job->obj populated at emit_begin_node/edge/cluster). */
184
+ export function setHtmlAnchorObj(
185
+ objId: string, objLabel: string | null,
186
+ base?: { url: string | null; tooltip: string | null; explicitTooltip?: boolean; target: string | null },
187
+ ): void {
188
+ anchorEnv.objId = objId;
189
+ anchorEnv.objLabel = objLabel;
190
+ anchorEnv.imgscale = 'false';
191
+ anchorStack.length = 0;
192
+ anchorBase.url = base?.url ?? null;
193
+ anchorBase.tooltip = base?.tooltip ?? null;
194
+ anchorBase.explicitTooltip = base?.explicitTooltip ?? false;
195
+ anchorBase.target = base?.target ?? null;
196
+ anchorBase.opened = false;
197
+ }
198
+
199
+ /**
200
+ * Record the current object's imagescale attribute — C's
201
+ * env.imgscale = agget(obj, "imagescale"), defaulting to "false".
202
+ * @see lib/common/htmltable.c:emit_html_label (lines 768-772)
203
+ */
204
+ export function setHtmlObjImgscale(imgscale: string | undefined): void {
205
+ anchorEnv.imgscale = imgscale !== undefined && imgscale !== '' ? imgscale : 'false';
206
+ }
207
+
208
+ /** The IMG SCALE fallback for the object being emitted. @see setHtmlObjImgscale */
209
+ export function htmlObjImgscale(): string {
210
+ return anchorEnv.imgscale;
211
+ }
212
+
213
+ /** Reset the per-render anchor id counter. Call at render start. */
214
+ export function resetHtmlAnchorIds(): void {
215
+ anchorSeq = 0;
216
+ anchorEnv.objId = '';
217
+ anchorEnv.objLabel = null;
218
+ anchorEnv.imgscale = 'false';
219
+ }
220
+
221
+ /** Normalise AnchorData to plain strings (empty when absent). */
222
+ function normaliseAnchor(data: AnchorData): { h: string; t: string; tg: string; i: string } {
223
+ return {
224
+ h: data.href !== undefined ? data.href : '',
225
+ t: data.title !== undefined ? data.title : '',
226
+ tg: data.target !== undefined ? data.target : '',
227
+ i: data.id !== undefined ? data.id : '',
228
+ };
229
+ }
230
+
231
+ /**
232
+ * Open an anchor when the data carries href/title/target.
233
+ *
234
+ * Mirrors C initAnchor exactly: an internal id `<objId>_<n>` is
235
+ * generated (consuming the counter) whenever the call is made without
236
+ * an explicit ID attr, but the anchor element only opens when there is
237
+ * a URL or an explicit tooltip (initMapData: obj->url ||
238
+ * obj->explicit_tooltip). A missing TITLE inherits the object label
239
+ * as tooltip.
240
+ * Returns true when an anchor was opened (caller must endHtmlAnchor).
241
+ *
242
+ * @see lib/common/htmltable.c:initAnchor (line 381)
243
+ * @see lib/common/emit.c:initMapData (line 163)
244
+ */
245
+ export function initHtmlAnchor(
246
+ data: AnchorData,
247
+ box: Box,
248
+ renderer: RendererPlugin,
249
+ job: RenderJob,
250
+ ): boolean {
251
+ // C's emit_html_cell/tbl gate: the element declares href, target or title
252
+ // (htmltable.c:630 doAnchor); the anchor's URL and tooltip then come from
253
+ // the OVERLAID obj state — a TARGET-only cell inherits the enclosing
254
+ // table's HREF (2619's dat TDs). initMapData overlays only non-empty
255
+ // fields; the <a> element opens iff effective url || explicit tooltip.
256
+ if (data.href === undefined && data.title === undefined && data.target === undefined) {
257
+ return false;
258
+ }
259
+ const id = data.id !== undefined && data.id !== ''
260
+ ? data.id
261
+ : `${anchorEnv.objId}_${anchorSeq++}`;
262
+ const parent = anchorTop();
263
+ const frame: AnchorFrame = { ...parent, opened: false };
264
+ if (data.href !== undefined && data.href !== '') frame.url = data.href;
265
+ if (data.title !== undefined && data.title !== '') {
266
+ frame.tooltip = data.title;
267
+ frame.explicitTooltip = true;
268
+ } else if (frame.tooltip === null && anchorEnv.objLabel !== null) {
269
+ // C initMapData: tooltip falls back to obj->label (not explicit).
270
+ frame.tooltip = anchorEnv.objLabel;
271
+ }
272
+ if (data.target !== undefined && data.target !== '') frame.target = data.target;
273
+ if (frame.url !== null || frame.explicitTooltip) {
274
+ // C initAnchor: emit_map_rect(job, b) then gvrender_begin_anchor — the
275
+ // rectangle seeds obj.urlMapPts so the map device emits this cell/table's
276
+ // <area>. @see lib/common/htmltable.c:410
277
+ renderer.emitMapRect?.(box, job);
278
+ renderer.beginAnchor?.(frame.url ?? '', frame.tooltip ?? '', frame.target ?? '', id, job);
279
+ frame.opened = true;
280
+ }
281
+ anchorStack.push(frame);
282
+ return true;
283
+ }
284
+
285
+ /**
286
+ * Close anchor opened by initHtmlAnchor.
287
+ *
288
+ * @see lib/common/htmltable.c:endAnchor
289
+ */
290
+ export function endHtmlAnchor(renderer: RendererPlugin, job: RenderJob): void {
291
+ const frame = anchorStack.pop();
292
+ if (frame?.opened) renderer.endAnchor?.(job);
293
+ }