@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.
- package/LICENSE +277 -0
- package/README.md +292 -0
- package/dist/api/builder.d.ts +78 -0
- package/dist/api/builder.d.ts.map +1 -0
- package/dist/api/edge-ops.d.ts +45 -0
- package/dist/api/edge-ops.d.ts.map +1 -0
- package/dist/api/geometry.d.ts +159 -0
- package/dist/api/geometry.d.ts.map +1 -0
- package/dist/api/index.d.ts +24 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api.js +719 -0
- package/dist/api.js.map +7 -0
- package/dist/bundle.js +101 -0
- package/dist/cdt/bag.d.ts +58 -0
- package/dist/cdt/bag.d.ts.map +1 -0
- package/dist/cdt/hash-core.d.ts +40 -0
- package/dist/cdt/hash-core.d.ts.map +1 -0
- package/dist/cdt/hash.d.ts +74 -0
- package/dist/cdt/hash.d.ts.map +1 -0
- package/dist/cdt/index.d.ts +16 -0
- package/dist/cdt/index.d.ts.map +1 -0
- package/dist/cdt/splay-core.d.ts +78 -0
- package/dist/cdt/splay-core.d.ts.map +1 -0
- package/dist/cdt/splay.d.ts +63 -0
- package/dist/cdt/splay.d.ts.map +1 -0
- package/dist/cdt/strhash.d.ts +26 -0
- package/dist/cdt/strhash.d.ts.map +1 -0
- package/dist/cdt/types.d.ts +11 -0
- package/dist/cdt/types.d.ts.map +1 -0
- package/dist/common/arith.d.ts +35 -0
- package/dist/common/arith.d.ts.map +1 -0
- package/dist/common/arm-pow-data.d.ts +17 -0
- package/dist/common/arm-pow-data.d.ts.map +1 -0
- package/dist/common/arm-pow.d.ts +12 -0
- package/dist/common/arm-pow.d.ts.map +1 -0
- package/dist/common/arrows-constants.d.ts +97 -0
- package/dist/common/arrows-constants.d.ts.map +1 -0
- package/dist/common/arrows-geometry.d.ts +24 -0
- package/dist/common/arrows-geometry.d.ts.map +1 -0
- package/dist/common/arrows-miter.d.ts +24 -0
- package/dist/common/arrows-miter.d.ts.map +1 -0
- package/dist/common/arrows-shapes-poly.d.ts +24 -0
- package/dist/common/arrows-shapes-poly.d.ts.map +1 -0
- package/dist/common/arrows-shapes-util.d.ts +77 -0
- package/dist/common/arrows-shapes-util.d.ts.map +1 -0
- package/dist/common/arrows-shapes.d.ts +48 -0
- package/dist/common/arrows-shapes.d.ts.map +1 -0
- package/dist/common/arrows-types.d.ts +59 -0
- package/dist/common/arrows-types.d.ts.map +1 -0
- package/dist/common/arrows.d.ts +69 -0
- package/dist/common/arrows.d.ts.map +1 -0
- package/dist/common/color.d.ts +66 -0
- package/dist/common/color.d.ts.map +1 -0
- package/dist/common/colorData.d.ts +10 -0
- package/dist/common/colorData.d.ts.map +1 -0
- package/dist/common/compass-port.d.ts +39 -0
- package/dist/common/compass-port.d.ts.map +1 -0
- package/dist/common/crand.d.ts +42 -0
- package/dist/common/crand.d.ts.map +1 -0
- package/dist/common/edge-label-init.d.ts +51 -0
- package/dist/common/edge-label-init.d.ts.map +1 -0
- package/dist/common/edge-offset.d.ts +66 -0
- package/dist/common/edge-offset.d.ts.map +1 -0
- package/dist/common/ellipse-wedge.d.ts +10 -0
- package/dist/common/ellipse-wedge.d.ts.map +1 -0
- package/dist/common/emit-types.d.ts +255 -0
- package/dist/common/emit-types.d.ts.map +1 -0
- package/dist/common/fma.d.ts +10 -0
- package/dist/common/fma.d.ts.map +1 -0
- package/dist/common/graph-init.d.ts +61 -0
- package/dist/common/graph-init.d.ts.map +1 -0
- package/dist/common/html-entities.d.ts +17 -0
- package/dist/common/html-entities.d.ts.map +1 -0
- package/dist/common/html-string.d.ts +14 -0
- package/dist/common/html-string.d.ts.map +1 -0
- package/dist/common/htmltable-emit-fill.d.ts +84 -0
- package/dist/common/htmltable-emit-fill.d.ts.map +1 -0
- package/dist/common/htmltable-emit-rules.d.ts +79 -0
- package/dist/common/htmltable-emit-rules.d.ts.map +1 -0
- package/dist/common/htmltable-emit.d.ts +63 -0
- package/dist/common/htmltable-emit.d.ts.map +1 -0
- package/dist/common/htmltable-lex.d.ts +16 -0
- package/dist/common/htmltable-lex.d.ts.map +1 -0
- package/dist/common/htmltable-parse.d.ts +37 -0
- package/dist/common/htmltable-parse.d.ts.map +1 -0
- package/dist/common/htmltable-port.d.ts +15 -0
- package/dist/common/htmltable-port.d.ts.map +1 -0
- package/dist/common/htmltable-pos-runs.d.ts +88 -0
- package/dist/common/htmltable-pos-runs.d.ts.map +1 -0
- package/dist/common/htmltable-pos.d.ts +192 -0
- package/dist/common/htmltable-pos.d.ts.map +1 -0
- package/dist/common/htmltable-types.d.ts +237 -0
- package/dist/common/htmltable-types.d.ts.map +1 -0
- package/dist/common/htmltable.d.ts +74 -0
- package/dist/common/htmltable.d.ts.map +1 -0
- package/dist/common/layers.d.ts +20 -0
- package/dist/common/layers.d.ts.map +1 -0
- package/dist/common/make-label.d.ts +60 -0
- package/dist/common/make-label.d.ts.map +1 -0
- package/dist/common/multicolor.d.ts +46 -0
- package/dist/common/multicolor.d.ts.map +1 -0
- package/dist/common/nodeinit.d.ts +45 -0
- package/dist/common/nodeinit.d.ts.map +1 -0
- package/dist/common/poly-gencode.d.ts +40 -0
- package/dist/common/poly-gencode.d.ts.map +1 -0
- package/dist/common/poly-init.d.ts +51 -0
- package/dist/common/poly-init.d.ts.map +1 -0
- package/dist/common/poly-inside.d.ts +37 -0
- package/dist/common/poly-inside.d.ts.map +1 -0
- package/dist/common/poly-shapes-cases.d.ts +31 -0
- package/dist/common/poly-shapes-cases.d.ts.map +1 -0
- package/dist/common/poly-shapes-cases2.d.ts +25 -0
- package/dist/common/poly-shapes-cases2.d.ts.map +1 -0
- package/dist/common/poly-shapes-util.d.ts +42 -0
- package/dist/common/poly-shapes-util.d.ts.map +1 -0
- package/dist/common/poly-shapes.d.ts +39 -0
- package/dist/common/poly-shapes.d.ts.map +1 -0
- package/dist/common/poly-sizing.d.ts +189 -0
- package/dist/common/poly-sizing.d.ts.map +1 -0
- package/dist/common/poly-vertices.d.ts +42 -0
- package/dist/common/poly-vertices.d.ts.map +1 -0
- package/dist/common/postproc.d.ts +49 -0
- package/dist/common/postproc.d.ts.map +1 -0
- package/dist/common/ps-fontalias.d.ts +36 -0
- package/dist/common/ps-fontalias.d.ts.map +1 -0
- package/dist/common/random.d.ts +8 -0
- package/dist/common/random.d.ts.map +1 -0
- package/dist/common/record-port.d.ts +34 -0
- package/dist/common/record-port.d.ts.map +1 -0
- package/dist/common/record.d.ts +105 -0
- package/dist/common/record.d.ts.map +1 -0
- package/dist/common/shapeData.d.ts +186 -0
- package/dist/common/shapeData.d.ts.map +1 -0
- package/dist/common/shapes.d.ts +36 -0
- package/dist/common/shapes.d.ts.map +1 -0
- package/dist/common/spline-midpoint.d.ts +31 -0
- package/dist/common/spline-midpoint.d.ts.map +1 -0
- package/dist/common/splines-clip.d.ts +21 -0
- package/dist/common/splines-clip.d.ts.map +1 -0
- package/dist/common/splines-constants.d.ts +42 -0
- package/dist/common/splines-constants.d.ts.map +1 -0
- package/dist/common/splines-geom.d.ts +51 -0
- package/dist/common/splines-geom.d.ts.map +1 -0
- package/dist/common/splines-path-begin.d.ts +17 -0
- package/dist/common/splines-path-begin.d.ts.map +1 -0
- package/dist/common/splines-path-end.d.ts +17 -0
- package/dist/common/splines-path-end.d.ts.map +1 -0
- package/dist/common/splines-path-shared.d.ts +53 -0
- package/dist/common/splines-path-shared.d.ts.map +1 -0
- package/dist/common/splines-routespl.d.ts +40 -0
- package/dist/common/splines-routespl.d.ts.map +1 -0
- package/dist/common/splines-selfedge.d.ts +21 -0
- package/dist/common/splines-selfedge.d.ts.map +1 -0
- package/dist/common/splines.d.ts +18 -0
- package/dist/common/splines.d.ts.map +1 -0
- package/dist/common/style-resolve.d.ts +197 -0
- package/dist/common/style-resolve.d.ts.map +1 -0
- package/dist/common/subst.d.ts +31 -0
- package/dist/common/subst.d.ts.map +1 -0
- package/dist/common/taper.d.ts +23 -0
- package/dist/common/taper.d.ts.map +1 -0
- package/dist/common/textmeasure-factory.d.ts +33 -0
- package/dist/common/textmeasure-factory.d.ts.map +1 -0
- package/dist/common/textmeasure-lookup.d.ts +17 -0
- package/dist/common/textmeasure-lookup.d.ts.map +1 -0
- package/dist/common/textmeasure-lut-data-a.d.ts +13 -0
- package/dist/common/textmeasure-lut-data-a.d.ts.map +1 -0
- package/dist/common/textmeasure-lut-data-b.d.ts +12 -0
- package/dist/common/textmeasure-lut-data-b.d.ts.map +1 -0
- package/dist/common/textmeasure-lut-data-c.d.ts +13 -0
- package/dist/common/textmeasure-lut-data-c.d.ts.map +1 -0
- package/dist/common/textmeasure-lut-data.d.ts +27 -0
- package/dist/common/textmeasure-lut-data.d.ts.map +1 -0
- package/dist/common/textmeasure.d.ts +120 -0
- package/dist/common/textmeasure.d.ts.map +1 -0
- package/dist/common/types.d.ts +316 -0
- package/dist/common/types.d.ts.map +1 -0
- package/dist/common/xlabels-place.d.ts +125 -0
- package/dist/common/xlabels-place.d.ts.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/errors.d.ts +63 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/gvc/anchor.d.ts +86 -0
- package/dist/gvc/anchor.d.ts.map +1 -0
- package/dist/gvc/context.d.ts +177 -0
- package/dist/gvc/context.d.ts.map +1 -0
- package/dist/gvc/default-context.d.ts +20 -0
- package/dist/gvc/default-context.d.ts.map +1 -0
- package/dist/gvc/device-cluster.d.ts +25 -0
- package/dist/gvc/device-cluster.d.ts.map +1 -0
- package/dist/gvc/device.d.ts +99 -0
- package/dist/gvc/device.d.ts.map +1 -0
- package/dist/gvc/edge-labels.d.ts +10 -0
- package/dist/gvc/edge-labels.d.ts.map +1 -0
- package/dist/gvc/emit-walk.d.ts +22 -0
- package/dist/gvc/emit-walk.d.ts.map +1 -0
- package/dist/gvc/image-resolver.d.ts +44 -0
- package/dist/gvc/image-resolver.d.ts.map +1 -0
- package/dist/gvc/job.d.ts +234 -0
- package/dist/gvc/job.d.ts.map +1 -0
- package/dist/gvc/textlayout.d.ts +33 -0
- package/dist/gvc/textlayout.d.ts.map +1 -0
- package/dist/gvc/textspan-emit.d.ts +41 -0
- package/dist/gvc/textspan-emit.d.ts.map +1 -0
- package/dist/gvc/usershape.d.ts +25 -0
- package/dist/gvc/usershape.d.ts.map +1 -0
- package/dist/gvc/viewport.d.ts +71 -0
- package/dist/gvc/viewport.d.ts.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52862 -0
- package/dist/index.js.map +7 -0
- package/dist/label/index.d.ts +74 -0
- package/dist/label/index.d.ts.map +1 -0
- package/dist/label/node.d.ts +108 -0
- package/dist/label/node.d.ts.map +1 -0
- package/dist/label/rectangle.d.ts +60 -0
- package/dist/label/rectangle.d.ts.map +1 -0
- package/dist/label/split-q.d.ts +13 -0
- package/dist/label/split-q.d.ts.map +1 -0
- package/dist/label/xlabels-geom.d.ts +46 -0
- package/dist/label/xlabels-geom.d.ts.map +1 -0
- package/dist/label/xlabels-intersect.d.ts +79 -0
- package/dist/label/xlabels-intersect.d.ts.map +1 -0
- package/dist/label/xlabels.d.ts +67 -0
- package/dist/label/xlabels.d.ts.map +1 -0
- package/dist/layout/circo/blockpath.d.ts +120 -0
- package/dist/layout/circo/blockpath.d.ts.map +1 -0
- package/dist/layout/circo/blocks.d.ts +135 -0
- package/dist/layout/circo/blocks.d.ts.map +1 -0
- package/dist/layout/circo/blocktree.d.ts +51 -0
- package/dist/layout/circo/blocktree.d.ts.map +1 -0
- package/dist/layout/circo/circular.d.ts +59 -0
- package/dist/layout/circo/circular.d.ts.map +1 -0
- package/dist/layout/circo/index.d.ts +35 -0
- package/dist/layout/circo/index.d.ts.map +1 -0
- package/dist/layout/circo/init.d.ts +50 -0
- package/dist/layout/circo/init.d.ts.map +1 -0
- package/dist/layout/circo/position-helpers.d.ts +33 -0
- package/dist/layout/circo/position-helpers.d.ts.map +1 -0
- package/dist/layout/circo/position.d.ts +66 -0
- package/dist/layout/circo/position.d.ts.map +1 -0
- package/dist/layout/dot/acyclic.d.ts +8 -0
- package/dist/layout/dot/acyclic.d.ts.map +1 -0
- package/dist/layout/dot/aspect.d.ts +17 -0
- package/dist/layout/dot/aspect.d.ts.map +1 -0
- package/dist/layout/dot/classify.d.ts +52 -0
- package/dist/layout/dot/classify.d.ts.map +1 -0
- package/dist/layout/dot/cluster-path.d.ts +38 -0
- package/dist/layout/dot/cluster-path.d.ts.map +1 -0
- package/dist/layout/dot/cluster.d.ts +102 -0
- package/dist/layout/dot/cluster.d.ts.map +1 -0
- package/dist/layout/dot/compound-clip.d.ts +69 -0
- package/dist/layout/dot/compound-clip.d.ts.map +1 -0
- package/dist/layout/dot/compound-geom.d.ts +115 -0
- package/dist/layout/dot/compound-geom.d.ts.map +1 -0
- package/dist/layout/dot/compound.d.ts +56 -0
- package/dist/layout/dot/compound.d.ts.map +1 -0
- package/dist/layout/dot/conc.d.ts +88 -0
- package/dist/layout/dot/conc.d.ts.map +1 -0
- package/dist/layout/dot/decomp.d.ts +66 -0
- package/dist/layout/dot/decomp.d.ts.map +1 -0
- package/dist/layout/dot/edge-order.d.ts +27 -0
- package/dist/layout/dot/edge-order.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-arrow.d.ts +46 -0
- package/dist/layout/dot/edge-route-arrow.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-boxes.d.ts +75 -0
- package/dist/layout/dot/edge-route-boxes.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-chain.d.ts +67 -0
- package/dist/layout/dot/edge-route-chain.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-clip.d.ts +88 -0
- package/dist/layout/dot/edge-route-clip.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-faithful.d.ts +94 -0
- package/dist/layout/dot/edge-route-faithful.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-geom.d.ts +43 -0
- package/dist/layout/dot/edge-route-geom.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-helpers.d.ts +50 -0
- package/dist/layout/dot/edge-route-helpers.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-poly.d.ts +48 -0
- package/dist/layout/dot/edge-route-poly.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-rank.d.ts +57 -0
- package/dist/layout/dot/edge-route-rank.d.ts.map +1 -0
- package/dist/layout/dot/edge-route-routing.d.ts +99 -0
- package/dist/layout/dot/edge-route-routing.d.ts.map +1 -0
- package/dist/layout/dot/edge-route.d.ts +57 -0
- package/dist/layout/dot/edge-route.d.ts.map +1 -0
- package/dist/layout/dot/fastgr.d.ts +147 -0
- package/dist/layout/dot/fastgr.d.ts.map +1 -0
- package/dist/layout/dot/flat-utils.d.ts +21 -0
- package/dist/layout/dot/flat-utils.d.ts.map +1 -0
- package/dist/layout/dot/flat.d.ts +152 -0
- package/dist/layout/dot/flat.d.ts.map +1 -0
- package/dist/layout/dot/graph-label.d.ts +18 -0
- package/dist/layout/dot/graph-label.d.ts.map +1 -0
- package/dist/layout/dot/index.d.ts +128 -0
- package/dist/layout/dot/index.d.ts.map +1 -0
- package/dist/layout/dot/init.d.ts +93 -0
- package/dist/layout/dot/init.d.ts.map +1 -0
- package/dist/layout/dot/label-order.d.ts +45 -0
- package/dist/layout/dot/label-order.d.ts.map +1 -0
- package/dist/layout/dot/mincross-build.d.ts +52 -0
- package/dist/layout/dot/mincross-build.d.ts.map +1 -0
- package/dist/layout/dot/mincross-cross.d.ts +80 -0
- package/dist/layout/dot/mincross-cross.d.ts.map +1 -0
- package/dist/layout/dot/mincross-flat.d.ts +27 -0
- package/dist/layout/dot/mincross-flat.d.ts.map +1 -0
- package/dist/layout/dot/mincross-order.d.ts +89 -0
- package/dist/layout/dot/mincross-order.d.ts.map +1 -0
- package/dist/layout/dot/mincross-utils.d.ts +60 -0
- package/dist/layout/dot/mincross-utils.d.ts.map +1 -0
- package/dist/layout/dot/mincross.d.ts +75 -0
- package/dist/layout/dot/mincross.d.ts.map +1 -0
- package/dist/layout/dot/ns-core.d.ts +37 -0
- package/dist/layout/dot/ns-core.d.ts.map +1 -0
- package/dist/layout/dot/ns-range.d.ts +17 -0
- package/dist/layout/dot/ns-range.d.ts.map +1 -0
- package/dist/layout/dot/ns-subtree.d.ts +78 -0
- package/dist/layout/dot/ns-subtree.d.ts.map +1 -0
- package/dist/layout/dot/ns.d.ts +86 -0
- package/dist/layout/dot/ns.d.ts.map +1 -0
- package/dist/layout/dot/ortho-adapter.d.ts +19 -0
- package/dist/layout/dot/ortho-adapter.d.ts.map +1 -0
- package/dist/layout/dot/pack-components.d.ts +100 -0
- package/dist/layout/dot/pack-components.d.ts.map +1 -0
- package/dist/layout/dot/position-aux.d.ts +110 -0
- package/dist/layout/dot/position-aux.d.ts.map +1 -0
- package/dist/layout/dot/position-bbox.d.ts +57 -0
- package/dist/layout/dot/position-bbox.d.ts.map +1 -0
- package/dist/layout/dot/position-cluster.d.ts +48 -0
- package/dist/layout/dot/position-cluster.d.ts.map +1 -0
- package/dist/layout/dot/position-ycoords.d.ts +42 -0
- package/dist/layout/dot/position-ycoords.d.ts.map +1 -0
- package/dist/layout/dot/position.d.ts +47 -0
- package/dist/layout/dot/position.d.ts.map +1 -0
- package/dist/layout/dot/rank-dot2.d.ts +114 -0
- package/dist/layout/dot/rank-dot2.d.ts.map +1 -0
- package/dist/layout/dot/rank.d.ts +119 -0
- package/dist/layout/dot/rank.d.ts.map +1 -0
- package/dist/layout/dot/sameport.d.ts +70 -0
- package/dist/layout/dot/sameport.d.ts.map +1 -0
- package/dist/layout/dot/self-loop.d.ts +54 -0
- package/dist/layout/dot/self-loop.d.ts.map +1 -0
- package/dist/layout/dot/splines-clone.d.ts +33 -0
- package/dist/layout/dot/splines-clone.d.ts.map +1 -0
- package/dist/layout/dot/splines-flat-labeled.d.ts +101 -0
- package/dist/layout/dot/splines-flat-labeled.d.ts.map +1 -0
- package/dist/layout/dot/splines-flat-multi.d.ts +35 -0
- package/dist/layout/dot/splines-flat-multi.d.ts.map +1 -0
- package/dist/layout/dot/splines-flat.d.ts +116 -0
- package/dist/layout/dot/splines-flat.d.ts.map +1 -0
- package/dist/layout/dot/splines-groups.d.ts +38 -0
- package/dist/layout/dot/splines-groups.d.ts.map +1 -0
- package/dist/layout/dot/splines-label.d.ts +105 -0
- package/dist/layout/dot/splines-label.d.ts.map +1 -0
- package/dist/layout/dot/splines-route-type.d.ts +28 -0
- package/dist/layout/dot/splines-route-type.d.ts.map +1 -0
- package/dist/layout/dot/splines-route.d.ts +99 -0
- package/dist/layout/dot/splines-route.d.ts.map +1 -0
- package/dist/layout/dot/splines.d.ts +157 -0
- package/dist/layout/dot/splines.d.ts.map +1 -0
- package/dist/layout/dot/straight-edges.d.ts +39 -0
- package/dist/layout/dot/straight-edges.d.ts.map +1 -0
- package/dist/layout/fdp/cluster-edges.d.ts +31 -0
- package/dist/layout/fdp/cluster-edges.d.ts.map +1 -0
- package/dist/layout/fdp/comp.d.ts +29 -0
- package/dist/layout/fdp/comp.d.ts.map +1 -0
- package/dist/layout/fdp/derive.d.ts +39 -0
- package/dist/layout/fdp/derive.d.ts.map +1 -0
- package/dist/layout/fdp/fdp-model.d.ts +101 -0
- package/dist/layout/fdp/fdp-model.d.ts.map +1 -0
- package/dist/layout/fdp/grid.d.ts +49 -0
- package/dist/layout/fdp/grid.d.ts.map +1 -0
- package/dist/layout/fdp/index.d.ts +36 -0
- package/dist/layout/fdp/index.d.ts.map +1 -0
- package/dist/layout/fdp/init.d.ts +26 -0
- package/dist/layout/fdp/init.d.ts.map +1 -0
- package/dist/layout/fdp/layout.d.ts +57 -0
- package/dist/layout/fdp/layout.d.ts.map +1 -0
- package/dist/layout/fdp/normalize.d.ts +18 -0
- package/dist/layout/fdp/normalize.d.ts.map +1 -0
- package/dist/layout/fdp/ports.d.ts +41 -0
- package/dist/layout/fdp/ports.d.ts.map +1 -0
- package/dist/layout/fdp/tlayout-init.d.ts +21 -0
- package/dist/layout/fdp/tlayout-init.d.ts.map +1 -0
- package/dist/layout/fdp/tlayout-parms.d.ts +98 -0
- package/dist/layout/fdp/tlayout-parms.d.ts.map +1 -0
- package/dist/layout/fdp/tlayout.d.ts +43 -0
- package/dist/layout/fdp/tlayout.d.ts.map +1 -0
- package/dist/layout/fdp/xlayout.d.ts +26 -0
- package/dist/layout/fdp/xlayout.d.ts.map +1 -0
- package/dist/layout/neato/bfs.d.ts +43 -0
- package/dist/layout/neato/bfs.d.ts.map +1 -0
- package/dist/layout/neato/cdt-surface.d.ts +16 -0
- package/dist/layout/neato/cdt-surface.d.ts.map +1 -0
- package/dist/layout/neato/conjgrad.d.ts +61 -0
- package/dist/layout/neato/conjgrad.d.ts.map +1 -0
- package/dist/layout/neato/delaunay.d.ts +28 -0
- package/dist/layout/neato/delaunay.d.ts.map +1 -0
- package/dist/layout/neato/dijkstra.d.ts +80 -0
- package/dist/layout/neato/dijkstra.d.ts.map +1 -0
- package/dist/layout/neato/fdp-adjust.d.ts +31 -0
- package/dist/layout/neato/fdp-adjust.d.ts.map +1 -0
- package/dist/layout/neato/index.d.ts +58 -0
- package/dist/layout/neato/index.d.ts.map +1 -0
- package/dist/layout/neato/init.d.ts +207 -0
- package/dist/layout/neato/init.d.ts.map +1 -0
- package/dist/layout/neato/legal.d.ts +7 -0
- package/dist/layout/neato/legal.d.ts.map +1 -0
- package/dist/layout/neato/matrix-ops.d.ts +28 -0
- package/dist/layout/neato/matrix-ops.d.ts.map +1 -0
- package/dist/layout/neato/multispline-router.d.ts +80 -0
- package/dist/layout/neato/multispline-router.d.ts.map +1 -0
- package/dist/layout/neato/multispline.d.ts +24 -0
- package/dist/layout/neato/multispline.d.ts.map +1 -0
- package/dist/layout/neato/overlap-prism.d.ts +26 -0
- package/dist/layout/neato/overlap-prism.d.ts.map +1 -0
- package/dist/layout/neato/overlap.d.ts +85 -0
- package/dist/layout/neato/overlap.d.ts.map +1 -0
- package/dist/layout/neato/sc-adjust.d.ts +33 -0
- package/dist/layout/neato/sc-adjust.d.ts.map +1 -0
- package/dist/layout/neato/sep-factor.d.ts +41 -0
- package/dist/layout/neato/sep-factor.d.ts.map +1 -0
- package/dist/layout/neato/set-aspect.d.ts +33 -0
- package/dist/layout/neato/set-aspect.d.ts.map +1 -0
- package/dist/layout/neato/sgd.d.ts +166 -0
- package/dist/layout/neato/sgd.d.ts.map +1 -0
- package/dist/layout/neato/splines.d.ts +153 -0
- package/dist/layout/neato/splines.d.ts.map +1 -0
- package/dist/layout/neato/stress-kernel.d.ts +53 -0
- package/dist/layout/neato/stress-kernel.d.ts.map +1 -0
- package/dist/layout/neato/stress.d.ts +158 -0
- package/dist/layout/neato/stress.d.ts.map +1 -0
- package/dist/layout/osage/index.d.ts +158 -0
- package/dist/layout/osage/index.d.ts.map +1 -0
- package/dist/layout/osage/layout.d.ts +49 -0
- package/dist/layout/osage/layout.d.ts.map +1 -0
- package/dist/layout/osage/types.d.ts +28 -0
- package/dist/layout/osage/types.d.ts.map +1 -0
- package/dist/layout/pack/array-pack.d.ts +114 -0
- package/dist/layout/pack/array-pack.d.ts.map +1 -0
- package/dist/layout/pack/index.d.ts +157 -0
- package/dist/layout/pack/index.d.ts.map +1 -0
- package/dist/layout/pack/poly-pack.d.ts +126 -0
- package/dist/layout/pack/poly-pack.d.ts.map +1 -0
- package/dist/layout/pack/poly-place.d.ts +27 -0
- package/dist/layout/pack/poly-place.d.ts.map +1 -0
- package/dist/layout/pack/spiral-search.d.ts +18 -0
- package/dist/layout/pack/spiral-search.d.ts.map +1 -0
- package/dist/layout/pack/test-helpers.d.ts +7 -0
- package/dist/layout/pack/test-helpers.d.ts.map +1 -0
- package/dist/layout/pack/types.d.ts +74 -0
- package/dist/layout/pack/types.d.ts.map +1 -0
- package/dist/layout/patchwork/index.d.ts +136 -0
- package/dist/layout/patchwork/index.d.ts.map +1 -0
- package/dist/layout/patchwork/tree-map.d.ts +32 -0
- package/dist/layout/patchwork/tree-map.d.ts.map +1 -0
- package/dist/layout/patchwork/tree-node.d.ts +46 -0
- package/dist/layout/patchwork/tree-node.d.ts.map +1 -0
- package/dist/layout/sfdp/index.d.ts +39 -0
- package/dist/layout/sfdp/index.d.ts.map +1 -0
- package/dist/layout/sfdp/init.d.ts +61 -0
- package/dist/layout/sfdp/init.d.ts.map +1 -0
- package/dist/layout/sfdp/multilevel.d.ts +23 -0
- package/dist/layout/sfdp/multilevel.d.ts.map +1 -0
- package/dist/layout/sfdp/quadtree.d.ts +45 -0
- package/dist/layout/sfdp/quadtree.d.ts.map +1 -0
- package/dist/layout/sfdp/sparse-matrix-multiply.d.ts +34 -0
- package/dist/layout/sfdp/sparse-matrix-multiply.d.ts.map +1 -0
- package/dist/layout/sfdp/sparse-matrix.d.ts +101 -0
- package/dist/layout/sfdp/sparse-matrix.d.ts.map +1 -0
- package/dist/layout/sfdp/sparse-solve.d.ts +14 -0
- package/dist/layout/sfdp/sparse-solve.d.ts.map +1 -0
- package/dist/layout/sfdp/spring-driver.d.ts +18 -0
- package/dist/layout/sfdp/spring-driver.d.ts.map +1 -0
- package/dist/layout/sfdp/spring-electrical.d.ts +61 -0
- package/dist/layout/sfdp/spring-electrical.d.ts.map +1 -0
- package/dist/layout/twopi/circle.d.ts +83 -0
- package/dist/layout/twopi/circle.d.ts.map +1 -0
- package/dist/layout/twopi/index.d.ts +24 -0
- package/dist/layout/twopi/index.d.ts.map +1 -0
- package/dist/layout/twopi/init.d.ts +85 -0
- package/dist/layout/twopi/init.d.ts.map +1 -0
- package/dist/layout/twopi/pipeline.d.ts +37 -0
- package/dist/layout/twopi/pipeline.d.ts.map +1 -0
- package/dist/layout/twopi/twopi-test-helpers.d.ts +12 -0
- package/dist/layout/twopi/twopi-test-helpers.d.ts.map +1 -0
- package/dist/model/algData.d.ts +175 -0
- package/dist/model/algData.d.ts.map +1 -0
- package/dist/model/cgraph-ops.d.ts +86 -0
- package/dist/model/cgraph-ops.d.ts.map +1 -0
- package/dist/model/edge.d.ts +80 -0
- package/dist/model/edge.d.ts.map +1 -0
- package/dist/model/edgeInfo.d.ts +299 -0
- package/dist/model/edgeInfo.d.ts.map +1 -0
- package/dist/model/geom.d.ts +149 -0
- package/dist/model/geom.d.ts.map +1 -0
- package/dist/model/graph.d.ts +135 -0
- package/dist/model/graph.d.ts.map +1 -0
- package/dist/model/graphInfo.d.ts +418 -0
- package/dist/model/graphInfo.d.ts.map +1 -0
- package/dist/model/index.d.ts +10 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/layoutParams.d.ts +85 -0
- package/dist/model/layoutParams.d.ts.map +1 -0
- package/dist/model/node.d.ts +101 -0
- package/dist/model/node.d.ts.map +1 -0
- package/dist/model/nodeInfo.d.ts +278 -0
- package/dist/model/nodeInfo.d.ts.map +1 -0
- package/dist/model/rankEntry.d.ts +80 -0
- package/dist/model/rankEntry.d.ts.map +1 -0
- package/dist/ortho/chan-dict.d.ts +82 -0
- package/dist/ortho/chan-dict.d.ts.map +1 -0
- package/dist/ortho/fpq.d.ts +54 -0
- package/dist/ortho/fpq.d.ts.map +1 -0
- package/dist/ortho/index.d.ts +35 -0
- package/dist/ortho/index.d.ts.map +1 -0
- package/dist/ortho/maze-channels.d.ts +47 -0
- package/dist/ortho/maze-channels.d.ts.map +1 -0
- package/dist/ortho/maze.d.ts +27 -0
- package/dist/ortho/maze.d.ts.map +1 -0
- package/dist/ortho/ortho-parallel.d.ts +26 -0
- package/dist/ortho/ortho-parallel.d.ts.map +1 -0
- package/dist/ortho/ortho-route.d.ts +31 -0
- package/dist/ortho/ortho-route.d.ts.map +1 -0
- package/dist/ortho/partition.d.ts +34 -0
- package/dist/ortho/partition.d.ts.map +1 -0
- package/dist/ortho/rawgraph.d.ts +41 -0
- package/dist/ortho/rawgraph.d.ts.map +1 -0
- package/dist/ortho/sgraph.d.ts +74 -0
- package/dist/ortho/sgraph.d.ts.map +1 -0
- package/dist/ortho/trap-query.d.ts +32 -0
- package/dist/ortho/trap-query.d.ts.map +1 -0
- package/dist/ortho/trap-segment.d.ts +23 -0
- package/dist/ortho/trap-segment.d.ts.map +1 -0
- package/dist/ortho/trap-types.d.ts +91 -0
- package/dist/ortho/trap-types.d.ts.map +1 -0
- package/dist/ortho/trap-update.d.ts +12 -0
- package/dist/ortho/trap-update.d.ts.map +1 -0
- package/dist/ortho/trapezoid.d.ts +18 -0
- package/dist/ortho/trapezoid.d.ts.map +1 -0
- package/dist/ortho/types.d.ts +241 -0
- package/dist/ortho/types.d.ts.map +1 -0
- package/dist/parser/ast.d.ts +49 -0
- package/dist/parser/ast.d.ts.map +1 -0
- package/dist/parser/builder.d.ts +75 -0
- package/dist/parser/builder.d.ts.map +1 -0
- package/dist/parser/index.d.ts +97 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/pathplan/index.d.ts +8 -0
- package/dist/pathplan/index.d.ts.map +1 -0
- package/dist/pathplan/route.d.ts +9 -0
- package/dist/pathplan/route.d.ts.map +1 -0
- package/dist/pathplan/shortest.d.ts +5 -0
- package/dist/pathplan/shortest.d.ts.map +1 -0
- package/dist/pathplan/solvers.d.ts +5 -0
- package/dist/pathplan/solvers.d.ts.map +1 -0
- package/dist/pathplan/triang.d.ts +25 -0
- package/dist/pathplan/triang.d.ts.map +1 -0
- package/dist/pathplan/types.d.ts +22 -0
- package/dist/pathplan/types.d.ts.map +1 -0
- package/dist/pathplan/visibility.d.ts +13 -0
- package/dist/pathplan/visibility.d.ts.map +1 -0
- package/dist/pathplan/vispath.d.ts +9 -0
- package/dist/pathplan/vispath.d.ts.map +1 -0
- package/dist/rbtree/index.d.ts +127 -0
- package/dist/rbtree/index.d.ts.map +1 -0
- package/dist/render/color-resolve.d.ts +38 -0
- package/dist/render/color-resolve.d.ts.map +1 -0
- package/dist/render/dot.d.ts +379 -0
- package/dist/render/dot.d.ts.map +1 -0
- package/dist/render/index.d.ts +24 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/json.d.ts +89 -0
- package/dist/render/json.d.ts.map +1 -0
- package/dist/render/map-test-helpers.d.ts +13 -0
- package/dist/render/map-test-helpers.d.ts.map +1 -0
- package/dist/render/map.d.ts +197 -0
- package/dist/render/map.d.ts.map +1 -0
- package/dist/render/public.d.ts +64 -0
- package/dist/render/public.d.ts.map +1 -0
- package/dist/render/svg-arrow-ops.d.ts +10 -0
- package/dist/render/svg-arrow-ops.d.ts.map +1 -0
- package/dist/render/svg-cluster.d.ts +9 -0
- package/dist/render/svg-cluster.d.ts.map +1 -0
- package/dist/render/svg-edge-ortho-radius.d.ts +31 -0
- package/dist/render/svg-edge-ortho-radius.d.ts.map +1 -0
- package/dist/render/svg-edge-split.d.ts +48 -0
- package/dist/render/svg-edge-split.d.ts.map +1 -0
- package/dist/render/svg-gradient.d.ts +46 -0
- package/dist/render/svg-gradient.d.ts.map +1 -0
- package/dist/render/svg-graph.d.ts +97 -0
- package/dist/render/svg-graph.d.ts.map +1 -0
- package/dist/render/svg-helpers.d.ts +122 -0
- package/dist/render/svg-helpers.d.ts.map +1 -0
- package/dist/render/svg-id.d.ts +28 -0
- package/dist/render/svg-id.d.ts.map +1 -0
- package/dist/render/svg-multicolor.d.ts +60 -0
- package/dist/render/svg-multicolor.d.ts.map +1 -0
- package/dist/render/svg-parallel-edge.d.ts +28 -0
- package/dist/render/svg-parallel-edge.d.ts.map +1 -0
- package/dist/render/svg-tapered-edge.d.ts +18 -0
- package/dist/render/svg-tapered-edge.d.ts.map +1 -0
- package/dist/render/svg.d.ts +104 -0
- package/dist/render/svg.d.ts.map +1 -0
- package/dist/render/xdot-public.d.ts +95 -0
- package/dist/render/xdot-public.d.ts.map +1 -0
- package/dist/render/xml-escape.d.ts +21 -0
- package/dist/render/xml-escape.d.ts.map +1 -0
- package/dist/render.js +52556 -0
- package/dist/render.js.map +7 -0
- package/dist/util/agxbuf.d.ts +72 -0
- package/dist/util/agxbuf.d.ts.map +1 -0
- package/dist/util/bsd-qsort.d.ts +22 -0
- package/dist/util/bsd-qsort.d.ts.map +1 -0
- package/dist/util/index.d.ts +11 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/list.d.ts +47 -0
- package/dist/util/list.d.ts.map +1 -0
- package/dist/util/math.d.ts +54 -0
- package/dist/util/math.d.ts.map +1 -0
- package/dist/util/mt19937.d.ts +40 -0
- package/dist/util/mt19937.d.ts.map +1 -0
- package/dist/util/printf-round.d.ts +45 -0
- package/dist/util/printf-round.d.ts.map +1 -0
- package/dist/util/xml.d.ts +24 -0
- package/dist/util/xml.d.ts.map +1 -0
- package/dist/vpsc/Block.d.ts +116 -0
- package/dist/vpsc/Block.d.ts.map +1 -0
- package/dist/vpsc/Blocks.d.ts +66 -0
- package/dist/vpsc/Blocks.d.ts.map +1 -0
- package/dist/vpsc/Constraint.d.ts +51 -0
- package/dist/vpsc/Constraint.d.ts.map +1 -0
- package/dist/vpsc/HeapUtils.d.ts +37 -0
- package/dist/vpsc/HeapUtils.d.ts.map +1 -0
- package/dist/vpsc/Solver.d.ts +107 -0
- package/dist/vpsc/Solver.d.ts.map +1 -0
- package/dist/vpsc/SweepLine.d.ts +38 -0
- package/dist/vpsc/SweepLine.d.ts.map +1 -0
- package/dist/vpsc/Variable.d.ts +38 -0
- package/dist/vpsc/Variable.d.ts.map +1 -0
- package/dist/vpsc/index.d.ts +54 -0
- package/dist/vpsc/index.d.ts.map +1 -0
- package/dist/vpsc/sweepTypes.d.ts +29 -0
- package/dist/vpsc/sweepTypes.d.ts.map +1 -0
- package/dist/xdot/index.d.ts +6 -0
- package/dist/xdot/index.d.ts.map +1 -0
- package/dist/xdot/lex.d.ts +22 -0
- package/dist/xdot/lex.d.ts.map +1 -0
- package/dist/xdot/misc.d.ts +13 -0
- package/dist/xdot/misc.d.ts.map +1 -0
- package/dist/xdot/parse.d.ts +21 -0
- package/dist/xdot/parse.d.ts.map +1 -0
- package/dist/xdot/types.d.ts +152 -0
- package/dist/xdot/types.d.ts.map +1 -0
- package/package.json +113 -0
- package/src/api/builder.ts +277 -0
- package/src/api/edge-ops.ts +113 -0
- package/src/api/geometry.ts +307 -0
- package/src/api/index.ts +46 -0
- package/src/cdt/bag.ts +196 -0
- package/src/cdt/hash-core.ts +84 -0
- package/src/cdt/hash.ts +207 -0
- package/src/cdt/index.ts +17 -0
- package/src/cdt/splay-core.ts +301 -0
- package/src/cdt/splay.ts +191 -0
- package/src/cdt/strhash.ts +52 -0
- package/src/cdt/types.ts +13 -0
- package/src/common/arith.ts +39 -0
- package/src/common/arm-pow-data.ts +201 -0
- package/src/common/arm-pow.ts +296 -0
- package/src/common/arrows-constants.ts +175 -0
- package/src/common/arrows-geometry.ts +62 -0
- package/src/common/arrows-miter.ts +84 -0
- package/src/common/arrows-shapes-poly.ts +241 -0
- package/src/common/arrows-shapes-util.ts +162 -0
- package/src/common/arrows-shapes.ts +360 -0
- package/src/common/arrows-types.ts +59 -0
- package/src/common/arrows.ts +209 -0
- package/src/common/color.ts +340 -0
- package/src/common/colorData.ts +264 -0
- package/src/common/compass-port.ts +384 -0
- package/src/common/crand.ts +79 -0
- package/src/common/edge-label-init.ts +310 -0
- package/src/common/edge-offset.ts +140 -0
- package/src/common/ellipse-wedge.ts +189 -0
- package/src/common/emit-types.ts +332 -0
- package/src/common/fma.ts +52 -0
- package/src/common/graph-init.ts +359 -0
- package/src/common/html-entities.ts +299 -0
- package/src/common/html-string.ts +22 -0
- package/src/common/htmltable-emit-fill.ts +367 -0
- package/src/common/htmltable-emit-rules.ts +293 -0
- package/src/common/htmltable-emit.ts +345 -0
- package/src/common/htmltable-lex.ts +138 -0
- package/src/common/htmltable-parse.ts +539 -0
- package/src/common/htmltable-port.ts +32 -0
- package/src/common/htmltable-pos-runs.ts +313 -0
- package/src/common/htmltable-pos.ts +601 -0
- package/src/common/htmltable-types.ts +262 -0
- package/src/common/htmltable.ts +477 -0
- package/src/common/layers.ts +113 -0
- package/src/common/make-label.ts +192 -0
- package/src/common/multicolor.ts +167 -0
- package/src/common/nodeinit.ts +339 -0
- package/src/common/poly-gencode.ts +475 -0
- package/src/common/poly-init.ts +133 -0
- package/src/common/poly-inside.ts +202 -0
- package/src/common/poly-shapes-cases.ts +253 -0
- package/src/common/poly-shapes-cases2.ts +170 -0
- package/src/common/poly-shapes-util.ts +124 -0
- package/src/common/poly-shapes.ts +181 -0
- package/src/common/poly-sizing.ts +639 -0
- package/src/common/poly-vertices.ts +237 -0
- package/src/common/postproc.ts +436 -0
- package/src/common/ps-fontalias.ts +112 -0
- package/src/common/random.ts +37 -0
- package/src/common/record-port.ts +89 -0
- package/src/common/record.ts +523 -0
- package/src/common/shapeData.ts +502 -0
- package/src/common/shapes.ts +187 -0
- package/src/common/spline-midpoint.ts +105 -0
- package/src/common/splines-clip.ts +449 -0
- package/src/common/splines-constants.ts +53 -0
- package/src/common/splines-geom.ts +194 -0
- package/src/common/splines-path-begin.ts +243 -0
- package/src/common/splines-path-end.ts +231 -0
- package/src/common/splines-path-shared.ts +258 -0
- package/src/common/splines-routespl.ts +444 -0
- package/src/common/splines-selfedge.ts +403 -0
- package/src/common/splines.ts +33 -0
- package/src/common/style-resolve.ts +481 -0
- package/src/common/subst.ts +126 -0
- package/src/common/taper.ts +219 -0
- package/src/common/textmeasure-factory.ts +86 -0
- package/src/common/textmeasure-lookup.ts +50 -0
- package/src/common/textmeasure-lut-data-a.ts +182 -0
- package/src/common/textmeasure-lut-data-b.ts +140 -0
- package/src/common/textmeasure-lut-data-c.ts +221 -0
- package/src/common/textmeasure-lut-data.ts +78 -0
- package/src/common/textmeasure.ts +321 -0
- package/src/common/types.ts +425 -0
- package/src/common/xlabels-place.ts +475 -0
- package/src/debug.ts +38 -0
- package/src/errors.ts +95 -0
- package/src/gvc/anchor.ts +530 -0
- package/src/gvc/context.ts +260 -0
- package/src/gvc/default-context.ts +70 -0
- package/src/gvc/device-cluster.ts +114 -0
- package/src/gvc/device.ts +598 -0
- package/src/gvc/edge-labels.ts +116 -0
- package/src/gvc/emit-walk.ts +98 -0
- package/src/gvc/image-resolver.ts +137 -0
- package/src/gvc/job.ts +401 -0
- package/src/gvc/textlayout.ts +44 -0
- package/src/gvc/textspan-emit.ts +100 -0
- package/src/gvc/usershape.ts +33 -0
- package/src/gvc/viewport.ts +203 -0
- package/src/index.ts +165 -0
- package/src/label/index.ts +302 -0
- package/src/label/node.ts +278 -0
- package/src/label/rectangle.ts +123 -0
- package/src/label/split-q.ts +237 -0
- package/src/label/xlabels-geom.ts +132 -0
- package/src/label/xlabels-intersect.ts +421 -0
- package/src/label/xlabels.ts +212 -0
- package/src/layout/circo/blockpath.ts +560 -0
- package/src/layout/circo/blocks.ts +234 -0
- package/src/layout/circo/blocktree.ts +246 -0
- package/src/layout/circo/circular.ts +227 -0
- package/src/layout/circo/index.ts +90 -0
- package/src/layout/circo/init.ts +84 -0
- package/src/layout/circo/position-helpers.ts +104 -0
- package/src/layout/circo/position.ts +196 -0
- package/src/layout/dot/__fixtures__/xcoord-pivot-divergence.gv +79 -0
- package/src/layout/dot/acyclic.ts +60 -0
- package/src/layout/dot/aspect.ts +22 -0
- package/src/layout/dot/classify.ts +462 -0
- package/src/layout/dot/cluster-path.ts +200 -0
- package/src/layout/dot/cluster.ts +480 -0
- package/src/layout/dot/compound-clip.ts +224 -0
- package/src/layout/dot/compound-geom.ts +282 -0
- package/src/layout/dot/compound.ts +294 -0
- package/src/layout/dot/conc.ts +433 -0
- package/src/layout/dot/decomp.ts +165 -0
- package/src/layout/dot/edge-order.ts +62 -0
- package/src/layout/dot/edge-route-arrow.ts +87 -0
- package/src/layout/dot/edge-route-boxes.ts +99 -0
- package/src/layout/dot/edge-route-chain.ts +420 -0
- package/src/layout/dot/edge-route-clip.ts +253 -0
- package/src/layout/dot/edge-route-faithful.ts +404 -0
- package/src/layout/dot/edge-route-geom.ts +90 -0
- package/src/layout/dot/edge-route-helpers.ts +170 -0
- package/src/layout/dot/edge-route-poly.ts +174 -0
- package/src/layout/dot/edge-route-rank.ts +136 -0
- package/src/layout/dot/edge-route-routing.ts +219 -0
- package/src/layout/dot/edge-route.ts +490 -0
- package/src/layout/dot/fastgr.ts +377 -0
- package/src/layout/dot/flat-utils.ts +52 -0
- package/src/layout/dot/flat.ts +518 -0
- package/src/layout/dot/graph-label.ts +114 -0
- package/src/layout/dot/index.ts +302 -0
- package/src/layout/dot/init.ts +300 -0
- package/src/layout/dot/label-order.ts +161 -0
- package/src/layout/dot/mincross-build.ts +373 -0
- package/src/layout/dot/mincross-cross.ts +409 -0
- package/src/layout/dot/mincross-flat.ts +213 -0
- package/src/layout/dot/mincross-order.ts +401 -0
- package/src/layout/dot/mincross-utils.ts +170 -0
- package/src/layout/dot/mincross.ts +386 -0
- package/src/layout/dot/ns-core.ts +122 -0
- package/src/layout/dot/ns-range.ts +228 -0
- package/src/layout/dot/ns-subtree.ts +347 -0
- package/src/layout/dot/ns.ts +506 -0
- package/src/layout/dot/ortho-adapter.ts +133 -0
- package/src/layout/dot/pack-components.ts +433 -0
- package/src/layout/dot/position-aux.ts +382 -0
- package/src/layout/dot/position-bbox.ts +221 -0
- package/src/layout/dot/position-cluster.ts +286 -0
- package/src/layout/dot/position-ycoords.ts +287 -0
- package/src/layout/dot/position.ts +194 -0
- package/src/layout/dot/rank-dot2.ts +528 -0
- package/src/layout/dot/rank.ts +547 -0
- package/src/layout/dot/sameport.ts +278 -0
- package/src/layout/dot/self-loop.ts +147 -0
- package/src/layout/dot/splines-clone.ts +121 -0
- package/src/layout/dot/splines-flat-labeled.ts +408 -0
- package/src/layout/dot/splines-flat-multi.ts +188 -0
- package/src/layout/dot/splines-flat.ts +598 -0
- package/src/layout/dot/splines-groups.ts +190 -0
- package/src/layout/dot/splines-label.ts +432 -0
- package/src/layout/dot/splines-route-type.ts +44 -0
- package/src/layout/dot/splines-route.ts +478 -0
- package/src/layout/dot/splines.ts +538 -0
- package/src/layout/dot/straight-edges.ts +332 -0
- package/src/layout/fdp/cluster-edges.ts +0 -0
- package/src/layout/fdp/comp.ts +160 -0
- package/src/layout/fdp/derive.ts +272 -0
- package/src/layout/fdp/fdp-model.ts +238 -0
- package/src/layout/fdp/grid.ts +77 -0
- package/src/layout/fdp/index.ts +113 -0
- package/src/layout/fdp/init.ts +116 -0
- package/src/layout/fdp/layout.ts +485 -0
- package/src/layout/fdp/normalize.ts +100 -0
- package/src/layout/fdp/ports.ts +161 -0
- package/src/layout/fdp/tlayout-init.ts +230 -0
- package/src/layout/fdp/tlayout-parms.ts +234 -0
- package/src/layout/fdp/tlayout.ts +317 -0
- package/src/layout/fdp/xlayout.ts +350 -0
- package/src/layout/neato/bfs.ts +131 -0
- package/src/layout/neato/cdt-surface.ts +693 -0
- package/src/layout/neato/conjgrad.ts +159 -0
- package/src/layout/neato/delaunay.ts +259 -0
- package/src/layout/neato/dijkstra.ts +296 -0
- package/src/layout/neato/fdp-adjust.ts +124 -0
- package/src/layout/neato/index.ts +310 -0
- package/src/layout/neato/init.ts +505 -0
- package/src/layout/neato/legal.ts +316 -0
- package/src/layout/neato/matrix-ops.ts +112 -0
- package/src/layout/neato/multispline-router.ts +417 -0
- package/src/layout/neato/multispline.ts +427 -0
- package/src/layout/neato/overlap-prism.ts +503 -0
- package/src/layout/neato/overlap.ts +158 -0
- package/src/layout/neato/sc-adjust.ts +206 -0
- package/src/layout/neato/sep-factor.ts +118 -0
- package/src/layout/neato/set-aspect.ts +178 -0
- package/src/layout/neato/sgd.ts +461 -0
- package/src/layout/neato/splines.ts +1014 -0
- package/src/layout/neato/stress-kernel.ts +362 -0
- package/src/layout/neato/stress.ts +420 -0
- package/src/layout/osage/index.ts +548 -0
- package/src/layout/osage/layout.ts +254 -0
- package/src/layout/osage/types.ts +31 -0
- package/src/layout/pack/array-pack.ts +254 -0
- package/src/layout/pack/index.ts +570 -0
- package/src/layout/pack/poly-pack.ts +266 -0
- package/src/layout/pack/poly-place.ts +426 -0
- package/src/layout/pack/spiral-search.ts +106 -0
- package/src/layout/pack/test-helpers.ts +46 -0
- package/src/layout/pack/types.ts +85 -0
- package/src/layout/patchwork/index.ts +441 -0
- package/src/layout/patchwork/tree-map.ts +183 -0
- package/src/layout/patchwork/tree-node.ts +120 -0
- package/src/layout/sfdp/index.ts +231 -0
- package/src/layout/sfdp/init.ts +224 -0
- package/src/layout/sfdp/multilevel.ts +262 -0
- package/src/layout/sfdp/quadtree.ts +267 -0
- package/src/layout/sfdp/sparse-matrix-multiply.ts +160 -0
- package/src/layout/sfdp/sparse-matrix.ts +367 -0
- package/src/layout/sfdp/sparse-solve.ts +122 -0
- package/src/layout/sfdp/spring-driver.ts +209 -0
- package/src/layout/sfdp/spring-electrical.ts +431 -0
- package/src/layout/twopi/circle.ts +339 -0
- package/src/layout/twopi/index.ts +78 -0
- package/src/layout/twopi/init.ts +174 -0
- package/src/layout/twopi/pipeline.ts +98 -0
- package/src/layout/twopi/twopi-test-helpers.ts +44 -0
- package/src/model/algData.ts +194 -0
- package/src/model/cgraph-ops.ts +175 -0
- package/src/model/edge.ts +104 -0
- package/src/model/edgeInfo.ts +431 -0
- package/src/model/geom.ts +204 -0
- package/src/model/graph.ts +172 -0
- package/src/model/graphInfo.ts +528 -0
- package/src/model/index.ts +10 -0
- package/src/model/layoutParams.ts +127 -0
- package/src/model/node.ts +138 -0
- package/src/model/nodeInfo.ts +424 -0
- package/src/model/rankEntry.ts +95 -0
- package/src/ortho/chan-dict.ts +236 -0
- package/src/ortho/fpq.ts +149 -0
- package/src/ortho/index.ts +206 -0
- package/src/ortho/maze-channels.ts +196 -0
- package/src/ortho/maze.ts +311 -0
- package/src/ortho/ortho-parallel.ts +254 -0
- package/src/ortho/ortho-route.ts +349 -0
- package/src/ortho/partition.ts +303 -0
- package/src/ortho/rawgraph.ts +119 -0
- package/src/ortho/sgraph.ts +283 -0
- package/src/ortho/trap-query.ts +174 -0
- package/src/ortho/trap-segment.ts +303 -0
- package/src/ortho/trap-types.ts +171 -0
- package/src/ortho/trap-update.ts +89 -0
- package/src/ortho/trapezoid.ts +120 -0
- package/src/ortho/types.ts +286 -0
- package/src/parser/__fixtures__/directed.dot +10 -0
- package/src/parser/__fixtures__/simple.dot +7 -0
- package/src/parser/__fixtures__/subgraph.dot +17 -0
- package/src/parser/ast.ts +64 -0
- package/src/parser/builder.ts +401 -0
- package/src/parser/dot.d.ts +208 -0
- package/src/parser/dot.js +3321 -0
- package/src/parser/dot.pegjs +263 -0
- package/src/parser/index.ts +353 -0
- package/src/pathplan/index.ts +9 -0
- package/src/pathplan/route.ts +284 -0
- package/src/pathplan/shortest.ts +268 -0
- package/src/pathplan/solvers.ts +65 -0
- package/src/pathplan/triang.ts +221 -0
- package/src/pathplan/types.ts +16 -0
- package/src/pathplan/visibility.ts +170 -0
- package/src/pathplan/vispath.ts +118 -0
- package/src/rbtree/index.ts +418 -0
- package/src/render/color-resolve.ts +171 -0
- package/src/render/dot.ts +1514 -0
- package/src/render/index.ts +29 -0
- package/src/render/json.ts +734 -0
- package/src/render/map-test-helpers.ts +61 -0
- package/src/render/map.ts +528 -0
- package/src/render/public.ts +131 -0
- package/src/render/svg-arrow-ops.ts +113 -0
- package/src/render/svg-cluster.ts +24 -0
- package/src/render/svg-edge-ortho-radius.ts +228 -0
- package/src/render/svg-edge-split.ts +180 -0
- package/src/render/svg-gradient.ts +185 -0
- package/src/render/svg-graph.ts +415 -0
- package/src/render/svg-helpers.ts +623 -0
- package/src/render/svg-id.ts +76 -0
- package/src/render/svg-multicolor.ts +313 -0
- package/src/render/svg-parallel-edge.ts +123 -0
- package/src/render/svg-tapered-edge.ts +56 -0
- package/src/render/svg.ts +307 -0
- package/src/render/xdot-public.ts +164 -0
- package/src/render/xml-escape.ts +56 -0
- package/src/util/agxbuf.ts +138 -0
- package/src/util/bsd-qsort.ts +251 -0
- package/src/util/index.ts +25 -0
- package/src/util/list.ts +122 -0
- package/src/util/math.ts +104 -0
- package/src/util/mt19937.ts +143 -0
- package/src/util/printf-round.ts +163 -0
- package/src/util/xml.ts +184 -0
- package/src/vpsc/Block.ts +375 -0
- package/src/vpsc/Blocks.ts +164 -0
- package/src/vpsc/Constraint.ts +94 -0
- package/src/vpsc/HeapUtils.ts +88 -0
- package/src/vpsc/Solver.ts +274 -0
- package/src/vpsc/SweepLine.ts +214 -0
- package/src/vpsc/Variable.ts +54 -0
- package/src/vpsc/index.ts +122 -0
- package/src/vpsc/sweepTypes.ts +31 -0
- package/src/xdot/index.ts +7 -0
- package/src/xdot/lex.ts +151 -0
- package/src/xdot/misc.ts +226 -0
- package/src/xdot/parse.ts +349 -0
- package/src/xdot/types.ts +158 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Geometric helpers for edge spline routing: vector math and node-box
|
|
5
|
+
* ray clipping.
|
|
6
|
+
*
|
|
7
|
+
* @see lib/common/splines.c:clip_and_install (box-clipping logic)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Point } from '../../model/geom.js';
|
|
11
|
+
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Vector helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
/** Normalize a 2-D vector; returns {0,0} if near-zero length. */
|
|
17
|
+
export function normalizeVec(v: Point): Point {
|
|
18
|
+
const d = Math.sqrt(v.x * v.x + v.y * v.y);
|
|
19
|
+
if (d < 1e-10) return { x: 0, y: 0 };
|
|
20
|
+
return { x: v.x / d, y: v.y / d };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Reverse a vector. */
|
|
24
|
+
export function negateVec(v: Point): Point { return { x: -v.x, y: -v.y }; }
|
|
25
|
+
|
|
26
|
+
/** Offset a point by dir * scale. */
|
|
27
|
+
export function offsetPoint(p: Point, dir: Point, scale: number): Point {
|
|
28
|
+
return { x: p.x + dir.x * scale, y: p.y + dir.y * scale };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// clipToNodeBox
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
/** Min positive t along x-axis for the given boundary half-width. */
|
|
36
|
+
export function xClipT(dirX: number, halfW: number): number {
|
|
37
|
+
if (dirX > 0) return halfW / dirX;
|
|
38
|
+
if (dirX < 0) return -halfW / dirX;
|
|
39
|
+
return Infinity;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Min positive t along y-axis for the given boundary half-height. */
|
|
43
|
+
export function yClipT(dirY: number, halfH: number): number {
|
|
44
|
+
if (dirY > 0) return halfH / dirY;
|
|
45
|
+
if (dirY < 0) return -halfH / dirY;
|
|
46
|
+
return Infinity;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Node box dimensions bundled for clipping.
|
|
51
|
+
* @see lib/common/types.h:Agnodeinfo_t (ND_lw, ND_rw, ND_ht)
|
|
52
|
+
*/
|
|
53
|
+
export interface NodeBox {
|
|
54
|
+
center: Point;
|
|
55
|
+
lw: number;
|
|
56
|
+
rw: number;
|
|
57
|
+
ht: number;
|
|
58
|
+
/** True when the node shape is elliptical (sides === 1 in C poly_inside). */
|
|
59
|
+
isEllipse?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Node pen width. C's poly_inside clips to the outline periphery (the
|
|
62
|
+
* boundary grown by penwidth/2), so a thick-bordered node clips the edge
|
|
63
|
+
* spline / arrow slightly further out. Defaults to DEFAULT_NODEPENWIDTH.
|
|
64
|
+
* @see lib/common/shapes.c:poly_inside (outline / penwidth)
|
|
65
|
+
*/
|
|
66
|
+
penwidth?: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Clip a ray from box.center in direction `dir` to the node boundary.
|
|
71
|
+
* For ellipse nodes uses the ellipse formula; for box nodes uses the box formula.
|
|
72
|
+
* @see lib/common/shapes.c:poly_inside
|
|
73
|
+
*/
|
|
74
|
+
export function clipToNodeBox(box: NodeBox, dir: Point): Point {
|
|
75
|
+
if (dir.x === 0 && dir.y === 0) return { x: box.center.x, y: box.center.y };
|
|
76
|
+
if (box.isEllipse) {
|
|
77
|
+
const rx = (box.lw + box.rw) / 2;
|
|
78
|
+
const ry = box.ht / 2;
|
|
79
|
+
const fx = dir.x / rx;
|
|
80
|
+
const fy = dir.y / ry;
|
|
81
|
+
const d = Math.sqrt(fx * fx + fy * fy);
|
|
82
|
+
if (d < 1e-10) return { x: box.center.x, y: box.center.y };
|
|
83
|
+
const t = 1 / d;
|
|
84
|
+
return { x: box.center.x + dir.x * t, y: box.center.y + dir.y * t };
|
|
85
|
+
}
|
|
86
|
+
const halfW = dir.x > 0 ? box.rw : box.lw;
|
|
87
|
+
const t = Math.min(xClipT(dir.x, halfW), yClipT(dir.y, box.ht / 2));
|
|
88
|
+
if (t === Infinity) return { x: box.center.x, y: box.center.y };
|
|
89
|
+
return { x: box.center.x + dir.x * t, y: box.center.y + dir.y * t };
|
|
90
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared helpers for edge spline routing: node-box construction,
|
|
5
|
+
* penwidth reading, spline record installation, and straight-edge routing.
|
|
6
|
+
*
|
|
7
|
+
* Extracted to allow edge-route-chain.ts to import these without
|
|
8
|
+
* creating a circular dependency through the top-level edge-route.ts.
|
|
9
|
+
*
|
|
10
|
+
* @see lib/dotgen/dotsplines.c
|
|
11
|
+
* @see lib/common/splines.c:clip_and_install
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { Graph } from '../../model/graph.js';
|
|
15
|
+
import type { Node } from '../../model/node.js';
|
|
16
|
+
import type { Edge as GraphEdge } from '../../model/edge.js';
|
|
17
|
+
import { nodeAttr } from '../../common/poly-init.js';
|
|
18
|
+
import type { Point, Bezier, Spline } from '../../model/geom.js';
|
|
19
|
+
import { routeSpline } from '../../pathplan/route.js';
|
|
20
|
+
import type { Edge as BarrierEdge } from '../../pathplan/types.js';
|
|
21
|
+
import { linearBezier } from './edge-route-poly.js';
|
|
22
|
+
import { updateBbBz } from '../../common/splines-geom.js';
|
|
23
|
+
import { DEFAULT_NODEPENWIDTH } from './edge-route-clip.js';
|
|
24
|
+
import { resolvePenWidth, parseStyleFlags } from '../../common/style-resolve.js';
|
|
25
|
+
import type { NodeBox } from './edge-route-geom.js';
|
|
26
|
+
import { routeWithRank, routeSimple } from './edge-route-routing.js';
|
|
27
|
+
import type { RankEdgeInfo, EdgeSplineResult, PortRoute } from './edge-route-routing.js';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Default `dir` for an edge given the graph's directedness. C uses
|
|
31
|
+
* `agisdirected(g) ? "forward" : "none"` — an undirected graph draws no
|
|
32
|
+
* arrowheads. Without this, undirected edges wrongly get a head arrow and an
|
|
33
|
+
* arrow-clipped (short) spline.
|
|
34
|
+
*
|
|
35
|
+
* @see lib/common/arrows.c:arrow_flags (late_string E_dir default)
|
|
36
|
+
*/
|
|
37
|
+
export function defaultEdgeDir(g: Graph): string {
|
|
38
|
+
return g.kind === 'directed' || g.kind === 'strict-directed' ? 'forward' : 'none';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// nodeBoxOf
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
/** Ellipse shape names (use ellipse clip). @see lib/common/shapes.c:poly_inside */
|
|
46
|
+
const ELLIPSE_SHAPES = new Set([
|
|
47
|
+
'ellipse', 'oval', 'circle', 'egg', 'doublecircle', 'Mcircle', 'point',
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
function recordClipBox(n: Node): { lw: number; rw: number; ht: number } | undefined {
|
|
51
|
+
const f = n.info.shape_info as { b?: { ll: Point; ur: Point } } | undefined;
|
|
52
|
+
if (!f?.b) return undefined;
|
|
53
|
+
const halfW = (f.b.ur.x - f.b.ll.x) / 2;
|
|
54
|
+
return { lw: halfW, rw: halfW, ht: f.b.ur.y - f.b.ll.y };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Node pen width (default 1.0), threaded into the clip boundary. */
|
|
58
|
+
function nodePenwidthOf(n: Node, g: Graph): number {
|
|
59
|
+
const v = nodeAttr(n, g, 'penwidth');
|
|
60
|
+
const pw = v !== undefined ? parseFloat(v) : NaN;
|
|
61
|
+
return Number.isFinite(pw) && pw >= 0 ? pw : DEFAULT_NODEPENWIDTH;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Returns a NodeBox with defaulted lw/rw/ht for a node. */
|
|
65
|
+
export function nodeBoxOf(n: Node, g: Graph): NodeBox {
|
|
66
|
+
const shapeName = nodeAttr(n, g, 'shape') ?? 'ellipse';
|
|
67
|
+
const penwidth = nodePenwidthOf(n, g);
|
|
68
|
+
if (shapeName === 'record' || shapeName === 'Mrecord') {
|
|
69
|
+
const rb = recordClipBox(n);
|
|
70
|
+
if (rb) return { center: n.info.coord, ...rb, isEllipse: false, penwidth };
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
center: n.info.coord,
|
|
74
|
+
lw: n.info.lw > 0 ? n.info.lw : 27,
|
|
75
|
+
rw: n.info.rw > 0 ? n.info.rw : 27,
|
|
76
|
+
ht: n.info.ht > 0 ? n.info.ht : 36,
|
|
77
|
+
isEllipse: ELLIPSE_SHAPES.has(shapeName),
|
|
78
|
+
penwidth,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Penwidth helpers
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Effective pen width for arrowhead geometry. Must mirror the stroke resolver
|
|
88
|
+
* so the arrow's penwidth-dependent miter (delta_tip/delta_base in
|
|
89
|
+
* arrow_type_normal0) matches the drawn line width: penwidth attr →
|
|
90
|
+
* setlinewidth(N) style → bold(2.0) → 1.0. The prior version only recognised
|
|
91
|
+
* `style === "bold"`, so `style="setlinewidth(3)"` fell through to 1.0 and the
|
|
92
|
+
* arrow was drawn ~penwidth off along the edge (graphs-style a->e).
|
|
93
|
+
* @see resolvePenWidth (style-resolve.ts) / lib/common/arrows.c:257
|
|
94
|
+
*/
|
|
95
|
+
export function edgeRenderPenwidth(e: GraphEdge): number {
|
|
96
|
+
return resolvePenWidth(parseStyleFlags(e.attrs.get('style')), e.attrs.get('penwidth'));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Penwidth for arrow-length (elen) computation (attribute only). */
|
|
100
|
+
export function edgePenwidthAttr(e: GraphEdge): number {
|
|
101
|
+
const pw = parseFloat(e.attrs.get('penwidth') ?? '');
|
|
102
|
+
return isNaN(pw) ? 1.0 : pw;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
// Spline record builders
|
|
107
|
+
// @see lib/common/splines.c:clip_and_install, new_spline
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
|
|
110
|
+
/** Build a Bezier record for a single cubic segment. */
|
|
111
|
+
export function makeBezierRecord(bezierPts: Point[], arrowTip: Point): Bezier {
|
|
112
|
+
return {
|
|
113
|
+
list: bezierPts, size: bezierPts.length,
|
|
114
|
+
sflag: 0, eflag: 1,
|
|
115
|
+
sp: bezierPts[0] ?? { x: 0, y: 0 }, ep: arrowTip,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Build a zero-bb Spline wrapping a single Bezier record. */
|
|
120
|
+
export function makeSplineRecord(bz: Bezier): Spline {
|
|
121
|
+
return { list: [bz], size: 1, bb: { ll: { x: 0, y: 0 }, ur: { x: 0, y: 0 } } };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Create and install a Spline on the edge. @see lib/common/splines.c:clip_and_install */
|
|
125
|
+
export function installEdgeSpline(e: GraphEdge, bezierPts: Point[], arrowTip: Point): void {
|
|
126
|
+
e.info.spl = makeSplineRecord(makeBezierRecord(bezierPts, arrowTip));
|
|
127
|
+
// C clip_and_install expands GD_bb by every installed bezier segment via
|
|
128
|
+
// update_bb_bz (splines.c:312). This direct-install path (chain/long-edge
|
|
129
|
+
// router) must do the same, else a spline that bows outside the node hull —
|
|
130
|
+
// e.g. a long back edge routed around the side — is clipped by the viewport.
|
|
131
|
+
const bb = e.tail.root.info.bb;
|
|
132
|
+
if (bb != null) {
|
|
133
|
+
for (let i = 0; i + 3 < bezierPts.length; i += 3) {
|
|
134
|
+
updateBbBz(bb, [bezierPts[i], bezierPts[i + 1], bezierPts[i + 2], bezierPts[i + 3]]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// routeBezier / straightEdgeSplineWithRank
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
|
|
143
|
+
function isUsableSpline(raw: Point[]): boolean {
|
|
144
|
+
if (raw.length < 4) return false;
|
|
145
|
+
const p0 = raw[0] as Point;
|
|
146
|
+
const p1 = raw[1] as Point;
|
|
147
|
+
return p0.x !== p1.x || p0.y !== p1.y;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Route via pathplan, falling back to linear if the result is degenerate. */
|
|
151
|
+
export function routeBezier(from: Point, to: Point): Point[] {
|
|
152
|
+
const noBarriers: BarrierEdge[] = [];
|
|
153
|
+
const zero: Point = { x: 0, y: 0 };
|
|
154
|
+
const raw = routeSpline(noBarriers, [from, to], [zero, zero]);
|
|
155
|
+
if (!isUsableSpline(raw)) return linearBezier(from, to);
|
|
156
|
+
return [raw[0] as Point, raw[1] as Point, raw[2] as Point, raw[3] as Point];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Compute Bezier for a straight edge, with optional rank-corridor geometry. */
|
|
160
|
+
export function straightEdgeSplineWithRank(
|
|
161
|
+
tailBox: NodeBox,
|
|
162
|
+
headBox: NodeBox,
|
|
163
|
+
rankInfo: RankEdgeInfo | undefined,
|
|
164
|
+
penwidth = 1.0,
|
|
165
|
+
port?: PortRoute,
|
|
166
|
+
): EdgeSplineResult {
|
|
167
|
+
return rankInfo !== undefined
|
|
168
|
+
? routeWithRank(tailBox, headBox, rankInfo, penwidth, port)
|
|
169
|
+
: routeSimple(tailBox, headBox, routeBezier);
|
|
170
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Polygon construction and spline routing from path boxes.
|
|
5
|
+
*
|
|
6
|
+
* Ports the box-to-polygon conversion and spline fitting sections of
|
|
7
|
+
* routesplines_ in the C source.
|
|
8
|
+
*
|
|
9
|
+
* @see lib/common/routespl.c:routesplines_
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Point, Box } from '../../model/geom.js';
|
|
13
|
+
import { routeSpline } from '../../pathplan/route.js';
|
|
14
|
+
import { shortestPath } from '../../pathplan/shortest.js';
|
|
15
|
+
import type { Edge as BarrierEdge } from '../../pathplan/types.js';
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Forward and reverse polygon passes
|
|
19
|
+
// @see lib/common/routespl.c:routesplines_ (post-flip forward/reverse loops)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Compute prev/next direction codes for the forward pass at box bi.
|
|
24
|
+
* next=1 when next box ll.y is greater (path goes "right-then-down").
|
|
25
|
+
* @see lib/common/routespl.c:routesplines_ (forward loop direction logic)
|
|
26
|
+
*/
|
|
27
|
+
function fwdDirs(boxes: Box[], bi: number): { prev: number; next: number } {
|
|
28
|
+
const n = boxes.length;
|
|
29
|
+
const prev = bi > 0 ? (boxes[bi].ll.y > boxes[bi - 1].ll.y ? -1 : 1) : 0;
|
|
30
|
+
const next = bi + 1 < n ? (boxes[bi + 1].ll.y > boxes[bi].ll.y ? 1 : -1) : 0;
|
|
31
|
+
return { prev, next };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Emit polygon points for one box in the forward pass.
|
|
36
|
+
* @see lib/common/routespl.c:routesplines_ (forward loop body)
|
|
37
|
+
*/
|
|
38
|
+
function emitFwdBox(b: Box, prev: number, next: number, pts: Point[]): void {
|
|
39
|
+
if (prev !== next) {
|
|
40
|
+
if (next === -1 || prev === 1) {
|
|
41
|
+
pts.push({ x: b.ll.x, y: b.ur.y }, { x: b.ll.x, y: b.ll.y });
|
|
42
|
+
} else {
|
|
43
|
+
pts.push({ x: b.ur.x, y: b.ll.y }, { x: b.ur.x, y: b.ur.y });
|
|
44
|
+
}
|
|
45
|
+
} else if (prev === 0) {
|
|
46
|
+
pts.push({ x: b.ll.x, y: b.ur.y }, { x: b.ll.x, y: b.ll.y });
|
|
47
|
+
}
|
|
48
|
+
// prev === next === -1: no points added (straight section)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Forward pass: right-side polygon vertices from box[0] to box[N-1].
|
|
53
|
+
* @see lib/common/routespl.c:routesplines_ (forward loop)
|
|
54
|
+
*/
|
|
55
|
+
export function addForwardPolyPts(boxes: Box[], pts: Point[]): void {
|
|
56
|
+
for (let bi = 0; bi < boxes.length; bi++) {
|
|
57
|
+
const { prev, next } = fwdDirs(boxes, bi);
|
|
58
|
+
emitFwdBox(boxes[bi], prev, next, pts);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Compute prev/next direction codes for the reverse pass at box bi.
|
|
64
|
+
* @see lib/common/routespl.c:routesplines_ (reverse loop direction logic)
|
|
65
|
+
*/
|
|
66
|
+
function revDirs(boxes: Box[], bi: number): { prev: number; next: number } {
|
|
67
|
+
const n = boxes.length;
|
|
68
|
+
const prev = bi + 1 < n ? (boxes[bi].ll.y > boxes[bi + 1].ll.y ? -1 : 1) : 0;
|
|
69
|
+
const next = bi > 0 ? (boxes[bi - 1].ll.y > boxes[bi].ll.y ? 1 : -1) : 0;
|
|
70
|
+
return { prev, next };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Emit the four-corner case for the reverse pass all-corners branch. */
|
|
74
|
+
function emitAllCorners(b: Box, pts: Point[]): void {
|
|
75
|
+
pts.push(
|
|
76
|
+
{ x: b.ur.x, y: b.ll.y }, { x: b.ur.x, y: b.ur.y },
|
|
77
|
+
{ x: b.ll.x, y: b.ur.y }, { x: b.ll.x, y: b.ll.y },
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Emit polygon points for one box in the reverse pass.
|
|
83
|
+
* @see lib/common/routespl.c:routesplines_ (reverse loop body)
|
|
84
|
+
*/
|
|
85
|
+
function emitRevBox(b: Box, prev: number, next: number, pts: Point[]): void {
|
|
86
|
+
if (prev !== next) {
|
|
87
|
+
if (next === -1 || prev === 1) {
|
|
88
|
+
pts.push({ x: b.ll.x, y: b.ur.y }, { x: b.ll.x, y: b.ll.y });
|
|
89
|
+
} else {
|
|
90
|
+
pts.push({ x: b.ur.x, y: b.ll.y }, { x: b.ur.x, y: b.ur.y });
|
|
91
|
+
}
|
|
92
|
+
} else if (prev === 0) {
|
|
93
|
+
pts.push({ x: b.ur.x, y: b.ll.y }, { x: b.ur.x, y: b.ur.y });
|
|
94
|
+
} else {
|
|
95
|
+
emitAllCorners(b, pts);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Reverse pass: left-side polygon vertices from box[N-1] to box[0].
|
|
101
|
+
* @see lib/common/routespl.c:routesplines_ (reverse loop)
|
|
102
|
+
*/
|
|
103
|
+
export function addReversePolyPts(boxes: Box[], pts: Point[]): void {
|
|
104
|
+
for (let bi = boxes.length - 1; bi >= 0; bi--) {
|
|
105
|
+
const { prev, next } = revDirs(boxes, bi);
|
|
106
|
+
emitRevBox(boxes[bi], prev, next, pts);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Convert path boxes to polygon vertices.
|
|
112
|
+
*
|
|
113
|
+
* Boxes are in tail→head path order. In TS SVG coords (y-down), ll.y
|
|
114
|
+
* increases from tail to head — this is the C post-flip state, so the
|
|
115
|
+
* forward+reverse pass logic ports directly.
|
|
116
|
+
*
|
|
117
|
+
* @see lib/common/routespl.c:routesplines_
|
|
118
|
+
*/
|
|
119
|
+
export function boxesToPolygon(boxes: Box[]): Point[] {
|
|
120
|
+
if (boxes.length === 0) return [];
|
|
121
|
+
const pts: Point[] = [];
|
|
122
|
+
addForwardPolyPts(boxes, pts);
|
|
123
|
+
addReversePolyPts(boxes, pts);
|
|
124
|
+
return pts;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// computeSpline
|
|
129
|
+
// @see lib/common/routespl.c:routesplines_ (shortest-path + spline section)
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
|
|
132
|
+
/** Build polygon barrier edges (consecutive pairs, closed). */
|
|
133
|
+
export function polyEdgesFromPts(polygon: Point[]): BarrierEdge[] {
|
|
134
|
+
const n = polygon.length;
|
|
135
|
+
return polygon.map((a, i) => ({ a, b: polygon[(i + 1) % n] }));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Straight-line cubic Bezier with control points at 1/3 and 2/3. */
|
|
139
|
+
export function linearBezier(p0: Point, p3: Point): Point[] {
|
|
140
|
+
return [
|
|
141
|
+
p0,
|
|
142
|
+
{ x: p0.x + (p3.x - p0.x) / 3, y: p0.y + (p3.y - p0.y) / 3 },
|
|
143
|
+
{ x: p0.x + (2 * (p3.x - p0.x)) / 3, y: p0.y + (2 * (p3.y - p0.y)) / 3 },
|
|
144
|
+
p3,
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Fit spline via routeSpline.
|
|
150
|
+
* Degenerate Beziers (P0=P1) are valid — C's Proutespline produces them
|
|
151
|
+
* for straight paths with zero endpoint slopes, and bezier_clip still
|
|
152
|
+
* gives correct clipping behavior.
|
|
153
|
+
* @see lib/pathplan/route.c:reallyroutespline (splinefits section)
|
|
154
|
+
*/
|
|
155
|
+
export function tryRouteSpline(barriers: BarrierEdge[], wpts: Point[]): Point[] | null {
|
|
156
|
+
const zero: Point = { x: 0, y: 0 };
|
|
157
|
+
const raw = routeSpline(barriers, wpts, [zero, zero]);
|
|
158
|
+
if (raw.length < 4) return null;
|
|
159
|
+
return [raw[0] as Point, raw[1] as Point, raw[2] as Point, raw[3] as Point];
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Build polygon from boxes, find shortest path, fit Bezier with barriers.
|
|
164
|
+
* @see lib/common/routespl.c:routesplines_
|
|
165
|
+
*/
|
|
166
|
+
export function computeSpline(boxes: Box[], startPt: Point, endPt: Point): Point[] {
|
|
167
|
+
const polygon = boxesToPolygon(boxes);
|
|
168
|
+
if (polygon.length < 3) return linearBezier(startPt, endPt);
|
|
169
|
+
const wpts = shortestPath({ ps: polygon }, [startPt, endPt]);
|
|
170
|
+
if (wpts === null || wpts.length < 2) return linearBezier(startPt, endPt);
|
|
171
|
+
return tryRouteSpline(polyEdgesFromPts(polygon), wpts)
|
|
172
|
+
?? linearBezier(startPt, endPt);
|
|
173
|
+
}
|
|
174
|
+
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Rank geometry extraction for edge routing.
|
|
5
|
+
*
|
|
6
|
+
* Computes the RankEdgeInfo needed by routeWithRank by reading the
|
|
7
|
+
* graph's rank table and deriving left/right bounds from node extents.
|
|
8
|
+
*
|
|
9
|
+
* @see lib/dotgen/dotsplines.c:make_regular_edge (rank geometry access)
|
|
10
|
+
* @see lib/dotgen/dotsplines.c:sd.LeftBound / sd.RightBound
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { Graph } from '../../model/graph.js';
|
|
14
|
+
import type { Node } from '../../model/node.js';
|
|
15
|
+
import type { RankEdgeInfo } from './edge-route-routing.js';
|
|
16
|
+
|
|
17
|
+
/** Minimum edge routing width. @see lib/dotgen/dotsplines.c:MINW */
|
|
18
|
+
const MINW = 16;
|
|
19
|
+
|
|
20
|
+
/** Minimum x extent across all nodes minus MINW. @see lib/dotgen/dotsplines.c:sd.LeftBound */
|
|
21
|
+
export function computeLeftBound(g: Graph): number {
|
|
22
|
+
const ranks = g.info.rank;
|
|
23
|
+
if (ranks === undefined) return -32;
|
|
24
|
+
const minr = g.info.minrank ?? 0;
|
|
25
|
+
const maxr = g.info.maxrank ?? ranks.length - 1;
|
|
26
|
+
let lb = 0;
|
|
27
|
+
for (let i = minr; i <= maxr; i++) {
|
|
28
|
+
const n = ranks[i]?.v[0];
|
|
29
|
+
if (n) lb = Math.min(lb, n.info.coord.x - n.info.lw);
|
|
30
|
+
lb -= MINW;
|
|
31
|
+
}
|
|
32
|
+
return lb;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Maximum x extent across all nodes plus MINW. @see lib/dotgen/dotsplines.c:sd.RightBound */
|
|
36
|
+
export function computeRightBound(g: Graph): number {
|
|
37
|
+
const ranks = g.info.rank;
|
|
38
|
+
if (ranks === undefined) return 60;
|
|
39
|
+
const minr = g.info.minrank ?? 0;
|
|
40
|
+
const maxr = g.info.maxrank ?? ranks.length - 1;
|
|
41
|
+
let rb = 0;
|
|
42
|
+
for (let i = minr; i <= maxr; i++) {
|
|
43
|
+
const rk = ranks[i];
|
|
44
|
+
const n = rk !== undefined && rk.n > 0 ? rk.v[rk.n - 1] : undefined;
|
|
45
|
+
if (n) rb = Math.max(rb, n.info.coord.x + n.info.rw);
|
|
46
|
+
rb += MINW;
|
|
47
|
+
}
|
|
48
|
+
return rb;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Default a rank half-height to node half-height when the rank value is unset. */
|
|
52
|
+
export function rankHt(rankVal: number, nodeHt: number): number {
|
|
53
|
+
return rankVal > 0 ? rankVal : nodeHt / 2;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Per-pass bounds snapshot — mirrors C's spline_info_t sd
|
|
58
|
+
// @see lib/dotgen/dotsplines.c:dot_splines_ (sd computed once, threaded through
|
|
59
|
+
// maximal_bbox / rank_box / make_regular_edge / make_flat_edge)
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
|
|
62
|
+
/** The two fields of spline_info_t that this port derives from live rank/node
|
|
63
|
+
* state. @see lib/dotgen/dotsplines.c:spline_info_t (LeftBound/RightBound) */
|
|
64
|
+
export interface SplineBoundsSnapshot {
|
|
65
|
+
leftBound: number;
|
|
66
|
+
rightBound: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Per-graph memo of the current pass's bounds snapshot. Keyed by Graph so an
|
|
70
|
+
* aux graph (always a fresh `new Graph(...)`, @see splines-flat.ts:cloneGraph)
|
|
71
|
+
* never collides with the main graph's entry. */
|
|
72
|
+
const boundsSnapshotByGraph = new WeakMap<Graph, SplineBoundsSnapshot>();
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Return this pass's frozen {leftBound, rightBound}, computing it on first
|
|
76
|
+
* access after a `resetSplineBounds` (or the very first access ever, for a
|
|
77
|
+
* graph never routed before). C's `dot_splines_` computes `spline_info_t sd`
|
|
78
|
+
* ONCE per call and threads it by pointer/value through every routing
|
|
79
|
+
* helper for that pass; the port previously called computeLeftBound/
|
|
80
|
+
* computeRightBound fresh on every routed edge, so edges routed later in the
|
|
81
|
+
* same pass saw a corridor narrowed by recoverSlack/resizeVn mutations to
|
|
82
|
+
* vnode coord.x/lw/rw from EARLIER edges in the pass (measured on 2646:
|
|
83
|
+
* 6002 of the pass's bound reads drifted 26pt narrower per side; the very
|
|
84
|
+
* first, pre-mutation computeLeftBound call is byte-identical to C's
|
|
85
|
+
* one-time value, so the formula is faithful and only the call timing
|
|
86
|
+
* drifted). NOTE: 2646's residual 3-edge divergence (Δ42.09 worst) proved
|
|
87
|
+
* to be a separate mechanism — those edges route before/independent of the
|
|
88
|
+
* drift — but the frozen snapshot is the faithful C semantics regardless.
|
|
89
|
+
* @see lib/dotgen/dotsplines.c:dot_splines_ (sd computed once, threaded through)
|
|
90
|
+
*/
|
|
91
|
+
export function getSplineBounds(g: Graph): SplineBoundsSnapshot {
|
|
92
|
+
let snap = boundsSnapshotByGraph.get(g);
|
|
93
|
+
if (snap === undefined) {
|
|
94
|
+
snap = { leftBound: computeLeftBound(g), rightBound: computeRightBound(g) };
|
|
95
|
+
boundsSnapshotByGraph.set(g, snap);
|
|
96
|
+
}
|
|
97
|
+
return snap;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Force the next `getSplineBounds(g)` call to recompute a fresh snapshot.
|
|
102
|
+
* Called once at the top of each `dotSplines_` pass (main graph or aux
|
|
103
|
+
* graph), exactly where C zero-initializes then computes `spline_info_t sd`
|
|
104
|
+
* fresh for that call. @see lib/dotgen/dotsplines.c:dot_splines_ (`spline_info_t
|
|
105
|
+
* sd = {0};` followed by the one-time LeftBound/RightBound loop)
|
|
106
|
+
*/
|
|
107
|
+
export function resetSplineBounds(g: Graph): void {
|
|
108
|
+
boundsSnapshotByGraph.delete(g);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Extract RankEdgeInfo from the graph's rank table for an edge.
|
|
113
|
+
* Returns undefined if rank geometry is not available.
|
|
114
|
+
* @see lib/dotgen/dotsplines.c:make_regular_edge (rank geometry access)
|
|
115
|
+
*/
|
|
116
|
+
export function rankEdgeInfoOf(
|
|
117
|
+
g: Graph,
|
|
118
|
+
tailNode: Node,
|
|
119
|
+
headNode: Node,
|
|
120
|
+
): RankEdgeInfo | undefined {
|
|
121
|
+
const rankTable = g.info.rank;
|
|
122
|
+
if (rankTable === undefined) return undefined;
|
|
123
|
+
const tailRank = tailNode.info.rank;
|
|
124
|
+
const headRank = headNode.info.rank;
|
|
125
|
+
if (tailRank === undefined || headRank === undefined) return undefined;
|
|
126
|
+
const tr = rankTable[tailRank];
|
|
127
|
+
const hr = rankTable[headRank];
|
|
128
|
+
if (tr === undefined || hr === undefined) return undefined;
|
|
129
|
+
return {
|
|
130
|
+
...getSplineBounds(g),
|
|
131
|
+
tailHt1: rankHt(tr.ht1, tailNode.info.ht),
|
|
132
|
+
tailHt2: rankHt(tr.ht2, tailNode.info.ht),
|
|
133
|
+
headHt1: rankHt(hr.ht1, headNode.info.ht),
|
|
134
|
+
headHt2: rankHt(hr.ht2, headNode.info.ht),
|
|
135
|
+
};
|
|
136
|
+
}
|