@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,339 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Seven-phase radial layout algorithm for the twopi engine.
5
+ * Ports lib/twopigen/circle.c.
6
+ *
7
+ * @see lib/twopigen/circle.c
8
+ * @see lib/twopigen/circle.h
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 { TwopiAlgData } from '../../model/nodeInfo.js';
15
+ import { THETA_UNSET } from '../../model/nodeInfo.js';
16
+
17
+ /** Default ring separation in inches. @see lib/twopigen/circle.c:#define DEF_RANKSEP */
18
+ const DEF_RANKSEP = 1.0;
19
+
20
+ /** Minimum per-ring delta. @see lib/common/render.h:MIN_RANKSEP */
21
+ export const MIN_RANKSEP = 0.02;
22
+
23
+ /** Get the TwopiAlgData record for a node; throws if absent. */
24
+ function rdata(n: Node): TwopiAlgData {
25
+ const d = n.info.alg;
26
+ if (!d || d.kind !== 'twopi') throw new Error(`twopi: missing rdata on node ${n.name}`);
27
+ return d;
28
+ }
29
+
30
+ /**
31
+ * Resolve the neighbor of n across ep; null if ep is not incident.
32
+ * @see lib/twopigen/circle.c (edge traversal pattern)
33
+ */
34
+ function neighborOf(ep: Edge, n: Node): Node | null {
35
+ if (ep.tail === n) return ep.head;
36
+ if (ep.head === n) return ep.tail;
37
+ return null;
38
+ }
39
+
40
+ /**
41
+ * Edges incident to n in agfstedge/agnxtedge order: out-edges first,
42
+ * then in-edges. C's traversal order is load-bearing for the fan
43
+ * assignment in setChildPositions.
44
+ * @see lib/cgraph/edge.c:agfstedge
45
+ */
46
+ function incidentEdges(g: Graph, n: Node): Edge[] {
47
+ return [...n.outEdges(g), ...n.inEdges(g)];
48
+ }
49
+
50
+ /**
51
+ * Return true if n is a leaf: at most one distinct neighbor.
52
+ * @see lib/twopigen/circle.c:isLeaf
53
+ */
54
+ export function isLeaf(g: Graph, n: Node): boolean {
55
+ let neighp: Node | null = null;
56
+ for (const ep of incidentEdges(g, n)) {
57
+ const np = neighborOf(ep, n);
58
+ if (np === null || np === n) continue;
59
+ if (neighp === null) { neighp = np; }
60
+ else if (neighp !== np) { return false; }
61
+ }
62
+ return true;
63
+ }
64
+
65
+ /**
66
+ * Phase 1: initialize all rdata fields before BFS passes.
67
+ * @see lib/twopigen/circle.c:initLayout
68
+ */
69
+ export function initLayout(g: Graph): void {
70
+ const INF = g.nodes.size * g.nodes.size;
71
+ for (const n of g.nodes.values()) {
72
+ n.info.alg = {
73
+ kind: 'twopi',
74
+ nStepsToLeaf: isLeaf(g, n) ? 0 : INF,
75
+ subtreeSize: 0,
76
+ nChildren: 0,
77
+ nStepsToCenter: INF,
78
+ parent: null,
79
+ span: 0,
80
+ theta: THETA_UNSET,
81
+ };
82
+ }
83
+ }
84
+
85
+ /** Try to relax leaf-distance on one neighbor; recurse on improvement. */
86
+ function relaxLeafEdge(g: Graph, next: Node, from: Node, nsteps: number): void {
87
+ const nd2 = rdata(next);
88
+ if (nsteps < nd2.nStepsToLeaf) {
89
+ nd2.nStepsToLeaf = nsteps;
90
+ setNStepsToLeaf(g, next, from);
91
+ }
92
+ }
93
+
94
+ /**
95
+ * DFS to propagate leaf distance outward from n.
96
+ * @see lib/twopigen/circle.c:setNStepsToLeaf
97
+ */
98
+ export function setNStepsToLeaf(g: Graph, n: Node, prev: Node | null): void {
99
+ const nsteps = rdata(n).nStepsToLeaf + 1;
100
+ for (const ep of incidentEdges(g, n)) {
101
+ const next = neighborOf(ep, n);
102
+ if (next !== null && next !== prev) relaxLeafEdge(g, next, n, nsteps);
103
+ }
104
+ }
105
+
106
+ /** Try to relax BFS distance to `next` through `cur`. */
107
+ function processBfsEdge(cur: Node, next: Node, nsteps: number, queue: Node[]): void {
108
+ const nd2 = rdata(next);
109
+ if (nsteps < nd2.nStepsToCenter) {
110
+ nd2.nStepsToCenter = nsteps;
111
+ nd2.parent = cur;
112
+ rdata(cur).nChildren++;
113
+ queue.push(next);
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Phase 2: find center node (max nStepsToLeaf).
119
+ * @see lib/twopigen/circle.c:findCenterNode
120
+ */
121
+ export function findCenterNode(g: Graph): Node | null {
122
+ for (const n of g.nodes.values()) {
123
+ if (rdata(n).nStepsToLeaf === 0) setNStepsToLeaf(g, n, null);
124
+ }
125
+ let center: Node | null = null;
126
+ let maxSteps = 0;
127
+ for (const n of g.nodes.values()) {
128
+ const sl = rdata(n).nStepsToLeaf;
129
+ if (center === null || sl > maxSteps) { maxSteps = sl; center = n; }
130
+ }
131
+ return center;
132
+ }
133
+
134
+ /**
135
+ * BFS from n assigning SCENTER and SPARENT; skips weight=0 edges.
136
+ * @see lib/twopigen/circle.c:setNStepsToCenter
137
+ */
138
+ export function setNStepsToCenter(g: Graph, n: Node): void {
139
+ const queue: Node[] = [n];
140
+ let head = 0;
141
+ while (head < queue.length) {
142
+ const cur = queue[head++]!;
143
+ const nsteps = rdata(cur).nStepsToCenter + 1;
144
+ for (const ep of incidentEdges(g, cur)) {
145
+ if (ep.attrs.get('weight') === '0') continue;
146
+ const next = neighborOf(ep, cur);
147
+ if (next !== null) processBfsEdge(cur, next, nsteps, queue);
148
+ }
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Phase 3: BFS from center; returns max ring index or MAX_SAFE_INTEGER.
154
+ * @see lib/twopigen/circle.c:setParentNodes
155
+ */
156
+ export function setParentNodes(sg: Graph, center: Node): number {
157
+ const nd = rdata(center);
158
+ const unset = nd.nStepsToCenter;
159
+ nd.nStepsToCenter = 0;
160
+ nd.parent = null;
161
+ setNStepsToCenter(sg, center);
162
+ let maxn = 0;
163
+ for (const n of sg.nodes.values()) {
164
+ const sc = rdata(n).nStepsToCenter;
165
+ if (sc === unset) return Number.MAX_SAFE_INTEGER;
166
+ if (sc > maxn) maxn = sc;
167
+ }
168
+ return maxn;
169
+ }
170
+
171
+ /** Walk the parent chain from n, incrementing subtreeSize at each ancestor. */
172
+ function walkAncestorChain(n: Node): void {
173
+ let par = rdata(n).parent;
174
+ while (par !== null) {
175
+ rdata(par).subtreeSize++;
176
+ par = rdata(par).parent;
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Phase 4: count BFS-leaves in each subtree bottom-up.
182
+ * @see lib/twopigen/circle.c:setSubtreeSize
183
+ */
184
+ export function setSubtreeSize(g: Graph): void {
185
+ for (const n of g.nodes.values()) {
186
+ const nd = rdata(n);
187
+ if (nd.nChildren > 0) continue;
188
+ nd.subtreeSize++;
189
+ walkAncestorChain(n);
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Assign span to one child of n; recurse if it has children.
195
+ * @see lib/twopigen/circle.c:setChildSubtreeSpans (inner body)
196
+ */
197
+ function applySpanToChild(g: Graph, n: Node, next: Node, ratio: number, seen: Set<Node>): void {
198
+ const nd2 = rdata(next);
199
+ if (nd2.parent !== n || nd2.span !== 0 || seen.has(next)) return;
200
+ seen.add(next);
201
+ nd2.span = ratio * nd2.subtreeSize;
202
+ if (nd2.nChildren > 0) setChildSubtreeSpans(g, next);
203
+ }
204
+
205
+ /**
206
+ * Recursively partition a node's angular span among its children.
207
+ * @see lib/twopigen/circle.c:setChildSubtreeSpans
208
+ */
209
+ export function setChildSubtreeSpans(g: Graph, n: Node): void {
210
+ const nd = rdata(n);
211
+ const ratio = nd.span / nd.subtreeSize;
212
+ const seen = new Set<Node>();
213
+ for (const ep of incidentEdges(g, n)) {
214
+ const next = neighborOf(ep, n);
215
+ if (next !== null) applySpanToChild(g, n, next, ratio, seen);
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Phase 5: root gets 2π span; children get proportional shares.
221
+ * @see lib/twopigen/circle.c:setSubtreeSpans
222
+ */
223
+ export function setSubtreeSpans(sg: Graph, center: Node): void {
224
+ rdata(center).span = 2 * Math.PI;
225
+ setChildSubtreeSpans(sg, center);
226
+ }
227
+
228
+ /**
229
+ * Assign theta to one child and recurse; returns updated fan pointer.
230
+ * @see lib/twopigen/circle.c:setChildPositions (inner body)
231
+ */
232
+ function applyThetaToChild(sg: Graph, n: Node, next: Node, theta: number): number {
233
+ const nd2 = rdata(next);
234
+ if (nd2.parent !== n || nd2.theta !== THETA_UNSET) return theta;
235
+ nd2.theta = theta + nd2.span / 2.0;
236
+ theta += nd2.span;
237
+ if (nd2.nChildren > 0) setChildPositions(sg, next);
238
+ return theta;
239
+ }
240
+
241
+ /**
242
+ * Assign theta (angular midpoint) to each child of n in a fan.
243
+ * @see lib/twopigen/circle.c:setChildPositions
244
+ */
245
+ export function setChildPositions(sg: Graph, n: Node): void {
246
+ const nd = rdata(n);
247
+ let theta = nd.parent === null ? 0 : nd.theta - nd.span / 2;
248
+ for (const ep of incidentEdges(sg, n)) {
249
+ const next = neighborOf(ep, n);
250
+ if (next !== null) theta = applyThetaToChild(sg, n, next, theta);
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Phase 6: assign angular positions; root gets theta = 0.
256
+ * @see lib/twopigen/circle.c:setPositions
257
+ */
258
+ export function setPositions(sg: Graph, center: Node): void {
259
+ rdata(center).theta = 0;
260
+ setChildPositions(sg, center);
261
+ }
262
+
263
+ /**
264
+ * Parse colon-separated ranksep parts; returns last delta, next rk, running sum.
265
+ * @see lib/twopigen/circle.c:getRankseps (parse loop)
266
+ */
267
+ function parseRanksepParts(
268
+ parts: string[], ranks: number[], maxrank: number,
269
+ ): { delx: number; rk: number; xf: number } {
270
+ // C initializes delx = 0.0; DEF_RANKSEP applies ONLY when the ranksep attr
271
+ // is ABSENT. A present-but-unparseable value ("equally") leaves delx 0 and
272
+ // every ring collapses to radius 0 — a load-bearing quirk (graphs/b80).
273
+ // @see lib/twopigen/circle.c:getRankseps
274
+ let xf = 0; let delx = 0; let rk = 1;
275
+ for (const part of parts) {
276
+ if (rk > maxrank) break;
277
+ const d = parseFloat(part.trim());
278
+ if (!isFinite(d) || d <= 0) break;
279
+ delx = Math.max(d, MIN_RANKSEP);
280
+ xf += delx;
281
+ ranks[rk++] = xf;
282
+ }
283
+ return { delx, rk, xf };
284
+ }
285
+
286
+ /**
287
+ * Build cumulative radius array from ranksep attribute.
288
+ * @see lib/twopigen/circle.c:getRankseps
289
+ */
290
+ export function getRankseps(g: Graph, maxrank: number): number[] {
291
+ const ranks = new Array<number>(maxrank + 1).fill(0);
292
+ const raw = g.root.attrs.get('ranksep') ?? g.attrs.get('ranksep');
293
+ let delx = DEF_RANKSEP; let rk = 1; let xf = 0;
294
+ if (raw !== undefined && raw.length > 0) {
295
+ const r = parseRanksepParts(raw.split(':'), ranks, maxrank);
296
+ delx = r.delx; rk = r.rk; xf = r.xf;
297
+ }
298
+ for (let i = rk; i <= maxrank; i++) { xf += delx; ranks[i] = xf; }
299
+ return ranks;
300
+ }
301
+
302
+ /**
303
+ * Phase 7: polar → Cartesian; writes to n.info.pos.
304
+ * @see lib/twopigen/circle.c:setAbsolutePos
305
+ */
306
+ export function setAbsolutePos(g: Graph, maxrank: number): void {
307
+ const ranksep = getRankseps(g, maxrank);
308
+ for (const n of g.nodes.values()) {
309
+ const nd = rdata(n);
310
+ const hyp = ranksep[nd.nStepsToCenter] ?? 0;
311
+ if (!n.info.pos || n.info.pos.length < 2) n.info.pos = [0, 0];
312
+ n.info.pos[0] = hyp * Math.cos(nd.theta);
313
+ n.info.pos[1] = hyp * Math.sin(nd.theta);
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Run the full seven-phase radial layout on a connected subgraph.
319
+ * Returns the center node used; null only if the graph is empty.
320
+ * @see lib/twopigen/circle.c:circleLayout
321
+ */
322
+ export function circleLayout(sg: Graph, center: Node | null): Node | null {
323
+ if (sg.nodes.size === 1) {
324
+ const n = sg.nodes.values().next().value as Node;
325
+ if (!n.info.pos || n.info.pos.length < 2) n.info.pos = [0, 0];
326
+ n.info.pos[0] = 0; n.info.pos[1] = 0;
327
+ return center;
328
+ }
329
+ initLayout(sg);
330
+ if (center === null) center = findCenterNode(sg);
331
+ if (center === null) return null;
332
+ const maxN = setParentNodes(sg, center);
333
+ if (maxN === Number.MAX_SAFE_INTEGER) return center;
334
+ setSubtreeSize(sg);
335
+ setSubtreeSpans(sg, center);
336
+ setPositions(sg, center);
337
+ setAbsolutePos(sg, maxN);
338
+ return center;
339
+ }
@@ -0,0 +1,78 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * twopi radial layout engine — public entry point.
5
+ *
6
+ * @see lib/twopigen/twopiinit.c:twopi_layout
7
+ */
8
+
9
+ import type { Graph } from '../../model/graph.js';
10
+ import type { LayoutEngine } from '../../gvc/context.js';
11
+ import { twopiInitGraph, twopiCleanup } from './init.js';
12
+ import { ccomps, normalizeGraphBB } from '../pack/index.js';
13
+ import { layoutSingle, layoutMulti, buildPackInfo } from './pipeline.js';
14
+ import { commonInitNodeEdge, layoutMeasurer } from '../../common/nodeinit.js';
15
+ import { initEdgeLabels } from '../../common/edge-label-init.js';
16
+ import { placeGraphLabel } from '../dot/position-bbox.js';
17
+ import { graphInit } from '../../common/graph-init.js';
18
+ import { gvPostprocess } from '../../common/postproc.js';
19
+
20
+ export {
21
+ twopiInitGraph,
22
+ twopiCleanup,
23
+ findRootNode,
24
+ adjustNodes,
25
+ finaliseCoords,
26
+ } from './init.js';
27
+ export { circleLayout, isLeaf, initLayout } from './circle.js';
28
+ export { THETA_UNSET } from '../../model/nodeInfo.js';
29
+
30
+ /**
31
+ * Full twopi layout pipeline for a graph.
32
+ *
33
+ * @see lib/twopigen/twopiinit.c:twopi_layout
34
+ */
35
+ export function twopiLayout(g: Graph): void {
36
+ if (g.nodes.size === 0) return;
37
+ // C: gvLayoutJobs runs graph_init(g, LAYOUT_USES_RANKDIR) before twopi_layout;
38
+ // twopi does not set the flag → useRankdir=false. graph_init also creates the
39
+ // ROOT graph label, which gvPostprocess below sizes the canvas for and places.
40
+ // @see lib/common/input.c:600, lib/gvc/gvlayout.c:81
41
+ graphInit(g, false);
42
+ commonInitNodeEdge(g);
43
+ // C twopi_init_edge -> common_init_edge creates the edge label; addXLabels
44
+ // (in gvPostprocess below) places it at the edge midpoint. @see twopiinit.c:28
45
+ const measurer = layoutMeasurer(g);
46
+ if (measurer !== undefined) {
47
+ for (const e of g.edges) initEdgeLabels(e, g, measurer);
48
+ }
49
+ twopiInitGraph(g);
50
+ const rootAttr = g.attrs.get('root');
51
+ const setRoot = rootAttr !== undefined;
52
+ const globalRoot = setRoot && rootAttr !== ''
53
+ ? (g.nodes.get(rootAttr!) ?? null)
54
+ : null;
55
+ const comps = ccomps(g, '_twopi');
56
+ if (comps.length === 1) {
57
+ layoutSingle(g, comps, globalRoot, setRoot);
58
+ } else {
59
+ layoutMulti(g, comps, globalRoot, buildPackInfo(g));
60
+ }
61
+ normalizeGraphBB(g);
62
+ // C: dotneato_postprocess(g) — cluster labels, edge labels (addXLabels), root
63
+ // graph label space + translate. @see lib/twopigen/twopiinit.c:152
64
+ placeGraphLabel(g);
65
+ gvPostprocess(g);
66
+ }
67
+
68
+ /**
69
+ * LayoutEngine descriptor for registration with GvcContext.
70
+ *
71
+ * @see lib/gvc/gvcext.h:gvlayout_engine_s
72
+ * @see lib/twopigen/twopiinit.c (plugin wiring)
73
+ */
74
+ export const TWOPI_LAYOUT_ENGINE: LayoutEngine = {
75
+ type: 'twopi',
76
+ layout: twopiLayout,
77
+ cleanup: twopiCleanup,
78
+ };
@@ -0,0 +1,174 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * twopi engine initialisation: per-node/edge init, graph init, cleanup.
5
+ * Ports lib/twopigen/twopiinit.c: twopi_init_node_edge, twopi_init_graph,
6
+ * findRootNode, twopi_cleanup.
7
+ *
8
+ * @see lib/twopigen/twopiinit.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 { TwopiAlgData } from '../../model/nodeInfo.js';
15
+ import { THETA_UNSET } from '../../model/nodeInfo.js';
16
+ import { setEdgeTypeFromAttr } from '../dot/index.js';
17
+ import { EDGETYPE_LINE } from '../neato/splines.js';
18
+ import { adjustNodesFull } from '../neato/fdp-adjust.js';
19
+
20
+ /** Points per inch, used to convert pos (inches) → coord (points). */
21
+ const POINTS_PER_INCH = 72;
22
+
23
+ /**
24
+ * Build a zeroed TwopiAlgData record for one node.
25
+ * Mirrors gv_calloc(n_nodes, sizeof(rdata)) — all fields at zero/INF defaults.
26
+ *
27
+ * @see lib/twopigen/twopiinit.c:twopi_init_node_edge (gv_calloc call)
28
+ */
29
+ function makeRdata(INF: number): TwopiAlgData {
30
+ return {
31
+ kind: 'twopi',
32
+ nStepsToLeaf: INF,
33
+ subtreeSize: 0,
34
+ nChildren: 0,
35
+ nStepsToCenter: INF,
36
+ parent: null,
37
+ span: 0,
38
+ theta: THETA_UNSET,
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Initialize a node for twopi layout: ensure pos[0..1] exist, set defaults.
44
+ * Mirrors neato_init_node for the twopi engine.
45
+ *
46
+ * @see lib/twopigen/twopiinit.c:twopi_init_node_edge (neato_init_node call)
47
+ */
48
+ export function twopiInitNode(n: Node): void {
49
+ if (!n.info.pos || n.info.pos.length < 2) n.info.pos = [0, 0];
50
+ if (!n.info.width) n.info.width = 0.75;
51
+ if (!n.info.height) n.info.height = 0.5;
52
+ }
53
+
54
+ /**
55
+ * Initialize an edge for twopi layout: set ED_factor from weight attribute.
56
+ * Default weight 1.0; minimum 0.0.
57
+ *
58
+ * @see lib/twopigen/twopiinit.c:twopi_init_edge
59
+ */
60
+ export function twopiInitEdge(e: Edge): void {
61
+ const wt = e.attrs.get('weight');
62
+ const w = wt !== undefined ? Math.max(0.0, parseFloat(wt)) : 1.0;
63
+ e.info.factor = isFinite(w) ? w : 1.0;
64
+ }
65
+
66
+ /**
67
+ * Initialize all nodes and edges in g for twopi layout.
68
+ *
69
+ * Mirrors the C twopi_init_node_edge: allocates a contiguous rdata block
70
+ * (one TwopiAlgData per node), populates GD_neato_nlist, assigns ND_alg,
71
+ * then initialises every out-edge.
72
+ *
73
+ * The contiguous-allocation semantics are preserved: all TwopiAlgData objects
74
+ * are created here in one pass (matching gv_calloc(n_nodes, sizeof(rdata))),
75
+ * so twopiCleanup can mirror the C free(ND_alg(first_node)) by nulling only
76
+ * the first node's alg field.
77
+ *
78
+ * @see lib/twopigen/twopiinit.c:twopi_init_node_edge
79
+ */
80
+ export function twopiInitNodeEdge(g: Graph): void {
81
+ const INF = g.nodes.size * g.nodes.size;
82
+ const nlist: Node[] = [];
83
+
84
+ // Allocate the contiguous rdata block and wire into nodes + nlist.
85
+ for (const n of g.nodes.values()) {
86
+ twopiInitNode(n);
87
+ n.info.alg = makeRdata(INF);
88
+ nlist.push(n);
89
+ }
90
+ g.info.neato_nlist = nlist;
91
+
92
+ // Initialise all edges.
93
+ for (const e of g.edges) twopiInitEdge(e);
94
+ }
95
+
96
+ /**
97
+ * Full graph initialisation: set edge type to line, force 2D, init nodes/edges.
98
+ *
99
+ * @see lib/twopigen/twopiinit.c:twopi_init_graph
100
+ */
101
+ export function twopiInitGraph(g: Graph): void {
102
+ // C: setEdgeType(g, EDGETYPE_LINE) — the C setEdgeType FUNCTION reads the
103
+ // graph's `splines` attr first; EDGETYPE_LINE is only the fallback default.
104
+ // @see lib/common/utils.c:1423 setEdgeType
105
+ setEdgeTypeFromAttr(g, EDGETYPE_LINE);
106
+ g.info.ndim = 2;
107
+ twopiInitNodeEdge(g);
108
+ }
109
+
110
+ /**
111
+ * Scan sg for the first node whose `root` attribute is truthy.
112
+ * Returns null if no such node exists.
113
+ *
114
+ * @see lib/twopigen/twopiinit.c:findRootNode
115
+ */
116
+ export function findRootNode(sg: Graph): Node | null {
117
+ for (const n of sg.nodes.values()) {
118
+ const v = n.attrs.get('root');
119
+ if (v === '1' || v === 'true' || v === 'yes') return n;
120
+ }
121
+ return null;
122
+ }
123
+
124
+ /**
125
+ * Convert pos (inches) to coord (points) for every node in g.
126
+ * Matches the neatoSetAspect / dotneato_postprocess coordinate finalisation.
127
+ *
128
+ * @see lib/twopigen/twopiinit.c:twopi_layout (post-layout coord write)
129
+ * @see lib/neatogen/neatoinit.c:neatoSetAspect
130
+ */
131
+ export function finaliseCoords(g: Graph): void {
132
+ for (const n of g.nodes.values()) {
133
+ const pos = n.info.pos;
134
+ if (!pos) continue;
135
+ n.info.coord = {
136
+ x: (pos[0] ?? 0) * POINTS_PER_INCH,
137
+ y: (pos[1] ?? 0) * POINTS_PER_INCH,
138
+ };
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Overlap adjustment: scale-family modes via scAdjust, PRISM (the GTS
144
+ * build's resolution of overlap=false / unrecognized values) via
145
+ * fdpAdjust; remaining modes (voronoi, vpsc, ortho*) are unported no-ops.
146
+ *
147
+ * @see lib/neatogen/adjust.c:adjustNodes
148
+ * @see lib/neatogen/constraint.c:scAdjust
149
+ */
150
+ export function adjustNodes(g: Graph): void {
151
+ adjustNodesFull(g);
152
+ }
153
+
154
+ /**
155
+ * Release twopi-specific per-node state after layout.
156
+ *
157
+ * Mirrors the C twopi_layout cleanup: free(ND_alg(first_node)) / ND_alg = NULL
158
+ * on the FIRST node only (the contiguous block was allocated as a single unit).
159
+ * Other nodes' ND_alg pointers were interior offsets into that block so they
160
+ * do not need to be freed separately.
161
+ *
162
+ * ORDERING: must be called BEFORE splineEdges because edge routing may
163
+ * store its own data in n.info.alg.
164
+ *
165
+ * @see lib/twopigen/twopiinit.c:twopi_layout (free(ND_alg) placement note)
166
+ * @see lib/twopigen/twopiinit.c:twopi_cleanup
167
+ */
168
+ export function twopiCleanup(g: Graph): void {
169
+ const first = g.nodes.values().next().value as Node | undefined;
170
+ if (first !== undefined && first.info.alg?.kind === 'twopi') {
171
+ first.info.alg = undefined;
172
+ }
173
+ g.info.neato_nlist = undefined;
174
+ }
@@ -0,0 +1,98 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Internal pipeline helpers for the twopi layout engine.
5
+ * Isolated from index.ts so lizard can parse each function boundary cleanly.
6
+ *
7
+ * @see lib/twopigen/twopiinit.c:twopi_layout
8
+ */
9
+
10
+ import type { Graph } from '../../model/graph.js';
11
+ import type { Node } from '../../model/node.js';
12
+ import type { PackInfo } from '../pack/index.js';
13
+ import {
14
+ twopiCleanup,
15
+ findRootNode,
16
+ adjustNodes,
17
+ finaliseCoords,
18
+ } from './init.js';
19
+ import { circleLayout } from './circle.js';
20
+ import { packSubgraphs, getPackInfo, PackMode } from '../pack/index.js';
21
+ import { splineEdgesShifted } from '../neato/splines.js';
22
+
23
+ /** Margin constant matching C CL_OFFSET. @see lib/pack/pack.h:CL_OFFSET */
24
+ export const CL_OFFSET = 8;
25
+
26
+ /** circleLayout return type; Node | null. */
27
+ export type Center = Node | null;
28
+
29
+ /** Add only edges whose both endpoints belong to sg. */
30
+ export function induceEdges(g: Graph, sg: Graph): void {
31
+ sg.edges = g.edges.filter(
32
+ e => sg.nodes.has(e.tail.name) && sg.nodes.has(e.head.name),
33
+ );
34
+ }
35
+
36
+ /** Prefer globalRoot if it is in sg; otherwise scan for root attribute. */
37
+ export function resolveCenter(sg: Graph, globalRoot: Center): Center {
38
+ if (globalRoot !== null && sg.nodes.has(globalRoot.name)) return globalRoot;
39
+ return findRootNode(sg);
40
+ }
41
+
42
+ /** Lay out one component; return the chosen center node. */
43
+ export function layoutComponent(g: Graph, sg: Graph, globalRoot: Center): Center {
44
+ induceEdges(g, sg);
45
+ const lctr = resolveCenter(sg, globalRoot);
46
+ const center = circleLayout(sg, lctr);
47
+ adjustNodes(sg);
48
+ return center;
49
+ }
50
+
51
+ /**
52
+ * Build a PackInfo for multi-component packing.
53
+ *
54
+ * @see lib/twopigen/twopiinit.c:twopi_layout (getPackInfo call with l_node)
55
+ */
56
+ export function buildPackInfo(g: Graph): PackInfo {
57
+ const pinfo: PackInfo = {
58
+ aspect: 1, sz: 0, margin: CL_OFFSET, doSplines: false,
59
+ mode: PackMode.Node, fixed: null, vals: null, flags: 0,
60
+ };
61
+ // C: getPackInfo(g, l_node, CL_OFFSET) — polyomino node-mode packing.
62
+ getPackInfo(g, PackMode.Node, CL_OFFSET, pinfo);
63
+ pinfo.doSplines = false;
64
+ return pinfo;
65
+ }
66
+
67
+ /** Single-component pipeline: layout → cleanup → splines → coords. */
68
+ export function layoutSingle(g: Graph, comps: Graph[], globalRoot: Center, setRoot: boolean): void {
69
+ const sg = comps[0]!;
70
+ const center = layoutComponent(g, sg, globalRoot);
71
+ if (setRoot && globalRoot === null && center !== null) {
72
+ g.attrs.set('root', center.name);
73
+ }
74
+ twopiCleanup(g); // ORDERING: before spline routing
75
+ // C: spline_edges(g) — shifts pos to the origin, syncs coord, routes.
76
+ splineEdgesShifted(g);
77
+ finaliseCoords(g);
78
+ }
79
+
80
+ /**
81
+ * Multi-component pipeline: per-component layout + coords, then cleanup,
82
+ * pack, re-sync coords, splines.
83
+ *
84
+ * finaliseCoords per component runs BEFORE packSubgraphs so that
85
+ * computeSubgraphBB reads real point-coords for bounding-box calculation.
86
+ * After packing shifts pos (inches), finaliseCoords re-syncs coord.
87
+ */
88
+ export function layoutMulti(g: Graph, comps: Graph[], globalRoot: Center, pinfo: PackInfo): void {
89
+ for (const sg of comps) {
90
+ layoutComponent(g, sg, globalRoot);
91
+ finaliseCoords(sg);
92
+ }
93
+ twopiCleanup(g); // ORDERING: before spline routing
94
+ packSubgraphs(comps.length, comps, g, pinfo);
95
+ // C: spline_edges(g) — shifts pos to the origin, syncs coord, routes.
96
+ splineEdgesShifted(g);
97
+ finaliseCoords(g);
98
+ }