@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,433 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * TypeScript port of lib/dotgen/conc.c — dot_concentrate.
5
+ *
6
+ * Build edge concentrators for parallel edges with a common endpoint.
7
+ *
8
+ * @see lib/dotgen/conc.c
9
+ */
10
+
11
+ import type { Graph } from '../../model/graph.js';
12
+ import type { Node } from '../../model/node.js';
13
+ import type { Edge } from '../../model/edge.js';
14
+ import type { Port } from '../../model/geom.js';
15
+ import {
16
+ VIRTUAL, NORMAL,
17
+ virtualEdge, mergeOneway, deleteFastEdge, deleteFastNode,
18
+ } from './fastgr.js';
19
+ import { dotScanRanks } from './rank.js';
20
+ import { dotRoot, rankGet } from './mincross-utils.js';
21
+ import { nodesInSeq } from './decomp.js';
22
+ import { graphMinrank, graphMaxrank } from './position-aux.js';
23
+
24
+ const UP = 0;
25
+ const DOWN = 1;
26
+
27
+ // ---------------------------------------------------------------------------
28
+ // portcmp
29
+ // @see lib/dotgen/dotsplines.c:portcmp
30
+ // ---------------------------------------------------------------------------
31
+
32
+ /** @see lib/dotgen/dotsplines.c:portcmp */
33
+ export function portcmp(p0: Port, p1: Port): number {
34
+ if (!p1.defined) return p0.defined ? 1 : 0;
35
+ if (!p0.defined) return -1;
36
+ if (p0.p.x < p1.p.x) return -1;
37
+ if (p0.p.x > p1.p.x) return 1;
38
+ if (p0.p.y < p1.p.y) return -1;
39
+ if (p0.p.y > p1.p.y) return 1;
40
+ return 0;
41
+ }
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // candidate predicates
45
+ // @see lib/dotgen/conc.c:downcandidate, upcandidate
46
+ // ---------------------------------------------------------------------------
47
+
48
+ /** @see lib/dotgen/conc.c:downcandidate */
49
+ export function downcandidate(v: Node): boolean {
50
+ return (v.info.node_type ?? 0) === VIRTUAL
51
+ && (v.info.in?.size ?? 0) === 1
52
+ && (v.info.out?.size ?? 0) === 1
53
+ && v.info.label === undefined;
54
+ }
55
+
56
+ /** @see lib/dotgen/conc.c:upcandidate */
57
+ export function upcandidate(v: Node): boolean {
58
+ return (v.info.node_type ?? 0) === VIRTUAL
59
+ && (v.info.out?.size ?? 0) === 1
60
+ && (v.info.in?.size ?? 0) === 1
61
+ && v.info.label === undefined;
62
+ }
63
+
64
+ // ---------------------------------------------------------------------------
65
+ // sameDir helpers
66
+ // @see lib/dotgen/conc.c:samedir
67
+ // ---------------------------------------------------------------------------
68
+
69
+ /** Walk to_orig chain to find the underlying NORMAL edge. */
70
+ export function findNormalEdge(e: Edge): Edge | undefined {
71
+ let cur: Edge | undefined = e;
72
+ while (cur !== undefined && (cur.info.edge_type ?? NORMAL) !== NORMAL) {
73
+ cur = cur.info.to_orig;
74
+ }
75
+ return cur;
76
+ }
77
+
78
+ /** @see lib/dotgen/conc.c:samedir */
79
+ export function sameDir(e: Edge, f: Edge): boolean {
80
+ const e0 = findNormalEdge(e);
81
+ if (e0 === undefined) return false;
82
+ const f0 = findNormalEdge(f);
83
+ if (f0 === undefined) return false;
84
+ if (e0.info.conc_opp_flag || f0.info.conc_opp_flag) return false;
85
+ const fDiff = (f0.tail.info.rank ?? 0) - (f0.head.info.rank ?? 0);
86
+ const eDiff = (e0.tail.info.rank ?? 0) - (e0.head.info.rank ?? 0);
87
+ return fDiff * eDiff > 0;
88
+ }
89
+
90
+ // ---------------------------------------------------------------------------
91
+ // candidate pair predicates
92
+ // @see lib/dotgen/conc.c:bothdowncandidates, bothupcandidates
93
+ // ---------------------------------------------------------------------------
94
+
95
+ /** @see lib/dotgen/conc.c:bothdowncandidates */
96
+ export function bothdowncandidates(u: Node, v: Node): boolean {
97
+ const e = u.info.in?.list[0];
98
+ const f = v.info.in?.list[0];
99
+ if (!e || !f) return false;
100
+ if (!downcandidate(v)) return false;
101
+ if (e.tail !== f.tail) return false;
102
+ return sameDir(e, f) && portcmp(e.info.tail_port, f.info.tail_port) === 0;
103
+ }
104
+
105
+ /** @see lib/dotgen/conc.c:bothupcandidates */
106
+ export function bothupcandidates(u: Node, v: Node): boolean {
107
+ const e = u.info.out?.list[0];
108
+ const f = v.info.out?.list[0];
109
+ if (!e || !f) return false;
110
+ if (!upcandidate(v)) return false;
111
+ if (e.head !== f.head) return false;
112
+ return sameDir(e, f) && portcmp(e.info.head_port, f.info.head_port) === 0;
113
+ }
114
+
115
+ // ---------------------------------------------------------------------------
116
+ // merge helpers — each handles one edge in the merge loop
117
+ // @see lib/dotgen/conc.c:mergevirtual
118
+ // ---------------------------------------------------------------------------
119
+
120
+ /** Find or create the left-side representative edge in the DOWN merge. */
121
+ export function resolveDownRep(left: Node, headNode: Node, e: Edge): Edge {
122
+ for (let k = 0; k < (left.info.out?.size ?? 0); k++) {
123
+ if (left.info.out!.list[k].head === headNode) return left.info.out!.list[k];
124
+ }
125
+ return virtualEdge(left, headNode, e);
126
+ }
127
+
128
+ /** Drain all in-edges from right into f, then delete e. */
129
+ export function drainIntoDown(right: Node, f: Edge, e: Edge): void {
130
+ while ((right.info.in?.size ?? 0) > 0) {
131
+ const e0 = right.info.in!.list[0];
132
+ mergeOneway(e0, f);
133
+ deleteFastEdge(e0);
134
+ }
135
+ deleteFastEdge(e);
136
+ }
137
+
138
+ /** Merge one out-edge of right into left (DOWN direction). */
139
+ export function mergeOneOutEdge(left: Node, right: Node): void {
140
+ const e = right.info.out!.list[0];
141
+ const f = resolveDownRep(left, e.head, e);
142
+ drainIntoDown(right, f, e);
143
+ }
144
+
145
+ /** Find or create the left-side representative edge in the UP merge. */
146
+ export function resolveUpRep(left: Node, tailNode: Node, e: Edge): Edge {
147
+ for (let k = 0; k < (left.info.in?.size ?? 0); k++) {
148
+ if (left.info.in!.list[k].tail === tailNode) return left.info.in!.list[k];
149
+ }
150
+ return virtualEdge(tailNode, left, e);
151
+ }
152
+
153
+ /** Drain all out-edges from right into f, then delete e. */
154
+ export function drainIntoUp(right: Node, f: Edge, e: Edge): void {
155
+ while ((right.info.out?.size ?? 0) > 0) {
156
+ const e0 = right.info.out!.list[0];
157
+ mergeOneway(e0, f);
158
+ deleteFastEdge(e0);
159
+ }
160
+ deleteFastEdge(e);
161
+ }
162
+
163
+ /** Merge one in-edge of right into left (UP direction). */
164
+ export function mergeOneInEdge(left: Node, right: Node): void {
165
+ const e = right.info.in!.list[0];
166
+ const f = resolveUpRep(left, e.tail, e);
167
+ drainIntoUp(right, f, e);
168
+ }
169
+
170
+ /** Compact the rank array after merging positions lpos+1..rpos into lpos. */
171
+ export function compactRank(g: Graph, r: number, lpos: number, rpos: number): void {
172
+ const rankArr = g.info.rank!;
173
+ let k = lpos + 1;
174
+ for (let i = rpos + 1; i < rankArr[r].n; i++) {
175
+ const n = rankArr[r].v[k] = rankArr[r].v[i];
176
+ n.info.order = k;
177
+ k++;
178
+ }
179
+ rankArr[r].n = k;
180
+ rankArr[r].v[k] = undefined as unknown as Node;
181
+ }
182
+
183
+ /** Merge right into left using DOWN semantics. */
184
+ export function absorbNodeDown(left: Node, right: Node, g: Graph): void {
185
+ while ((right.info.out?.size ?? 0) > 0) mergeOneOutEdge(left, right);
186
+ deleteFastNode(g, right);
187
+ }
188
+
189
+ /** Merge right into left using UP semantics. */
190
+ export function absorbNodeUp(left: Node, right: Node, g: Graph): void {
191
+ while ((right.info.in?.size ?? 0) > 0) mergeOneInEdge(left, right);
192
+ deleteFastNode(g, right);
193
+ }
194
+
195
+ /** @see lib/dotgen/conc.c:mergevirtual */
196
+ export function mergeVirtual(g: Graph, r: number, lpos: number, rpos: number, dir: number): void {
197
+ const rankArr = g.info.rank!;
198
+ const left = rankArr[r].v[lpos];
199
+ for (let i = lpos + 1; i <= rpos; i++) {
200
+ const right = rankArr[r].v[i];
201
+ if (dir === DOWN) absorbNodeDown(left, right, g);
202
+ else absorbNodeUp(left, right, g);
203
+ }
204
+ compactRank(g, r, lpos, rpos);
205
+ }
206
+
207
+ // ---------------------------------------------------------------------------
208
+ // infuse / rebuild_vlists
209
+ // @see lib/dotgen/conc.c:infuse, rebuild_vlists
210
+ // ---------------------------------------------------------------------------
211
+
212
+ /** @see lib/dotgen/conc.c:infuse */
213
+ export function infuse(g: Graph, n: Node): void {
214
+ const r = n.info.rank ?? 0;
215
+ const rl = g.info.rankleader;
216
+ if (!rl) return;
217
+ const lead = rl[r];
218
+ if (lead === undefined || (lead.info.order ?? 0) > (n.info.order ?? 0)) rl[r] = n;
219
+ }
220
+
221
+ /** Infuse virtual nodes along the to_virt/out chain of edge e. */
222
+ export function infuseEdgeChain(g: Graph, e: Edge): void {
223
+ let rep: Edge | undefined = e;
224
+ while (rep?.info.to_virt) rep = rep.info.to_virt;
225
+ const targetRank = e.head.info.rank ?? 0;
226
+ while (rep !== undefined && (rep.head.info.rank ?? 0) < targetRank) {
227
+ infuse(g, rep.head);
228
+ rep = rep.head.info.out?.list[0];
229
+ }
230
+ }
231
+
232
+ /** True if virtual node n's orig edge has both endpoints in g. */
233
+ export function virtNodeInGraph(g: Graph, n: Node): boolean {
234
+ let e: Edge | undefined = n.info.in?.list[0];
235
+ while (e?.info.to_orig) e = e.info.to_orig;
236
+ return e !== undefined && g.nodes.has(e.tail.name) && g.nodes.has(e.head.name);
237
+ }
238
+
239
+ /** Compute the highest valid index (maxi) for one rank vlist. */
240
+ export function computeMaxi(g: Graph, r: number): number {
241
+ const rankArr = g.info.rank!;
242
+ let maxi = -1;
243
+ for (let i = 0; i < rankArr[r].n; i++) {
244
+ // Read THROUGH the window. C's `GD_rank(g)[r].v[i]` here is the OFFSET
245
+ // pointer set two lines above in rebuild_vlists, so index i is relative to
246
+ // the rank leader; a raw `v[i]` would read the ROOT's leftmost node. This is
247
+ // the sole conc.ts site reached with a CLUSTER (via fillRankVlist) — the
248
+ // rest run on the root under dotConcentrate, where vStart is 0 and C uses
249
+ // raw indexing too.
250
+ const n = rankGet(rankArr[r], i);
251
+ if (n === undefined) break;
252
+ if ((n.info.node_type ?? NORMAL) === NORMAL) {
253
+ if (g.nodes.has(n.name)) { maxi = i; } else break;
254
+ } else {
255
+ if (virtNodeInGraph(g, n)) maxi = i;
256
+ }
257
+ }
258
+ return maxi;
259
+ }
260
+
261
+ /** @see lib/dotgen/conc.c:rebuild_vlists — fill one rank's v pointer. */
262
+ export function fillRankVlist(g: Graph, r: number, root: Graph): number {
263
+ const rankArr = g.info.rank!;
264
+ const lead = g.info.rankleader![r];
265
+ if (lead === undefined || lead === null) {
266
+ console.error(`Error: rebuild_vlists: lead is null for rank ${r}`);
267
+ return -1;
268
+ }
269
+ const rootRank = root.info.rank![r];
270
+ if (rootRank.v[lead.info.order ?? 0] !== lead) {
271
+ console.error(
272
+ `Error: rebuild_vlists: rank lead ${lead.name} not in order ` +
273
+ `${lead.info.order ?? 0} of rank ${r}`,
274
+ );
275
+ return -1;
276
+ }
277
+ // C: GD_rank(g)[r].v = GD_rank(dot_root(g))[r].v + ND_order(lead) — a LIVE
278
+ // POINTER into the root's array, so writes through either view stay mutually
279
+ // visible. The port models that pointer-plus-offset as (shared array, vStart),
280
+ // exactly as merge_ranks does (cluster.ts:149-150, whose comment spells out
281
+ // that a `.slice` copy detaches the cluster view).
282
+ //
283
+ // This site used to `.slice()` — a COPY, with vStart reset to 0. It was the
284
+ // only one of the three rank-alias sites modelled as a copy, and it silently
285
+ // broke the invariant C gives for free: cluster window and root array are the
286
+ // same memory. It happened not to misbehave only because the sole root-rank
287
+ // mutation after dot_concentrate (makeVnSlot, inside flatNode) always sets
288
+ // reset=true, and recResetVlists then re-aliases the window and heals the copy.
289
+ // Any future writer through a cluster's rank[r].v would have written into the
290
+ // detached copy and been lost.
291
+ // @see lib/dotgen/conc.c:168 rebuild_vlists
292
+ rankArr[r].v = rootRank.v;
293
+ rankArr[r].vStart = lead.info.order ?? 0;
294
+ const maxi = computeMaxi(g, r);
295
+ if (maxi === -1) console.error(`Warning: degenerate concentrated rank ${g.name},${r}`);
296
+ rankArr[r].n = maxi + 1;
297
+ return 0;
298
+ }
299
+
300
+ /** Infuse every node (and its out-edge chains) in g into rankleader. */
301
+ export function infuseAllNodes(g: Graph): void {
302
+ // C walks each node's ORIGINAL out-edges in the cluster subgraph
303
+ // (agfstout(g, n)), then resolves each through ED_to_virt inside the chain
304
+ // walk. The fast list (n.info.out) holds virtual SEGMENTS instead: to_virt
305
+ // is unset on them and their head is the first chain vnode, so the walk's
306
+ // target rank collapses to tail rank+1 and intermediate vnodes are never
307
+ // infused — a cluster rank populated only by chain vnodes then has no
308
+ // rankleader and rebuild_vlists fails (corpus 2183 cluster_A rank 9).
309
+ // @see lib/dotgen/conc.c:146-155
310
+ const outsByTail = new Map<Node, Edge[]>();
311
+ for (const e of g.edges) {
312
+ const arr = outsByTail.get(e.tail);
313
+ if (arr) arr.push(e);
314
+ else outsByTail.set(e.tail, [e]);
315
+ }
316
+ for (const n of nodesInSeq(g)) {
317
+ infuse(g, n);
318
+ const oes = outsByTail.get(n);
319
+ if (oes) for (const e of oes) infuseEdgeChain(g, e);
320
+ }
321
+ }
322
+
323
+ /** Fill all per-rank vlists for g using root as the master rank table. */
324
+ export function fillAllRankVlists(g: Graph): number {
325
+ // C uses GD_rank(dot_root(g)) as the master rank table. dotRoot falls back to
326
+ // g.root (the true root), NOT g — `g.info.dotroot ?? g` wrongly used the
327
+ // cluster itself when dotroot was unset. @see lib/dotgen/conc.c:rebuild_vlists
328
+ const root = dotRoot(g);
329
+ const minR = graphMinrank(g);
330
+ const maxR = graphMaxrank(g);
331
+ for (let r = minR; r <= maxR; r++) {
332
+ const rc = fillRankVlist(g, r, root);
333
+ if (rc !== 0) return rc;
334
+ }
335
+ return 0;
336
+ }
337
+
338
+ /** Recursively rebuild vlists for all clusters of g. */
339
+ export function rebuildClusterVlists(g: Graph): number {
340
+ const nCluster = g.info.n_cluster ?? 0;
341
+ const clust = g.info.clust ?? [];
342
+ for (let c = 0; c < nCluster; c++) {
343
+ const ret = rebuildVlists(clust[c]);
344
+ if (ret !== 0) return ret;
345
+ }
346
+ return 0;
347
+ }
348
+
349
+ /** @see lib/dotgen/conc.c:rebuild_vlists */
350
+ export function rebuildVlists(g: Graph): number {
351
+ const minR = graphMinrank(g);
352
+ const maxR = graphMaxrank(g);
353
+ if (!g.info.rankleader) g.info.rankleader = [];
354
+ for (let r = minR; r <= maxR; r++) g.info.rankleader[r] = undefined as unknown as Node;
355
+ dotScanRanks(g);
356
+ infuseAllNodes(g);
357
+ const rc = fillAllRankVlists(g);
358
+ if (rc !== 0) return rc;
359
+ return rebuildClusterVlists(g);
360
+ }
361
+
362
+ // ---------------------------------------------------------------------------
363
+ // dot_concentrate passes
364
+ // ---------------------------------------------------------------------------
365
+
366
+ /** @see lib/dotgen/conc.c:dot_concentrate — one downward rank sweep */
367
+ export function concentrateOneRankDown(g: Graph, r: number): void {
368
+ const rankArr = g.info.rank!;
369
+ for (let leftpos = 0; leftpos < rankArr[r].n; leftpos++) {
370
+ const left = rankArr[r].v[leftpos];
371
+ if (!downcandidate(left)) continue;
372
+ let rightpos = leftpos + 1;
373
+ while (rightpos < rankArr[r].n && bothdowncandidates(left, rankArr[r].v[rightpos])) rightpos++;
374
+ if (rightpos - leftpos > 1) mergeVirtual(g, r, leftpos, rightpos - 1, DOWN);
375
+ }
376
+ }
377
+
378
+ /** @see lib/dotgen/conc.c:dot_concentrate — one upward rank sweep */
379
+ export function concentrateOneRankUp(g: Graph, r: number): void {
380
+ const rankArr = g.info.rank!;
381
+ for (let leftpos = 0; leftpos < rankArr[r].n; leftpos++) {
382
+ const left = rankArr[r].v[leftpos];
383
+ if (!upcandidate(left)) continue;
384
+ let rightpos = leftpos + 1;
385
+ while (rightpos < rankArr[r].n && bothupcandidates(left, rankArr[r].v[rightpos])) rightpos++;
386
+ if (rightpos - leftpos > 1) mergeVirtual(g, r, leftpos, rightpos - 1, UP);
387
+ }
388
+ }
389
+
390
+ /** Run the downward concentration pass; return the last r examined. */
391
+ export function runDownPass(g: Graph): number {
392
+ const rankArr = g.info.rank!;
393
+ const maxR = graphMaxrank(g);
394
+ let r = graphMinrank(g) + 1;
395
+ for (; rankArr[r + 1]?.n && r < maxR; r++) concentrateOneRankDown(g, r);
396
+ return r;
397
+ }
398
+
399
+ /** Run the upward concentration pass from r down to 1. */
400
+ export function runUpPass(g: Graph, startR: number): void {
401
+ let r = startR;
402
+ while (r > 0) { concentrateOneRankUp(g, r); r--; }
403
+ }
404
+
405
+ /**
406
+ * Build edge concentrators for parallel edges with a common endpoint.
407
+ *
408
+ * The final cluster loop here is a distinct call site from
409
+ * `rebuildClusterVlists`'s recursive nested-cluster loop inside
410
+ * `rebuildVlists` — C's `dot_concentrate` (conc.c:237-243) calls
411
+ * `rebuild_vlists` directly on each of `g`'s own top-level clusters and, on
412
+ * ANY failure (including one bubbled up from a doubly-nested cluster),
413
+ * reports a single `agerr(AGPREV, ...)` continuation line (no "Error:"/
414
+ * "Warning:" prefix — AGPREV reuses the previous call's level) and
415
+ * normalizes the return to -1. Do not fold this into `rebuildClusterVlists`:
416
+ * that helper is also called recursively from inside `rebuildVlists` itself,
417
+ * where C does NOT emit this message.
418
+ * @see lib/dotgen/conc.c:dot_concentrate
419
+ */
420
+ export function dotConcentrate(g: Graph): number {
421
+ if (graphMaxrank(g) - graphMinrank(g) <= 1) return 0;
422
+ const r = runDownPass(g);
423
+ runUpPass(g, r);
424
+ const nCluster = g.info.n_cluster ?? 0;
425
+ const clust = g.info.clust ?? [];
426
+ for (let c = 0; c < nCluster; c++) {
427
+ if (rebuildVlists(clust[c]) !== 0) {
428
+ console.error('concentrate=true may not work correctly.');
429
+ return -1;
430
+ }
431
+ }
432
+ return 0;
433
+ }
@@ -0,0 +1,165 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ /** @see lib/dotgen/decomp.c @see lib/common/utils.c (UF_*) */
3
+ import type { Node } from '../../model/node.js';
4
+ import type { Graph } from '../../model/graph.js';
5
+ import type { EdgeList } from '../../model/nodeInfo.js';
6
+
7
+ // ---------------------------------------------------------------------------
8
+ // AGSEQ-order node iteration (agfstnode/agnxtnode mirror)
9
+ // ---------------------------------------------------------------------------
10
+
11
+ /**
12
+ * Return `g`'s member nodes in AGSEQ order (global, root-graph-wide creation
13
+ * order), mirroring `agfstnode(g)`/`agnxtnode(g,n)` — NOT the subgraph-local
14
+ * first-insertion order that `g.nodes` (a `Map`) iterates by default.
15
+ *
16
+ * C's `agfstnode` walks a dict ordered by `agsubnodeseqcmpf`
17
+ * (`AGSEQ(node)`, assigned once at node creation and never touched by later
18
+ * `agsubnode` membership calls), independent of which subgraph a node was
19
+ * textually declared in. `Node.id` mirrors AGSEQ (assigned once at first
20
+ * global creation by `NodeRegistry.ensure`/`agnode`'s `freshNodeId`), so a
21
+ * `.id`-ascending sort reproduces C's order for any (sub)graph.
22
+ *
23
+ * Every C function that iterates a subgraph via `agfstnode`/`agnxtnode` must
24
+ * use this helper instead of `g.nodes.values()` directly — see F7's audit
25
+ * table in `.agent-notes/path-structure-xns-residuals.md` for the site list.
26
+ *
27
+ * @see lib/cgraph/node.c:43 (agfstnode), :50 (agnxtnode)
28
+ * @see lib/cgraph/node.c:283-290 (agsubnodeseqcmpf, AGSEQ comparator)
29
+ * @see lib/cgraph/node.c:162 (agnextseq(g,AGNODE), AGSEQ assignment at creation)
30
+ */
31
+ export function nodesInSeq(g: Graph): Node[] {
32
+ return [...g.nodes.values()].sort((a, b) => a.id - b.id);
33
+ }
34
+
35
+ // ---------------------------------------------------------------------------
36
+ // Union-Find exports
37
+ // ---------------------------------------------------------------------------
38
+
39
+ /** @see lib/common/utils.c:UF_find */
40
+ export function ufFind(n: Node): Node {
41
+ while (n.info.UF_parent !== undefined && n.info.UF_parent !== n) {
42
+ const gp = n.info.UF_parent.info.UF_parent;
43
+ if (gp !== undefined) n.info.UF_parent = gp;
44
+ n = n.info.UF_parent;
45
+ }
46
+ return n;
47
+ }
48
+
49
+ /**
50
+ * Union two UF sets. Inlines ufRoot (init + find).
51
+ *
52
+ * C's tie-break reads `ND_id(u) > ND_id(v)` — but `ND_id` is a distinct,
53
+ * dotgen-only `Agnodeinfo_t.id` field (lib/common/types.h:432, guarded by
54
+ * `#ifndef DOT_ONLY`) that is NEVER assigned anywhere in the `dot` layout
55
+ * engine's source (only neatogen/fdpgen/sfdpgen/sparse — unrelated engines —
56
+ * write it). It is therefore always 0 for both real and virtual nodes under
57
+ * `dot`, so `ND_id(u) > ND_id(v)` is always false and C always takes the
58
+ * `else` branch: the first argument's resolved root unconditionally wins.
59
+ * This is NOT the same field as AGID (cgraph's unique per-node id, exposed
60
+ * here as `Node.id`) — using `.id` for this comparison would introduce
61
+ * spurious branching C never performs, since AGID differs between every
62
+ * pair of real nodes.
63
+ * @see lib/common/utils.c:UF_union
64
+ */
65
+ export function ufUnion(u: Node, v: Node): Node {
66
+ if (u === v) return u;
67
+ if (u.info.UF_parent === undefined) { u.info.UF_parent = u; u.info.UF_size = 1; }
68
+ else u = ufFind(u);
69
+ if (v.info.UF_parent === undefined) { v.info.UF_parent = v; v.info.UF_size = 1; }
70
+ else v = ufFind(v);
71
+ if (u === v) return u;
72
+ const us = u.info.UF_size ?? 0;
73
+ const vs = v.info.UF_size ?? 0;
74
+ v.info.UF_parent = u; u.info.UF_size = us + vs; return u;
75
+ }
76
+
77
+ /** @see lib/common/utils.c:UF_singleton */
78
+ export function ufSingleton(u: Node): void {
79
+ u.info.UF_size = 1; u.info.UF_parent = undefined; u.info.ranktype = 0;
80
+ }
81
+
82
+ /** @see lib/common/utils.c:UF_setname */
83
+ export function ufSetname(u: Node, v: Node): void {
84
+ u.info.UF_parent = v;
85
+ v.info.UF_size = (v.info.UF_size ?? 0) + (u.info.UF_size ?? 0);
86
+ }
87
+
88
+ // ---------------------------------------------------------------------------
89
+ // Component building — helpers exported to keep each function standalone
90
+ // (Lizard absorbs consecutive private functions; exports break the chain)
91
+ // ---------------------------------------------------------------------------
92
+
93
+ /**
94
+ * Push unvisited UF-root neighbors onto the BFS stack.
95
+ * @see lib/dotgen/decomp.c (inlined in searchComponent)
96
+ */
97
+ export function decompPushNeighbors(
98
+ stk: Node[], el: EdgeList | undefined, n: Node, cmark: number
99
+ ): void {
100
+ if (!el || el.size === 0) return;
101
+ for (let i = el.size - 1; i >= 0; i--) {
102
+ const e = el.list[i];
103
+ const other = e.head === n ? e.tail : e.head;
104
+ if (other.info.mark !== cmark && other === ufFind(other)) {
105
+ other.info.mark = cmark + 1; stk.push(other);
106
+ }
107
+ }
108
+ }
109
+
110
+ /**
111
+ * BFS over one component; builds g.info.nlist linked list (prev/next).
112
+ * Clears g.info.nlist before traversal.
113
+ * @see lib/dotgen/decomp.c:beginComponent @see lib/dotgen/decomp.c:searchComponent
114
+ */
115
+ export function decompSearch(g: Graph, start: Node, cmark: number): void {
116
+ const stk: Node[] = [];
117
+ let lastNode: Node | undefined;
118
+ start.info.mark = cmark + 1; stk.push(start);
119
+ g.info.nlist = undefined;
120
+ let top: Node | undefined;
121
+ while ((top = stk.pop()) !== undefined) {
122
+ if (top.info.mark === cmark) continue;
123
+ top.info.mark = cmark;
124
+ if (lastNode !== undefined) {
125
+ top.info.prev = lastNode; lastNode.info.next = top;
126
+ } else {
127
+ top.info.prev = undefined; g.info.nlist = top;
128
+ }
129
+ lastNode = top; top.info.next = undefined;
130
+ decompPushNeighbors(stk, top.info.flat_in, top, cmark);
131
+ decompPushNeighbors(stk, top.info.flat_out, top, cmark);
132
+ decompPushNeighbors(stk, top.info.in, top, cmark);
133
+ decompPushNeighbors(stk, top.info.out, top, cmark);
134
+ }
135
+ }
136
+
137
+ // Cmark as const-object property avoids module-level let that confuses Lizard.
138
+ const _dc = { cmark: 0 };
139
+
140
+ // ONE private function immediately before decompose — the acyclic.ts pattern.
141
+ function resolveNode(n: Node, pass: 0 | 1): Node | undefined {
142
+ if (pass > 0) {
143
+ const subg = n.info.clust;
144
+ if (subg) return subg.info.rankleader?.[n.info.rank ?? 0];
145
+ }
146
+ return n === ufFind(n) ? n : undefined;
147
+ }
148
+
149
+ /**
150
+ * Find connected components and store in `g.info.comp`.
151
+ * pass=0: real nodes. pass=1: cluster skeleton leaders.
152
+ * @see lib/dotgen/decomp.c:decompose
153
+ */
154
+ export function decompose(g: Graph, pass: 0 | 1): void {
155
+ if (++_dc.cmark === 0) _dc.cmark = 1;
156
+ const cmark = _dc.cmark;
157
+ g.info.comp = [];
158
+ for (const n of nodesInSeq(g)) {
159
+ const v = resolveNode(n, pass);
160
+ if (v !== undefined && v.info.mark !== cmark) {
161
+ decompSearch(g, v, cmark);
162
+ g.info.comp.push(g.info.nlist!);
163
+ }
164
+ }
165
+ }
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Edge routing order for dot, matching C `dot_splines_`.
5
+ *
6
+ * C routes edges from a list built rank-major (`GD_rank[i].v[j]` out-edges of
7
+ * NORMAL / splineMerge nodes) then `qsort`-ed by `edgecmp`. Because
8
+ * `recover_slack` re-centres shared virtual nodes that other edges read as
9
+ * `maximal_bbox` neighbours, corridor geometry is routing-order-dependent — so
10
+ * the port must route in C's order, not `g.nodes.values()` insertion order.
11
+ *
12
+ * The port iterates the ORIGINAL edges directly (real tails), so `edgecmp`'s
13
+ * `getmainedge` mapping is the identity here and the rank/coord keys read the
14
+ * original endpoints. `AGSEQ` (the port's `Edge.seq`) is unique, making the
15
+ * comparator a total order — a stable `Array.sort` over any collection order
16
+ * reproduces C's `qsort` result (edgecmp-equal originals never occur, and C
17
+ * batches genuinely-equivalent edges via the cnt-loop, so their relative
18
+ * routing order is immaterial).
19
+ *
20
+ * @see lib/dotgen/dotsplines.c:dot_splines_ (edges list build + sort)
21
+ * @see lib/dotgen/dotsplines.c:edgecmp
22
+ */
23
+
24
+ import type { Edge } from '../../model/edge.js';
25
+ import { FLATEDGE, REGULAREDGE } from '../../common/splines-constants.js';
26
+
27
+ /**
28
+ * Edge-type key: same-rank ⇒ FLATEDGE, else REGULAREDGE — mirrors C `setflags`
29
+ * (regular out-edges REGULAREDGE, flat_out FLATEDGE).
30
+ * @see lib/dotgen/dotsplines.c:dot_splines_ (setflags REGULAREDGE/FLATEDGE)
31
+ */
32
+ function edgeTypeKey(e: Edge): number {
33
+ return e.tail.info.rank === e.head.info.rank ? FLATEDGE : REGULAREDGE;
34
+ }
35
+
36
+ /**
37
+ * Lexicographic sort key for one edge, mirroring `edgecmp`. Each entry is
38
+ * compared ascending, so the edge-type term is negated (C orders type
39
+ * descending: FLATEDGE before REGULAREDGE). `AGSEQ` (`Edge.seq`) is unique, so
40
+ * the key tuple is a total order. @see lib/dotgen/dotsplines.c:edgecmp
41
+ */
42
+ function edgeRouteKey(e: Edge): number[] {
43
+ return [
44
+ -edgeTypeKey(e),
45
+ Math.abs((e.tail.info.rank ?? 0) - (e.head.info.rank ?? 0)),
46
+ Math.abs((e.tail.info.coord?.x ?? 0) - (e.head.info.coord?.x ?? 0)),
47
+ e.seq,
48
+ ];
49
+ }
50
+
51
+ /**
52
+ * Compare two original edges in C `dot_splines_` routing order via their
53
+ * lexicographic `edgecmp` keys. @see lib/dotgen/dotsplines.c:edgecmp
54
+ */
55
+ export function edgeRouteCmp(a: Edge, b: Edge): number {
56
+ const ka = edgeRouteKey(a);
57
+ const kb = edgeRouteKey(b);
58
+ for (let i = 0; i < ka.length; i++) {
59
+ if (ka[i] !== kb[i]) return ka[i] - kb[i];
60
+ }
61
+ return 0;
62
+ }