@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,190 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Edge-group formation and dispatch for the dot_splines_ routing loop —
5
+ * C's inner group loop (groupSize) and the per-group router selection.
6
+ *
7
+ * @see lib/dotgen/dotsplines.c:dot_splines_ (343-419)
8
+ */
9
+
10
+ import type { Graph } from '../../model/graph.js';
11
+ import type { Edge } from '../../model/edge.js';
12
+ import type { TextlabelT } from '../../common/types.js';
13
+ import {
14
+ getMainEdge, resolveOrigEdge, portcmp, gatePorts, edgeTreeIndex, nodeRankOf,
15
+ swapEndsP, swapEdgeSpline, EDGETYPE_CURVED, EDGETYPEMASK, FLATEDGE, MAINGRAPH,
16
+ } from './splines.js';
17
+ import { routeLoneEdge } from './edge-route.js';
18
+ import { routeEntryRun } from './edge-route-chain.js';
19
+ import { routeSelfEdgeGroup, buildDotSinfo } from './self-loop.js';
20
+ import { updateBB } from './splines-label.js';
21
+ import { routeParallelEdgeGroup } from './splines-route.js';
22
+ import { makeStraightEdges } from './straight-edges.js';
23
+
24
+ /** Per-loop routing context: separations, edge type, per-run orig record. */
25
+ export interface GroupRouteCtx {
26
+ multisep: number;
27
+ et: number;
28
+ /** Originals that received per-run bezier appends (normalized post-loop). */
29
+ runOrigs: Set<Edge>;
30
+ }
31
+
32
+ /**
33
+ * Count how many consecutive entries in `edges` starting at `ind` join one
34
+ * routing group — C's inner group loop verbatim: break on a different main
35
+ * edge; flat ED_adjacent groups take everything at once; otherwise break on a
36
+ * tail/head portcmp mismatch (gate edges viewed forward), on a FLAT label
37
+ * change, or when the candidate carries MAINGRAPH ("Aha! -C is on"): under
38
+ * concentrate, consecutive same-main REGULAREDGE entries are merge-bounded
39
+ * chain runs that must each route their own make_regular_edge call, while
40
+ * AUXGRAPH copies (parallel multi-edges from ND_other) still group.
41
+ * @see lib/dotgen/dotsplines.c:dot_splines_ (344-376)
42
+ */
43
+ function groupSize(edges: Edge[], ind: number): number {
44
+ const e0 = edges[ind];
45
+ const le0 = getMainEdge(e0);
46
+ const [eaT, eaH] = gatePorts(e0, le0);
47
+ const e0flat = (edgeTreeIndex(e0) & EDGETYPEMASK) === FLATEDGE;
48
+ let cnt = 1;
49
+ while (ind + cnt < edges.length) {
50
+ const e1 = edges[ind + cnt];
51
+ const le1 = getMainEdge(e1);
52
+ if (le1 !== le0) break;
53
+ if ((e0.info.adjacent ?? 0) !== 0) { cnt++; continue; } // all flat adjacent at once
54
+ const [ebT, ebH] = gatePorts(e1, le1);
55
+ if (portcmp(eaT, ebT) !== 0) break;
56
+ if (portcmp(eaH, ebH) !== 0) break;
57
+ if (e0flat && e0.info.label !== e1.info.label) break;
58
+ if ((edgeTreeIndex(e1) & MAINGRAPH) !== 0) break; // Aha! -C is on
59
+ cnt++;
60
+ }
61
+ return cnt;
62
+ }
63
+
64
+ /** Original-edge creation seq (resolve virtuals) — restores C's edgecmp order. */
65
+ function origSeq(e: Edge): number { return resolveOrigEdge(e).seq; }
66
+
67
+ /**
68
+ * Collapse a main-edge group to one representative per distinct original edge.
69
+ * The opposing `a->b`/`b->a` case collects three entries but two distinct
70
+ * originals; dedup by `resolveOrigEdge` yields one per original (parallels
71
+ * untouched). Pushes the RESOLVED original `o`, not the raw group member `e`:
72
+ * a raw member can be a swapped internal proxy (e.g. a same-rank flat edge
73
+ * whose canonical orientation is tail/head-swapped) whose endpoints don't
74
+ * match the edge actually rendered — routing against the proxy leaves the
75
+ * real edge's geometry unset. C's `edges` list carries no such proxy object
76
+ * (its group members are already the real/virtual edges), so this recovers
77
+ * C's outcome for the TS-specific proxy representation. Distinct originals
78
+ * (genuine parallels, or a multi-rank edge's own per-hop virtual segments)
79
+ * each resolve to their OWN root, so this dedup never merges or renames them.
80
+ * @see dotsplines.c:make_regular_edge (one clip_and_install per orig)
81
+ */
82
+ export function dedupByOrig(group: Edge[]): Edge[] {
83
+ const seen = new Set<Edge>();
84
+ const out: Edge[] = [];
85
+ for (const e of group) {
86
+ const o = resolveOrigEdge(e);
87
+ if (seen.has(o)) continue;
88
+ seen.add(o);
89
+ out.push(o);
90
+ }
91
+ return out;
92
+ }
93
+
94
+ /**
95
+ * Dispatch one edgecmp group: self-loop → routeSelfEdgeGroup; cross-rank cnt>1 →
96
+ * routeParallelEdgeGroup (Multisep offsets); cross-rank cnt==1 → per-run or
97
+ * whole-chain lone routing in-place (C order); same-rank flat → left for the
98
+ * routeDotEdges sweep.
99
+ * @see lib/dotgen/dotsplines.c:367-419
100
+ */
101
+ function dispatchEdgeGroup(g: Graph, group: Edge[], ctx: GroupRouteCtx): void {
102
+ const e0 = group[0];
103
+ if (e0.tail === e0.head) {
104
+ routeSelfEdgeGroup(g, group, group.length, ctx.multisep, buildDotSinfo());
105
+ // Grow the graph bbox to include each labeled self-loop's label. C does this
106
+ // after makeSelfEdge; it is the ONLY canvas-growth path for left/top loops
107
+ // (right-going loops also reserve label space at ranking time via
108
+ // selfRightSpace, so they grow without it). @see dotsplines.c:405-409
109
+ for (const e of group) {
110
+ const l = e.info.label as TextlabelT | undefined;
111
+ if (l) updateBB(g, l);
112
+ }
113
+ return;
114
+ }
115
+ if (nodeRankOf(e0.tail) === nodeRankOf(e0.head)) return;
116
+ const uniq = dedupByOrig(group);
117
+ // Lone edge: route HERE at its edgecmp position (interleaved with groups), as C
118
+ // does, so it reads recover_slack-moved vnodes correctly. @see root-cause.md
119
+ if (uniq.length <= 1) {
120
+ // Concentrate merge-bounded partial run (either end at a splineMerge node):
121
+ // route ONLY this entry's run and append its bezier on the orig — every
122
+ // such run is its own cnt=1 group (groupSize's MAINGRAPH break), and the
123
+ // orig's spline accumulates one bezier per run in edgecmp order, exactly
124
+ // C's per-entry make_regular_edge + clip_and_install. The orig is recorded
125
+ // for the post-loop swap (C normalizes the assembled spline once, at the
126
+ // end). @see lib/dotgen/dotsplines.c:dot_splines_ (group loop)
127
+ const runOrig = routeEntryRun(g, e0);
128
+ if (runOrig !== null) {
129
+ ctx.runOrigs.add(runOrig);
130
+ return;
131
+ }
132
+ const lone = resolveOrigEdge(uniq[0]);
133
+ // Plain chains (no interior splineMerge boundary) keep the whole-chain
134
+ // routers. @see dotsplines.c:make_regular_edge (spline_merge)
135
+ routeLoneEdge(lone, g);
136
+ return;
137
+ }
138
+ // Lane offsets follow the edgecmp collected order — C passes the sorted list
139
+ // slice straight into make_regular_edge with NO re-sort, so the MAINGRAPH
140
+ // forward rep gets lane 0 (interior x -dx) and AUXGRAPH ND_other entries
141
+ // (including an opposing 2-cycle's reversed member) follow, regardless of
142
+ // original creation seq. @see dotsplines.c:419, make_regular_edge:1885-1907
143
+ routeParallelEdgeGroup(g, uniq, ctx.multisep);
144
+ }
145
+
146
+ /**
147
+ * Route one curved group via makeStraightEdges. C routes the whole same-endpoint
148
+ * group at once — parallels AND opposing edges (`a->b`/`b->a`) together (a 2-cycle
149
+ * is one cnt=2 group, ports (0,0); the visible separation is perp-spread clipped
150
+ * to the node). Dedup the TS virtual duplicates to distinct originals; sort by
151
+ * creation seq so index→perp-offset matches C (first → +perp); makeStraightEdges
152
+ * reverses the opposing edge's control points via its head==group-head check.
153
+ * @see lib/dotgen/dotsplines.c:381-387, lib/common/routespl.c:1000-1041
154
+ */
155
+ function routeCurvedGroup(g: Graph, group: Edge[]): void {
156
+ const uniq = dedupByOrig(group);
157
+ uniq.sort((a, b) => origSeq(a) - origSeq(b));
158
+ makeStraightEdges(g, uniq, uniq.length, EDGETYPE_CURVED, buildDotSinfo());
159
+ // Reversed back edges live in ND_other (edgeNormalize skips them); swap here.
160
+ for (const e of uniq) {
161
+ if (swapEndsP(e)) swapEdgeSpline(e);
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Route one parallel-edge group from the sorted edge list.
167
+ * Returns the number of edges consumed (cnt). For `splines=curved` the group is
168
+ * routed via `makeStraightEdges` instead of the normal per-group router.
169
+ * @see lib/dotgen/dotsplines.c:343-419
170
+ */
171
+ function routeEdgeGroup(g: Graph, edges: Edge[], ind: number, ctx: GroupRouteCtx): number {
172
+ const cnt = groupSize(edges, ind);
173
+ if (ctx.et === EDGETYPE_CURVED) {
174
+ routeCurvedGroup(g, edges.slice(ind, ind + cnt));
175
+ return cnt;
176
+ }
177
+ dispatchEdgeGroup(g, edges.slice(ind, ind + cnt), ctx);
178
+ return cnt;
179
+ }
180
+
181
+ /**
182
+ * Run the whole group-routing loop over the sorted edge list; returns the set
183
+ * of originals that received per-run bezier appends, for the caller's
184
+ * post-loop normalize pass. @see lib/dotgen/dotsplines.c:dot_splines_ (343-419)
185
+ */
186
+ export function routeEdgeGroups(g: Graph, edges: Edge[], multisep: number, et: number): Set<Edge> {
187
+ const ctx: GroupRouteCtx = { multisep, et, runOrigs: new Set<Edge>() };
188
+ for (let l = 0; l < edges.length;) l += routeEdgeGroup(g, edges, l, ctx);
189
+ return ctx.runOrigs;
190
+ }
@@ -0,0 +1,432 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Label placement for edge virtual nodes and port labels.
5
+ *
6
+ * @see lib/dotgen/dotsplines.c:place_vnlabel, setEdgeLabelPos
7
+ * @see lib/common/splines.c:place_portlabel (lines 1316-1360)
8
+ * @see lib/dotgen/dotsplines.c:440-458 (port-label placement loop)
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 { TextlabelT } from '../../common/types.js';
15
+ import { VIRTUAL } from './fastgr.js';
16
+ import { IGNORED } from './rank.js';
17
+ import { lateDouble } from '../../common/nodeinit.js';
18
+ import { nodesInSeq } from './decomp.js';
19
+
20
+ // ---------------------------------------------------------------------------
21
+ // TextLabel interface (minimal — full type deferred to Batch 5b)
22
+ // ---------------------------------------------------------------------------
23
+
24
+ /** Minimal label shape sufficient for placement. */
25
+ export interface TextLabel {
26
+ pos: { x: number; y: number };
27
+ dimen: { x: number; y: number };
28
+ set: boolean;
29
+ }
30
+
31
+ // ---------------------------------------------------------------------------
32
+ // Helpers
33
+ // ---------------------------------------------------------------------------
34
+
35
+ /** Cast an unknown label to TextLabel if it has the required shape. */
36
+ export function asTextLabel(label: unknown): TextLabel | undefined {
37
+ const l = label as Record<string, unknown>;
38
+ if (l && typeof l['pos'] === 'object' && typeof l['dimen'] === 'object') {
39
+ return l as unknown as TextLabel;
40
+ }
41
+ return undefined;
42
+ }
43
+
44
+ /** Walk to_orig until edge_type is NORMAL (0). */
45
+ export function findNormalOutEdge(first: Edge): Edge | undefined {
46
+ let e: Edge | undefined = first;
47
+ while (e && (e.info.edge_type ?? 0) !== 0) e = e.info.to_orig;
48
+ return e;
49
+ }
50
+
51
+ /** Compute label x-position from node coord, dimen, and flip flag. */
52
+ export function labelXPos(n: Node, l: TextLabel): number {
53
+ const flip = !!(n.root?.info.flip);
54
+ const width = flip ? l.dimen.y : l.dimen.x;
55
+ return n.info.coord.x + width / 2.0;
56
+ }
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // place_vnlabel
60
+ // @see lib/dotgen/dotsplines.c:place_vnlabel
61
+ // ---------------------------------------------------------------------------
62
+
63
+ /**
64
+ * Assign position of an edge label from its virtual node.
65
+ * @see lib/dotgen/dotsplines.c:place_vnlabel
66
+ */
67
+ export function placeVnlabel(n: Node): void {
68
+ if ((n.info.in?.size ?? 0) === 0) return; // skip flat edge labels
69
+ const first = n.info.out?.list[0];
70
+ if (!first) return;
71
+ const e = findNormalOutEdge(first);
72
+ if (!e) return;
73
+ const l = asTextLabel(e.info.label);
74
+ if (!l) return;
75
+ l.pos.x = labelXPos(n, l);
76
+ l.pos.y = n.info.coord.y;
77
+ l.set = true;
78
+ }
79
+
80
+ // ---------------------------------------------------------------------------
81
+ // setEdgeLabelPos
82
+ // @see lib/dotgen/dotsplines.c:setEdgeLabelPos
83
+ // ---------------------------------------------------------------------------
84
+
85
+ /** Set label pos from posAlg edge for virtual label nodes. */
86
+ export function setAlgLabelPos(n: Node): void {
87
+ const fe = n.info.posAlg;
88
+ if (!fe) return;
89
+ const l = asTextLabel(fe.info.label);
90
+ if (!l) return;
91
+ l.pos = { x: n.info.coord.x, y: n.info.coord.y };
92
+ l.set = true;
93
+ }
94
+
95
+ /**
96
+ * Set edge label position information for regular and non-adjacent flat edges.
97
+ * @see lib/dotgen/dotsplines.c:setEdgeLabelPos
98
+ */
99
+ export function setEdgeLabelPos(g: Graph): void {
100
+ for (let n: Node | undefined = g.info.nlist; n; n = n.info.next) {
101
+ if ((n.info.node_type ?? 0) !== VIRTUAL) continue;
102
+ // C tracks l from the posAlg edge label or the regular vnode label, then
103
+ // updateBB(g, l). @see lib/dotgen/dotsplines.c:205-216
104
+ let l: TextlabelT | undefined;
105
+ if (n.info.posAlg) {
106
+ setAlgLabelPos(n);
107
+ l = n.info.posAlg.info.label as TextlabelT | undefined;
108
+ } else if (n.info.label) {
109
+ placeVnlabel(n);
110
+ l = n.info.label as TextlabelT | undefined;
111
+ }
112
+ if (l) updateBB(g, l);
113
+ }
114
+ }
115
+
116
+ // ---------------------------------------------------------------------------
117
+ // Port-label constants
118
+ // @see lib/common/const.h:PORT_LABEL_DISTANCE / PORT_LABEL_ANGLE
119
+ // ---------------------------------------------------------------------------
120
+
121
+ /** Default port-label distance in points. @see lib/common/const.h:PORT_LABEL_DISTANCE */
122
+ export const PORT_LABEL_DISTANCE = 10;
123
+
124
+ /** Default port-label angle in degrees (CW negative). @see lib/common/const.h:PORT_LABEL_ANGLE */
125
+ export const PORT_LABEL_ANGLE = -25;
126
+
127
+ // ---------------------------------------------------------------------------
128
+ // cubicBezierAt — de Casteljau at parameter t (Bezier() in utils.c)
129
+ // @see lib/common/utils.c:175-203
130
+ // ---------------------------------------------------------------------------
131
+
132
+ /**
133
+ * Evaluate a cubic Bezier curve at parameter t using the de Casteljau
134
+ * triangle computation. Requires pts[0..3]. No Left/Right subdivision
135
+ * output needed here, so they are omitted.
136
+ *
137
+ * @see lib/common/utils.c:Bezier
138
+ */
139
+ function cubicBezierAt(pts: readonly { x: number; y: number }[], t: number): { x: number; y: number } {
140
+ // Triangle computation (degree = 3)
141
+ const p0 = pts[0], p1 = pts[1], p2 = pts[2], p3 = pts[3];
142
+ const mt = 1.0 - t;
143
+ // Level 1
144
+ const q0 = { x: mt * p0.x + t * p1.x, y: mt * p0.y + t * p1.y };
145
+ const q1 = { x: mt * p1.x + t * p2.x, y: mt * p1.y + t * p2.y };
146
+ const q2 = { x: mt * p2.x + t * p3.x, y: mt * p2.y + t * p3.y };
147
+ // Level 2
148
+ const r0 = { x: mt * q0.x + t * q1.x, y: mt * q0.y + t * q1.y };
149
+ const r1 = { x: mt * q1.x + t * q2.x, y: mt * q1.y + t * q2.y };
150
+ // Level 3
151
+ return { x: mt * r0.x + t * r1.x, y: mt * r0.y + t * r1.y };
152
+ }
153
+
154
+ // ---------------------------------------------------------------------------
155
+ // Bezier endpoint extraction helpers
156
+ // @see lib/common/splines.c:place_portlabel:1331-1351
157
+ // ---------------------------------------------------------------------------
158
+
159
+ type BezierSeg = { list: { x: number; y: number }[]; size: number; sflag: number; eflag: number; sp: { x: number; y: number }; ep: { x: number; y: number } };
160
+
161
+ /**
162
+ * Extract (pe = endpoint, pf = near-endpoint) for the tail end of the spline.
163
+ * pe is the exact endpoint; pf is a point 10% along the curve toward the head,
164
+ * used to compute the tangent direction for label placement.
165
+ *
166
+ * @see lib/common/splines.c:place_portlabel:1331-1339
167
+ */
168
+ function tailEndpoints(bez: BezierSeg): { pe: { x: number; y: number }; pf: { x: number; y: number } } {
169
+ if (bez.sflag) {
170
+ return { pe: bez.sp, pf: bez.list[0] };
171
+ }
172
+ const pe = bez.list[0];
173
+ const pf = cubicBezierAt(bez.list, 0.1);
174
+ return { pe, pf };
175
+ }
176
+
177
+ /**
178
+ * Extract (pe = endpoint, pf = near-endpoint) for the head end of the spline.
179
+ * pe is the exact endpoint; pf is a point 90% along the curve from the tail,
180
+ * used to compute the tangent direction for label placement.
181
+ *
182
+ * C indexes with `bez->size`, NOT the allocation length: arrow clipping
183
+ * (`arrow_clip`) shrinks `size` while the backing array keeps stale trailing
184
+ * points, so `list.length` can exceed the live point count.
185
+ *
186
+ * @see lib/common/splines.c:place_portlabel:1341-1351
187
+ */
188
+ function headEndpoints(bez: BezierSeg): { pe: { x: number; y: number }; pf: { x: number; y: number } } {
189
+ if (bez.eflag) {
190
+ return { pe: bez.ep, pf: bez.list[bez.size - 1] };
191
+ }
192
+ const pe = bez.list[bez.size - 1];
193
+ const last4 = bez.list.slice(bez.size - 4, bez.size);
194
+ const pf = cubicBezierAt(last4, 0.9);
195
+ return { pe, pf };
196
+ }
197
+
198
+ // ---------------------------------------------------------------------------
199
+ // place_portlabel
200
+ // @see lib/common/splines.c:1316-1360
201
+ // ---------------------------------------------------------------------------
202
+
203
+ /**
204
+ * Place the head or tail port label for edge e.
205
+ *
206
+ * Returns true on success, false when:
207
+ * - edge_type is IGNORED, or
208
+ * - neither labelangle nor labeldistance attrs are set (labels are then
209
+ * treated as external xlabel-style labels, not placed here), or
210
+ * - the spline is not yet computed.
211
+ *
212
+ * NOTE: The C code only places port labels when at least one of
213
+ * E_labelangle / E_labeldistance has a non-empty value. When both are
214
+ * absent (the common case), it returns 0 and the labels remain unpositioned.
215
+ * In the C pipeline the renderer then falls back to xlabel-style placement.
216
+ * For the quarantine reference, the labels *are* placed — meaning one of
217
+ * the two attrs has an implicit value in the C attr-symbol table. We
218
+ * replicate the C condition faithfully: check whether the edge's own
219
+ * attrs contain a non-empty value for either key.
220
+ *
221
+ * @see lib/common/splines.c:place_portlabel
222
+ */
223
+ export function placePortlabel(e: Edge, headP: boolean): boolean {
224
+ if (edgeTypeIgnored(e)) return false;
225
+ if (noAngleAttrs(e)) return false;
226
+ if (labelMissing(e, headP)) return false;
227
+ if (splineMissing(e)) return false;
228
+ return applyPortlabelPos(e, headP);
229
+ }
230
+
231
+ /** True when edge_type is IGNORED (0 when unset counts as not-IGNORED). */
232
+ function edgeTypeIgnored(e: Edge): boolean {
233
+ const et = e.info.edge_type;
234
+ if (et === undefined) return false;
235
+ return et === IGNORED;
236
+ }
237
+
238
+ /** True when neither labelangle nor labeldistance has a non-empty value. */
239
+ function noAngleAttrs(e: Edge): boolean {
240
+ const a = e.attrs.get('labelangle');
241
+ const d = e.attrs.get('labeldistance');
242
+ if (a !== undefined && a !== '') return false;
243
+ if (d !== undefined && d !== '') return false;
244
+ return true;
245
+ }
246
+
247
+ /** True when the relevant port label is absent. */
248
+ function labelMissing(e: Edge, headP: boolean): boolean {
249
+ if (headP) return e.info.head_label === undefined;
250
+ return e.info.tail_label === undefined;
251
+ }
252
+
253
+ /** True when no computed spline exists yet. */
254
+ function splineMissing(e: Edge): boolean {
255
+ if (e.info.spl === undefined) return true;
256
+ return e.info.spl.list.length === 0;
257
+ }
258
+
259
+ /**
260
+ * Compute and write position for one port label; returns true.
261
+ * Pre-condition: guards passed (label exists, spline exists).
262
+ * @see lib/common/splines.c:place_portlabel:1353-1359
263
+ */
264
+ function applyPortlabelPos(e: Edge, headP: boolean): boolean {
265
+ const spl = e.info.spl!;
266
+ // C: &spl->list[spl->size - 1] — index by the live size, not list.length.
267
+ const ends = headP
268
+ ? headEndpoints(spl.list[spl.size - 1])
269
+ : tailEndpoints(spl.list[0]);
270
+ const l = headP ? e.info.head_label! : e.info.tail_label!;
271
+ const angleStr = e.attrs.get('labelangle') ?? '';
272
+ const distanceStr = e.attrs.get('labeldistance') ?? '';
273
+ writePortlabelPos(l, ends.pe, ends.pf, angleStr, distanceStr);
274
+ return true;
275
+ }
276
+
277
+ /**
278
+ * Write pos onto label given endpoint pair and attr strings.
279
+ * @see lib/common/splines.c:place_portlabel:1353-1359
280
+ */
281
+ function writePortlabelPos(
282
+ l: TextlabelT,
283
+ pe: { x: number; y: number },
284
+ pf: { x: number; y: number },
285
+ angleStr: string,
286
+ distanceStr: string,
287
+ ): void {
288
+ const angleDeg = lateDouble(angleStr, PORT_LABEL_ANGLE, -180.0);
289
+ const angle = Math.atan2(pf.y - pe.y, pf.x - pe.x) + (Math.PI / 180) * angleDeg;
290
+ const distMult = lateDouble(distanceStr || undefined, 1.0, 0.0);
291
+ const dist = PORT_LABEL_DISTANCE * distMult;
292
+ l.pos.x = pe.x + dist * Math.cos(angle);
293
+ l.pos.y = pe.y + dist * Math.sin(angle);
294
+ l.set = true;
295
+ }
296
+
297
+ // ---------------------------------------------------------------------------
298
+ // updateBB — extend graph bb to include label
299
+ // @see lib/dotgen/dotsplines.c:446 (updateBB call)
300
+ // ---------------------------------------------------------------------------
301
+
302
+ /** Expand g.info.bb to include the label's bounding box. */
303
+ export function updateBB(g: Graph, l: TextlabelT): void {
304
+ const bb = g.info.bb;
305
+ // C's updateBB -> addLabelBB(bb, lp, GD_flip(g)) swaps the label's dimen axes
306
+ // under flip (rankdir=LR/RL): the stored dimen is unflipped, so in flipped
307
+ // coordinate space width=dimen.y and height=dimen.x. Labels are stored
308
+ // unflipped here too (every other consumer swaps via `flip ? dimen.y : x`),
309
+ // so updateBB must swap as well. @see lib/common/utils.c:569 addLabelBB
310
+ const flip = g.info.flip === true;
311
+ const hw = (flip ? l.dimen.y : l.dimen.x) / 2;
312
+ const hh = (flip ? l.dimen.x : l.dimen.y) / 2;
313
+ if (l.pos.x - hw < bb.ll.x) bb.ll.x = l.pos.x - hw;
314
+ if (l.pos.y - hh < bb.ll.y) bb.ll.y = l.pos.y - hh;
315
+ if (l.pos.x + hw > bb.ur.x) bb.ur.x = l.pos.x + hw;
316
+ if (l.pos.y + hh > bb.ur.y) bb.ur.y = l.pos.y + hh;
317
+ }
318
+
319
+ // ---------------------------------------------------------------------------
320
+ // placeRegularEdgeLabels — post-routing label placement loop
321
+ // @see lib/dotgen/dotsplines.c:422-430
322
+ // ---------------------------------------------------------------------------
323
+
324
+ /**
325
+ * After edge routing completes, place regular edge labels from virtual nodes
326
+ * and expand the graph bounding box to include each label.
327
+ *
328
+ * Called once per graph after the parallel-edge routing loop and before
329
+ * edge_normalize. Mirrors the C post-routing place_vnlabel + updateBB loop
330
+ * at dotsplines.c:422-430. Flat-edge virtual nodes (in.size == 0) are
331
+ * skipped inside placeVnlabel as in C.
332
+ *
333
+ * @see lib/dotgen/dotsplines.c:422-430
334
+ */
335
+ export function placeRegularEdgeLabels(g: Graph): void {
336
+ for (let n: Node | undefined = g.info.nlist; n; n = n.info.next) {
337
+ if ((n.info.node_type ?? 0) !== VIRTUAL) continue;
338
+ const l = n.info.label as TextlabelT | undefined;
339
+ if (!l) continue;
340
+ placeVnlabel(n);
341
+ if (l.set) updateBB(g, l);
342
+ }
343
+ }
344
+
345
+ // ---------------------------------------------------------------------------
346
+ // placePortLabels — the placement loop from dotsplines.c:440-458
347
+ // @see lib/dotgen/dotsplines.c:440-458
348
+ // ---------------------------------------------------------------------------
349
+
350
+ /**
351
+ * Is an edge attribute DECLARED anywhere in the graph? Models C's
352
+ * `E_<attr> = agfindedgeattr(g, "<attr>")` (`input.c:772-778`), which resolves
353
+ * the attribute *declaration* on the **root** — it is graph-global, not
354
+ * per-subgraph.
355
+ *
356
+ * Scoping to the root is load-bearing under `pack`: `dot_position` runs on each
357
+ * projected COMPONENT, and a component holds only its own edges. Scanning `g`
358
+ * would miss a declaration made on an edge in a sibling component, where C's
359
+ * root-scoped `agfindedgeattr` still sees it.
360
+ *
361
+ * @see lib/common/input.c:772 (E_headlabel/E_taillabel/E_labelangle/E_labeldistance)
362
+ */
363
+ function edgeAttrDeclared(g: Graph, ...names: string[]): boolean {
364
+ const root = g.root;
365
+ for (const name of names) {
366
+ if (root.attrs.has(name)) return true; // `edge [<name>=...]` default
367
+ }
368
+ for (const e of root.edges) {
369
+ for (const name of names) {
370
+ if (e.attrs.has(name)) return true;
371
+ }
372
+ }
373
+ return false;
374
+ }
375
+
376
+ /**
377
+ * Walk all nodes and edges; call placePortlabel for head/tail labels.
378
+ *
379
+ * C's gates are on the attribute DECLARATIONS, not on `GD_has_labels`:
380
+ *
381
+ * if ((E_headlabel || E_taillabel) && (E_labelangle || E_labeldistance)) {
382
+ * for (n = agfstnode(g); ...) {
383
+ * if (E_headlabel) { ...place_portlabel(e, true)... }
384
+ * if (E_taillabel) { ...place_portlabel(e, false)... }
385
+ * }
386
+ * }
387
+ *
388
+ * The port previously gated the two inner branches on
389
+ * `GD_has_labels & HEAD_LABEL/TAIL_LABEL`. That is NOT C, and it broke under
390
+ * `pack`: `has_labels` is OR'd onto the true cgraph root (`common_init_edge`,
391
+ * utils.c:521), so a projected component's own flag is 0 and BOTH branches were
392
+ * skipped — the head/tail labels kept their unplaced default position instead
393
+ * of being offset by labelangle/labeldistance. The per-edge
394
+ * `ED_head_label == NULL` checks inside the loops already do the real filtering,
395
+ * exactly as in C.
396
+ *
397
+ * @see lib/dotgen/dotsplines.c:440-458
398
+ */
399
+ export function placePortLabels(g: Graph): void {
400
+ if (!edgeAttrDeclared(g, 'headlabel', 'taillabel')) return;
401
+ if (!edgeAttrDeclared(g, 'labelangle', 'labeldistance')) return;
402
+ if (edgeAttrDeclared(g, 'headlabel')) placeHeadLabels(g);
403
+ if (edgeAttrDeclared(g, 'taillabel')) placeTailLabels(g);
404
+ }
405
+
406
+ /**
407
+ * Place head port labels for all in-edges of every node.
408
+ * @see lib/dotgen/dotsplines.c:442-447
409
+ */
410
+ function placeHeadLabels(g: Graph): void {
411
+ for (const n of nodesInSeq(g)) {
412
+ for (const e of g.edges) {
413
+ if (e.head !== n) continue;
414
+ if (e.info.head_label === undefined) continue;
415
+ if (placePortlabel(e, true)) updateBB(g, e.info.head_label);
416
+ }
417
+ }
418
+ }
419
+
420
+ /**
421
+ * Place tail port labels for all out-edges of every node.
422
+ * @see lib/dotgen/dotsplines.c:449-455
423
+ */
424
+ function placeTailLabels(g: Graph): void {
425
+ for (const n of nodesInSeq(g)) {
426
+ for (const e of g.edges) {
427
+ if (e.tail !== n) continue;
428
+ if (e.info.tail_label === undefined) continue;
429
+ if (placePortlabel(e, false)) updateBB(g, e.info.tail_label);
430
+ }
431
+ }
432
+ }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Edge-type dispatch for regular (cross-rank) edge routing.
5
+ *
6
+ * `make_regular_edge` routes the box corridor through `routesplines` for
7
+ * `EDGETYPE_SPLINE` and `routepolylines` otherwise; for `EDGETYPE_LINE` it
8
+ * additionally straightens a polyline of more than 4 points down to a 4-point
9
+ * line (first/last control points only). This module is the single home for
10
+ * that dispatch + straighten, called by every box-corridor emit point.
11
+ *
12
+ * @see lib/dotgen/dotsplines.c:make_regular_edge (1799-1808, 1849-1861)
13
+ */
14
+
15
+ import type { Point } from '../../model/geom.js';
16
+ import type { Path } from '../../common/types.js';
17
+ import { routeSplines, routePolylines } from '../../common/splines-routespl.js';
18
+ import { EDGETYPE_SPLINE, EDGETYPE_LINE } from './splines.js';
19
+
20
+ /**
21
+ * Route the box corridor in `P` according to the edge type `et`.
22
+ *
23
+ * - `EDGETYPE_SPLINE` → `routeSplines` (the default; identical to before).
24
+ * - any other type → `routePolylines`.
25
+ * - `EDGETYPE_LINE` with a result of more than 4 points → straighten to the
26
+ * 4-point line `[p0, p0, pLast, pLast]`.
27
+ *
28
+ * Returns the control points, or `null`/empty exactly as the underlying
29
+ * `routeSplines`/`routePolylines` do (the caller treats that as a decline).
30
+ *
31
+ * @see lib/dotgen/dotsplines.c:make_regular_edge
32
+ */
33
+ export function routeRegularByType(P: Path, et: number): Point[] | null {
34
+ if (et === EDGETYPE_SPLINE) return routeSplines(P);
35
+ const ps = routePolylines(P);
36
+ if (et === EDGETYPE_LINE && ps !== null && ps.length > 4) {
37
+ // Straighten the polyline to a line: keep only the endpoints.
38
+ // C: ps[1]=ps[0]; ps[3]=ps[2]=ps[pn-1]; pn=4.
39
+ const p0 = ps[0];
40
+ const pLast = ps[ps.length - 1];
41
+ return [p0, p0, pLast, pLast];
42
+ }
43
+ return ps;
44
+ }