@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,76 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ //
3
+ // SVG object id + class resolution, faithful to C's getObjId
4
+ // (lib/common/emit.c:209) and svg_print_id_class
5
+ // (plugin/core/gvrender_core_svg.c). A non-empty DOT `id` attribute wins
6
+ // verbatim; otherwise the generated `<pfx><seq>` id is used, with a `<gid>_`
7
+ // prefix on non-root objects when the root graph carries an `id` attribute
8
+ // (job.drawingId). The DOT `class` attribute, when present, is appended to the
9
+ // SVG class string. Attribute reads use C's `agget` semantics (defaults
10
+ // inherited) via nodeAttr / clusterAttr.
11
+
12
+ import type { Node } from '../model/node.js';
13
+ import type { Edge } from '../model/edge.js';
14
+ import type { Graph } from '../model/graph.js';
15
+ import type { RenderJob } from '../gvc/job.js';
16
+ import { escapeXmlTitle } from './xml-escape.js';
17
+ import { nodeAttr } from '../common/poly-init.js';
18
+ import { clusterAttr } from '../gvc/device-cluster.js';
19
+
20
+ /**
21
+ * `class="<kind>"`, with the DOT `class` attribute appended (` <class>`,
22
+ * xml-escaped) when present — mirroring svg_print_id_class.
23
+ * @see plugin/core/gvrender_core_svg.c:svg_print_id_class
24
+ */
25
+ export function svgClass(kind: string, classAttr: string | undefined): string {
26
+ return classAttr !== undefined && classAttr.length > 0
27
+ ? 'class="' + kind + ' ' + escapeXmlTitle(classAttr) + '"'
28
+ : 'class="' + kind + '"';
29
+ }
30
+
31
+ // getObjId reads the object's OWN `id` (agget returns "" for a subgraph/node
32
+ // that has no id set unless the `id` attribute was declared before the object
33
+ // was created — a cgraph declaration-order quirk we do not model). Using the
34
+ // own id avoids over-inheriting the root graph's id, which the gid prefix
35
+ // already supplies separately. @see lib/common/emit.c:getObjId
36
+
37
+ /** SVG id for a node: own DOT `id` attr, else `node<seq>` (with gid prefix). */
38
+ export function svgNodeId(n: Node, job: RenderJob): string {
39
+ return job.objId(n.attrs.get('id'), 'node' + (n.id + 1));
40
+ }
41
+
42
+ /** SVG id for an edge: own DOT `id` attr, else `edge<graphSeq>` (gid prefix). */
43
+ export function svgEdgeId(e: Edge, job: RenderJob): string {
44
+ return job.objId(e.attrs.get('id'), 'edge' + e.graphSeq);
45
+ }
46
+
47
+ /** SVG id for a cluster: own DOT `id` attr, else `clust<AGSEQ seq>` (gid prefix).
48
+ * @see lib/common/emit.c:getObjId */
49
+ export function svgClusterId(sg: Graph, job: RenderJob): string {
50
+ return job.objId(sg.attrs.get('id'), 'clust' + sg.seq);
51
+ }
52
+
53
+ /** SVG id for the root graph group: DOT `id` attr, else `graph0` (no prefix). */
54
+ export function svgGraphId(g: Graph, job: RenderJob): string {
55
+ return job.objId(g.attrs.get('id'), 'graph0', true);
56
+ }
57
+
58
+ /** `class="node[ <class>]"`, reading the inherited DOT `class` attribute. */
59
+ export function svgNodeClass(n: Node): string {
60
+ return svgClass('node', nodeAttr(n, n.root, 'class'));
61
+ }
62
+
63
+ /** `class="edge[ <class>]"`. */
64
+ export function svgEdgeClass(e: Edge): string {
65
+ return svgClass('edge', e.attrs.get('class'));
66
+ }
67
+
68
+ /** `class="cluster[ <class>]"`, reading the inherited cluster `class` attr. */
69
+ export function svgClusterClass(sg: Graph): string {
70
+ return svgClass('cluster', clusterAttr(sg, 'class'));
71
+ }
72
+
73
+ /** `class="graph[ <class>]"`. */
74
+ export function svgGraphClass(g: Graph): string {
75
+ return svgClass('graph', g.attrs.get('class'));
76
+ }
@@ -0,0 +1,313 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Multicolor region fills: stripedBox and wedgedEllipse.
5
+ *
6
+ * Ports the REGION-fill functions from lib/common/emit.c and the
7
+ * arc-to-Bézier machinery from lib/common/ellipse.c. These are called
8
+ * from poly-gencode (S1) for style=striped polygon nodes and style=wedged
9
+ * ellipse nodes when fillcolor is a multi-segment color list.
10
+ *
11
+ * @see lib/common/emit.c:595 stripedBox
12
+ * @see lib/common/emit.c:549 wedgedEllipse
13
+ * @see lib/common/ellipse.c:274 ellipticWedge
14
+ */
15
+
16
+ import type { Point } from '../model/geom.js';
17
+ import type { RenderJob } from '../gvc/job.js';
18
+ import type { RendererPlugin } from '../gvc/context.js';
19
+ import { parseSegs } from '../common/multicolor.js';
20
+ import { resolveRenderColor } from './color-resolve.js';
21
+
22
+ // ---------------------------------------------------------------------------
23
+ // Constants
24
+ // ---------------------------------------------------------------------------
25
+
26
+ /**
27
+ * Thin-line pen width used for multicolor band/wedge outlines.
28
+ * @see lib/common/emit.c:538 #define THIN_LINE 0.5
29
+ */
30
+ export const THIN_LINE = 0.5;
31
+
32
+ // ---------------------------------------------------------------------------
33
+ // ellipticWedge — arc-to-Bézier approximation
34
+ // @see lib/common/ellipse.c:274
35
+ // ---------------------------------------------------------------------------
36
+
37
+ /** Rational function (x*(x*c[0]+c[1])+c[2]) / (x+c[3]). */
38
+ function rationalFunction(x: number, c: readonly number[]): number {
39
+ return (x * (x * c[0]! + c[1]!) + c[2]!) / (x + c[3]!);
40
+ }
41
+
42
+ /** Error coefficients for b/a < 0.25. @see lib/common/ellipse.c:97 */
43
+ const COEFFS3LOW: readonly (readonly number[])[][] = [
44
+ [
45
+ [3.85268, -21.229, -0.330434, 0.0127842],
46
+ [-1.61486, 0.706564, 0.225945, 0.263682],
47
+ [-0.910164, 0.388383, 0.00551445, 0.00671814],
48
+ [-0.630184, 0.192402, 0.0098871, 0.0102527],
49
+ ],
50
+ [
51
+ [-0.162211, 9.94329, 0.13723, 0.0124084],
52
+ [-0.253135, 0.00187735, 0.0230286, 0.01264],
53
+ [-0.0695069, -0.0437594, 0.0120636, 0.0163087],
54
+ [-0.0328856, -0.00926032, -0.00173573, 0.00527385],
55
+ ],
56
+ ];
57
+
58
+ /** Error coefficients for 0.25 <= b/a <= 1. @see lib/common/ellipse.c:110 */
59
+ const COEFFS3HIGH: readonly (readonly number[])[][] = [
60
+ [
61
+ [0.0899116, -19.2349, -4.11711, 0.183362],
62
+ [0.138148, -1.45804, 1.32044, 1.38474],
63
+ [0.230903, -0.450262, 0.219963, 0.414038],
64
+ [0.0590565, -0.101062, 0.0430592, 0.0204699],
65
+ ],
66
+ [
67
+ [0.0164649, 9.89394, 0.0919496, 0.00760802],
68
+ [0.0191603, -0.0322058, 0.0134667, -0.0825018],
69
+ [0.0156192, -0.017535, 0.00326508, -0.228157],
70
+ [-0.0236752, 0.0405821, -0.0173086, 0.176187],
71
+ ],
72
+ ];
73
+
74
+ /** Safety factors for error bound. @see lib/common/ellipse.c:122 */
75
+ const SAFETY3 = [0.001, 4.98, 0.207, 0.0067] as const;
76
+
77
+ /** Estimate maximum Bézier approximation error for a sub-arc. */
78
+ function estimateError(
79
+ a: number, b: number, etaA: number, etaB: number,
80
+ ): number {
81
+ const eta = 0.5 * (etaA + etaB);
82
+ const x = b / a;
83
+ const dEta = etaB - etaA;
84
+ const cos2 = Math.cos(2 * eta);
85
+ const cos4 = Math.cos(4 * eta);
86
+ const cos6 = Math.cos(6 * eta);
87
+ const c = x < 0.25 ? COEFFS3LOW : COEFFS3HIGH;
88
+ const c0 = rationalFunction(x, c[0]![0]!) +
89
+ cos2 * rationalFunction(x, c[0]![1]!) +
90
+ cos4 * rationalFunction(x, c[0]![2]!) +
91
+ cos6 * rationalFunction(x, c[0]![3]!);
92
+ const c1 = rationalFunction(x, c[1]![0]!) +
93
+ cos2 * rationalFunction(x, c[1]![1]!) +
94
+ cos4 * rationalFunction(x, c[1]![2]!) +
95
+ cos6 * rationalFunction(x, c[1]![3]!);
96
+ return rationalFunction(x, SAFETY3) * a * Math.exp(c0 + c1 * dEta);
97
+ }
98
+
99
+ /** Scan n subdivisions; return true if all satisfy the error threshold. */
100
+ function allSubdivsBelowThreshold(
101
+ a: number, b: number, eta1: number, n: number, dEta: number,
102
+ ): boolean {
103
+ let etaA = eta1;
104
+ for (let i = 0; i < n; i++) {
105
+ if (estimateError(a, b, etaA, etaA + dEta) > 0.00001) return false;
106
+ etaA += dEta;
107
+ }
108
+ return true;
109
+ }
110
+
111
+ /**
112
+ * Return the number of Bézier curves needed to approximate the arc.
113
+ * @see lib/common/ellipse.c:genEllipticPath (subdivision loop)
114
+ */
115
+ function numSubdivisions(
116
+ a: number, b: number, eta1: number, eta2: number,
117
+ ): number {
118
+ let n = 1;
119
+ while (n < 1024) {
120
+ const dEta = (eta2 - eta1) / n;
121
+ if (dEta <= 0.5 * Math.PI && allSubdivsBelowThreshold(a, b, eta1, n, dEta)) break;
122
+ n <<= 1;
123
+ }
124
+ return n;
125
+ }
126
+
127
+ /** Ellipse geometry parameters. */
128
+ interface EllipseParams { cx: number; cy: number; xsemi: number; ysemi: number; }
129
+
130
+ /** Mutable arc tangent+position state for the genEllipticPath loop. */
131
+ interface ArcState { xB: number; yB: number; xBDot: number; yBDot: number; }
132
+
133
+ /**
134
+ * Build the initial path prefix and return arc state.
135
+ * @see lib/common/ellipse.c:220-233
136
+ */
137
+ function initArcPath(pts: Point[], e: EllipseParams, eta1: number): ArcState {
138
+ const cosE = Math.cos(eta1); const sinE = Math.sin(eta1);
139
+ const xB = e.cx + e.xsemi * cosE; const yB = e.cy + e.ysemi * sinE;
140
+ pts.push({ x: e.cx, y: e.cy }, { x: e.cx, y: e.cy },
141
+ { x: xB, y: yB }, { x: xB, y: yB });
142
+ return { xB, yB, xBDot: -e.xsemi * sinE, yBDot: e.ysemi * cosE };
143
+ }
144
+
145
+ /** Step parameters for one Bézier arc segment. */
146
+ interface StepParams { etaB: number; dEta: number; alpha: number; }
147
+
148
+ /**
149
+ * Append one cubic Bézier step; advance arc state. Returns new etaB.
150
+ * @see lib/common/ellipse.c:238-258
151
+ */
152
+ function stepBezier(
153
+ pts: Point[], state: ArcState, e: EllipseParams, sp: StepParams,
154
+ ): number {
155
+ const xA = state.xB; const yA = state.yB;
156
+ const xADot = state.xBDot; const yADot = state.yBDot;
157
+ const newEta = sp.etaB + sp.dEta;
158
+ const cosE = Math.cos(newEta); const sinE = Math.sin(newEta);
159
+ state.xB = e.cx + e.xsemi * cosE; state.yB = e.cy + e.ysemi * sinE;
160
+ state.xBDot = -e.xsemi * sinE; state.yBDot = e.ysemi * cosE;
161
+ pts.push({ x: xA + sp.alpha * xADot, y: yA + sp.alpha * yADot });
162
+ pts.push({ x: state.xB - sp.alpha * state.xBDot, y: state.yB - sp.alpha * state.yBDot });
163
+ pts.push({ x: state.xB, y: state.yB });
164
+ return newEta;
165
+ }
166
+
167
+ /**
168
+ * Return cubic Bézier path points approximating an elliptic wedge sector.
169
+ * Coordinates are in graphviz y-UP space — caller negates y for SVG.
170
+ *
171
+ * @see lib/common/ellipse.c:195 genEllipticPath
172
+ * @see lib/common/ellipse.c:274 ellipticWedge
173
+ */
174
+ export function ellipticWedge(
175
+ e: EllipseParams, angle0: number, angle1: number,
176
+ ): Point[] {
177
+ const TWOPI = 2 * Math.PI;
178
+ const eta1 = Math.atan2(Math.sin(angle0) / e.ysemi, Math.cos(angle0) / e.xsemi);
179
+ let eta2 = Math.atan2(Math.sin(angle1) / e.ysemi, Math.cos(angle1) / e.xsemi);
180
+ eta2 -= TWOPI * Math.floor((eta2 - eta1) / TWOPI);
181
+ if (angle1 - angle0 > Math.PI && eta2 - eta1 < Math.PI) eta2 += TWOPI;
182
+ const n = numSubdivisions(e.xsemi, e.ysemi, eta1, eta2);
183
+ const dEta = (eta2 - eta1) / n;
184
+ const t = Math.tan(0.5 * dEta);
185
+ const alpha = Math.sin(dEta) * (Math.sqrt(4 + 3 * t * t) - 1) / 3;
186
+ const pts: Point[] = [];
187
+ const state = initArcPath(pts, e, eta1);
188
+ let sp: StepParams = { etaB: eta1, dEta, alpha };
189
+ for (let i = 0; i < n; i++) sp = { ...sp, etaB: stepBezier(pts, state, e, sp) };
190
+ pts.push({ x: state.xB, y: state.yB }, { x: e.cx, y: e.cy }, { x: e.cx, y: e.cy });
191
+ return pts;
192
+ }
193
+
194
+ // ---------------------------------------------------------------------------
195
+ // Shared render context
196
+ // ---------------------------------------------------------------------------
197
+
198
+ /** Render job + plugin pair threaded through helpers. */
199
+ interface RenderCtx { job: RenderJob; renderer: RendererPlugin; }
200
+
201
+ // ---------------------------------------------------------------------------
202
+ // wedgedEllipse
203
+ // @see lib/common/emit.c:549
204
+ // ---------------------------------------------------------------------------
205
+
206
+ /** One wedge segment descriptor. */
207
+ interface WedgeSeg { angle0: number; t: number; isLast: boolean; color: string; }
208
+
209
+ /** Draw one wedge; return updated angle0. */
210
+ function drawWedge(seg: WedgeSeg, e: EllipseParams, ctx: RenderCtx): number {
211
+ const TWOPI = 2 * Math.PI;
212
+ const angle1 = seg.isLast ? TWOPI : seg.angle0 + TWOPI * seg.t;
213
+ const obj = ctx.job.obj;
214
+ // Resolve the wedge segment color (C's gvrender_set_fillcolor) so a raw
215
+ // fillcolor spec cannot reach fill="..." as a verbatim type:'string' paint.
216
+ if (obj !== null) obj.fillColor = resolveRenderColor(seg.color);
217
+ const ptsUp = ellipticWedge(e, seg.angle0, angle1);
218
+ ctx.renderer.bezier(ptsUp.map((p) => ({ x: p.x, y: -p.y })), true, ctx.job);
219
+ return angle1;
220
+ }
221
+
222
+ /**
223
+ * Fill an ellipse with multiple pie-wedge sectors, one per color segment.
224
+ *
225
+ * `pf` is a 2-point bounding-box array in SVG y-DOWN device coordinates.
226
+ * Thin pen (THIN_LINE) for each wedge; caller draws boundary unfilled after.
227
+ *
228
+ * Returns 0 → ok; 1 or 2 → parse error.
229
+ *
230
+ * @see lib/common/emit.c:549 wedgedEllipse
231
+ */
232
+ export function wedgedEllipse(
233
+ job: RenderJob, pf: Point[], clrs: string, renderer: RendererPlugin,
234
+ ): number {
235
+ const { segs, error } = parseSegs(clrs);
236
+ if (error === 1 || error === 2) return error;
237
+ const ctrX = (pf[0]!.x + pf[1]!.x) / 2;
238
+ const ctrY = (pf[0]!.y + pf[1]!.y) / 2;
239
+ const e: EllipseParams = {
240
+ cx: ctrX, cy: -ctrY,
241
+ xsemi: pf[1]!.x - ctrX, ysemi: Math.abs(pf[1]!.y - ctrY),
242
+ };
243
+ const ctx: RenderCtx = { job, renderer };
244
+ const obj = job.obj;
245
+ const saved = obj !== null ? obj.penWidth : 1.0;
246
+ if (obj !== null && saved > THIN_LINE) obj.penWidth = THIN_LINE;
247
+ let angle0 = 0;
248
+ for (let i = 0; i < segs.length; i++) {
249
+ const s = segs[i]!;
250
+ if (s.color === null) break;
251
+ if (s.t > 0) {
252
+ angle0 = drawWedge({ angle0, t: s.t, isLast: i + 1 === segs.length, color: s.color }, e, ctx);
253
+ }
254
+ }
255
+ if (obj !== null && saved > THIN_LINE) obj.penWidth = saved;
256
+ return error;
257
+ }
258
+
259
+ // ---------------------------------------------------------------------------
260
+ // stripedBox
261
+ // @see lib/common/emit.c:595
262
+ // ---------------------------------------------------------------------------
263
+
264
+ /** One stripe band descriptor. */
265
+ interface BandSeg { color: string; isLast: boolean; segWidth: number; lastx: number; }
266
+
267
+ /** Draw one stripe band; advance p[0].x and p[3].x in place. */
268
+ function drawBand(p: Point[], seg: BandSeg, ctx: RenderCtx): void {
269
+ const obj = ctx.job.obj;
270
+ if (obj !== null) obj.fillColor = resolveRenderColor(seg.color);
271
+ p[1]!.x = p[2]!.x = seg.isLast ? seg.lastx : p[0]!.x + seg.segWidth;
272
+ ctx.renderer.polygon([...p], true, ctx.job);
273
+ p[0]!.x = p[3]!.x = p[1]!.x;
274
+ }
275
+
276
+ /**
277
+ * Fill a rectangular box with vertical color stripes.
278
+ *
279
+ * `pts` is a 4-point array in SVG y-DOWN device coordinates.
280
+ * `rotate` swaps corner order (true = vertical stripes, C default).
281
+ * Thin pen; caller draws boundary polygon unfilled after.
282
+ *
283
+ * Returns 0 → ok; 1 or 2 → parse error.
284
+ *
285
+ * @see lib/common/emit.c:595 stripedBox
286
+ */
287
+ export function stripedBox(
288
+ job: RenderJob, pts: Point[], clrs: string,
289
+ rotate: boolean, renderer: RendererPlugin,
290
+ ): number {
291
+ const { segs, error } = parseSegs(clrs);
292
+ if (error === 1 || error === 2) return error;
293
+ // @see lib/common/emit.c:605-615 rotate swap
294
+ const p: Point[] = rotate
295
+ ? [{ ...pts[2]! }, { ...pts[3]! }, { ...pts[0]! }, { ...pts[1]! }]
296
+ : [{ ...pts[0]! }, { ...pts[1]! }, { ...pts[2]! }, { ...pts[3]! }];
297
+ const lastx = p[1]!.x;
298
+ const xdelta = p[1]!.x - p[0]!.x;
299
+ p[1]!.x = p[2]!.x = p[0]!.x;
300
+ const ctx: RenderCtx = { job, renderer };
301
+ const obj = job.obj;
302
+ const saved = obj !== null ? obj.penWidth : 1.0;
303
+ if (obj !== null && saved > THIN_LINE) obj.penWidth = THIN_LINE;
304
+ for (let i = 0; i < segs.length; i++) {
305
+ const s = segs[i]!;
306
+ if (s.color === null) break;
307
+ if (s.t > 0) {
308
+ drawBand(p, { color: s.color, isLast: i + 1 === segs.length, segWidth: xdelta * s.t, lastx }, ctx);
309
+ }
310
+ }
311
+ if (obj !== null && saved > THIN_LINE) obj.penWidth = saved;
312
+ return error;
313
+ }
@@ -0,0 +1,123 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * Parallel multi-color Bézier edge emission (M1).
5
+ *
6
+ * Ports the `else if (numc)` branch of emit_edge_graphics from
7
+ * lib/common/emit.c:2442-2528. Each color in a "c1:c2:…" color-list
8
+ * produces one Bézier path offset SEP=2.0 graph-units perpendicular to
9
+ * the routed spline. Arrow colors follow C's headcolor/tailcolor rule:
10
+ * headcolor = first color (cnum 0), tailcolor = second color (cnum 1, else
11
+ * same as headcolor).
12
+ *
13
+ * AD1: per-curve pen flows through job.obj (caller sets penColor before
14
+ * each curve; we mutate obj.penColor here so the T4 path emitters see
15
+ * the right color).
16
+ * AD4: caller passes the raw color-list string; numc is computed here.
17
+ *
18
+ * @see lib/common/emit.c:2442 (else if numc branch)
19
+ * @see lib/common/emit.c:2364 (#define SEP 2.0)
20
+ * @see lib/common/emit.c:2481-2496 (headcolor/tailcolor assignment)
21
+ */
22
+
23
+ import type { Edge } from '../model/edge.js';
24
+ import type { RenderJob } from '../gvc/job.js';
25
+ import type { Point, Bezier } from '../model/geom.js';
26
+ import { buildOffsetLists, advanceTmpList } from '../common/edge-offset.js';
27
+ import { transformPoint } from '../gvc/device.js';
28
+ import { emitBezierPath, emitDash, emitPenWidth } from './svg-helpers.js';
29
+ import { resolveRenderColor, colorPaint, colorOpacity } from './color-resolve.js';
30
+ import { parseSegs } from '../common/multicolor.js';
31
+
32
+ const PENWIDTH_NORMAL = 1.0;
33
+ const PENWIDTH_THRESHOLD = 0.005;
34
+ const DEFAULT_COLOR = 'black';
35
+
36
+ /** Return value carrying the head/tail arrow colors for the caller. */
37
+ export interface ParallelEdgeResult {
38
+ headColor: string;
39
+ tailColor: string;
40
+ }
41
+
42
+ /**
43
+ * Emit one offset Bézier path for a single color in the parallel-curve loop.
44
+ * Mutates job.obj.penColor so subsequent arrow emitters see the right color.
45
+ * @see lib/common/emit.c:2501-2506
46
+ */
47
+ function emitOffsetBezier(tmplist: Point[], job: RenderJob, color: string): void {
48
+ const obj = job.obj;
49
+ const resolved = resolveRenderColor(color);
50
+ if (obj !== null) {
51
+ obj.penColor = resolved;
52
+ }
53
+ job.write('<path fill="none" stroke="' + colorPaint(resolved) + '"');
54
+ if (obj !== null && Math.abs(obj.penWidth - PENWIDTH_NORMAL) >= PENWIDTH_THRESHOLD) {
55
+ emitPenWidth(job, obj.penWidth);
56
+ }
57
+ if (obj !== null) emitDash(job, obj.pen);
58
+ // C svg_grstyle emits stroke-opacity (after stroke-width/dasharray) for an
59
+ // RGBA paint with partial alpha, e.g. an edge color="#rrggbbaa".
60
+ // @see plugin/core/gvrender_core_svg.c:207-210 svg_grstyle
61
+ const op = colorOpacity(resolved);
62
+ if (op !== null) job.write(' stroke-opacity="' + op + '"');
63
+ job.write(' d="');
64
+ emitBezierPath(job, tmplist);
65
+ job.write('"/>\n');
66
+ }
67
+
68
+ /**
69
+ * Emit parallel offset Bézier curves, one per color in `colorList`.
70
+ * Returns the head and tail arrow colors so the caller can emit arrows.
71
+ *
72
+ * Algorithm (ports emit.c:2442-2528):
73
+ * 1. numc = count of ':' in colorList; numc2 = (2+numc)/2
74
+ * 2. For each bezier segment, compute offlist + init tmplist to outermost lane
75
+ * 3. For each color token (cnum=0,1,…): advance tmplist by one offset step,
76
+ * emit path in that color; set headColor (cnum==0), tailColor (cnum==1).
77
+ *
78
+ * @see lib/common/emit.c:2442-2528
79
+ */
80
+ type SegLists = { offlist: Point[]; tmplist: Point[] };
81
+
82
+ /** Pre-build per-segment offset + working lists (graph/pre-transform space). */
83
+ function buildSegData(bzList: (Bezier | undefined)[], numc2: number): SegLists[] {
84
+ const segData: SegLists[] = [];
85
+ for (const bz of bzList) {
86
+ if (bz === undefined || bz.size < 4) {
87
+ segData.push({ offlist: [], tmplist: [] });
88
+ continue;
89
+ }
90
+ segData.push(buildOffsetLists(bz.list, numc2));
91
+ }
92
+ return segData;
93
+ }
94
+
95
+ /** Emit one parallel offset curve per color, advancing the working list each pass. */
96
+ function emitColorPasses(segData: SegLists[], colors: string[], job: RenderJob): void {
97
+ for (const color of colors) {
98
+ for (const sd of segData) {
99
+ if (sd.offlist.length === 0) continue;
100
+ advanceTmpList(sd.tmplist, sd.offlist);
101
+ emitOffsetBezier(sd.tmplist.map((p) => transformPoint(p, job)), job, color);
102
+ }
103
+ }
104
+ }
105
+
106
+ export function emitParallelEdgePaths(
107
+ e: Edge,
108
+ job: RenderJob,
109
+ colorList: string,
110
+ ): ParallelEdgeResult {
111
+ const spl = e.info.spl;
112
+ const numc = (colorList.match(/:/g) ?? []).length;
113
+ const segData = buildSegData((spl?.list ?? []) as (Bezier | undefined)[], (2 + numc) / 2);
114
+ // parseSegs strips any ';weight', so the semicolon syntax (which C routes
115
+ // to split-along-length multicolor — a follow-up) at least yields valid
116
+ // parallel colors instead of an invalid "red;0.5" stroke.
117
+ const colors = parseSegs(colorList).segs.map((s) => s.color ?? DEFAULT_COLOR);
118
+ emitColorPasses(segData, colors, job);
119
+ return {
120
+ headColor: colors[0] ?? DEFAULT_COLOR,
121
+ tailColor: colors[1] ?? colors[0] ?? DEFAULT_COLOR,
122
+ };
123
+ }
@@ -0,0 +1,56 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+ //
3
+ // SVG emit for `style="tapered"` edges. Ports the `if (tapered)` branch of
4
+ // emit_edge_graphics: draw the first Bézier as a filled taper polygon
5
+ // (pencolor transparent, fillcolor = edge color) and then the arrowheads.
6
+ //
7
+ // @see lib/common/emit.c:2422 emit_edge_graphics (tapered branch)
8
+
9
+ import type { Edge } from '../model/edge.js';
10
+ import type { RenderJob } from '../gvc/job.js';
11
+ import { taper, taperfun } from '../common/taper.js';
12
+ import { svgPolygon, svgArrowPolygons } from './svg-helpers.js';
13
+ import { transformPoint } from '../gvc/device.js';
14
+ import { isDirected } from './dot.js';
15
+
16
+ /**
17
+ * True if `style="tapered"` is among the edge's style tokens, mirroring
18
+ * emit_edge_graphics' scan of the parse_style list. Tokens are comma-separated
19
+ * (parse_style), so a bare `tapered` matches. @see lib/common/emit.c:2371
20
+ */
21
+ export function edgeIsTapered(e: Edge): boolean {
22
+ const style = e.attrs.get('style');
23
+ if (style === undefined || style === '') return false;
24
+ return style.split(',').some((t) => t.trim() === 'tapered');
25
+ }
26
+
27
+ /**
28
+ * Emit a tapered edge: the taper polygon followed by the arrowheads. C sets
29
+ * pencolor "transparent" and fillcolor = edge color for the polygon, then
30
+ * restores pencolor = color before the arrows. The port carries pen/fill on
31
+ * job.obj, so we swap them around the polygon and restore for
32
+ * svgArrowPolygons (which paints in obj.penColor).
33
+ * @see lib/common/emit.c:2422
34
+ */
35
+ export function svgTaperedEdge(e: Edge, job: RenderJob): void {
36
+ const spl = e.info.spl;
37
+ const obj = job.obj;
38
+ if (spl === undefined || spl.list.length === 0 || obj === null) return;
39
+ const bz = spl.list[0]!;
40
+ const radfunc = taperfun(e.attrs.get('dir'), isDirected(e.tail.root));
41
+ // taper() works in layout coords (y-up); svgPolygon emits emit-space points,
42
+ // so map through transformPoint (devscale.y=-1 + translation) like node polys.
43
+ const verts = taper(bz, radfunc, obj.penWidth).map((p) => transformPoint(p, job));
44
+
45
+ const savedPen = obj.penColor;
46
+ const savedFill = obj.fillColor;
47
+ // pencolor -> transparent (renders stroke="none"); fillcolor -> edge color.
48
+ obj.fillColor = savedPen;
49
+ obj.penColor = { type: 'string', s: 'transparent' };
50
+ svgPolygon(verts, true, job);
51
+ obj.penColor = savedPen;
52
+ obj.fillColor = savedFill;
53
+
54
+ // Arrowheads (bz.sflag/eflag) — precomputed head/tail ops, painted in color.
55
+ svgArrowPolygons(e, job);
56
+ }