@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,272 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Derived-graph construction: clusters collapse into single nodes, and
5
+ * an edge joins two derived nodes when any real edge joins their
6
+ * underlying node sets. Boundary ports transform into port nodes.
7
+ *
8
+ * The C derived graph is a strict digraph whose edge direction is
9
+ * canonicalized by node POINTER comparison (`hd > tl`, layout.c:466);
10
+ * node ids are creation-ordered here, so id comparison models it.
11
+ * agedge with a NULL name dedups on strict digraphs (cgraph
12
+ * edge.c:262), merging parallel real edges into one derived edge.
13
+ *
14
+ * Spec read at the 15.0.0 tag.
15
+ *
16
+ * @see lib/fdpgen/layout.c:deriveGraph (15.0.0)
17
+ */
18
+
19
+ import { Graph } from '../../model/graph.js';
20
+ import { Node } from '../../model/node.js';
21
+ import { Edge } from '../../model/edge.js';
22
+ import type { Box } from '../../model/geom.js';
23
+ import { doGraphLabel } from '../dot/graph-label.js';
24
+ import { layoutMeasurer } from '../../common/nodeinit.js';
25
+ import {
26
+ type Bport,
27
+ gdata,
28
+ dndata,
29
+ mkDndata,
30
+ getDnode,
31
+ setDnode,
32
+ getParent,
33
+ setParent,
34
+ fdpData,
35
+ isNewEdge,
36
+ addEdge,
37
+ aggetGraph,
38
+ P_PIN,
39
+ P_FIX,
40
+ P_SET,
41
+ } from './fdp-model.js';
42
+
43
+ /** Per-fdp-run bookkeeping. @see lib/fdpgen/layout.c:layout_info */
44
+ export interface LayoutInfo {
45
+ /** Logical root; the graph passed to fdp_layout. */
46
+ rootg: Graph;
47
+ /** Whether a "coords" graph attribute exists (G_coord symbol). */
48
+ hasCoords: boolean;
49
+ gid: number;
50
+ /** Pack parameters resolved by init_info. */
51
+ pack: import('../pack/types.js').PackInfo;
52
+ }
53
+
54
+ // ---------------------------------------------------------------------------
55
+ // Derived-node construction
56
+ // ---------------------------------------------------------------------------
57
+
58
+ /**
59
+ * Construct a node in a derived graph, allocating its dndata.
60
+ * @see lib/fdpgen/layout.c:mkDeriveNode
61
+ */
62
+ export function mkDeriveNode(dg: Graph, name: string): Node {
63
+ const dn = new Node(dg.nodes.size, name, dg);
64
+ dn.info.alg = mkDndata();
65
+ dn.info.pos = [0, 0];
66
+ dg.nodes.set(name, dn);
67
+ return dn;
68
+ }
69
+
70
+ /**
71
+ * Copy one graph attribute from g (resolved up its parent chain) onto
72
+ * dg. HTML-string attribute values are not distinguished (AD-2).
73
+ * @see lib/fdpgen/layout.c:copyAttr
74
+ */
75
+ function copyAttr(g: Graph, dg: Graph, attr: string): void {
76
+ const v = aggetGraph(g, attr);
77
+ if (v !== undefined) dg.attrs.set(attr, v);
78
+ }
79
+
80
+ /**
81
+ * Use a cluster's "coords" attribute, if any, for the initial position
82
+ * of its derived node. PSinputscale (inputscale attr) is not ported —
83
+ * no supported input sets it.
84
+ * @see lib/fdpgen/layout.c:chkPos
85
+ */
86
+ function chkPos(g: Graph, n: Node, infop: LayoutInfo, bbp: Box): void {
87
+ const p = g.attrs.get('coords');
88
+ if (p === undefined || p === '') return;
89
+ if (g !== infop.rootg) {
90
+ const pp = g.parent !== null ? g.parent.attrs.get('coords') : undefined;
91
+ if (p === pp) return;
92
+ }
93
+ const parsed = scanCoords(p);
94
+ if (parsed === null) return; // C warns "expected four doubles"
95
+ bbp.ll.x = parsed.box.ll.x;
96
+ bbp.ll.y = parsed.box.ll.y;
97
+ bbp.ur.x = parsed.box.ur.x;
98
+ bbp.ur.y = parsed.box.ur.y;
99
+ dndata(n).pinned = parsed.pinned;
100
+ }
101
+
102
+ /** sscanf(p, "%lf,%lf,%lf,%lf%c") for chkPos. */
103
+ function scanCoords(p: string): { box: Box; pinned: number } | null {
104
+ const num = String.raw`(-?[\d.]+)`;
105
+ const m = new RegExp(
106
+ `^${num},${num},${num},${num}\\s*([!?])?`,
107
+ ).exec(p);
108
+ if (m === null) return null;
109
+ const box: Box = {
110
+ ll: { x: parseFloat(m[1]!), y: parseFloat(m[2]!) },
111
+ ur: { x: parseFloat(m[3]!), y: parseFloat(m[4]!) },
112
+ };
113
+ const c = m[5];
114
+ const pinned = c === '!' ? P_PIN : c === '?' ? P_FIX : P_SET;
115
+ return { box, pinned };
116
+ }
117
+
118
+ /** Derived nodes from clusters. @see layout.c:deriveGraph (cluster loop) */
119
+ function deriveClusterNodes(g: Graph, dg: Graph, infop: LayoutInfo): void {
120
+ const nClusters = g.info.n_cluster ?? 0;
121
+ for (let i = 0; i < nClusters; i++) {
122
+ const subg = g.info.clust![i]!;
123
+ const fixBB: Box = {
124
+ ll: { x: Number.MAX_VALUE, y: Number.MAX_VALUE },
125
+ ur: { x: -Number.MAX_VALUE, y: -Number.MAX_VALUE },
126
+ };
127
+ doGraphLabel(subg, layoutMeasurer(infop.rootg));
128
+ const dn = mkDeriveNode(dg, subg.name);
129
+ dndata(dn).clust = subg;
130
+ if (infop.hasCoords) chkPos(subg, dn, infop, fixBB);
131
+ for (const n of subg.nodes.values()) {
132
+ setDnode(n, dn);
133
+ }
134
+ if (dndata(dn).pinned) {
135
+ dn.info.pos![0] = (fixBB.ll.x + fixBB.ur.x) / 2;
136
+ dn.info.pos![1] = (fixBB.ll.y + fixBB.ur.y) / 2;
137
+ }
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Derived nodes from the remaining (non-cluster) nodes.
143
+ * @returns false on the two-non-comparable-clusters error
144
+ * @see layout.c:deriveGraph (remaining-nodes loop)
145
+ */
146
+ function deriveRealNodes(g: Graph, dg: Graph): boolean {
147
+ for (const n of g.nodes.values()) {
148
+ if (getDnode(n) !== null) continue;
149
+ const par = getParent(n);
150
+ if (par !== null && par !== gdata(g).parent) {
151
+ // C: agerrorf "node is contained in two non-comparable clusters"
152
+ return false;
153
+ }
154
+ setParent(n, g);
155
+ if (n.info.clustnode) continue;
156
+ setDnode(n, mkRealDnode(dg, n));
157
+ }
158
+ return true;
159
+ }
160
+
161
+ /** Derived image of one real node, sizes copied. @see layout.c:438-453 */
162
+ function mkRealDnode(dg: Graph, n: Node): Node {
163
+ const dn = mkDeriveNode(dg, n.name);
164
+ dn.info.width = n.info.width;
165
+ dn.info.height = n.info.height;
166
+ dn.info.lw = n.info.lw;
167
+ dn.info.rw = n.info.rw;
168
+ dn.info.ht = n.info.ht;
169
+ dn.info.shape = n.info.shape;
170
+ dn.info.shape_info = n.info.shape_info;
171
+ if (fdpData(n).pinned) {
172
+ dn.info.pos![0] = n.info.pos![0]!;
173
+ dn.info.pos![1] = n.info.pos![1]!;
174
+ dndata(dn).pinned = fdpData(n).pinned;
175
+ }
176
+ dndata(dn).dn = n;
177
+ return dn;
178
+ }
179
+
180
+ /** Find-or-create the canonical derived edge for (tl, hd). */
181
+ function deriveEdge(dg: Graph, byPair: Map<string, Edge>, tl: Node, hd: Node): Edge {
182
+ // C: if (hd > tl) agedge(dg, tl, hd) else agedge(dg, hd, tl)
183
+ const [t, h] = hd.id > tl.id ? [tl, hd] : [hd, tl];
184
+ const key = `${t.id}:${h.id}`;
185
+ let de = byPair.get(key);
186
+ if (de === undefined) {
187
+ de = new Edge(t, h, '');
188
+ de.info.count = 0;
189
+ byPair.set(key, de);
190
+ dg.edges.push(de);
191
+ }
192
+ return de;
193
+ }
194
+
195
+ /** Derived edges. @see layout.c:deriveGraph (edge loop) */
196
+ function deriveEdges(g: Graph, dg: Graph, byPair: Map<string, Edge>): void {
197
+ for (const n of g.nodes.values()) {
198
+ const tl = getDnode(n)!;
199
+ for (const e of n.outEdges(g)) {
200
+ const hd = getDnode(e.head)!;
201
+ if (hd === tl) continue;
202
+ const de = deriveEdge(dg, byPair, tl, hd);
203
+ de.info.dist = e.info.dist;
204
+ de.info.factor = e.info.factor;
205
+ dndata(hd).wdeg++;
206
+ dndata(tl).wdeg++;
207
+ if (isNewEdge(de)) {
208
+ dndata(hd).deg++;
209
+ dndata(tl).deg++;
210
+ }
211
+ addEdge(de, e);
212
+ }
213
+ }
214
+ }
215
+
216
+ /** Transform g's ports into dg port nodes. @see layout.c:deriveGraph (ports) */
217
+ function derivePorts(g: Graph, dg: Graph, byPair: Map<string, Edge>): void {
218
+ const pp = gdata(g).ports;
219
+ if (pp === null) return;
220
+ const pq: Bport[] = [];
221
+ for (const port of pp) {
222
+ const m = getDnode(port.n);
223
+ /* Create port in derived graph only if it hooks to an internal node */
224
+ if (m === null) continue;
225
+ pq.push(derivePort(g, dg, byPair, port, m));
226
+ }
227
+ gdata(dg).ports = pq;
228
+ gdata(dg).nports = pq.length;
229
+ }
230
+
231
+ /** One derived port node + its edge. @see layout.c:494-517 */
232
+ function derivePort(
233
+ g: Graph, dg: Graph, byPair: Map<string, Edge>, port: Bport, m: Node,
234
+ ): Bport {
235
+ // C portName: _port_<graph>_(<tid>)_(<hid>)_<seq>
236
+ const name =
237
+ `_port_${g.name}_(${port.e.tail.id})_(${port.e.head.id})_${port.e.seq}`;
238
+ const dn = mkDeriveNode(dg, name);
239
+ const de = deriveEdge(dg, byPair, m, dn);
240
+ de.info.dist = port.e.info.dist;
241
+ de.info.factor = port.e.info.factor;
242
+ addEdge(de, port.e);
243
+ dndata(dn).wdeg++;
244
+ dndata(m).wdeg++;
245
+ dndata(dn).deg++; /* ports are unique, so this is the only touch */
246
+ dndata(m).deg++;
247
+ return { n: dn, alpha: port.alpha, e: de };
248
+ }
249
+
250
+ /**
251
+ * Create the derived graph of g by collapsing clusters into nodes.
252
+ * @returns null on the non-comparable-clusters input error
253
+ * @see lib/fdpgen/layout.c:deriveGraph
254
+ */
255
+ export function deriveGraph(g: Graph, infop: LayoutInfo): Graph | null {
256
+ const dg = new Graph('derived', 'strict-directed');
257
+ dg.parent = null;
258
+ gdata(dg);
259
+ infop.gid++;
260
+
261
+ copyAttr(g, dg, 'overlap');
262
+ copyAttr(g, dg, 'sep');
263
+ copyAttr(g, dg, 'K');
264
+
265
+ deriveClusterNodes(g, dg, infop);
266
+ if (!deriveRealNodes(g, dg)) return null;
267
+ const byPair = new Map<string, Edge>();
268
+ deriveEdges(g, dg, byPair);
269
+ derivePorts(g, dg, byPair);
270
+
271
+ return dg;
272
+ }
@@ -0,0 +1,238 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * fdp engine data model — gdata, dndata, bport_t, xparams, and the
5
+ * accessor macros of the C private interface.
6
+ *
7
+ * Spec read at the 15.0.0 tag (post-tag fdpgen commits add an Mlimit
8
+ * branch and float reorderings the golden refs do not have).
9
+ *
10
+ * @see lib/fdpgen/fdp.h (15.0.0)
11
+ * @see lib/fdpgen/xlayout.h (15.0.0)
12
+ */
13
+
14
+ import type { Graph } from '../../model/graph.js';
15
+ import type { Node } from '../../model/node.js';
16
+ import type { Edge } from '../../model/edge.js';
17
+ import type { Box } from '../../model/geom.js';
18
+ import type { FdpAlgData, FdpDndata } from '../../model/nodeInfo.js';
19
+
20
+ /** Layout dimension. @see lib/fdpgen/fdp.h:NDIM */
21
+ export const NDIM = 2;
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // ND_pinned states — @see lib/common/const.h:247-249
25
+ // ---------------------------------------------------------------------------
26
+
27
+ /** Position supplied by user. @see lib/common/const.h:P_SET */
28
+ export const P_SET = 1;
29
+ /** Position fixed during topological layout. @see lib/common/const.h:P_FIX */
30
+ export const P_FIX = 2;
31
+ /** Position fixed. @see lib/common/const.h:P_PIN */
32
+ export const P_PIN = 3;
33
+
34
+ // ---------------------------------------------------------------------------
35
+ // bport_t — boundary port
36
+ // ---------------------------------------------------------------------------
37
+
38
+ /**
39
+ * Boundary port: a real edge crossing the cluster boundary, the inside
40
+ * endpoint, and its angle on the boundary ellipse. C arrays are
41
+ * 0-terminated; TS uses plain arrays.
42
+ *
43
+ * @see lib/fdpgen/fdp.h:bport_t
44
+ */
45
+ export interface Bport {
46
+ e: Edge;
47
+ n: Node;
48
+ alpha: number;
49
+ }
50
+
51
+ // ---------------------------------------------------------------------------
52
+ // xparams — parameters handed from tlayout to xlayout
53
+ // ---------------------------------------------------------------------------
54
+
55
+ /** @see lib/fdpgen/xlayout.h:xparams */
56
+ export interface XParams {
57
+ numIters: number;
58
+ T0: number;
59
+ K: number;
60
+ C: number;
61
+ loopcnt: number;
62
+ }
63
+
64
+ // ---------------------------------------------------------------------------
65
+ // gdata — attached to the root graph, cluster graphs, and derived graphs
66
+ // ---------------------------------------------------------------------------
67
+
68
+ /** @see lib/fdpgen/fdp.h:gdata */
69
+ export interface Gdata {
70
+ /** Boundary ports. @see lib/fdpgen/fdp.h:PORTS */
71
+ ports: Bport[] | null;
72
+ /** Number of ports. @see lib/fdpgen/fdp.h:NPORTS */
73
+ nports: number;
74
+ /** Bounding box of graph in INCHES. @see lib/fdpgen/fdp.h:BB */
75
+ bb: Box;
76
+ flags: number;
77
+ /** Depth in graph hierarchy. @see lib/fdpgen/fdp.h:LEVEL */
78
+ level: number;
79
+ /** Smallest containing cluster. @see lib/fdpgen/fdp.h:GPARENT */
80
+ parent: Graph | null;
81
+ }
82
+
83
+ /** Allocate a zeroed gdata record (gv_alloc equivalent). */
84
+ export function mkGdata(): Gdata {
85
+ return {
86
+ ports: null,
87
+ nports: 0,
88
+ bb: { ll: { x: 0, y: 0 }, ur: { x: 0, y: 0 } },
89
+ flags: 0,
90
+ level: 0,
91
+ parent: null,
92
+ };
93
+ }
94
+
95
+ /** GDATA(g) — gdata bound to g.info.alg; binds one if missing. */
96
+ export function gdata(g: Graph): Gdata {
97
+ let d = g.info.alg as Gdata | undefined;
98
+ if (d === undefined) {
99
+ d = mkGdata();
100
+ g.info.alg = d;
101
+ }
102
+ return d;
103
+ }
104
+
105
+ // ---------------------------------------------------------------------------
106
+ // dndata — attached to nodes in derived graphs (ND_alg)
107
+ // ---------------------------------------------------------------------------
108
+
109
+ /** Allocate a zeroed dndata record. @see lib/fdpgen/layout.c:mkDeriveNode */
110
+ export function mkDndata(): FdpDndata {
111
+ return {
112
+ kind: 'fdp-dndata',
113
+ deg: 0,
114
+ wdeg: 0,
115
+ dn: null,
116
+ clust: null,
117
+ disp: [0, 0],
118
+ pinned: 0,
119
+ };
120
+ }
121
+
122
+ /** DNDATA(n) — dndata of a derived node. */
123
+ export function dndata(n: Node): FdpDndata {
124
+ return n.info.alg as unknown as FdpDndata;
125
+ }
126
+
127
+ /** DISP(n) @see lib/fdpgen/fdp.h:DISP */
128
+ export function disp(n: Node): [number, number] {
129
+ return dndata(n).disp;
130
+ }
131
+
132
+ /** ANODE(n) @see lib/fdpgen/fdp.h:ANODE */
133
+ export function anode(n: Node): Node | null {
134
+ return dndata(n).dn;
135
+ }
136
+
137
+ /** IS_PORT(n) @see lib/fdpgen/fdp.h:IS_PORT */
138
+ export function isPort(n: Node): boolean {
139
+ const d = dndata(n);
140
+ return d.dn === null && d.clust === null;
141
+ }
142
+
143
+ // ---------------------------------------------------------------------------
144
+ // Real-node fdp fields — DNODE (ND_next) and PARENT (ND_clust)
145
+ // ---------------------------------------------------------------------------
146
+
147
+ /** Bind-or-get the fdp alg record on a REAL node. */
148
+ export function fdpData(n: Node): FdpAlgData {
149
+ let d = n.info.alg as FdpAlgData | undefined;
150
+ if (d === undefined || d.kind !== 'fdp') {
151
+ d = { kind: 'fdp', dnode: null, parent: null, pinned: 0 };
152
+ n.info.alg = d;
153
+ }
154
+ return d;
155
+ }
156
+
157
+ /** DNODE(n) @see lib/fdpgen/fdp.h:DNODE */
158
+ export function getDnode(n: Node): Node | null {
159
+ const d = n.info.alg as FdpAlgData | undefined;
160
+ return d !== undefined && d.kind === 'fdp' ? d.dnode : null;
161
+ }
162
+
163
+ /** DNODE(n) = dn */
164
+ export function setDnode(n: Node, dn: Node | null): void {
165
+ fdpData(n).dnode = dn;
166
+ }
167
+
168
+ /** PARENT(n) @see lib/fdpgen/fdp.h:PARENT */
169
+ export function getParent(n: Node): Graph | null {
170
+ const d = n.info.alg as FdpAlgData | undefined;
171
+ return d !== undefined && d.kind === 'fdp' ? d.parent : null;
172
+ }
173
+
174
+ /** PARENT(n) = g */
175
+ export function setParent(n: Node, g: Graph): void {
176
+ fdpData(n).parent = g;
177
+ }
178
+
179
+ // ---------------------------------------------------------------------------
180
+ // Pinned-state helpers (numeric on derived nodes / real fdp nodes)
181
+ // ---------------------------------------------------------------------------
182
+
183
+ /** ND_pinned for a derived node. */
184
+ export function dnPinned(n: Node): number {
185
+ return dndata(n).pinned;
186
+ }
187
+
188
+ /** hasPos(n) @see lib/neatogen/neato.h:hasPos */
189
+ export function hasPos(n: Node): boolean {
190
+ return dndata(n).pinned > 0;
191
+ }
192
+
193
+ // ---------------------------------------------------------------------------
194
+ // Derived-edge real-edge list (C overloads ED_to_virt as edge_t**)
195
+ // ---------------------------------------------------------------------------
196
+
197
+ /** Real edges merged into a derived edge. @see lib/fdpgen/layout.c:addEdge */
198
+ export function realEdges(de: Edge): Edge[] {
199
+ return (de.info.alg as Edge[] | undefined) ?? [];
200
+ }
201
+
202
+ /** NEW_EDGE(e) — no real edge recorded yet. @see lib/fdpgen/layout.c:NEW_EDGE */
203
+ export function isNewEdge(de: Edge): boolean {
204
+ return de.info.alg === undefined;
205
+ }
206
+
207
+ /**
208
+ * Add real edge e to its image de in the derived graph.
209
+ * @see lib/fdpgen/layout.c:addEdge
210
+ */
211
+ export function addEdge(de: Edge, e: Edge): void {
212
+ const el = de.info.alg as Edge[] | undefined;
213
+ if (el === undefined) {
214
+ de.info.alg = [e];
215
+ } else {
216
+ el.push(e);
217
+ }
218
+ de.info.count = (de.info.count ?? 0) + 1;
219
+ }
220
+
221
+ // ---------------------------------------------------------------------------
222
+ // Graph-attribute lookup with parent fallback (agget semantics)
223
+ // ---------------------------------------------------------------------------
224
+
225
+ /**
226
+ * agget(g, name): look up an attribute on g, falling back up the parent
227
+ * chain (derived components resolve attrs copied onto the derived root).
228
+ * @see lib/cgraph/attr.c:agget
229
+ */
230
+ export function aggetGraph(g: Graph, name: string): string | undefined {
231
+ let cur: Graph | null = g;
232
+ while (cur !== null) {
233
+ const v = cur.attrs.get(name);
234
+ if (v !== undefined) return v;
235
+ cur = cur.parent;
236
+ }
237
+ return undefined;
238
+ }
@@ -0,0 +1,77 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Spatial grid used to localise repulsive-force computation: on each
5
+ * pass nodes are bucketed into cells; repulsion is only computed
6
+ * against nodes in the 9 adjacent cells.
7
+ *
8
+ * Ordering is load-bearing for float reproducibility:
9
+ * - C's dtwalk over a Dtoset dictionary visits cells in ascending
10
+ * (i, j) order (grid.c:ijcmpf) — walk() replicates that sort.
11
+ * - C prepends nodes to each cell's list (grid.c:newNode), so within a
12
+ * cell nodes appear in REVERSE insertion order — add() unshifts.
13
+ *
14
+ * Spec read at the 15.0.0 tag.
15
+ *
16
+ * @see lib/fdpgen/grid.c (15.0.0)
17
+ */
18
+
19
+ import type { Node } from '../../model/node.js';
20
+
21
+ /** One grid cell. @see lib/fdpgen/grid.h:cell */
22
+ export interface Cell {
23
+ i: number;
24
+ j: number;
25
+ /** Nodes in reverse insertion order. @see lib/fdpgen/grid.c:newNode */
26
+ nodes: Node[];
27
+ }
28
+
29
+ /**
30
+ * The grid: cells keyed by (i, j).
31
+ * Block allocators (newBlock/getCell) are memory management with no
32
+ * behavioral effect and are not ported.
33
+ *
34
+ * @see lib/fdpgen/grid.c:_grid
35
+ */
36
+ export class Grid {
37
+ private readonly cells = new Map<string, Cell>();
38
+
39
+ /** Reset the grid, reusing storage. @see lib/fdpgen/grid.c:clearGrid */
40
+ clear(): void {
41
+ this.cells.clear();
42
+ }
43
+
44
+ /** Add node n to cell (i, j). @see lib/fdpgen/grid.c:addGrid */
45
+ add(i: number, j: number, n: Node): void {
46
+ const key = `${i},${j}`;
47
+ let c = this.cells.get(key);
48
+ if (c === undefined) {
49
+ c = { i, j, nodes: [] };
50
+ this.cells.set(key, c);
51
+ }
52
+ c.nodes.unshift(n);
53
+ }
54
+
55
+ /** Cell at (i, j), if any. @see lib/fdpgen/grid.c:findGrid */
56
+ find(i: number, j: number): Cell | undefined {
57
+ return this.cells.get(`${i},${j}`);
58
+ }
59
+
60
+ /**
61
+ * Apply walkf to each cell in ascending (i, j) order — the dtwalk
62
+ * traversal order of the Dtoset dictionary.
63
+ * @see lib/fdpgen/grid.c:walkGrid
64
+ * @see lib/fdpgen/grid.c:ijcmpf
65
+ */
66
+ walk(walkf: (c: Cell, g: Grid) => void): void {
67
+ const sorted = [...this.cells.values()].sort(
68
+ (a, b) => (a.i - b.i) || (a.j - b.j),
69
+ );
70
+ for (const c of sorted) walkf(c, this);
71
+ }
72
+ }
73
+
74
+ /** Number of nodes in a cell. @see lib/fdpgen/grid.c:gLength */
75
+ export function gLength(c: Cell): number {
76
+ return c.nodes.length;
77
+ }
@@ -0,0 +1,113 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * fdp layout engine entry point — the fdp_layout pipeline:
5
+ * init (clusters, params, nodes/edges) → recursive layout →
6
+ * aspect/coord sync → straight-line splines → label placement.
7
+ *
8
+ * Spec read at the 15.0.0 tag.
9
+ *
10
+ * @see lib/fdpgen/layout.c:fdp_layout (15.0.0)
11
+ */
12
+
13
+ import type { Graph } from '../../model/graph.js';
14
+ import type { LayoutEngine } from '../../gvc/context.js';
15
+ import { setEdgeTypeFromAttr } from '../dot/index.js';
16
+ import {
17
+ EDGETYPE_LINE, EDGETYPE_NONE, splineEdges, injectOraclePositions,
18
+ } from '../neato/splines.js';
19
+ import { neatoSetAspect } from '../neato/init.js';
20
+ import { placeGraphLabel } from '../dot/position-bbox.js';
21
+ import { gvPostprocess } from '../../common/postproc.js';
22
+ import { fdpInitParams } from './tlayout-parms.js';
23
+ import { fdpInitNodeEdge, fdpCleanup } from './init.js';
24
+ import { fdpLayout, mkClusters } from './layout.js';
25
+ import { gdata } from './fdp-model.js';
26
+ import { graphInit } from '../../common/graph-init.js';
27
+ import { csrand } from '../../common/crand.js';
28
+
29
+ export { fdpLayout, mkClusters, evalPositions, setBB } from './layout.js';
30
+ export { fdpTLayout } from './tlayout.js';
31
+ export { fdpXLayout } from './xlayout.js';
32
+ export { findCComp } from './comp.js';
33
+ export { deriveGraph, type LayoutInfo } from './derive.js';
34
+ export { fdpInitNodeEdge, fdpCleanup } from './init.js';
35
+ export { fdpInitParams, fdpParms } from './tlayout-parms.js';
36
+
37
+ /**
38
+ * Graph-level initialization: edge type, gdata, clusters, parameters,
39
+ * nodes and edges. GD_ndim is fixed at 2 (the "dim" attribute's 3D+
40
+ * modes are not ported — no supported input sets it).
41
+ * @see lib/fdpgen/layout.c:fdp_init_graph
42
+ */
43
+ export function fdpInitGraph(g: Graph): void {
44
+ // The root graph label is created by the shared graphInit (do_graph_label),
45
+ // called once from fdpLayoutEngine — C's graph_init runs before fdp_layout.
46
+ // mkClusters below only labels the *clusters* (layout.c:413), never the root.
47
+ // setEdgeType FUNCTION (utils.c:1423): reads `splines`, LINE is the default.
48
+ // @see lib/fdpgen/layout.c:1004
49
+ setEdgeTypeFromAttr(g, EDGETYPE_LINE);
50
+ gdata(g); // GD_alg(g) = gv_alloc(sizeof(gdata))
51
+ mkClusters(g, null, g);
52
+ fdpInitParams(g);
53
+ fdpInitNodeEdge(g);
54
+ }
55
+
56
+ /**
57
+ * Route edges by the resolved edge type. Compound (cluster) edges and
58
+ * the HAS_CLUST_EDGE warning path are not ported — no supported input
59
+ * has cluster-endpoint edges.
60
+ * @see lib/fdpgen/layout.c:fdpSplines
61
+ */
62
+ function fdpSplines(g: Graph): void {
63
+ splineEdges(g); // spline_edges1(g, et) — straight lines + clipping
64
+ }
65
+
66
+ /**
67
+ * The complete fdp pipeline.
68
+ * @see lib/fdpgen/layout.c:fdp_layout
69
+ */
70
+ export function fdpLayoutEngine(g: Graph): void {
71
+ // C: gvLayoutJobs runs graph_init(g, LAYOUT_USES_RANKDIR) before fdp_layout.
72
+ // fdp does not set the flag → useRankdir=false. Creates GD_label(g) too.
73
+ // @see lib/common/input.c:600, lib/gvc/gvlayout.c:81
74
+ graphInit(g, false);
75
+ // fdp never calls srand(); the coincident-node rand() fallback draws from
76
+ // the process-global libc rand() stream, which is unseeded ⇒ srand(1). Reset
77
+ // the modeled stream per render so repeated renders in one JS process match
78
+ // a fresh C process. (fdp placement uses a separate srand48/drand48 stream.)
79
+ csrand(1);
80
+ fdpInitGraph(g);
81
+ if (fdpLayout(g) !== 0) {
82
+ return;
83
+ }
84
+ // T1 injection hook (iterative-parity-campaign): inert unless GVTS_POS_INJECT
85
+ // is set. fdp does NOT route through neato's spline_edges — it has its own
86
+ // fdpSplines — so the neato hook is never reached here. This must run BEFORE
87
+ // neatoSetAspect, which derives coord (points) from pos (inches): routing
88
+ // reads coord, so injecting after it would be a silent no-op. Mirrors the
89
+ // native dump site in fdp_layout, between fdpLayout() and neato_set_aspect().
90
+ // @see lib/fdpgen/layout.c:1062 fdp_layout
91
+ injectOraclePositions(g);
92
+ neatoSetAspect(g); // C neato_set_aspect: pos (inches) → coord (points)
93
+
94
+ const et = g.info.flags & 0xf;
95
+ if (et !== EDGETYPE_NONE) fdpSplines(g);
96
+
97
+ // C gv_postprocess(g, 0): the drawing is already origin-based (finalCC), so
98
+ // translation is suppressed — but the pass still runs addXLabels, which is
99
+ // what positions the *edge* labels under fdp (fdpSplines never sets
100
+ // ED_label(e)->pos). @see lib/fdpgen/layout.c:1076
101
+ placeGraphLabel(g);
102
+ gvPostprocess(g, false);
103
+ }
104
+
105
+ /**
106
+ * fdp LayoutEngine plugin for registration with GvcContext.
107
+ * @see lib/gvc/gvplugin.h:gvlayout_engine_s
108
+ */
109
+ export const fdpEngine: LayoutEngine = {
110
+ type: 'fdp',
111
+ layout(g: Graph): void { fdpLayoutEngine(g); },
112
+ cleanup(g: Graph): void { fdpCleanup(g); },
113
+ };