@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,131 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Multi-format public render entry point.
5
+ *
6
+ * Wraps the low-level `gvc/device.ts:render` with context lifecycle
7
+ * management (layout → render → freeLayout) and structured-error handling,
8
+ * mirroring `src/index.ts:renderSvg` exactly.
9
+ *
10
+ * @see lib/gvc/gvc.c:gvRender
11
+ */
12
+
13
+ import type { Graph } from '../model/graph.js';
14
+ import { createDefaultContext } from '../gvc/default-context.js';
15
+ import { render as deviceRender } from '../gvc/device.js';
16
+ import { RenderError } from '../errors.js';
17
+ import type { GvError } from '../errors.js';
18
+ import type { EngineName } from '../gvc/context.js';
19
+
20
+ // ---------------------------------------------------------------------------
21
+ // Public types
22
+ // ---------------------------------------------------------------------------
23
+
24
+ /**
25
+ * Supported output formats. Closed string union matching the built-in
26
+ * renderers registered by `createDefaultContext`.
27
+ */
28
+ export type OutputFormat =
29
+ | 'svg'
30
+ | 'dot'
31
+ | 'xdot'
32
+ | 'json'
33
+ | 'plain'
34
+ | 'plain-ext'
35
+ | 'imap'
36
+ | 'cmapx';
37
+
38
+ /**
39
+ * Options for {@link render}.
40
+ */
41
+ export interface RenderOptions {
42
+ /**
43
+ * Layout engine to use. Defaults to `'dot'`.
44
+ *
45
+ * yAxis is intentionally absent: coordinate orientation is a `getLayout`
46
+ * concern (ADR-5). The raw format strings produced here carry native
47
+ * y-up coordinates; callers that need y-down must flip in post-processing.
48
+ */
49
+ engine?: EngineName;
50
+
51
+ /**
52
+ * Inline external images as `data:` URIs (AD-1, additive). Defaults to
53
+ * `false` — unset reproduces the pre-AD-1 raw `xlink:href="src"`
54
+ * passthrough byte-for-byte. When `true`, the SVG emitter consults the
55
+ * process-global resolver registered via `setImageResolver` (from
56
+ * `graphviz-ts`) for each `image=`/HTML `<IMG>` source; a hit is inlined
57
+ * as `data:<mime>;base64,<...>`, a miss (or no resolver registered) falls
58
+ * back to the raw src passthrough. Has no effect on non-SVG formats.
59
+ */
60
+ inlineImages?: boolean;
61
+ }
62
+
63
+ // ---------------------------------------------------------------------------
64
+ // Private helpers (mirrors index.ts)
65
+ // ---------------------------------------------------------------------------
66
+
67
+ /**
68
+ * Duck-type a thrown value as a {@link GvError}: object with string `type`
69
+ * and string `code`. Re-implemented here (not imported) so this module has
70
+ * no circular dependency on `src/index.ts`.
71
+ */
72
+ function isGvErrorLike(err: unknown): err is GvError {
73
+ return (
74
+ typeof err === 'object' &&
75
+ err !== null &&
76
+ typeof (err as { type?: unknown }).type === 'string' &&
77
+ typeof (err as { code?: unknown }).code === 'string'
78
+ );
79
+ }
80
+
81
+ /* v8 ignore next -- defensive normalizer; unreachable via public API */
82
+ function messageOf(err: unknown): string {
83
+ return err instanceof Error ? err.message : String(err);
84
+ }
85
+
86
+ // ---------------------------------------------------------------------------
87
+ // Public API
88
+ // ---------------------------------------------------------------------------
89
+
90
+ /**
91
+ * Render a (parsed or built) graph to the requested format string.
92
+ *
93
+ * Lifecycle: createDefaultContext → layout → deviceRender → freeLayout.
94
+ * Error handling mirrors `renderSvg`: GvError-like throws re-surface
95
+ * unchanged; unknown throws become `RenderError('RENDER_ERROR')`.
96
+ *
97
+ * @remarks
98
+ * Security: for the markup formats (`svg`, `cmapx`, `imap`), treat the output
99
+ * as attacker-controlled when the source graph came from untrusted DOT.
100
+ * Attribute values are XML-escaped, but URL schemes and resource origins
101
+ * (`href`/`URL`/`image`/`stylesheet`) are passed through unfiltered, matching
102
+ * native Graphviz. Apply a Content-Security-Policy or sanitize before embedding
103
+ * — see the README "Security" section.
104
+ *
105
+ * @param g - graph produced by `parse(...)` or the builder API
106
+ * @param format - target output format
107
+ * @param opts - optional engine override (default: `'dot'`)
108
+ * @returns rendered string in the requested format
109
+ * @throws RenderError on layout or render failure
110
+ *
111
+ * @see lib/gvc/gvc.c:gvRender
112
+ */
113
+ export function render(
114
+ g: Graph,
115
+ format: OutputFormat,
116
+ opts?: RenderOptions,
117
+ ): string {
118
+ const engine: EngineName = opts?.engine ?? 'dot';
119
+ const inlineImages = opts?.inlineImages ?? false;
120
+ const ctx = createDefaultContext();
121
+ try {
122
+ ctx.layout(g, engine);
123
+ const result = deviceRender(ctx, g, format, inlineImages);
124
+ ctx.freeLayout(g, engine);
125
+ return result;
126
+ } catch (err: unknown) {
127
+ /* v8 ignore next -- current engines don't throw a GvError-like value here */
128
+ if (isGvErrorLike(err)) throw err;
129
+ throw new RenderError(messageOf(err), 'RENDER_ERROR');
130
+ }
131
+ }
@@ -0,0 +1,113 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * SVG emission for typed arrowhead draw-ops (ADR-1). Each {@link ArrowDrawOp}
5
+ * becomes the matching SVG primitive with the edge pen color: filled polygons
6
+ * and ellipses use the pen color for both fill and stroke; open shapes,
7
+ * polylines, and Bézier arms use `fill="none"`. Geometry is transformed from
8
+ * layout space to device space via `transformPoint`, matching the existing
9
+ * arrow-polygon emitter.
10
+ *
11
+ * @see plugin/core/gvrender_core_svg.c:svg_polygon / svg_ellipse / svg_polyline
12
+ * @see lib/common/arrows.c:arrow_gen (emit sequence)
13
+ */
14
+
15
+ import type { Point } from '../model/geom.js';
16
+ import type { RenderJob } from '../gvc/job.js';
17
+ import type { ArrowDrawOp } from '../common/arrows-types.js';
18
+ import { transformPoint } from '../gvc/device.js';
19
+ import { emitPoints, emitBezierPath, emitPenWidth } from './svg-helpers.js';
20
+
21
+ const PENWIDTH_NORMAL = 1.0;
22
+ const PENWIDTH_THRESHOLD = 0.005;
23
+
24
+ /** Emit ` stroke-width` only when the pen width differs from the SVG default. */
25
+ function emitArrowPenWidth(job: RenderJob, pw: number): void {
26
+ if (Math.abs(pw - PENWIDTH_NORMAL) >= PENWIDTH_THRESHOLD) emitPenWidth(job, pw);
27
+ }
28
+
29
+ /** Emit ` <attr>="<opacity>"` when the pen color carries partial alpha. */
30
+ function emitArrowOpacity(job: RenderJob, attr: string, opacity: string | null): void {
31
+ if (opacity !== null) job.write(' ' + attr + '="' + opacity + '"');
32
+ }
33
+
34
+ /** `<polygon>` with Adobe first-point repetition (matches svg_polygon). */
35
+ function emitPolygonOp(points: Point[], filled: boolean, penColor: string, job: RenderJob, pw: number, opacity: string | null): void {
36
+ const pts = points.map((p) => transformPoint(p, job));
37
+ job.write('<polygon fill="' + (filled ? penColor : 'none') + '"');
38
+ if (filled) emitArrowOpacity(job, 'fill-opacity', opacity);
39
+ job.write(' stroke="' + penColor + '"');
40
+ emitArrowPenWidth(job, pw);
41
+ emitArrowOpacity(job, 'stroke-opacity', opacity);
42
+ job.write(' points="');
43
+ emitPoints(job, pts);
44
+ if (pts.length > 0) {
45
+ const p0 = pts[0]!;
46
+ job.write(' ');
47
+ job.printDouble(p0.x);
48
+ job.write(',');
49
+ job.printDouble(p0.y);
50
+ }
51
+ job.write('"/>\n');
52
+ }
53
+
54
+ /** Ellipse op shape (dot/odot). */
55
+ interface EllipseOp { center: Point; rx: number; ry: number; filled: boolean }
56
+
57
+ /** `<ellipse>` (dot/odot). rx/ry are emitted in layout units (device scale 1). */
58
+ function emitEllipseOp(op: EllipseOp, penColor: string, job: RenderJob, pw: number, opacity: string | null): void {
59
+ const c = transformPoint(op.center, job);
60
+ job.write('<ellipse fill="' + (op.filled ? penColor : 'none') + '"');
61
+ if (op.filled) emitArrowOpacity(job, 'fill-opacity', opacity);
62
+ job.write(' stroke="' + penColor + '"');
63
+ emitArrowPenWidth(job, pw);
64
+ emitArrowOpacity(job, 'stroke-opacity', opacity);
65
+ job.write(' cx="');
66
+ job.printDouble(c.x);
67
+ job.write('" cy="');
68
+ job.printDouble(c.y);
69
+ job.write('" rx="');
70
+ job.printDouble(op.rx);
71
+ job.write('" ry="');
72
+ job.printDouble(op.ry);
73
+ job.write('"/>\n');
74
+ }
75
+
76
+ /** `<polyline>` (tee/box/gap/curve shaft) — never filled. */
77
+ function emitPolylineOp(points: Point[], penColor: string, job: RenderJob, pw: number, opacity: string | null): void {
78
+ const pts = points.map((p) => transformPoint(p, job));
79
+ job.write('<polyline fill="none" stroke="' + penColor + '"');
80
+ emitArrowPenWidth(job, pw);
81
+ emitArrowOpacity(job, 'stroke-opacity', opacity);
82
+ job.write(' points="');
83
+ emitPoints(job, pts);
84
+ job.write('"/>\n');
85
+ }
86
+
87
+ /** `<path>` cubic Bézier (curve/icurve arms) — never filled. */
88
+ function emitBezierOp(points: Point[], penColor: string, job: RenderJob, pw: number, opacity: string | null): void {
89
+ const pts = points.map((p) => transformPoint(p, job));
90
+ job.write('<path fill="none" stroke="' + penColor + '"');
91
+ emitArrowPenWidth(job, pw);
92
+ emitArrowOpacity(job, 'stroke-opacity', opacity);
93
+ job.write(' d="');
94
+ emitBezierPath(job, pts);
95
+ job.write('"/>\n');
96
+ }
97
+
98
+ /**
99
+ * Emit one edge end's arrowhead draw-ops, in order, with the given pen color.
100
+ * `opacity` is the stringified alpha (`colorOpacity`) or null when the pen color
101
+ * is opaque; it drives the SVG fill/stroke-opacity attributes (e.g. an edge
102
+ * color="#rrggbbaa"). @see lib/common/arrows.c:arrow_gen
103
+ */
104
+ export function emitArrowOps(ops: ArrowDrawOp[], penColor: string, job: RenderJob, pw: number, opacity: string | null = null): void {
105
+ for (const op of ops) {
106
+ switch (op.kind) {
107
+ case 'polygon': emitPolygonOp(op.points, op.filled, penColor, job, pw, opacity); break;
108
+ case 'ellipse': emitEllipseOp(op, penColor, job, pw, opacity); break;
109
+ case 'polyline': emitPolylineOp(op.points, penColor, job, pw, opacity); break;
110
+ case 'bezier': emitBezierOp(op.points, penColor, job, pw, opacity); break;
111
+ }
112
+ }
113
+ }
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * SVG cluster group helpers.
5
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_cluster / svg_end_cluster
6
+ */
7
+
8
+ import type { Graph } from '../model/graph.js';
9
+ import type { RenderJob } from '../gvc/job.js';
10
+ import { escapeXmlTitle } from './svg-helpers.js';
11
+ import { svgClusterId, svgClusterClass } from './svg-id.js';
12
+
13
+ export function svgBeginCluster(sg: Graph, job: RenderJob): void {
14
+ // Id from getObjId (DOT `id` attr / gid prefix / clust<seq>); layer prefix
15
+ // only (no per-object suffix for graph/cluster ids). DOT `class` is appended.
16
+ // @see lib/common/emit.c:getObjId; plugin/core/gvrender_core_svg.c:svg_print_id_class
17
+ job.write('<g id="' + escapeXmlTitle(job.idLayerPrefix() + svgClusterId(sg, job))
18
+ + '" ' + svgClusterClass(sg) + '>\n');
19
+ job.write('<title>' + escapeXmlTitle(sg.name) + '</title>\n');
20
+ }
21
+
22
+ export function svgEndCluster(job: RenderJob): void {
23
+ job.write('</g>\n');
24
+ }
@@ -0,0 +1,228 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ //
3
+ // Rounded orthogonal edge corners — faithful port of the corner half of
4
+ // lib/common/emit.c's splines=ortho + radius/style=rounded path (emit.c
5
+ // 2130-2249). Given an edge's spline control points (graphviz-internal y-up),
6
+ // finds each orthogonal corner and computes its truncation points (inset by
7
+ // `radius` along each incident segment) and arc-wedge parameters.
8
+ //
9
+ // The emit half (segment + arc polylines) is added in T3. Coordinates are the
10
+ // internal y-up frame the spline is stored in; the SVG renderer negates y.
11
+
12
+ import type { Point } from '../model/geom.js';
13
+ import { ellipticWedge } from '../common/ellipse-wedge.js';
14
+
15
+ /** Per-corner geometry, mirroring emit.c:corner_info_t. */
16
+ export interface CornerInfo {
17
+ /** Index of the corner point in the spline list. */
18
+ idx: number;
19
+ /** Truncation point toward the previous segment (curr − dir1·radius). */
20
+ truncPrev: Point;
21
+ /** Truncation point toward the next segment (curr + dir2·radius). */
22
+ truncNext: Point;
23
+ /** Center of the arc wedge. */
24
+ wedgeCenter: Point;
25
+ /** Arc start/end angles. */
26
+ angle1: number;
27
+ angle2: number;
28
+ }
29
+
30
+ /** @see lib/common/emit.c:find_prev_distinct (TOLERANCE 0.01) */
31
+ function findPrevDistinct(pts: Point[], i: number): number {
32
+ const TOL = 0.01;
33
+ for (let j = i - 1; j >= 0; j--) {
34
+ if (Math.hypot(pts[j].x - pts[i].x, pts[j].y - pts[i].y) > TOL) return j;
35
+ }
36
+ return -1;
37
+ }
38
+
39
+ /** @see lib/common/emit.c:find_next_distinct (TOLERANCE 0.01) */
40
+ function findNextDistinct(pts: Point[], i: number, n: number): number {
41
+ const TOL = 0.01;
42
+ for (let j = i + 1; j < n; j++) {
43
+ if (Math.hypot(pts[j].x - pts[i].x, pts[j].y - pts[i].y) > TOL) return j;
44
+ }
45
+ return -1;
46
+ }
47
+
48
+ /** Wedge center + arc angles for an orthogonal corner (8 orientation cases).
49
+ * @see lib/common/emit.c:calculate_wedge_parameters */
50
+ function calculateWedgeParameters(
51
+ ci: CornerInfo, curr: Point, dx1: number, dy1: number, dx2: number, dy2: number,
52
+ radius: number, seg1Horiz: boolean, seg2Vert: boolean,
53
+ ): void {
54
+ if (seg1Horiz && seg2Vert) {
55
+ if (dx1 > 0 && dy2 < 0) { // right then down
56
+ ci.wedgeCenter = { x: curr.x - radius, y: curr.y - radius };
57
+ ci.angle1 = 0; ci.angle2 = Math.PI / 2;
58
+ } else if (dx1 > 0 && dy2 > 0) { // right then up
59
+ ci.wedgeCenter = { x: curr.x - radius, y: curr.y + radius };
60
+ ci.angle1 = -Math.PI / 2; ci.angle2 = 0;
61
+ } else if (dx1 < 0 && dy2 < 0) { // left then down
62
+ ci.wedgeCenter = { x: curr.x + radius, y: curr.y - radius };
63
+ ci.angle1 = Math.PI / 2; ci.angle2 = Math.PI;
64
+ } else { // left then up
65
+ ci.wedgeCenter = { x: curr.x + radius, y: curr.y + radius };
66
+ ci.angle1 = Math.PI; ci.angle2 = (3 * Math.PI) / 2;
67
+ }
68
+ } else {
69
+ if (dy1 < 0 && dx2 > 0) { // down then right
70
+ ci.wedgeCenter = { x: curr.x + radius, y: curr.y + radius };
71
+ ci.angle1 = Math.PI; ci.angle2 = (3 * Math.PI) / 2;
72
+ } else if (dy1 < 0 && dx2 < 0) { // down then left
73
+ ci.wedgeCenter = { x: curr.x - radius, y: curr.y + radius };
74
+ ci.angle1 = (3 * Math.PI) / 2; ci.angle2 = 2 * Math.PI;
75
+ } else if (dy1 > 0 && dx2 > 0) { // up then right
76
+ ci.wedgeCenter = { x: curr.x + radius, y: curr.y - radius };
77
+ ci.angle1 = Math.PI / 2; ci.angle2 = Math.PI;
78
+ } else { // up then left
79
+ ci.wedgeCenter = { x: curr.x - radius, y: curr.y - radius };
80
+ ci.angle1 = 0; ci.angle2 = Math.PI / 2;
81
+ }
82
+ }
83
+ }
84
+
85
+ /** Process a detected orthogonal corner, appending it unless it duplicates one
86
+ * already found (DUP_TOL 0.01). @see lib/common/emit.c:process_corner */
87
+ function processCorner(
88
+ corners: CornerInfo[], pts: Point[], i: number, curr: Point,
89
+ dx1: number, dy1: number, dx2: number, dy2: number, radius: number,
90
+ seg1Horiz: boolean, seg2Vert: boolean,
91
+ ): void {
92
+ const DUP_TOL = 0.01;
93
+ for (const ci of corners) {
94
+ const existing = pts[ci.idx];
95
+ if (Math.hypot(curr.x - existing.x, curr.y - existing.y) < DUP_TOL) return;
96
+ }
97
+
98
+ const ci: CornerInfo = {
99
+ idx: i, truncPrev: { x: 0, y: 0 }, truncNext: { x: 0, y: 0 },
100
+ wedgeCenter: { x: 0, y: 0 }, angle1: 0, angle2: 0,
101
+ };
102
+
103
+ // Normalize direction vectors.
104
+ const len1 = Math.hypot(dx1, dy1);
105
+ const len2 = Math.hypot(dx2, dy2);
106
+ const ndx1 = dx1 / len1, ndy1 = dy1 / len1;
107
+ const ndx2 = dx2 / len2, ndy2 = dy2 / len2;
108
+
109
+ // Truncation points (move radius distance away from the corner).
110
+ ci.truncPrev = { x: curr.x - ndx1 * radius, y: curr.y - ndy1 * radius };
111
+ ci.truncNext = { x: curr.x + ndx2 * radius, y: curr.y + ndy2 * radius };
112
+
113
+ calculateWedgeParameters(ci, curr, dx1, dy1, dx2, dy2, radius, seg1Horiz, seg2Vert);
114
+ corners.push(ci);
115
+ }
116
+
117
+ /**
118
+ * Find every orthogonal corner in the spline point list and compute its
119
+ * truncation + wedge parameters. A corner is a horizontal→vertical or
120
+ * vertical→horizontal bend (TOL 0.1). @see lib/common/emit.c:find_ortho_corners
121
+ */
122
+ export function findOrthoCorners(pts: Point[], radius: number): CornerInfo[] {
123
+ const TOL = 0.1;
124
+ const n = pts.length;
125
+ const corners: CornerInfo[] = [];
126
+
127
+ for (let i = 0; i < n; i++) {
128
+ const prevIdx = findPrevDistinct(pts, i);
129
+ const nextIdx = findNextDistinct(pts, i, n);
130
+ if (prevIdx === -1 || nextIdx === -1) continue;
131
+
132
+ const prev = pts[prevIdx], curr = pts[i], next = pts[nextIdx];
133
+ const dx1 = curr.x - prev.x, dy1 = curr.y - prev.y;
134
+ const dx2 = next.x - curr.x, dy2 = next.y - curr.y;
135
+
136
+ const seg1Horiz = Math.abs(dy1) < TOL && Math.abs(dx1) > TOL;
137
+ const seg1Vert = Math.abs(dx1) < TOL && Math.abs(dy1) > TOL;
138
+ const seg2Horiz = Math.abs(dy2) < TOL && Math.abs(dx2) > TOL;
139
+ const seg2Vert = Math.abs(dx2) < TOL && Math.abs(dy2) > TOL;
140
+
141
+ const isCorner = (seg1Horiz && seg2Vert) || (seg1Vert && seg2Horiz);
142
+ if (isCorner) {
143
+ processCorner(corners, pts, i, curr, dx1, dy1, dx2, dy2, radius, seg1Horiz, seg2Vert);
144
+ }
145
+ }
146
+
147
+ // Sort by corner index (emit.c sorts the list before segment rendering).
148
+ corners.sort((a, b) => a.idx - b.idx);
149
+ return corners;
150
+ }
151
+
152
+ /** True when `p` is within CORNER_TOL of any corner point. */
153
+ function atAnyCorner(p: Point, pts: Point[], corners: CornerInfo[], tol: number): boolean {
154
+ for (const c of corners) {
155
+ const cp = pts[c.idx];
156
+ if (Math.hypot(p.x - cp.x, p.y - cp.y) < tol) return true;
157
+ }
158
+ return false;
159
+ }
160
+
161
+ /** Straight polyline segments between truncated corners.
162
+ * @see lib/common/emit.c:2593-2654 (segment loop) */
163
+ function segmentPolylines(pts: Point[], corners: CornerInfo[]): Point[][] {
164
+ const CORNER_TOL = 0.01;
165
+ const n = pts.length;
166
+ const out: Point[][] = [];
167
+
168
+ let segStartIdx = 0;
169
+ let segStartPt = pts[0];
170
+
171
+ for (let c = 0; c <= corners.length; c++) {
172
+ let segEndIdx: number;
173
+ let segEndPt: Point;
174
+ if (c < corners.length) {
175
+ segEndIdx = corners[c].idx;
176
+ segEndPt = corners[c].truncPrev;
177
+ } else {
178
+ segEndIdx = n - 1;
179
+ segEndPt = pts[n - 1];
180
+ }
181
+
182
+ const seg: Point[] = [segStartPt];
183
+ for (let pt = segStartIdx + 1; pt < segEndIdx; pt++) {
184
+ if (!atAnyCorner(pts[pt], pts, corners, CORNER_TOL)) seg.push(pts[pt]);
185
+ }
186
+ seg.push(segEndPt);
187
+ out.push(seg);
188
+
189
+ if (c < corners.length) {
190
+ // Skip all duplicates of this corner, then resume at its trunc_next.
191
+ let nextIdx = corners[c].idx + 1;
192
+ while (nextIdx < n && atAnyCorner(pts[nextIdx], pts, corners, CORNER_TOL)) nextIdx++;
193
+ segStartIdx = nextIdx;
194
+ segStartPt = corners[c].truncNext;
195
+ }
196
+ }
197
+ return out;
198
+ }
199
+
200
+ /** Arc polyline per corner: the wedge slice [3 .. pn-4].
201
+ * @see lib/common/emit.c:draw_ortho_corner_markers / render_corner_arc */
202
+ function cornerArcPolylines(corners: CornerInfo[], radius: number): Point[][] {
203
+ const out: Point[][] = [];
204
+ for (const ci of corners) {
205
+ const wedge = ellipticWedge(ci.wedgeCenter, radius, radius, ci.angle1, ci.angle2);
206
+ if (wedge.length > 4) {
207
+ const arcStart = 3; // skip center, first arc point, AND duplicate
208
+ const arcEnd = wedge.length - 4; // skip duplicate endpoint, last arc point, AND center
209
+ const count = arcEnd >= arcStart ? arcEnd - arcStart + 1 : 0;
210
+ if (count >= 2) out.push(wedge.slice(arcStart, arcEnd + 1));
211
+ }
212
+ }
213
+ return out;
214
+ }
215
+
216
+ /**
217
+ * The full list of `<polyline>` point-arrays native emits for an ortho edge with
218
+ * rounded corners: straight segments between truncated corners first, then one
219
+ * arc polyline per corner — matching emit.c's order (segment loop, then
220
+ * draw_ortho_corner_markers). Returns `[]` when no orthogonal corner is found,
221
+ * so the caller falls back to the bezier `<path>`.
222
+ * @see lib/common/emit.c:2583-2662
223
+ */
224
+ export function orthoRoundedPolylines(pts: Point[], radius: number): Point[][] {
225
+ const corners = findOrthoCorners(pts, radius);
226
+ if (corners.length === 0) return [];
227
+ return [...segmentPolylines(pts, corners), ...cornerArcPolylines(corners, radius)];
228
+ }
@@ -0,0 +1,180 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Split-along-length multi-color edges: a `color="c1;f1:c2;f2"` (semicolon)
5
+ * spec draws each routed spline split along its ARC LENGTH, one sub-curve per
6
+ * color segment. This is C's `multicolor()` path, reached when the color has
7
+ * both ';' and ':' (numsemi && numc); the plain ':' syntax is the parallel
8
+ * branch (svg-parallel-edge.ts).
9
+ *
10
+ * Arrow rule (note: inverse of the parallel branch): tail arrow = FIRST color,
11
+ * head arrow = endcolor (LAST drawn color).
12
+ *
13
+ * @see lib/common/emit.c:1975 multicolor
14
+ * @see lib/common/emit.c:1921 splitBSpline
15
+ * @see lib/common/emit.c:1908 approxLen
16
+ * @see lib/common/utils.c:175 Bezier (de Casteljau split)
17
+ */
18
+
19
+ import type { Edge } from '../model/edge.js';
20
+ import type { RenderJob } from '../gvc/job.js';
21
+ import type { Point, Bezier } from '../model/geom.js';
22
+ import { parseSegs } from '../common/multicolor.js';
23
+ import { transformPoint } from '../gvc/device.js';
24
+ import { emitBezierPath, emitDash, emitPenWidth } from './svg-helpers.js';
25
+ import { resolveRenderColor, colorPaint } from './color-resolve.js';
26
+
27
+ const DEFAULT_COLOR = 'black';
28
+ const PENWIDTH_NORMAL = 1.0;
29
+ const PENWIDTH_THRESHOLD = 0.005;
30
+ /** AEQ0 tolerance for fraction comparisons. */
31
+ const EPS = 1e-5;
32
+
33
+ function dist(a: Point, b: Point): number {
34
+ return Math.hypot(a.x - b.x, a.y - b.y);
35
+ }
36
+
37
+ /** Chord length of one cubic (control points at off..off+3). @see emit.c:1908 */
38
+ function approxLen(list: Point[], off: number): number {
39
+ return dist(list[off]!, list[off + 1]!) +
40
+ dist(list[off + 1]!, list[off + 2]!) +
41
+ dist(list[off + 2]!, list[off + 3]!);
42
+ }
43
+
44
+ /**
45
+ * de Casteljau split of a single cubic (control points v[0..3]) at parameter t,
46
+ * returning the left and right 4-point sub-curves. Ports C's Bezier().
47
+ */
48
+ function splitCubic(v: Point[], t: number): { left: Point[]; right: Point[] } {
49
+ const u = 1 - t;
50
+ const row = [v[0]!, v[1]!, v[2]!, v[3]!];
51
+ const left: Point[] = [row[0]!];
52
+ const right: Point[] = new Array<Point>(4);
53
+ right[3] = row[3]!;
54
+ for (let i = 1; i <= 3; i++) {
55
+ for (let j = 0; j <= 3 - i; j++) {
56
+ row[j] = { x: u * row[j]!.x + t * row[j + 1]!.x, y: u * row[j]!.y + t * row[j + 1]!.y };
57
+ }
58
+ left.push(row[0]!);
59
+ right[3 - i] = row[3 - i]!;
60
+ }
61
+ return { left, right };
62
+ }
63
+
64
+ /**
65
+ * Split a B-spline (control points, length 3*cnt+1) at arc-length fraction t.
66
+ * @see lib/common/emit.c:1921 splitBSpline
67
+ */
68
+ function splitBSpline(list: Point[], t: number): { left: Point[]; right: Point[] } {
69
+ const cnt = (list.length - 1) / 3;
70
+ if (cnt === 1) return splitCubic(list, t);
71
+ const lens: number[] = [];
72
+ let sum = 0;
73
+ for (let i = 0; i < cnt; i++) { lens.push(approxLen(list, 3 * i)); sum += lens[i]!; }
74
+ const target = t * sum;
75
+ sum = 0;
76
+ let i = 0;
77
+ for (; i < cnt; i++) { sum += lens[i]!; if (sum >= target) break; }
78
+ const last = lens[i]!;
79
+ const r = (target - (sum - last)) / last;
80
+ const seg = splitCubic(list.slice(3 * i, 3 * i + 4), r);
81
+ return {
82
+ left: list.slice(0, 3 * i).concat(seg.left),
83
+ right: seg.right.concat(list.slice(3 * i + 4)),
84
+ };
85
+ }
86
+
87
+ /** Emit one sub-curve as an SVG path in the given color (style from obj). */
88
+ function emitCurve(list: Point[], color: string, job: RenderJob): void {
89
+ const obj = job.obj;
90
+ const pts = list.map((p) => transformPoint(p, job));
91
+ // Resolve the segment color through the SVG known-color gate (C's
92
+ // gvrender_set_pencolor per multicolor segment) before it reaches stroke=".
93
+ job.write('<path fill="none" stroke="' + colorPaint(resolveRenderColor(color)) + '"');
94
+ if (obj !== null && Math.abs(obj.penWidth - PENWIDTH_NORMAL) >= PENWIDTH_THRESHOLD) {
95
+ emitPenWidth(job, obj.penWidth);
96
+ }
97
+ if (obj !== null) emitDash(job, obj.pen);
98
+ job.write(' d="');
99
+ emitBezierPath(job, pts);
100
+ job.write('"/>\n');
101
+ }
102
+
103
+ interface ColorSeg { color: string | null; t: number; }
104
+
105
+ /** One color segment of a split spline: the sub-curve control points + its color. */
106
+ export interface ColoredSubCurve { color: string; points: Point[]; }
107
+
108
+ /** Running state for one spline's length-split walk. */
109
+ interface SplitState { left: number; first: boolean; bzR: Point[]; done: boolean; endColor: string; }
110
+
111
+ /** Apply one color segment: split off its length share, append the sub-curve. */
112
+ function stepSegment(list: Point[], s: ColorSeg, st: SplitState, out: ColoredSubCurve[]): void {
113
+ if (Math.abs(s.t) < EPS) return;
114
+ const color = s.color ?? DEFAULT_COLOR;
115
+ st.left -= s.t;
116
+ st.endColor = color;
117
+ if (st.first) {
118
+ st.first = false;
119
+ const sp = splitBSpline(list, s.t);
120
+ out.push({ color, points: sp.left });
121
+ st.bzR = sp.right;
122
+ if (Math.abs(st.left) < EPS) st.done = true;
123
+ } else if (Math.abs(st.left) < EPS) {
124
+ out.push({ color, points: st.bzR });
125
+ st.done = true;
126
+ } else {
127
+ const sp = splitBSpline(st.bzR, s.t / (st.left + s.t));
128
+ out.push({ color, points: sp.left });
129
+ st.bzR = sp.right;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Split one routed spline along its arc length into colored sub-curves per the
135
+ * color segments (C's multicolor() walk), returning the sub-curves and the end
136
+ * color. Pure geometry — no emission — so both the SVG and xdot renderers can
137
+ * share it. @see lib/common/emit.c:1975 multicolor
138
+ */
139
+ export function splitSplineByColor(
140
+ list: Point[],
141
+ segs: ColorSeg[],
142
+ ): { curves: ColoredSubCurve[]; endColor: string } {
143
+ const st: SplitState = { left: 1, first: true, bzR: list, done: false, endColor: DEFAULT_COLOR };
144
+ const curves: ColoredSubCurve[] = [];
145
+ for (const s of segs) {
146
+ stepSegment(list, s, st, curves);
147
+ if (st.done) break;
148
+ }
149
+ return { curves, endColor: st.endColor };
150
+ }
151
+
152
+ /** Draw one spline split along its length per the color segments; return endcolor. */
153
+ function drawSplitSpline(list: Point[], segs: ColorSeg[], job: RenderJob): string {
154
+ const { curves, endColor } = splitSplineByColor(list, segs);
155
+ for (const c of curves) emitCurve(c.points, c.color, job);
156
+ return endColor;
157
+ }
158
+
159
+ /**
160
+ * Emit a split-along-length multi-color edge. Returns the first and end colors
161
+ * for arrow drawing (tail = first, head = end).
162
+ * @see lib/common/emit.c:1975 multicolor
163
+ */
164
+ export function emitSplitEdgePaths(
165
+ e: Edge,
166
+ job: RenderJob,
167
+ colorList: string,
168
+ ): { firstColor: string; endColor: string } {
169
+ const segs = parseSegs(colorList).segs;
170
+ const firstColor = segs[0]?.color ?? DEFAULT_COLOR;
171
+ const spl = e.info.spl;
172
+ let endColor = firstColor;
173
+ if (spl === undefined) return { firstColor, endColor };
174
+ for (let si = 0; si < spl.size; si++) {
175
+ const bz = spl.list[si] as Bezier | undefined;
176
+ if (bz === undefined || bz.size < 4) continue;
177
+ endColor = drawSplitSpline(bz.list, segs, job);
178
+ }
179
+ return { firstColor, endColor };
180
+ }