@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,310 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Head/tail edge-label creation: port of the initFontLabelEdgeAttr +
5
+ * head/tail-label blocks inside common_init_edge (lib/common/utils.c:533-545).
6
+ *
7
+ * Called from dotInitNodeEdge after the regular edge-weight fields are set,
8
+ * mirroring the C call order in dot_init_node_edge → common_init_edge.
9
+ *
10
+ * @see lib/common/utils.c:common_init_edge
11
+ * @see lib/common/utils.c:initFontEdgeAttr
12
+ * @see lib/common/utils.c:initFontLabelEdgeAttr
13
+ */
14
+
15
+ import type { Edge } from '../model/edge.js';
16
+ import type { Graph } from '../model/graph.js';
17
+ import type { Node } from '../model/node.js';
18
+ import type { Port } from '../model/geom.js';
19
+ import { makePort } from '../model/edgeInfo.js';
20
+ import type { TextMeasurer } from './textmeasure.js';
21
+ import { makeAnyLabel, DEFAULT_FONTNAME, DEFAULT_COLOR, DEFAULT_FONTSIZE } from './make-label.js';
22
+ import { isHtmlValue, htmlValueContent } from './html-string.js';
23
+ import { lateDouble } from '../common/nodeinit.js';
24
+ import { EDGE_LABEL, EDGE_XLABEL, HEAD_LABEL, TAIL_LABEL } from '../layout/dot/rank.js';
25
+
26
+ // ---------------------------------------------------------------------------
27
+ // Constants — @see lib/common/const.h
28
+ // ---------------------------------------------------------------------------
29
+
30
+ /** Default fontsize for head/tail labels. @see lib/common/const.h:DEFAULT_LABEL_FONTSIZE */
31
+ export const DEFAULT_LABEL_FONTSIZE = 11.0;
32
+
33
+ /** Minimum fontsize (shared across all label types). @see lib/common/const.h:MIN_FONTSIZE */
34
+ export const MIN_FONTSIZE = 1.0;
35
+
36
+ // ---------------------------------------------------------------------------
37
+ // FontInfo — mirrors C's struct fontinfo in utils.c
38
+ // ---------------------------------------------------------------------------
39
+
40
+ interface FontInfo {
41
+ fontsize: number;
42
+ fontname: string;
43
+ fontcolor: string;
44
+ }
45
+
46
+ // ---------------------------------------------------------------------------
47
+ // mapbool — @see lib/common/utils.c:mapbool
48
+ // ---------------------------------------------------------------------------
49
+
50
+ /**
51
+ * Maps a string attribute value to boolean, mirroring mapbool() in utils.c.
52
+ * "false"/"no"/empty → false; "true"/"yes"/non-zero integer → true.
53
+ *
54
+ * @see lib/common/utils.c:mapbool
55
+ */
56
+ function mapbool(s: string | undefined): boolean {
57
+ if (!s || s.toLowerCase() === 'false' || s.toLowerCase() === 'no') return false;
58
+ if (s.toLowerCase() === 'true' || s.toLowerCase() === 'yes') return true;
59
+ const n = parseInt(s, 10);
60
+ return !Number.isNaN(n) && n !== 0;
61
+ }
62
+
63
+ // ---------------------------------------------------------------------------
64
+ // initFontEdgeAttr — @see lib/common/utils.c:456-461
65
+ // ---------------------------------------------------------------------------
66
+
67
+ /**
68
+ * Reads the per-edge font attrs (fontname/fontsize/fontcolor) with fallback
69
+ * to the global defaults. Mirrors initFontEdgeAttr in utils.c.
70
+ *
71
+ * @see lib/common/utils.c:initFontEdgeAttr
72
+ */
73
+ export function initFontEdgeAttr(e: Edge): FontInfo {
74
+ return {
75
+ fontsize: lateDouble(e.attrs.get('fontsize'), DEFAULT_FONTSIZE, MIN_FONTSIZE),
76
+ fontname: e.attrs.get('fontname') || DEFAULT_FONTNAME,
77
+ fontcolor: e.attrs.get('fontcolor') || DEFAULT_COLOR,
78
+ };
79
+ }
80
+
81
+ // ---------------------------------------------------------------------------
82
+ // initFontLabelEdgeAttr — @see lib/common/utils.c:463-471
83
+ // ---------------------------------------------------------------------------
84
+
85
+ /**
86
+ * Reads labelfontname / labelfontsize / labelfontcolor with fallback to fi
87
+ * (the regular edge font attrs). Mirrors initFontLabelEdgeAttr in utils.c.
88
+ *
89
+ * The fallback chain for each attribute:
90
+ * labelfontsize → fi.fontsize → DEFAULT_FONTSIZE
91
+ * labelfontname → fi.fontname → DEFAULT_FONTNAME
92
+ * labelfontcolor → fi.fontcolor → DEFAULT_COLOR
93
+ *
94
+ * @see lib/common/utils.c:initFontLabelEdgeAttr
95
+ */
96
+ export function initFontLabelEdgeAttr(e: Edge, fi: FontInfo): FontInfo {
97
+ return {
98
+ fontsize: lateDouble(e.attrs.get('labelfontsize'), fi.fontsize, MIN_FONTSIZE),
99
+ fontname: e.attrs.get('labelfontname') || fi.fontname,
100
+ fontcolor: e.attrs.get('labelfontcolor') || fi.fontcolor,
101
+ };
102
+ }
103
+
104
+ // ---------------------------------------------------------------------------
105
+ // getLabelFontInfo — lazy FontInfo pair computation
106
+ // ---------------------------------------------------------------------------
107
+
108
+ /**
109
+ * Lazily compute (fi, lfi) the first time either is needed, mirroring the
110
+ * C NULL-guard pattern: fi.fontname starts NULL, lfi.fontname starts NULL.
111
+ *
112
+ * @see lib/common/utils.c:common_init_edge (fi/lfi NULL guards at 534, 541)
113
+ */
114
+ function getLabelFontInfo(e: Edge): FontInfo {
115
+ const fi = initFontEdgeAttr(e);
116
+ return initFontLabelEdgeAttr(e, fi);
117
+ }
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // applyLabel — @see lib/common/utils.c:517-523
121
+ // ---------------------------------------------------------------------------
122
+
123
+ /**
124
+ * Create center edge label and set EDGE_LABEL bit when label attr is non-empty.
125
+ *
126
+ * The flag goes on `g.root` — C's `graph_t *sg = agraphof(agtail(e))`, i.e. the
127
+ * TRUE cgraph root, never the graph currently being initialized. This matters
128
+ * under `pack`: each connected component is init'd and laid out as its own graph,
129
+ * but C still ORs the flags onto the shared root, and the dot layout reads them
130
+ * back via `GD_has_labels(g->root)` (position.c:234 make_LR_constraints,
131
+ * dotsplines.c:243/1552/1650/1776). Setting them on the component left the root's
132
+ * flags clear, so every `g->root` reader took the no-edge-label branch — e.g.
133
+ * make_LR_constraints used the full nodesep on odd ranks instead of C's `sep[1]=5`.
134
+ * (`GD_has_labels(g)` on the component stays 0, which is what `edgelabel_ranks`
135
+ * — rank.c:170, the one reader C scopes to the layout graph — requires.)
136
+ *
137
+ * @see lib/common/utils.c:common_init_edge (graph_t *sg = agraphof(agtail(e)))
138
+ * @see lib/common/utils.c:519 — make_label(e, str, aghtmlstr(str), false, ...)
139
+ */
140
+ function applyLabel(e: Edge, g: Graph, fi: FontInfo, measurer: TextMeasurer): void {
141
+ const str = e.attrs.get('label');
142
+ if (!str) return;
143
+ const isHtml = isHtmlValue(str);
144
+ const content = isHtml ? htmlValueContent(str) : str;
145
+ e.info.label = makeAnyLabel(content, isHtml, fi, measurer, e);
146
+ g.root.info.has_labels |= EDGE_LABEL;
147
+ // ED_label_ontop: mapbool(late_string(e, E_label_float, "false"))
148
+ // @see lib/common/utils.c:522
149
+ e.info.label_ontop = mapbool(e.attrs.get('label_float')) ? 1 : 0;
150
+ }
151
+
152
+ // ---------------------------------------------------------------------------
153
+ // applyXLabel — @see lib/common/utils.c:525-531
154
+ // ---------------------------------------------------------------------------
155
+
156
+ /**
157
+ * Create external edge label and set EDGE_XLABEL bit when xlabel attr is
158
+ * non-empty. Reuses fi if already initialized by applyLabel (C laziness).
159
+ *
160
+ * @see lib/common/utils.c:common_init_edge (lines 525-531)
161
+ * @see lib/common/utils.c:528 — make_label(e, str, aghtmlstr(str), false, ...)
162
+ */
163
+ function applyXLabel(e: Edge, g: Graph, fi: FontInfo, measurer: TextMeasurer): void {
164
+ const str = e.attrs.get('xlabel');
165
+ if (!str) return;
166
+ const isHtml = isHtmlValue(str);
167
+ const content = isHtml ? htmlValueContent(str) : str;
168
+ e.info.xlabel = makeAnyLabel(content, isHtml, fi, measurer, e);
169
+ // C: GD_has_labels(sg) where sg = agraphof(agtail(e)) — the true root.
170
+ g.root.info.has_labels |= EDGE_XLABEL;
171
+ }
172
+
173
+ // ---------------------------------------------------------------------------
174
+ // applyHeadLabel — @see lib/common/utils.c:533-538
175
+ // ---------------------------------------------------------------------------
176
+
177
+ /**
178
+ * Create head_label and set HEAD_LABEL bit when headlabel attr is non-empty.
179
+ * @see lib/common/utils.c:533-538
180
+ * @see lib/common/utils.c:535 — make_label(e, str, aghtmlstr(str), false, ...)
181
+ */
182
+ function applyHeadLabel(e: Edge, g: Graph, lfi: FontInfo, measurer: TextMeasurer): void {
183
+ const str = e.attrs.get('headlabel');
184
+ if (!str) return;
185
+ const isHtml = isHtmlValue(str);
186
+ const content = isHtml ? htmlValueContent(str) : str;
187
+ e.info.head_label = makeAnyLabel(content, isHtml, lfi, measurer, e);
188
+ // C: GD_has_labels(sg) where sg = agraphof(agtail(e)) — the true root.
189
+ g.root.info.has_labels = (g.root.info.has_labels ?? 0) | HEAD_LABEL;
190
+ }
191
+
192
+ // ---------------------------------------------------------------------------
193
+ // applyTailLabel — @see lib/common/utils.c:539-545
194
+ // ---------------------------------------------------------------------------
195
+
196
+ /**
197
+ * Create tail_label and set TAIL_LABEL bit when taillabel attr is non-empty.
198
+ * @see lib/common/utils.c:539-545
199
+ * @see lib/common/utils.c:542 — make_label(e, str, aghtmlstr(str), false, ...)
200
+ */
201
+ function applyTailLabel(e: Edge, g: Graph, lfi: FontInfo, measurer: TextMeasurer): void {
202
+ const str = e.attrs.get('taillabel');
203
+ if (!str) return;
204
+ const isHtml = isHtmlValue(str);
205
+ const content = isHtml ? htmlValueContent(str) : str;
206
+ e.info.tail_label = makeAnyLabel(content, isHtml, lfi, measurer, e);
207
+ // C: GD_has_labels(sg) where sg = agraphof(agtail(e)) — the true root.
208
+ g.root.info.has_labels = (g.root.info.has_labels ?? 0) | TAIL_LABEL;
209
+ }
210
+
211
+ // ---------------------------------------------------------------------------
212
+ // initEdgeLabels — full label block of common_init_edge
213
+ // @see lib/common/utils.c:509-545
214
+ // ---------------------------------------------------------------------------
215
+
216
+ /**
217
+ * Apply label and xlabel with lazy fi init mirroring C's NULL-guard pattern.
218
+ * fi is initialized at most once and reused for xlabel.
219
+ * @see lib/common/utils.c:common_init_edge (lines 515-531)
220
+ */
221
+ function applyMainLabels(e: Edge, g: Graph, measurer: TextMeasurer): void {
222
+ // C: fi.fontname = NULL; init on first need, reuse for xlabel.
223
+ let fi: FontInfo | null = null;
224
+ const labelStr = e.attrs.get('label');
225
+ if (labelStr) {
226
+ fi = initFontEdgeAttr(e);
227
+ applyLabel(e, g, fi, measurer);
228
+ }
229
+ const xlabelStr = e.attrs.get('xlabel');
230
+ if (xlabelStr) {
231
+ applyXLabel(e, g, fi ?? initFontEdgeAttr(e), measurer);
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Apply headlabel and taillabel using the labelfont* chain.
237
+ * @see lib/common/utils.c:common_init_edge (lines 533-545)
238
+ */
239
+ function applyEndLabels(e: Edge, g: Graph, measurer: TextMeasurer): void {
240
+ const lfi = getLabelFontInfo(e);
241
+ applyHeadLabel(e, g, lfi, measurer);
242
+ applyTailLabel(e, g, lfi, measurer);
243
+ }
244
+
245
+ /**
246
+ * Creates label, xlabel, head_label, and tail_label TextlabelT objects on the
247
+ * edge, mirroring common_init_edge in C. C statement order is preserved:
248
+ * label → xlabel → headlabel → taillabel.
249
+ *
250
+ * @see lib/common/utils.c:common_init_edge (lines 509-545)
251
+ */
252
+ /** Shape portfn: aiming point + slope for a named/compass port. */
253
+ type PortFn = (n: unknown, portname: string, compass: string) => Port;
254
+
255
+ /**
256
+ * Resolve a "name" or "name:compass" port string. pt.name is the compass
257
+ * suffix (or the whole string when there is no colon). A null portfn (the
258
+ * default for shapes without one) yields a zero-init Center port. C passes
259
+ * the no-colon compass as NULL; the TS portfn type is `string`, so we pass
260
+ * "" — compassPort treats "" and NULL alike.
261
+ * @see lib/common/utils.c:489 chkPort
262
+ */
263
+ function chkPort(pf: PortFn | null, n: Node, s: string): Port {
264
+ const cp = s.indexOf(':');
265
+ if (cp >= 0) {
266
+ const compass = s.slice(cp + 1);
267
+ const pt = pf ? pf(n, s.slice(0, cp), compass) : makePort();
268
+ pt.name = compass;
269
+ return pt;
270
+ }
271
+ const pt = pf ? pf(n, s, '') : makePort();
272
+ pt.name = s;
273
+ return pt;
274
+ }
275
+
276
+ /** A clip attr explicitly set false (C noClip / !late_bool(...,true)). */
277
+ function isClipDisabled(v: string | undefined): boolean {
278
+ return v !== undefined && /^(false|no|0)$/i.test(v.trim());
279
+ }
280
+
281
+ /** The node shape's portfn, or null. @see lib/common/types.h:shape_functions.portfn */
282
+ function portfnOf(n: Node): PortFn | null {
283
+ const shape = n.info.shape as { fns?: { portfn?: PortFn | null } } | undefined;
284
+ return shape?.fns?.portfn ?? null;
285
+ }
286
+
287
+ /**
288
+ * Port block of common_init_edge: populate tail_port/head_port from the
289
+ * tailport/headport attrs (DOT syntax or explicit), honoring tail/headclip.
290
+ * @see lib/common/utils.c:548-566
291
+ */
292
+ export function initEdgePorts(e: Edge): void {
293
+ const tailStr = e.attrs.get('tailport') ?? '';
294
+ if (tailStr.length > 0) e.tail.info.has_port = true;
295
+ e.info.tail_port = chkPort(portfnOf(e.tail), e.tail, tailStr);
296
+ if (isClipDisabled(e.attrs.get('tailclip'))) e.info.tail_port.clip = false;
297
+ const headStr = e.attrs.get('headport') ?? '';
298
+ if (headStr.length > 0) e.head.info.has_port = true;
299
+ e.info.head_port = chkPort(portfnOf(e.head), e.head, headStr);
300
+ if (isClipDisabled(e.attrs.get('headclip'))) e.info.head_port.clip = false;
301
+ }
302
+
303
+ export function initEdgeLabels(e: Edge, g: Graph, measurer: TextMeasurer): void {
304
+ initEdgePorts(e); // port block runs for every edge, before the label short-circuit
305
+ const hasMain = e.attrs.has('label') || e.attrs.has('xlabel');
306
+ const hasEnd = e.attrs.has('headlabel') || e.attrs.has('taillabel');
307
+ if (!hasMain && !hasEnd) return;
308
+ if (hasMain) applyMainLabels(e, g, measurer);
309
+ if (hasEnd) applyEndLabels(e, g, measurer);
310
+ }
@@ -0,0 +1,140 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Perpendicular-offset geometry for parallel multi-color edge rendering.
5
+ *
6
+ * Ports computeoffset_p and computeoffset_qr from lib/common/emit.c.
7
+ * Pure data-in / data-out; no rendering or ObjState mutation.
8
+ * Consumed by the M1 parallel-bezier branch in src/gvc/device.ts.
9
+ *
10
+ * @see lib/common/emit.c:1836 computeoffset_p
11
+ * @see lib/common/emit.c:1849 computeoffset_qr
12
+ * @see lib/common/emit.c:55 #define EPSILON 0.0001
13
+ * @see lib/common/emit.c:2364 #define SEP 2.0
14
+ */
15
+
16
+ import type { Point } from '../model/geom.js';
17
+
18
+ // ---------------------------------------------------------------------------
19
+ // Constants
20
+ // ---------------------------------------------------------------------------
21
+
22
+ /**
23
+ * Epsilon guard used in the offset vector computation to keep the result
24
+ * finite as the line-segment length approaches zero.
25
+ * @see lib/common/emit.c:55
26
+ */
27
+ export const OFFSET_EPSILON = 0.0001;
28
+
29
+ /**
30
+ * Perpendicular separation between parallel color curves (in graph units).
31
+ * @see lib/common/emit.c:2364
32
+ */
33
+ export const PARALLEL_SEP = 2.0;
34
+
35
+ // ---------------------------------------------------------------------------
36
+ // Offset helpers
37
+ // ---------------------------------------------------------------------------
38
+
39
+ /**
40
+ * Calculate an offset vector, length d, perpendicular to line p→q.
41
+ * The result vector points 90° counter-clockwise from the direction p→q.
42
+ * Formula: res = { (p.y-q.y)*d/len, -(p.x-q.x)*d/len }
43
+ *
44
+ * @see lib/common/emit.c:1836 computeoffset_p
45
+ */
46
+ export function computeOffsetP(p: Point, q: Point, d: number): Point {
47
+ const x = p.x - q.x;
48
+ const y = p.y - q.y;
49
+ // keep d finite as line length approaches 0
50
+ const scale = d / Math.sqrt(x * x + y * y + OFFSET_EPSILON);
51
+ return { x: y * scale, y: -x * scale };
52
+ }
53
+
54
+ /**
55
+ * Calculate an offset vector, length d, perpendicular to spline p,q,r,s
56
+ * at the middle control points q and r. When q and r coincide (len < ε),
57
+ * falls back to the p→s direction.
58
+ *
59
+ * @see lib/common/emit.c:1849 computeoffset_qr
60
+ */
61
+ export function computeOffsetQR(p: Point, q: Point, r: Point, s: Point, d: number): Point {
62
+ const x = q.x - r.x;
63
+ const y = q.y - r.y;
64
+ let len = Math.hypot(x, y);
65
+ let cx = x;
66
+ let cy = y;
67
+ if (len < OFFSET_EPSILON) {
68
+ // control points on top of each other — use slope between endpoints
69
+ cx = p.x - s.x;
70
+ cy = p.y - s.y;
71
+ len = Math.sqrt(cx * cx + cy * cy + OFFSET_EPSILON);
72
+ }
73
+ const scale = d / len;
74
+ return { x: cy * scale, y: -cx * scale };
75
+ }
76
+
77
+ // ---------------------------------------------------------------------------
78
+ // Build parallel-offset spline data
79
+ // ---------------------------------------------------------------------------
80
+
81
+ /**
82
+ * One parallel-offset bezier: a clone of the bezier's control-point array
83
+ * with every point offset by offVec × d (in-place via the tmp array).
84
+ *
85
+ * Returns { offlist, tmplist } for a SINGLE bezier segment with `size`
86
+ * control points (must be 4k+1 for k cubic segments).
87
+ *
88
+ * Algorithm:
89
+ * - offlist[j] = computeOffsetP(pf[j-1 or pf2_prev], pf[j+1], SEP) at j=0 or next segment start
90
+ * - offlist[j+1/2] = computeOffsetQR(pf0,pf1,pf2,pf3, SEP) for the two middle CPs
91
+ * - offlist[last] = computeOffsetP(pf2, pf3, SEP)
92
+ * - tmplist[j] = pf[j] - numc2 * offlist[j] (outermost lane)
93
+ *
94
+ * @see lib/common/emit.c:2449-2480
95
+ */
96
+ export function buildOffsetLists(
97
+ pts: Point[],
98
+ numc2: number,
99
+ ): { offlist: Point[]; tmplist: Point[] } {
100
+ const size = pts.length;
101
+ const offlist: Point[] = new Array<Point>(size).fill({ x: 0, y: 0 });
102
+ const tmplist: Point[] = new Array<Point>(size).fill({ x: 0, y: 0 });
103
+
104
+ let pf3 = pts[0]!;
105
+ let pf2: Point = { x: 0, y: 0 };
106
+ let j = 0;
107
+ for (j = 0; j < size - 1; j += 3) {
108
+ const pf0 = pf3;
109
+ const pf1 = pts[j + 1]!;
110
+ if (j === 0) {
111
+ offlist[j] = computeOffsetP(pf0, pf1, PARALLEL_SEP);
112
+ } else {
113
+ offlist[j] = computeOffsetP(pf2, pf1, PARALLEL_SEP);
114
+ }
115
+ pf2 = pts[j + 2]!;
116
+ pf3 = pts[j + 3]!;
117
+ const mid = computeOffsetQR(pf0, pf1, pf2, pf3, PARALLEL_SEP);
118
+ offlist[j + 1] = mid;
119
+ offlist[j + 2] = mid;
120
+ tmplist[j] = { x: pf0.x - numc2 * offlist[j]!.x, y: pf0.y - numc2 * offlist[j]!.y };
121
+ tmplist[j + 1] = { x: pf1.x - numc2 * offlist[j + 1]!.x, y: pf1.y - numc2 * offlist[j + 1]!.y };
122
+ tmplist[j + 2] = { x: pf2.x - numc2 * offlist[j + 2]!.x, y: pf2.y - numc2 * offlist[j + 2]!.y };
123
+ }
124
+ // last segment — no next pf1; use pf2→pf3 direction
125
+ offlist[j] = computeOffsetP(pf2, pf3, PARALLEL_SEP);
126
+ tmplist[j] = { x: pf3.x - numc2 * offlist[j]!.x, y: pf3.y - numc2 * offlist[j]!.y };
127
+
128
+ return { offlist, tmplist };
129
+ }
130
+
131
+ /**
132
+ * Advance every tmp point by one offset step (add offlist[i] to tmplist[i]).
133
+ * Called once per color before drawing that color's curve.
134
+ * @see lib/common/emit.c:2501-2504
135
+ */
136
+ export function advanceTmpList(tmplist: Point[], offlist: Point[]): void {
137
+ for (let i = 0; i < tmplist.length; i++) {
138
+ tmplist[i] = { x: tmplist[i]!.x + offlist[i]!.x, y: tmplist[i]!.y + offlist[i]!.y };
139
+ }
140
+ }
@@ -0,0 +1,189 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ //
3
+ // Elliptic-wedge bezier tessellation — faithful port of lib/common/ellipse.c.
4
+ //
5
+ // Returns a cubic-Bézier approximation of an elliptical wedge (an arc plus the
6
+ // two line segments to the ellipse center), as an ordered list of control
7
+ // points matching C's `Ppolyline_t.ps` / `pn`. Used by the ortho rounded-corner
8
+ // edge emit, which slices out just the arc portion and draws it as a polyline.
9
+ //
10
+ // Derived (via C) from Luc Maisonobe's Java EllipticalArc implementation.
11
+ //
12
+ // @see lib/common/ellipse.c:ellipticWedge / genEllipticPath / initEllipse
13
+
14
+ import type { Point } from '../model/geom.js';
15
+
16
+ const TWOPI = 2 * Math.PI;
17
+
18
+ interface Ellipse {
19
+ cx: number; cy: number; // center
20
+ a: number; b: number; // semi-major and -minor axes
21
+ eta1: number; eta2: number; // start/end angles of the arc
22
+ }
23
+
24
+ /** @see lib/common/ellipse.c:initEllipse */
25
+ function initEllipse(
26
+ cx: number, cy: number, a: number, b: number, lambda1: number, lambda2: number,
27
+ ): Ellipse {
28
+ let eta1 = Math.atan2(Math.sin(lambda1) / b, Math.cos(lambda1) / a);
29
+ let eta2 = Math.atan2(Math.sin(lambda2) / b, Math.cos(lambda2) / a);
30
+ // make sure we have eta1 <= eta2 <= eta1 + 2*PI
31
+ eta2 -= TWOPI * Math.floor((eta2 - eta1) / TWOPI);
32
+ // the preceding correction fails if we have exactly eta2 - eta1 = 2*PI;
33
+ // it reduces the interval to zero length
34
+ if (lambda2 - lambda1 > Math.PI && eta2 - eta1 < Math.PI) {
35
+ eta2 += TWOPI;
36
+ }
37
+ return { cx, cy, a, b, eta1, eta2 };
38
+ }
39
+
40
+ // coefficients for error estimation while using cubic Bézier curves for
41
+ // approximation. erray_t = [2][4][4]. @see lib/common/ellipse.c
42
+ const coeffs3Low: number[][][] = [
43
+ [[3.85268, -21.229, -0.330434, 0.0127842],
44
+ [-1.61486, 0.706564, 0.225945, 0.263682],
45
+ [-0.910164, 0.388383, 0.00551445, 0.00671814],
46
+ [-0.630184, 0.192402, 0.0098871, 0.0102527]],
47
+ [[-0.162211, 9.94329, 0.13723, 0.0124084],
48
+ [-0.253135, 0.00187735, 0.0230286, 0.01264],
49
+ [-0.0695069, -0.0437594, 0.0120636, 0.0163087],
50
+ [-0.0328856, -0.00926032, -0.00173573, 0.00527385]],
51
+ ];
52
+ const coeffs3High: number[][][] = [
53
+ [[0.0899116, -19.2349, -4.11711, 0.183362],
54
+ [0.138148, -1.45804, 1.32044, 1.38474],
55
+ [0.230903, -0.450262, 0.219963, 0.414038],
56
+ [0.0590565, -0.101062, 0.0430592, 0.0204699]],
57
+ [[0.0164649, 9.89394, 0.0919496, 0.00760802],
58
+ [0.0191603, -0.0322058, 0.0134667, -0.0825018],
59
+ [0.0156192, -0.017535, 0.00326508, -0.228157],
60
+ [-0.0236752, 0.0405821, -0.0173086, 0.176187]],
61
+ ];
62
+ // safety factor to convert the "best" error approximation into a "max bound"
63
+ const safety3 = [0.001, 4.98, 0.207, 0.0067];
64
+
65
+ /** Rational function: quadratic numerator over linear denominator.
66
+ * @see lib/common/ellipse.c:RationalFunction */
67
+ function rationalFunction(x: number, c: readonly number[]): number {
68
+ return (x * (x * c[0] + c[1]) + c[2]) / (x + c[3]);
69
+ }
70
+
71
+ /** Upper bound of the Bézier-vs-ellipse approximation error for a sub-arc.
72
+ * @see lib/common/ellipse.c:estimateError */
73
+ function estimateError(ep: Ellipse, etaA: number, etaB: number): number {
74
+ const eta = 0.5 * (etaA + etaB);
75
+ const x = ep.b / ep.a;
76
+ const dEta = etaB - etaA;
77
+ const cos2 = Math.cos(2 * eta);
78
+ const cos4 = Math.cos(4 * eta);
79
+ const cos6 = Math.cos(6 * eta);
80
+ const coeffs = x < 0.25 ? coeffs3Low : coeffs3High;
81
+
82
+ const c0 = rationalFunction(x, coeffs[0][0]) +
83
+ cos2 * rationalFunction(x, coeffs[0][1]) +
84
+ cos4 * rationalFunction(x, coeffs[0][2]) +
85
+ cos6 * rationalFunction(x, coeffs[0][3]);
86
+ const c1 = rationalFunction(x, coeffs[1][0]) +
87
+ cos2 * rationalFunction(x, coeffs[1][1]) +
88
+ cos4 * rationalFunction(x, coeffs[1][2]) +
89
+ cos6 * rationalFunction(x, coeffs[1][3]);
90
+
91
+ return rationalFunction(x, safety3) * ep.a * Math.exp(c0 + c1 * dEta);
92
+ }
93
+
94
+ // Bézier path builder — moveTo/lineTo/curveTo/endPath append control points,
95
+ // matching the C bezier_path_t (a flat list of pointf). @see ellipse.c
96
+ function curveTo(
97
+ path: Point[], x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,
98
+ ): void {
99
+ path.push({ x: x1, y: y1 }, { x: x2, y: y2 }, { x: x3, y: y3 });
100
+ }
101
+ function lineTo(path: Point[], x: number, y: number): void {
102
+ const cur = path[path.length - 1];
103
+ curveTo(path, cur.x, cur.y, x, y, x, y);
104
+ }
105
+
106
+ /** Approximate an elliptical arc via degree-3 Béziers; path begins and ends
107
+ * with line segments to the ellipse center. @see lib/common/ellipse.c:genEllipticPath */
108
+ function genEllipticPath(ep: Ellipse): Point[] {
109
+ const THRESHOLD = 0.00001; // quality of approximation
110
+
111
+ // find the number of Bézier curves needed
112
+ let found = false;
113
+ let n = 1;
114
+ while (!found && n < 1024) {
115
+ const diffEta = (ep.eta2 - ep.eta1) / n;
116
+ if (diffEta <= 0.5 * Math.PI) {
117
+ let etaOne = ep.eta1;
118
+ found = true;
119
+ for (let i = 0; found && i < n; ++i) {
120
+ const etaA = etaOne;
121
+ etaOne += diffEta;
122
+ found = estimateError(ep, etaA, etaOne) <= THRESHOLD;
123
+ }
124
+ }
125
+ n = n << 1;
126
+ }
127
+
128
+ const dEta = (ep.eta2 - ep.eta1) / n;
129
+ let etaB = ep.eta1;
130
+
131
+ let cosEtaB = Math.cos(etaB);
132
+ let sinEtaB = Math.sin(etaB);
133
+ let aCosEtaB = ep.a * cosEtaB;
134
+ let bSinEtaB = ep.b * sinEtaB;
135
+ let aSinEtaB = ep.a * sinEtaB;
136
+ let bCosEtaB = ep.b * cosEtaB;
137
+ let xB = ep.cx + aCosEtaB;
138
+ let yB = ep.cy + bSinEtaB;
139
+ let xBDot = -aSinEtaB;
140
+ let yBDot = bCosEtaB;
141
+
142
+ const path: Point[] = [];
143
+ // moveTo(center); lineTo(arc start)
144
+ path.push({ x: ep.cx, y: ep.cy });
145
+ lineTo(path, xB, yB);
146
+
147
+ const t = Math.tan(0.5 * dEta);
148
+ const alpha = Math.sin(dEta) * (Math.sqrt(4 + 3 * t * t) - 1) / 3;
149
+
150
+ for (let i = 0; i < n; ++i) {
151
+ const xA = xB;
152
+ const yA = yB;
153
+ const xADot = xBDot;
154
+ const yADot = yBDot;
155
+
156
+ etaB += dEta;
157
+ cosEtaB = Math.cos(etaB);
158
+ sinEtaB = Math.sin(etaB);
159
+ aCosEtaB = ep.a * cosEtaB;
160
+ bSinEtaB = ep.b * sinEtaB;
161
+ aSinEtaB = ep.a * sinEtaB;
162
+ bCosEtaB = ep.b * cosEtaB;
163
+ xB = ep.cx + aCosEtaB;
164
+ yB = ep.cy + bSinEtaB;
165
+ xBDot = -aSinEtaB;
166
+ yBDot = bCosEtaB;
167
+
168
+ curveTo(path, xA + alpha * xADot, yA + alpha * yADot,
169
+ xB - alpha * xBDot, yB - alpha * yBDot, xB, yB);
170
+ }
171
+
172
+ // endPath: lineTo back to the first point (the center)
173
+ lineTo(path, path[0].x, path[0].y);
174
+ return path;
175
+ }
176
+
177
+ /**
178
+ * Return a cubic-Bézier control-point list for an elliptical wedge, center
179
+ * `ctr`, x/y semi-axes `xsemi`/`ysemi`, start angle `angle0`, end angle
180
+ * `angle1`. Includes the beginning and ending line segments to the center.
181
+ * Point order and count match C's `Ppolyline_t.ps` / `pn`.
182
+ * @see lib/common/ellipse.c:ellipticWedge
183
+ */
184
+ export function ellipticWedge(
185
+ ctr: Point, xsemi: number, ysemi: number, angle0: number, angle1: number,
186
+ ): Point[] {
187
+ const ell = initEllipse(ctr.x, ctr.y, xsemi, ysemi, angle0, angle1);
188
+ return genEllipticPath(ell);
189
+ }