@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,185 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * SVG gradient emitters — ports svg_print_stop, svg_gradstyle, svg_rgradstyle
5
+ * and get_gradient_points. Separate module to keep svg-helpers.ts < 500 lines (AD5).
6
+ * @see plugin/core/gvrender_core_svg.c:553 (svg_print_stop)
7
+ * @see plugin/core/gvrender_core_svg.c:572 (svg_gradstyle)
8
+ * @see plugin/core/gvrender_core_svg.c:608 (svg_rgradstyle)
9
+ * @see lib/common/utils.c:1446 (get_gradient_points)
10
+ */
11
+
12
+ import type { Point } from '../model/geom.js';
13
+ import type { GVColor } from '../common/color.js';
14
+ import type { RenderJob } from '../gvc/job.js';
15
+ import { escapeXml } from './svg-helpers.js';
16
+ import { cround } from '../common/arith.js';
17
+
18
+ interface GradientPoints { g0: Point; g1: Point; }
19
+ interface BBox { minX: number; maxX: number; minY: number; maxY: number; }
20
+
21
+ /** Bounding box for 2-point (center+corner) ellipse input. */
22
+ function bboxFrom2(A: Point[]): BBox {
23
+ const rx = (A[1] as Point).x - (A[0] as Point).x;
24
+ const ry = (A[1] as Point).y - (A[0] as Point).y;
25
+ return {
26
+ minX: (A[0] as Point).x - rx, maxX: (A[0] as Point).x + rx,
27
+ minY: (A[0] as Point).y - ry, maxY: (A[0] as Point).y + ry,
28
+ };
29
+ }
30
+ /** Bounding box by scanning all points. */
31
+ function bboxFromN(A: Point[]): BBox {
32
+ let minX = (A[0] as Point).x, maxX = (A[0] as Point).x;
33
+ let minY = (A[0] as Point).y, maxY = (A[0] as Point).y;
34
+ for (let i = 1; i < A.length; i++) {
35
+ const p = A[i] as Point;
36
+ if (p.x < minX) minX = p.x;
37
+ if (p.x > maxX) maxX = p.x;
38
+ if (p.y < minY) minY = p.y;
39
+ if (p.y > maxY) maxY = p.y;
40
+ }
41
+ return { minX, maxX, minY, maxY };
42
+ }
43
+ /** Radial points from bbox. isRHS selects native y-up (xdot) vs SVG y-down.
44
+ * @see lib/common/utils.c:1478 */
45
+ function radialPoints(bb: BBox, cx: number, cy: number, isRHS: boolean): GradientPoints {
46
+ const outerR = Math.hypot(cx - bb.minX, cy - bb.minY);
47
+ return { g0: { x: cx, y: isRHS ? cy : -cy }, g1: { x: outerR / 4, y: outerR } };
48
+ }
49
+ /** Linear points from bbox+angle. isRHS selects native y-up (xdot) vs SVG
50
+ * y-down; mirrors C's isRHS branch (half_y symmetric about center).
51
+ * @see lib/common/utils.c:1487 */
52
+ function linearPoints(
53
+ bb: BBox, cx: number, cy: number, angle: number, isRHS: boolean,
54
+ ): GradientPoints {
55
+ const halfX = bb.maxX - cx;
56
+ const sina = Math.sin(angle), cosa = Math.cos(angle);
57
+ const gx0 = cx - halfX * cosa, gx1 = cx + halfX * cosa;
58
+ if (isRHS) {
59
+ const halfY = bb.maxY - cy;
60
+ return {
61
+ g0: { x: gx0, y: cy - halfY * sina },
62
+ g1: { x: gx1, y: cy + halfY * sina },
63
+ };
64
+ }
65
+ return {
66
+ g0: { x: gx0, y: -cy + (bb.maxY - cy) * sina },
67
+ g1: { x: gx1, y: -cy - (cy - bb.minY) * sina },
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Compute gradient endpoints. `isRHS` mirrors C's `flags & 2`: true yields
73
+ * native y-up (Graphviz) coordinates for the xdot/json device path, false
74
+ * yields the SVG y-down convention (the default, used by the SVG renderer,
75
+ * whose top-level `<g transform>` supplies the flip). Linear: g0/g1 =
76
+ * endpoints. Radial: g0=(cx,±cy), g1=(inner_r,outer_r).
77
+ * @see lib/common/utils.c:1446 get_gradient_points
78
+ */
79
+ export function getGradientPoints(
80
+ A: Point[], angle: number, radial: boolean, isRHS = false,
81
+ ): GradientPoints {
82
+ const bb = A.length === 2 ? bboxFrom2(A) : bboxFromN(A);
83
+ const cx = bb.minX + (bb.maxX - bb.minX) / 2;
84
+ const cy = bb.minY + (bb.maxY - bb.minY) / 2;
85
+ if (radial) return radialPoints(bb, cx, cy, isRHS);
86
+ return linearPoints(bb, cx, cy, angle, isRHS);
87
+ }
88
+
89
+ /** Print color for gradient stop; "transparent"→"black" for SVG 1.1 compat.
90
+ * @see plugin/core/gvrender_core_svg.c:147 svg_print_gradient_color */
91
+ function printGradientColor(job: RenderJob, color: GVColor): void {
92
+ if (color.type === 'string') {
93
+ job.write(color.s === 'transparent' ? 'black' : color.s);
94
+ } else if (color.type === 'rgba') {
95
+ const rh = Math.round(color.r * 255).toString(16).padStart(2, '0');
96
+ const gh = Math.round(color.g * 255).toString(16).padStart(2, '0');
97
+ const bh = Math.round(color.b * 255).toString(16).padStart(2, '0');
98
+ job.write('#' + rh + gh + bh);
99
+ }
100
+ }
101
+ /** Emit stop-opacity matching C's svg_print_stop. */
102
+ function emitStopOpacity(job: RenderJob, color: GVColor): void {
103
+ if (color.type === 'rgba' && Math.round(color.a * 255) < 255) {
104
+ job.write(String(Math.round(color.a * 255) / 255));
105
+ } else if (color.type === 'string' && color.s === 'transparent') {
106
+ job.write('0');
107
+ } else {
108
+ job.write('1.');
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Emit one gradient stop. offset: near-0→"0", near-1→"1", else "%.03f".
114
+ * @see plugin/core/gvrender_core_svg.c:553 svg_print_stop
115
+ */
116
+ export function emitStop(job: RenderJob, offset: number, color: GVColor): void {
117
+ if (Math.abs(offset) < 0.0005) {
118
+ job.write('<stop offset="0" style="stop-color:');
119
+ } else if (Math.abs(offset - 1) < 0.0005) {
120
+ job.write('<stop offset="1" style="stop-color:');
121
+ } else {
122
+ job.write('<stop offset="' + offset.toFixed(3) + '" style="stop-color:');
123
+ }
124
+ printGradientColor(job, color);
125
+ job.write(';stop-opacity:');
126
+ emitStopOpacity(job, color);
127
+ job.write(';\"/>\n');
128
+ }
129
+
130
+ /**
131
+ * Gradient element id: [escapeXml(objId)+'_'] + kind+'_'+n.
132
+ * @see plugin/core/gvrender_core_svg.c:572 svg_gradstyle (id block)
133
+ */
134
+ export function gradientId(objId: string | null, kind: 'l' | 'r', n: number): string {
135
+ const prefix = objId !== null ? escapeXml(objId) + '_' : '';
136
+ return prefix + kind + '_' + String(n);
137
+ }
138
+
139
+ /** Emit linearGradient coords block (inner helper for emitLinearGradient). */
140
+ function writeLinearGradCoords(job: RenderJob, pts: Point[], id: string, angleDeg: number): void {
141
+ const { g0, g1 } = getGradientPoints(pts, angleDeg * Math.PI / 180, false);
142
+ job.write('<defs>\n<linearGradient id="' + id + '"');
143
+ job.write(' gradientUnits="userSpaceOnUse" ');
144
+ job.write('x1="'); job.printDouble(g0.x);
145
+ job.write('" y1="'); job.printDouble(g0.y);
146
+ job.write('" x2="'); job.printDouble(g1.x);
147
+ job.write('" y2="'); job.printDouble(g1.y);
148
+ job.write('" >\n');
149
+ }
150
+
151
+ /**
152
+ * Emit `<defs><linearGradient>` + two stops + `</linearGradient></defs>`.
153
+ * pts in y-up (Graphviz) space. @see plugin/core/gvrender_core_svg.c:572 svg_gradstyle
154
+ */
155
+ export function emitLinearGradient(job: RenderJob, pts: Point[], id: string): void {
156
+ const obj = job.obj;
157
+ if (obj === null) return;
158
+ writeLinearGradCoords(job, pts, id, obj.gradientAngle);
159
+ const frac = obj.gradientFrac;
160
+ emitStop(job, frac > 0 ? frac - 0.001 : 0, obj.fillColor);
161
+ emitStop(job, frac > 0 ? frac : 1, obj.stopColor);
162
+ job.write('</linearGradient>\n</defs>\n');
163
+ }
164
+
165
+ /**
166
+ * Emit `<defs><radialGradient>` + two stops + `</radialGradient></defs>`.
167
+ * @see plugin/core/gvrender_core_svg.c:608 svg_rgradstyle
168
+ */
169
+ export function emitRadialGradient(job: RenderJob, id: string): void {
170
+ const obj = job.obj;
171
+ if (obj === null) return;
172
+ let ifx = 50, ify = 50;
173
+ if (obj.gradientAngle !== 0) {
174
+ const angle = obj.gradientAngle * Math.PI / 180;
175
+ // @see plugin/core/gvrender_core_svg.c:622-623 (round())
176
+ ifx = cround(50 * (1 + Math.cos(angle)));
177
+ ify = cround(50 * (1 - Math.sin(angle)));
178
+ }
179
+ job.write('<defs>\n<radialGradient id="' + id + '"');
180
+ job.write(' cx="50%" cy="50%" r="75%"');
181
+ job.write(' fx="' + String(ifx) + '%" fy="' + String(ify) + '%">\n');
182
+ emitStop(job, 0, obj.fillColor);
183
+ emitStop(job, 1, obj.stopColor);
184
+ job.write('</radialGradient>\n</defs>\n');
185
+ }
@@ -0,0 +1,415 @@
1
+ // SPDX-License-Identifier: EPL-2.0
2
+
3
+ /**
4
+ * SVG document prologue and graph group open/close helpers.
5
+ * Split from svg-helpers.ts to keep that module under the size cap.
6
+ *
7
+ * NOTE: no ${...} template literals here — Lizard bug #2 (see
8
+ * svg-helpers.ts file header).
9
+ *
10
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_graph
11
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_page
12
+ */
13
+
14
+ import type { Graph } from '../model/graph.js';
15
+ import type { Box, Point } from '../model/geom.js';
16
+ import type { RenderJob } from '../gvc/job.js';
17
+ import { createObjState, ObjType } from '../gvc/job.js';
18
+ import { FillType } from '../gvc/context.js';
19
+ import { escapeXml, escapeXmlTitle } from './svg-helpers.js';
20
+ import { resolveRenderColor, colorPaint } from './color-resolve.js';
21
+ import { svgGraphId, svgGraphClass } from './svg-id.js';
22
+ import { parseGradientSpec } from '../common/htmltable-emit-fill.js';
23
+ import { findStopColor, parseStyleFlags } from '../common/style-resolve.js';
24
+ import { cround } from '../common/arith.js';
25
+ import {
26
+ emitLinearGradient,
27
+ emitRadialGradient,
28
+ gradientId,
29
+ } from './svg-gradient.js';
30
+
31
+ const SVG_XML_DECL =
32
+ '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n';
33
+ const SVG_DOCTYPE =
34
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"\n' +
35
+ ' "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n';
36
+ const SVG_GENERATOR_COMMENT = '<!-- Generated by graphviz-ts -->\n';
37
+
38
+ /** Sentinel meaning "emit no background polygon" (bgcolor=transparent on SVG). */
39
+ const BGCOLOR_TRANSPARENT = '\x00transparent';
40
+
41
+ /**
42
+ * Resolved gradient spec for a two-color bgcolor.
43
+ * Groups the fields that emitGradientBackground needs beyond bb+job.
44
+ * @see lib/common/emit.c:emit_background:1503
45
+ */
46
+ interface BgGradientSpec {
47
+ fillColor: string;
48
+ stopColor: string;
49
+ frac: number;
50
+ angle: number;
51
+ radial: boolean;
52
+ }
53
+
54
+ /**
55
+ * Reproduce C's `%g` (6 significant digits, trailing zeros trimmed) used for
56
+ * the group scale. `1` → "1", `0.12319530…` → "0.123195".
57
+ * @see plugin/core/gvrender_core_svg.c:314 gvprintf("%g %g", …)
58
+ */
59
+ function formatG(n: number): string {
60
+ return String(parseFloat(n.toPrecision(6)));
61
+ }
62
+
63
+ /**
64
+ * Emit SVG tag. Group translate absorbs bb.ll + pad + margin/Z offset
65
+ * (svgBeginPage). ViewBox starts at (round(margin.x), round(margin.y)) --
66
+ * (0,0) only in the common no-margin case.
67
+ */
68
+ export function emitSvgTag(job: RenderJob): void {
69
+ const bb = job.bb;
70
+ // Size-fitted, UNROUNDED page-oriented view extent (init_job_pagination's
71
+ // local `imageSize`/`pageSize`, emit.c:1198-1246): sz = bb extent plus pad,
72
+ // scaled by Z (job.scale, D4). Kept unrounded here so the later
73
+ // "+ 2*margin" / "+ margin" sums round ONCE, matching C's single
74
+ // `ROUND((pageSize + 2*margin) * dpi/72)` -- rounding szx/szy first would
75
+ // double-round and diverge from C at half-integer boundaries.
76
+ const szx = bb.ur.x - bb.ll.x + 2 * job.pad.x;
77
+ const szy = bb.ur.y - bb.ll.y + 2 * job.pad.y;
78
+ const viewX = szx * job.scale.x;
79
+ const viewY = szy * job.scale.y;
80
+ // Landscape rotation swaps the view into page orientation (init_job_pagination's
81
+ // early `imageSize = exch_xyf(imageSize)`, emit.c:1201-1202); job.margin is
82
+ // read UNSWAPPED in both the width/height and viewBox-UR formulas below,
83
+ // matching C's `job->width = ROUND(pageSize.x + 2*margin.x)` where `margin`
84
+ // there is the as-entered graph attribute, never exch_xyf'd before this use.
85
+ const rotated = job.rotation !== 0;
86
+ const pageX = rotated ? viewY : viewX;
87
+ const pageY = rotated ? viewX : viewY;
88
+ // job->width/job->height (emit.c:1249-1250, dpi=72 so *dpi/72 is a no-op).
89
+ const w = cround(pageX + 2 * job.margin.x);
90
+ const h = cround(pageY + 2 * job.margin.y);
91
+ job.write('<svg width="' + String(w) + 'pt" height="' + String(h) + 'pt"\n');
92
+ // job->pageBoundingBox (canvasBox.LL = margin+centering, canvasBox.UR = LL +
93
+ // imageSize, then ROUND -- emit.c:1282-1293). C's rotation-branch double
94
+ // exch_xy/exch_xyf (canvasBox construction, then the final device-units
95
+ // swap-back, emit.c:1275-1298) cancels for LL (always plain margin) but NOT
96
+ // for UR, which ends up paired with the page-oriented (rotation-swapped)
97
+ // view extent -- i.e. the same `pageX`/`pageY` used for width/height above.
98
+ const vbLLx = cround(job.margin.x);
99
+ const vbLLy = cround(job.margin.y);
100
+ const vbURx = cround(job.margin.x + pageX);
101
+ const vbURy = cround(job.margin.y + pageY);
102
+ job.write(' viewBox="' + String(vbLLx) + '.00 ' + String(vbLLy) + '.00 ' +
103
+ String(vbURx) + '.00 ' + String(vbURy) + '.00"\n');
104
+ job.write(' xmlns="http://www.w3.org/2000/svg"');
105
+ job.write(' xmlns:xlink="http://www.w3.org/1999/xlink">\n');
106
+ }
107
+
108
+ /**
109
+ * Emit the graph `<g>` open tag with y-flip transform.
110
+ *
111
+ * translate(PAD, contentH+PAD) maps graphviz origin (0,0) to the
112
+ * bottom-left corner of the padded viewport. Combined with devscale.y=-1,
113
+ * a node at graphviz (x,y) appears at SVG (x+PAD, h-PAD-y).
114
+ *
115
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_page
116
+ */
117
+ export function emitGraphGroupOpen(
118
+ graphId: string,
119
+ classStr: string,
120
+ tx: number,
121
+ ty: number,
122
+ job: RenderJob,
123
+ ): void {
124
+ // Group carries the size= zoom (D4): C's svg_begin_page prints job->scale.x/y
125
+ // (= zoom for dpi=72). %g, not gvprintdouble (its comment: 2 digits
126
+ // insufficient); parseFloat(toPrecision(6)) reproduces %g. Z=1 → "1".
127
+ const sx = formatG(job.scale.x);
128
+ const sy = formatG(job.scale.y);
129
+ // rotate(-job->rotation): 0 for portrait (byte-unchanged), -90 for landscape
130
+ // (orientation=land). @see gvrender_core_svg.c:svg_begin_page
131
+ const rot = String(-job.rotation);
132
+ // Escape the assembled id (DOT `id` attr + user-controlled layer prefix) the
133
+ // way C's svg_print_id_class does via gvputs_xml.
134
+ job.write('<g id="' + escapeXmlTitle(graphId) + '" ' + classStr +
135
+ ' transform="scale(' + sx + ' ' + sy + ') rotate(' + rot + ') translate(');
136
+ job.printDouble(tx);
137
+ job.write(' ');
138
+ job.printDouble(ty);
139
+ job.write(')">\n');
140
+ }
141
+
142
+ /**
143
+ * Conditionally emit `<title>` for user-visible graph names.
144
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_page
145
+ */
146
+ export function emitGraphTitle(g: Graph, job: RenderJob): void {
147
+ if (g.name.length > 0 && g.name[0] !== '%') {
148
+ job.write('<title>' + escapeXmlTitle(g.name) + '</title>\n');
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Resolve the graph bgcolor attribute to the color string to use for the
154
+ * background polygon, or the BGCOLOR_TRANSPARENT sentinel to suppress it.
155
+ *
156
+ * Precedence mirrors emit_background (lib/common/emit.c:1476-1530):
157
+ * - absent/empty → "white" (default white paper)
158
+ * - "transparent" → BGCOLOR_TRANSPARENT sentinel (SVG is truecolor)
159
+ * - gradient "c1:c2" → first solid color (AD3)
160
+ * - else → the literal color string
161
+ *
162
+ * @see lib/common/emit.c:emit_background:1476
163
+ */
164
+ export function resolveGraphBgcolor(bgcolorAttr: string | undefined): string {
165
+ if (!bgcolorAttr || bgcolorAttr.length === 0) return 'white';
166
+ if (bgcolorAttr === 'transparent') return BGCOLOR_TRANSPARENT;
167
+ const grad = parseGradientSpec(bgcolorAttr);
168
+ const solid = grad !== null ? grad[0] : bgcolorAttr;
169
+ // Canonicalize through the standard resolve path (lowercase #rrggbb, X11-only
170
+ // names → #rrggbb) exactly as C's emit_background does via
171
+ // gvrender_resolve_color before painting the background.
172
+ // @see lib/gvc/gvrender.c:188 gvrender_resolve_color
173
+ return colorPaint(resolveRenderColor(solid));
174
+ }
175
+
176
+ /**
177
+ * Emit background polygon covering the full padded content area.
178
+ *
179
+ * Omits the polygon entirely when resolvedColor is the transparent sentinel.
180
+ * Coordinates are in the group's local frame (y-flipped via devscale.y=-1):
181
+ * x: [bb.ll.x - PAD, bb.ur.x + PAD]
182
+ * y (flipped): [-(bb.ur.y + PAD), -(bb.ll.y - PAD)]
183
+ *
184
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_page
185
+ * @see lib/common/emit.c:emit_background:1476
186
+ */
187
+ export function emitGraphBackground(bb: Box, resolvedColor: string, job: RenderJob): void {
188
+ if (resolvedColor === BGCOLOR_TRANSPARENT) return;
189
+ const left = bb.ll.x - job.pad.x;
190
+ const right = bb.ur.x + job.pad.x;
191
+ const top = -(bb.ur.y + job.pad.y);
192
+ const bottom = -(bb.ll.y - job.pad.y);
193
+ const corners: [number, number][] = [
194
+ [left, bottom], [left, top], [right, top], [right, bottom], [left, bottom],
195
+ ];
196
+ job.write('<polygon fill="' + resolvedColor + '" stroke="none" points="');
197
+ corners.forEach(([px, py], i) => {
198
+ if (i > 0) job.write(' ');
199
+ job.printDouble(px);
200
+ job.write(',');
201
+ job.printDouble(py);
202
+ });
203
+ job.write('"/>\n');
204
+ }
205
+
206
+ /**
207
+ * Compute the 4 background-polygon corner points in graphviz (y-up) space.
208
+ * Passed to getGradientPoints inside emitLinearGradient.
209
+ * @see lib/common/emit.c:emit_background:1517 (gvrender_box with clip)
210
+ */
211
+ function bgGradientPts(bb: Box, pad: Point): Point[] {
212
+ const left = bb.ll.x - pad.x;
213
+ const right = bb.ur.x + pad.x;
214
+ const bottom = bb.ll.y - pad.y;
215
+ const top = bb.ur.y + pad.y;
216
+ return [
217
+ { x: left, y: bottom },
218
+ { x: left, y: top },
219
+ { x: right, y: top },
220
+ { x: right, y: bottom },
221
+ ];
222
+ }
223
+
224
+ /**
225
+ * Write background polygon element with gradient fill url reference.
226
+ * Coords identical to emitGraphBackground; only fill changes.
227
+ * @see plugin/core/gvrender_core_svg.c:svg_polygon:686
228
+ */
229
+ function writeGradientPolygon(bb: Box, id: string, job: RenderJob): void {
230
+ const left = bb.ll.x - job.pad.x;
231
+ const right = bb.ur.x + job.pad.x;
232
+ const top = -(bb.ur.y + job.pad.y);
233
+ const bottom = -(bb.ll.y - job.pad.y);
234
+ const corners: [number, number][] = [
235
+ [left, bottom], [left, top], [right, top], [right, bottom], [left, bottom],
236
+ ];
237
+ job.write('<polygon fill="url(#' + id + ')" stroke="none" points="');
238
+ corners.forEach(([px, py], i) => {
239
+ if (i > 0) job.write(' ');
240
+ job.printDouble(px);
241
+ job.write(',');
242
+ job.printDouble(py);
243
+ });
244
+ job.write('"/>\n');
245
+ }
246
+
247
+ /**
248
+ * Emit the gradient background for a graph with a two-color bgcolor.
249
+ * Pushes a temporary ObjState, emits the <defs> gradient, writes the polygon.
250
+ *
251
+ * The gradient id is prefixed "graph0_" to match C's svg_gradstyle behaviour
252
+ * when obj->id is set: graph0_l_0 / graph0_r_0.
253
+ *
254
+ * @see lib/common/emit.c:emit_background:1503-1519
255
+ * @see plugin/core/gvrender_core_svg.c:svg_gradstyle:572
256
+ * @see plugin/core/gvrender_core_svg.c:svg_rgradstyle:608
257
+ */
258
+ function emitGradientBackground(bb: Box, spec: BgGradientSpec, job: RenderJob): void {
259
+ const obj = createObjState(ObjType.RootGraph);
260
+ obj.id = 'graph0';
261
+ obj.fillColor = resolveRenderColor(spec.fillColor);
262
+ obj.stopColor = resolveRenderColor(spec.stopColor);
263
+ obj.gradientFrac = spec.frac;
264
+ obj.gradientAngle = spec.angle;
265
+ obj.fill = spec.radial ? FillType.Radial : FillType.Linear;
266
+ job.pushObj(obj);
267
+ let gid: string;
268
+ if (spec.radial) {
269
+ gid = gradientId('graph0', 'r', job.radialGradId++);
270
+ emitRadialGradient(job, gid);
271
+ } else {
272
+ gid = gradientId('graph0', 'l', job.linearGradId++);
273
+ emitLinearGradient(job, bgGradientPts(bb, job.pad), gid);
274
+ }
275
+ job.popObj();
276
+ writeGradientPolygon(bb, gid, job);
277
+ }
278
+
279
+ /**
280
+ * Resolve BgGradientSpec from graph attrs when bgcolor is a two-color spec.
281
+ * Returns null when bgcolor is not a gradient.
282
+ * @see lib/common/emit.c:emit_background:1503-1516
283
+ */
284
+ function resolveBgGradientSpec(g: Graph, bgcolorAttr: string): BgGradientSpec | null {
285
+ const stop = findStopColor(bgcolorAttr);
286
+ if (stop === null) return null;
287
+ const flags = parseStyleFlags(g.attrs.get('style'));
288
+ const angleStr = g.attrs.get('gradientangle');
289
+ const angle = angleStr ? (parseInt(angleStr, 10) || 0) : 0;
290
+ return { fillColor: stop.fillColor, stopColor: stop.stopColor, frac: stop.frac, angle, radial: flags.radial };
291
+ }
292
+
293
+ /**
294
+ * Resolve and emit the background — gradient or solid/transparent.
295
+ * Separated to keep svgBeginGraph under the 30-line body limit.
296
+ * @see lib/common/emit.c:emit_background:1476
297
+ */
298
+ function emitBgcolorBackground(g: Graph, bb: Box, bgcolorAttr: string | undefined, job: RenderJob): void {
299
+ if (!bgcolorAttr || bgcolorAttr.length === 0 || bgcolorAttr === 'transparent') {
300
+ emitGraphBackground(bb, resolveGraphBgcolor(bgcolorAttr), job);
301
+ return;
302
+ }
303
+ const spec = resolveBgGradientSpec(g, bgcolorAttr);
304
+ if (spec !== null) {
305
+ emitGradientBackground(bb, spec, job);
306
+ return;
307
+ }
308
+ emitGraphBackground(bb, resolveGraphBgcolor(bgcolorAttr), job);
309
+ }
310
+
311
+ /**
312
+ * Emit SVG prologue, padded `<svg>` tag, graph `<g>` with y-flip transform,
313
+ * and background polygon (color resolved from bgcolor attr).
314
+ *
315
+ * Y-axis: Graphviz y-up vs SVG y-down. devscale.y=-1 negates all y coords
316
+ * before renderer callbacks; the graph `<g>` translate(PAD, contentH+PAD)
317
+ * places the Graphviz origin at the bottom-left of the padded viewport.
318
+ *
319
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_graph
320
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_page
321
+ * @see lib/common/emit.c:emit_background:1476
322
+ */
323
+ export function svgBeginGraph(g: Graph, job: RenderJob): void {
324
+ job.devscale = { x: 1, y: -1 };
325
+ job.directed = g.kind === 'directed' || g.kind === 'strict-directed';
326
+ // GD_drawing(root)->id — used as the `<gid>_` prefix for non-root object ids.
327
+ job.drawingId = g.attrs.get('id') ?? '';
328
+ job.write(SVG_XML_DECL);
329
+ // C svg_begin_job emits the stylesheet PI (raw href) between the XML
330
+ // declaration and the DOCTYPE when the graph has a `stylesheet` attribute.
331
+ // @see plugin/core/gvrender_core_svg.c:svg_begin_job
332
+ const stylesheet = g.attrs.get('stylesheet');
333
+ if (stylesheet !== undefined && stylesheet.length > 0) {
334
+ // Code review: the `stylesheet` attribute is written raw into the
335
+ // processing instruction (matches upstream gvrender_core_svg.c:svg_begin_job,
336
+ // which also does gvputs raw). Revisit if untrusted DOT can set `stylesheet`
337
+ // and the SVG is embedded inline — a `"?>` sequence breaks out of the PI.
338
+ // Left faithful to the oracle; hardening is the "origins/CSP" discussion.
339
+ job.write('<?xml-stylesheet href="' + stylesheet + '" type="text/css"?>\n');
340
+ }
341
+ job.write(SVG_DOCTYPE);
342
+ job.write(SVG_GENERATOR_COMMENT);
343
+ emitSvgTag(job);
344
+ }
345
+
346
+ /**
347
+ * Per-page content: the graph group, title, and background — re-emitted per
348
+ * layer. The group id carries the layer prefix (e.g. `pvt_graph0`).
349
+ * @see plugin/core/gvrender_core_svg.c:svg_begin_page
350
+ */
351
+ export function svgBeginPage(g: Graph, job: RenderJob): void {
352
+ const bb = job.bb;
353
+ // gvPostprocess zeroes bb.ll before render; tx is simply the padding.
354
+ // Landscape (ADR-3): setup_page's rotation branch (SVG = GVRENDER_Y_GOES_DOWN)
355
+ // gives translation.x = -(focus.x + pageSize.x/2) = -(bb.ur.x + PAD) in the
356
+ // zeroed-bb frame; translation.y is unchanged (focus.y + pageSize.y/2 =
357
+ // bb.ur.y + PAD). pageSize = imageSize/zoom is Z-independent (outer scale
358
+ // carries Z), so the formula holds for any size= fit. Pinned to b68 native
359
+ // translate(-634 208.5). @see emit.c:setup_page; gvrender_core_svg.c:svg_begin_page
360
+ //
361
+ // margin (F6): setup_page adds `canvasBox.LL / job->zoom` on top of the
362
+ // pad-only formula above -- canvasBox.LL is the FINAL (post swap-cancel)
363
+ // margin, unswapped regardless of rotation, so both branches use
364
+ // job.margin.x/y directly. job->zoom is real-C's Z; this port carries Z in
365
+ // job.scale (job.zoom stays fixed at 1, D4/ADR-2), so divide by job.scale.x
366
+ // here to reproduce the same "/ job->zoom" C performs. Sign differs by
367
+ // rotation branch only for x (portrait: +margin.x/Z; landscape: -margin.x/Z);
368
+ // y is always +margin.y/Z in both branches (C computes translation.y with a
369
+ // single un-branched formula for GVRENDER_Y_GOES_DOWN renderers).
370
+ // @see lib/common/emit.c:1566-1582 setup_page (CAUTION comment there)
371
+ const z = job.scale.x;
372
+ const tx = job.rotation !== 0
373
+ ? -(bb.ur.x + job.pad.x) - job.margin.x / z
374
+ : job.pad.x + job.margin.x / z;
375
+ const ty = bb.ur.y + job.pad.y + job.margin.y / z;
376
+ emitGraphGroupOpen(
377
+ job.idLayerPrefix() + svgGraphId(g, job),
378
+ svgGraphClass(g),
379
+ tx, ty, job,
380
+ );
381
+ emitGraphTitle(g, job);
382
+ }
383
+
384
+ /**
385
+ * Emit the page background polygon. Split out of svg_begin_page so the
386
+ * device-layer page loop can wrap the background (and the graph label) in the
387
+ * graph's `<a>` anchor, matching C where emit_background is separate from
388
+ * gvrender_begin_page.
389
+ * @see lib/common/emit.c:emit_page (emit_background after begin_page)
390
+ */
391
+ export function svgPageBackground(g: Graph, job: RenderJob): void {
392
+ emitBgcolorBackground(g, job.bb, g.attrs.get('bgcolor'), job);
393
+ }
394
+
395
+ /** Close the graph `<g>` group. @see svg_end_page */
396
+ export function svgEndPage(job: RenderJob): void {
397
+ job.write('</g>\n');
398
+ }
399
+
400
+ /** `<g id="<layer>" class="layer">` — only emitted when numLayers > 1. */
401
+ export function svgBeginLayer(name: string, job: RenderJob): void {
402
+ job.write('<g id="' + escapeXml(name) + '" class="layer">\n');
403
+ }
404
+
405
+ export function svgEndLayer(job: RenderJob): void {
406
+ job.write('</g>\n');
407
+ }
408
+
409
+ /**
410
+ * Close the graph `<g>` group and the `<svg>` element.
411
+ * @see plugin/core/gvrender_core_svg.c:svg_end_graph
412
+ */
413
+ export function svgEndGraph(job: RenderJob): void {
414
+ job.write('</svg>\n');
415
+ }