@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,339 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Seven-phase radial layout algorithm for the twopi engine.
|
|
5
|
+
* Ports lib/twopigen/circle.c.
|
|
6
|
+
*
|
|
7
|
+
* @see lib/twopigen/circle.c
|
|
8
|
+
* @see lib/twopigen/circle.h
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Graph } from '../../model/graph.js';
|
|
12
|
+
import type { Node } from '../../model/node.js';
|
|
13
|
+
import type { Edge } from '../../model/edge.js';
|
|
14
|
+
import type { TwopiAlgData } from '../../model/nodeInfo.js';
|
|
15
|
+
import { THETA_UNSET } from '../../model/nodeInfo.js';
|
|
16
|
+
|
|
17
|
+
/** Default ring separation in inches. @see lib/twopigen/circle.c:#define DEF_RANKSEP */
|
|
18
|
+
const DEF_RANKSEP = 1.0;
|
|
19
|
+
|
|
20
|
+
/** Minimum per-ring delta. @see lib/common/render.h:MIN_RANKSEP */
|
|
21
|
+
export const MIN_RANKSEP = 0.02;
|
|
22
|
+
|
|
23
|
+
/** Get the TwopiAlgData record for a node; throws if absent. */
|
|
24
|
+
function rdata(n: Node): TwopiAlgData {
|
|
25
|
+
const d = n.info.alg;
|
|
26
|
+
if (!d || d.kind !== 'twopi') throw new Error(`twopi: missing rdata on node ${n.name}`);
|
|
27
|
+
return d;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the neighbor of n across ep; null if ep is not incident.
|
|
32
|
+
* @see lib/twopigen/circle.c (edge traversal pattern)
|
|
33
|
+
*/
|
|
34
|
+
function neighborOf(ep: Edge, n: Node): Node | null {
|
|
35
|
+
if (ep.tail === n) return ep.head;
|
|
36
|
+
if (ep.head === n) return ep.tail;
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Edges incident to n in agfstedge/agnxtedge order: out-edges first,
|
|
42
|
+
* then in-edges. C's traversal order is load-bearing for the fan
|
|
43
|
+
* assignment in setChildPositions.
|
|
44
|
+
* @see lib/cgraph/edge.c:agfstedge
|
|
45
|
+
*/
|
|
46
|
+
function incidentEdges(g: Graph, n: Node): Edge[] {
|
|
47
|
+
return [...n.outEdges(g), ...n.inEdges(g)];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Return true if n is a leaf: at most one distinct neighbor.
|
|
52
|
+
* @see lib/twopigen/circle.c:isLeaf
|
|
53
|
+
*/
|
|
54
|
+
export function isLeaf(g: Graph, n: Node): boolean {
|
|
55
|
+
let neighp: Node | null = null;
|
|
56
|
+
for (const ep of incidentEdges(g, n)) {
|
|
57
|
+
const np = neighborOf(ep, n);
|
|
58
|
+
if (np === null || np === n) continue;
|
|
59
|
+
if (neighp === null) { neighp = np; }
|
|
60
|
+
else if (neighp !== np) { return false; }
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Phase 1: initialize all rdata fields before BFS passes.
|
|
67
|
+
* @see lib/twopigen/circle.c:initLayout
|
|
68
|
+
*/
|
|
69
|
+
export function initLayout(g: Graph): void {
|
|
70
|
+
const INF = g.nodes.size * g.nodes.size;
|
|
71
|
+
for (const n of g.nodes.values()) {
|
|
72
|
+
n.info.alg = {
|
|
73
|
+
kind: 'twopi',
|
|
74
|
+
nStepsToLeaf: isLeaf(g, n) ? 0 : INF,
|
|
75
|
+
subtreeSize: 0,
|
|
76
|
+
nChildren: 0,
|
|
77
|
+
nStepsToCenter: INF,
|
|
78
|
+
parent: null,
|
|
79
|
+
span: 0,
|
|
80
|
+
theta: THETA_UNSET,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Try to relax leaf-distance on one neighbor; recurse on improvement. */
|
|
86
|
+
function relaxLeafEdge(g: Graph, next: Node, from: Node, nsteps: number): void {
|
|
87
|
+
const nd2 = rdata(next);
|
|
88
|
+
if (nsteps < nd2.nStepsToLeaf) {
|
|
89
|
+
nd2.nStepsToLeaf = nsteps;
|
|
90
|
+
setNStepsToLeaf(g, next, from);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* DFS to propagate leaf distance outward from n.
|
|
96
|
+
* @see lib/twopigen/circle.c:setNStepsToLeaf
|
|
97
|
+
*/
|
|
98
|
+
export function setNStepsToLeaf(g: Graph, n: Node, prev: Node | null): void {
|
|
99
|
+
const nsteps = rdata(n).nStepsToLeaf + 1;
|
|
100
|
+
for (const ep of incidentEdges(g, n)) {
|
|
101
|
+
const next = neighborOf(ep, n);
|
|
102
|
+
if (next !== null && next !== prev) relaxLeafEdge(g, next, n, nsteps);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Try to relax BFS distance to `next` through `cur`. */
|
|
107
|
+
function processBfsEdge(cur: Node, next: Node, nsteps: number, queue: Node[]): void {
|
|
108
|
+
const nd2 = rdata(next);
|
|
109
|
+
if (nsteps < nd2.nStepsToCenter) {
|
|
110
|
+
nd2.nStepsToCenter = nsteps;
|
|
111
|
+
nd2.parent = cur;
|
|
112
|
+
rdata(cur).nChildren++;
|
|
113
|
+
queue.push(next);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Phase 2: find center node (max nStepsToLeaf).
|
|
119
|
+
* @see lib/twopigen/circle.c:findCenterNode
|
|
120
|
+
*/
|
|
121
|
+
export function findCenterNode(g: Graph): Node | null {
|
|
122
|
+
for (const n of g.nodes.values()) {
|
|
123
|
+
if (rdata(n).nStepsToLeaf === 0) setNStepsToLeaf(g, n, null);
|
|
124
|
+
}
|
|
125
|
+
let center: Node | null = null;
|
|
126
|
+
let maxSteps = 0;
|
|
127
|
+
for (const n of g.nodes.values()) {
|
|
128
|
+
const sl = rdata(n).nStepsToLeaf;
|
|
129
|
+
if (center === null || sl > maxSteps) { maxSteps = sl; center = n; }
|
|
130
|
+
}
|
|
131
|
+
return center;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* BFS from n assigning SCENTER and SPARENT; skips weight=0 edges.
|
|
136
|
+
* @see lib/twopigen/circle.c:setNStepsToCenter
|
|
137
|
+
*/
|
|
138
|
+
export function setNStepsToCenter(g: Graph, n: Node): void {
|
|
139
|
+
const queue: Node[] = [n];
|
|
140
|
+
let head = 0;
|
|
141
|
+
while (head < queue.length) {
|
|
142
|
+
const cur = queue[head++]!;
|
|
143
|
+
const nsteps = rdata(cur).nStepsToCenter + 1;
|
|
144
|
+
for (const ep of incidentEdges(g, cur)) {
|
|
145
|
+
if (ep.attrs.get('weight') === '0') continue;
|
|
146
|
+
const next = neighborOf(ep, cur);
|
|
147
|
+
if (next !== null) processBfsEdge(cur, next, nsteps, queue);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Phase 3: BFS from center; returns max ring index or MAX_SAFE_INTEGER.
|
|
154
|
+
* @see lib/twopigen/circle.c:setParentNodes
|
|
155
|
+
*/
|
|
156
|
+
export function setParentNodes(sg: Graph, center: Node): number {
|
|
157
|
+
const nd = rdata(center);
|
|
158
|
+
const unset = nd.nStepsToCenter;
|
|
159
|
+
nd.nStepsToCenter = 0;
|
|
160
|
+
nd.parent = null;
|
|
161
|
+
setNStepsToCenter(sg, center);
|
|
162
|
+
let maxn = 0;
|
|
163
|
+
for (const n of sg.nodes.values()) {
|
|
164
|
+
const sc = rdata(n).nStepsToCenter;
|
|
165
|
+
if (sc === unset) return Number.MAX_SAFE_INTEGER;
|
|
166
|
+
if (sc > maxn) maxn = sc;
|
|
167
|
+
}
|
|
168
|
+
return maxn;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Walk the parent chain from n, incrementing subtreeSize at each ancestor. */
|
|
172
|
+
function walkAncestorChain(n: Node): void {
|
|
173
|
+
let par = rdata(n).parent;
|
|
174
|
+
while (par !== null) {
|
|
175
|
+
rdata(par).subtreeSize++;
|
|
176
|
+
par = rdata(par).parent;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Phase 4: count BFS-leaves in each subtree bottom-up.
|
|
182
|
+
* @see lib/twopigen/circle.c:setSubtreeSize
|
|
183
|
+
*/
|
|
184
|
+
export function setSubtreeSize(g: Graph): void {
|
|
185
|
+
for (const n of g.nodes.values()) {
|
|
186
|
+
const nd = rdata(n);
|
|
187
|
+
if (nd.nChildren > 0) continue;
|
|
188
|
+
nd.subtreeSize++;
|
|
189
|
+
walkAncestorChain(n);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Assign span to one child of n; recurse if it has children.
|
|
195
|
+
* @see lib/twopigen/circle.c:setChildSubtreeSpans (inner body)
|
|
196
|
+
*/
|
|
197
|
+
function applySpanToChild(g: Graph, n: Node, next: Node, ratio: number, seen: Set<Node>): void {
|
|
198
|
+
const nd2 = rdata(next);
|
|
199
|
+
if (nd2.parent !== n || nd2.span !== 0 || seen.has(next)) return;
|
|
200
|
+
seen.add(next);
|
|
201
|
+
nd2.span = ratio * nd2.subtreeSize;
|
|
202
|
+
if (nd2.nChildren > 0) setChildSubtreeSpans(g, next);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Recursively partition a node's angular span among its children.
|
|
207
|
+
* @see lib/twopigen/circle.c:setChildSubtreeSpans
|
|
208
|
+
*/
|
|
209
|
+
export function setChildSubtreeSpans(g: Graph, n: Node): void {
|
|
210
|
+
const nd = rdata(n);
|
|
211
|
+
const ratio = nd.span / nd.subtreeSize;
|
|
212
|
+
const seen = new Set<Node>();
|
|
213
|
+
for (const ep of incidentEdges(g, n)) {
|
|
214
|
+
const next = neighborOf(ep, n);
|
|
215
|
+
if (next !== null) applySpanToChild(g, n, next, ratio, seen);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Phase 5: root gets 2π span; children get proportional shares.
|
|
221
|
+
* @see lib/twopigen/circle.c:setSubtreeSpans
|
|
222
|
+
*/
|
|
223
|
+
export function setSubtreeSpans(sg: Graph, center: Node): void {
|
|
224
|
+
rdata(center).span = 2 * Math.PI;
|
|
225
|
+
setChildSubtreeSpans(sg, center);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Assign theta to one child and recurse; returns updated fan pointer.
|
|
230
|
+
* @see lib/twopigen/circle.c:setChildPositions (inner body)
|
|
231
|
+
*/
|
|
232
|
+
function applyThetaToChild(sg: Graph, n: Node, next: Node, theta: number): number {
|
|
233
|
+
const nd2 = rdata(next);
|
|
234
|
+
if (nd2.parent !== n || nd2.theta !== THETA_UNSET) return theta;
|
|
235
|
+
nd2.theta = theta + nd2.span / 2.0;
|
|
236
|
+
theta += nd2.span;
|
|
237
|
+
if (nd2.nChildren > 0) setChildPositions(sg, next);
|
|
238
|
+
return theta;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Assign theta (angular midpoint) to each child of n in a fan.
|
|
243
|
+
* @see lib/twopigen/circle.c:setChildPositions
|
|
244
|
+
*/
|
|
245
|
+
export function setChildPositions(sg: Graph, n: Node): void {
|
|
246
|
+
const nd = rdata(n);
|
|
247
|
+
let theta = nd.parent === null ? 0 : nd.theta - nd.span / 2;
|
|
248
|
+
for (const ep of incidentEdges(sg, n)) {
|
|
249
|
+
const next = neighborOf(ep, n);
|
|
250
|
+
if (next !== null) theta = applyThetaToChild(sg, n, next, theta);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Phase 6: assign angular positions; root gets theta = 0.
|
|
256
|
+
* @see lib/twopigen/circle.c:setPositions
|
|
257
|
+
*/
|
|
258
|
+
export function setPositions(sg: Graph, center: Node): void {
|
|
259
|
+
rdata(center).theta = 0;
|
|
260
|
+
setChildPositions(sg, center);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Parse colon-separated ranksep parts; returns last delta, next rk, running sum.
|
|
265
|
+
* @see lib/twopigen/circle.c:getRankseps (parse loop)
|
|
266
|
+
*/
|
|
267
|
+
function parseRanksepParts(
|
|
268
|
+
parts: string[], ranks: number[], maxrank: number,
|
|
269
|
+
): { delx: number; rk: number; xf: number } {
|
|
270
|
+
// C initializes delx = 0.0; DEF_RANKSEP applies ONLY when the ranksep attr
|
|
271
|
+
// is ABSENT. A present-but-unparseable value ("equally") leaves delx 0 and
|
|
272
|
+
// every ring collapses to radius 0 — a load-bearing quirk (graphs/b80).
|
|
273
|
+
// @see lib/twopigen/circle.c:getRankseps
|
|
274
|
+
let xf = 0; let delx = 0; let rk = 1;
|
|
275
|
+
for (const part of parts) {
|
|
276
|
+
if (rk > maxrank) break;
|
|
277
|
+
const d = parseFloat(part.trim());
|
|
278
|
+
if (!isFinite(d) || d <= 0) break;
|
|
279
|
+
delx = Math.max(d, MIN_RANKSEP);
|
|
280
|
+
xf += delx;
|
|
281
|
+
ranks[rk++] = xf;
|
|
282
|
+
}
|
|
283
|
+
return { delx, rk, xf };
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Build cumulative radius array from ranksep attribute.
|
|
288
|
+
* @see lib/twopigen/circle.c:getRankseps
|
|
289
|
+
*/
|
|
290
|
+
export function getRankseps(g: Graph, maxrank: number): number[] {
|
|
291
|
+
const ranks = new Array<number>(maxrank + 1).fill(0);
|
|
292
|
+
const raw = g.root.attrs.get('ranksep') ?? g.attrs.get('ranksep');
|
|
293
|
+
let delx = DEF_RANKSEP; let rk = 1; let xf = 0;
|
|
294
|
+
if (raw !== undefined && raw.length > 0) {
|
|
295
|
+
const r = parseRanksepParts(raw.split(':'), ranks, maxrank);
|
|
296
|
+
delx = r.delx; rk = r.rk; xf = r.xf;
|
|
297
|
+
}
|
|
298
|
+
for (let i = rk; i <= maxrank; i++) { xf += delx; ranks[i] = xf; }
|
|
299
|
+
return ranks;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Phase 7: polar → Cartesian; writes to n.info.pos.
|
|
304
|
+
* @see lib/twopigen/circle.c:setAbsolutePos
|
|
305
|
+
*/
|
|
306
|
+
export function setAbsolutePos(g: Graph, maxrank: number): void {
|
|
307
|
+
const ranksep = getRankseps(g, maxrank);
|
|
308
|
+
for (const n of g.nodes.values()) {
|
|
309
|
+
const nd = rdata(n);
|
|
310
|
+
const hyp = ranksep[nd.nStepsToCenter] ?? 0;
|
|
311
|
+
if (!n.info.pos || n.info.pos.length < 2) n.info.pos = [0, 0];
|
|
312
|
+
n.info.pos[0] = hyp * Math.cos(nd.theta);
|
|
313
|
+
n.info.pos[1] = hyp * Math.sin(nd.theta);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Run the full seven-phase radial layout on a connected subgraph.
|
|
319
|
+
* Returns the center node used; null only if the graph is empty.
|
|
320
|
+
* @see lib/twopigen/circle.c:circleLayout
|
|
321
|
+
*/
|
|
322
|
+
export function circleLayout(sg: Graph, center: Node | null): Node | null {
|
|
323
|
+
if (sg.nodes.size === 1) {
|
|
324
|
+
const n = sg.nodes.values().next().value as Node;
|
|
325
|
+
if (!n.info.pos || n.info.pos.length < 2) n.info.pos = [0, 0];
|
|
326
|
+
n.info.pos[0] = 0; n.info.pos[1] = 0;
|
|
327
|
+
return center;
|
|
328
|
+
}
|
|
329
|
+
initLayout(sg);
|
|
330
|
+
if (center === null) center = findCenterNode(sg);
|
|
331
|
+
if (center === null) return null;
|
|
332
|
+
const maxN = setParentNodes(sg, center);
|
|
333
|
+
if (maxN === Number.MAX_SAFE_INTEGER) return center;
|
|
334
|
+
setSubtreeSize(sg);
|
|
335
|
+
setSubtreeSpans(sg, center);
|
|
336
|
+
setPositions(sg, center);
|
|
337
|
+
setAbsolutePos(sg, maxN);
|
|
338
|
+
return center;
|
|
339
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* twopi radial layout engine — public entry point.
|
|
5
|
+
*
|
|
6
|
+
* @see lib/twopigen/twopiinit.c:twopi_layout
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Graph } from '../../model/graph.js';
|
|
10
|
+
import type { LayoutEngine } from '../../gvc/context.js';
|
|
11
|
+
import { twopiInitGraph, twopiCleanup } from './init.js';
|
|
12
|
+
import { ccomps, normalizeGraphBB } from '../pack/index.js';
|
|
13
|
+
import { layoutSingle, layoutMulti, buildPackInfo } from './pipeline.js';
|
|
14
|
+
import { commonInitNodeEdge, layoutMeasurer } from '../../common/nodeinit.js';
|
|
15
|
+
import { initEdgeLabels } from '../../common/edge-label-init.js';
|
|
16
|
+
import { placeGraphLabel } from '../dot/position-bbox.js';
|
|
17
|
+
import { graphInit } from '../../common/graph-init.js';
|
|
18
|
+
import { gvPostprocess } from '../../common/postproc.js';
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
twopiInitGraph,
|
|
22
|
+
twopiCleanup,
|
|
23
|
+
findRootNode,
|
|
24
|
+
adjustNodes,
|
|
25
|
+
finaliseCoords,
|
|
26
|
+
} from './init.js';
|
|
27
|
+
export { circleLayout, isLeaf, initLayout } from './circle.js';
|
|
28
|
+
export { THETA_UNSET } from '../../model/nodeInfo.js';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Full twopi layout pipeline for a graph.
|
|
32
|
+
*
|
|
33
|
+
* @see lib/twopigen/twopiinit.c:twopi_layout
|
|
34
|
+
*/
|
|
35
|
+
export function twopiLayout(g: Graph): void {
|
|
36
|
+
if (g.nodes.size === 0) return;
|
|
37
|
+
// C: gvLayoutJobs runs graph_init(g, LAYOUT_USES_RANKDIR) before twopi_layout;
|
|
38
|
+
// twopi does not set the flag → useRankdir=false. graph_init also creates the
|
|
39
|
+
// ROOT graph label, which gvPostprocess below sizes the canvas for and places.
|
|
40
|
+
// @see lib/common/input.c:600, lib/gvc/gvlayout.c:81
|
|
41
|
+
graphInit(g, false);
|
|
42
|
+
commonInitNodeEdge(g);
|
|
43
|
+
// C twopi_init_edge -> common_init_edge creates the edge label; addXLabels
|
|
44
|
+
// (in gvPostprocess below) places it at the edge midpoint. @see twopiinit.c:28
|
|
45
|
+
const measurer = layoutMeasurer(g);
|
|
46
|
+
if (measurer !== undefined) {
|
|
47
|
+
for (const e of g.edges) initEdgeLabels(e, g, measurer);
|
|
48
|
+
}
|
|
49
|
+
twopiInitGraph(g);
|
|
50
|
+
const rootAttr = g.attrs.get('root');
|
|
51
|
+
const setRoot = rootAttr !== undefined;
|
|
52
|
+
const globalRoot = setRoot && rootAttr !== ''
|
|
53
|
+
? (g.nodes.get(rootAttr!) ?? null)
|
|
54
|
+
: null;
|
|
55
|
+
const comps = ccomps(g, '_twopi');
|
|
56
|
+
if (comps.length === 1) {
|
|
57
|
+
layoutSingle(g, comps, globalRoot, setRoot);
|
|
58
|
+
} else {
|
|
59
|
+
layoutMulti(g, comps, globalRoot, buildPackInfo(g));
|
|
60
|
+
}
|
|
61
|
+
normalizeGraphBB(g);
|
|
62
|
+
// C: dotneato_postprocess(g) — cluster labels, edge labels (addXLabels), root
|
|
63
|
+
// graph label space + translate. @see lib/twopigen/twopiinit.c:152
|
|
64
|
+
placeGraphLabel(g);
|
|
65
|
+
gvPostprocess(g);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* LayoutEngine descriptor for registration with GvcContext.
|
|
70
|
+
*
|
|
71
|
+
* @see lib/gvc/gvcext.h:gvlayout_engine_s
|
|
72
|
+
* @see lib/twopigen/twopiinit.c (plugin wiring)
|
|
73
|
+
*/
|
|
74
|
+
export const TWOPI_LAYOUT_ENGINE: LayoutEngine = {
|
|
75
|
+
type: 'twopi',
|
|
76
|
+
layout: twopiLayout,
|
|
77
|
+
cleanup: twopiCleanup,
|
|
78
|
+
};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* twopi engine initialisation: per-node/edge init, graph init, cleanup.
|
|
5
|
+
* Ports lib/twopigen/twopiinit.c: twopi_init_node_edge, twopi_init_graph,
|
|
6
|
+
* findRootNode, twopi_cleanup.
|
|
7
|
+
*
|
|
8
|
+
* @see lib/twopigen/twopiinit.c
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Graph } from '../../model/graph.js';
|
|
12
|
+
import type { Node } from '../../model/node.js';
|
|
13
|
+
import type { Edge } from '../../model/edge.js';
|
|
14
|
+
import type { TwopiAlgData } from '../../model/nodeInfo.js';
|
|
15
|
+
import { THETA_UNSET } from '../../model/nodeInfo.js';
|
|
16
|
+
import { setEdgeTypeFromAttr } from '../dot/index.js';
|
|
17
|
+
import { EDGETYPE_LINE } from '../neato/splines.js';
|
|
18
|
+
import { adjustNodesFull } from '../neato/fdp-adjust.js';
|
|
19
|
+
|
|
20
|
+
/** Points per inch, used to convert pos (inches) → coord (points). */
|
|
21
|
+
const POINTS_PER_INCH = 72;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Build a zeroed TwopiAlgData record for one node.
|
|
25
|
+
* Mirrors gv_calloc(n_nodes, sizeof(rdata)) — all fields at zero/INF defaults.
|
|
26
|
+
*
|
|
27
|
+
* @see lib/twopigen/twopiinit.c:twopi_init_node_edge (gv_calloc call)
|
|
28
|
+
*/
|
|
29
|
+
function makeRdata(INF: number): TwopiAlgData {
|
|
30
|
+
return {
|
|
31
|
+
kind: 'twopi',
|
|
32
|
+
nStepsToLeaf: INF,
|
|
33
|
+
subtreeSize: 0,
|
|
34
|
+
nChildren: 0,
|
|
35
|
+
nStepsToCenter: INF,
|
|
36
|
+
parent: null,
|
|
37
|
+
span: 0,
|
|
38
|
+
theta: THETA_UNSET,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Initialize a node for twopi layout: ensure pos[0..1] exist, set defaults.
|
|
44
|
+
* Mirrors neato_init_node for the twopi engine.
|
|
45
|
+
*
|
|
46
|
+
* @see lib/twopigen/twopiinit.c:twopi_init_node_edge (neato_init_node call)
|
|
47
|
+
*/
|
|
48
|
+
export function twopiInitNode(n: Node): void {
|
|
49
|
+
if (!n.info.pos || n.info.pos.length < 2) n.info.pos = [0, 0];
|
|
50
|
+
if (!n.info.width) n.info.width = 0.75;
|
|
51
|
+
if (!n.info.height) n.info.height = 0.5;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Initialize an edge for twopi layout: set ED_factor from weight attribute.
|
|
56
|
+
* Default weight 1.0; minimum 0.0.
|
|
57
|
+
*
|
|
58
|
+
* @see lib/twopigen/twopiinit.c:twopi_init_edge
|
|
59
|
+
*/
|
|
60
|
+
export function twopiInitEdge(e: Edge): void {
|
|
61
|
+
const wt = e.attrs.get('weight');
|
|
62
|
+
const w = wt !== undefined ? Math.max(0.0, parseFloat(wt)) : 1.0;
|
|
63
|
+
e.info.factor = isFinite(w) ? w : 1.0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Initialize all nodes and edges in g for twopi layout.
|
|
68
|
+
*
|
|
69
|
+
* Mirrors the C twopi_init_node_edge: allocates a contiguous rdata block
|
|
70
|
+
* (one TwopiAlgData per node), populates GD_neato_nlist, assigns ND_alg,
|
|
71
|
+
* then initialises every out-edge.
|
|
72
|
+
*
|
|
73
|
+
* The contiguous-allocation semantics are preserved: all TwopiAlgData objects
|
|
74
|
+
* are created here in one pass (matching gv_calloc(n_nodes, sizeof(rdata))),
|
|
75
|
+
* so twopiCleanup can mirror the C free(ND_alg(first_node)) by nulling only
|
|
76
|
+
* the first node's alg field.
|
|
77
|
+
*
|
|
78
|
+
* @see lib/twopigen/twopiinit.c:twopi_init_node_edge
|
|
79
|
+
*/
|
|
80
|
+
export function twopiInitNodeEdge(g: Graph): void {
|
|
81
|
+
const INF = g.nodes.size * g.nodes.size;
|
|
82
|
+
const nlist: Node[] = [];
|
|
83
|
+
|
|
84
|
+
// Allocate the contiguous rdata block and wire into nodes + nlist.
|
|
85
|
+
for (const n of g.nodes.values()) {
|
|
86
|
+
twopiInitNode(n);
|
|
87
|
+
n.info.alg = makeRdata(INF);
|
|
88
|
+
nlist.push(n);
|
|
89
|
+
}
|
|
90
|
+
g.info.neato_nlist = nlist;
|
|
91
|
+
|
|
92
|
+
// Initialise all edges.
|
|
93
|
+
for (const e of g.edges) twopiInitEdge(e);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Full graph initialisation: set edge type to line, force 2D, init nodes/edges.
|
|
98
|
+
*
|
|
99
|
+
* @see lib/twopigen/twopiinit.c:twopi_init_graph
|
|
100
|
+
*/
|
|
101
|
+
export function twopiInitGraph(g: Graph): void {
|
|
102
|
+
// C: setEdgeType(g, EDGETYPE_LINE) — the C setEdgeType FUNCTION reads the
|
|
103
|
+
// graph's `splines` attr first; EDGETYPE_LINE is only the fallback default.
|
|
104
|
+
// @see lib/common/utils.c:1423 setEdgeType
|
|
105
|
+
setEdgeTypeFromAttr(g, EDGETYPE_LINE);
|
|
106
|
+
g.info.ndim = 2;
|
|
107
|
+
twopiInitNodeEdge(g);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Scan sg for the first node whose `root` attribute is truthy.
|
|
112
|
+
* Returns null if no such node exists.
|
|
113
|
+
*
|
|
114
|
+
* @see lib/twopigen/twopiinit.c:findRootNode
|
|
115
|
+
*/
|
|
116
|
+
export function findRootNode(sg: Graph): Node | null {
|
|
117
|
+
for (const n of sg.nodes.values()) {
|
|
118
|
+
const v = n.attrs.get('root');
|
|
119
|
+
if (v === '1' || v === 'true' || v === 'yes') return n;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Convert pos (inches) to coord (points) for every node in g.
|
|
126
|
+
* Matches the neatoSetAspect / dotneato_postprocess coordinate finalisation.
|
|
127
|
+
*
|
|
128
|
+
* @see lib/twopigen/twopiinit.c:twopi_layout (post-layout coord write)
|
|
129
|
+
* @see lib/neatogen/neatoinit.c:neatoSetAspect
|
|
130
|
+
*/
|
|
131
|
+
export function finaliseCoords(g: Graph): void {
|
|
132
|
+
for (const n of g.nodes.values()) {
|
|
133
|
+
const pos = n.info.pos;
|
|
134
|
+
if (!pos) continue;
|
|
135
|
+
n.info.coord = {
|
|
136
|
+
x: (pos[0] ?? 0) * POINTS_PER_INCH,
|
|
137
|
+
y: (pos[1] ?? 0) * POINTS_PER_INCH,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Overlap adjustment: scale-family modes via scAdjust, PRISM (the GTS
|
|
144
|
+
* build's resolution of overlap=false / unrecognized values) via
|
|
145
|
+
* fdpAdjust; remaining modes (voronoi, vpsc, ortho*) are unported no-ops.
|
|
146
|
+
*
|
|
147
|
+
* @see lib/neatogen/adjust.c:adjustNodes
|
|
148
|
+
* @see lib/neatogen/constraint.c:scAdjust
|
|
149
|
+
*/
|
|
150
|
+
export function adjustNodes(g: Graph): void {
|
|
151
|
+
adjustNodesFull(g);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Release twopi-specific per-node state after layout.
|
|
156
|
+
*
|
|
157
|
+
* Mirrors the C twopi_layout cleanup: free(ND_alg(first_node)) / ND_alg = NULL
|
|
158
|
+
* on the FIRST node only (the contiguous block was allocated as a single unit).
|
|
159
|
+
* Other nodes' ND_alg pointers were interior offsets into that block so they
|
|
160
|
+
* do not need to be freed separately.
|
|
161
|
+
*
|
|
162
|
+
* ORDERING: must be called BEFORE splineEdges because edge routing may
|
|
163
|
+
* store its own data in n.info.alg.
|
|
164
|
+
*
|
|
165
|
+
* @see lib/twopigen/twopiinit.c:twopi_layout (free(ND_alg) placement note)
|
|
166
|
+
* @see lib/twopigen/twopiinit.c:twopi_cleanup
|
|
167
|
+
*/
|
|
168
|
+
export function twopiCleanup(g: Graph): void {
|
|
169
|
+
const first = g.nodes.values().next().value as Node | undefined;
|
|
170
|
+
if (first !== undefined && first.info.alg?.kind === 'twopi') {
|
|
171
|
+
first.info.alg = undefined;
|
|
172
|
+
}
|
|
173
|
+
g.info.neato_nlist = undefined;
|
|
174
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Internal pipeline helpers for the twopi layout engine.
|
|
5
|
+
* Isolated from index.ts so lizard can parse each function boundary cleanly.
|
|
6
|
+
*
|
|
7
|
+
* @see lib/twopigen/twopiinit.c:twopi_layout
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Graph } from '../../model/graph.js';
|
|
11
|
+
import type { Node } from '../../model/node.js';
|
|
12
|
+
import type { PackInfo } from '../pack/index.js';
|
|
13
|
+
import {
|
|
14
|
+
twopiCleanup,
|
|
15
|
+
findRootNode,
|
|
16
|
+
adjustNodes,
|
|
17
|
+
finaliseCoords,
|
|
18
|
+
} from './init.js';
|
|
19
|
+
import { circleLayout } from './circle.js';
|
|
20
|
+
import { packSubgraphs, getPackInfo, PackMode } from '../pack/index.js';
|
|
21
|
+
import { splineEdgesShifted } from '../neato/splines.js';
|
|
22
|
+
|
|
23
|
+
/** Margin constant matching C CL_OFFSET. @see lib/pack/pack.h:CL_OFFSET */
|
|
24
|
+
export const CL_OFFSET = 8;
|
|
25
|
+
|
|
26
|
+
/** circleLayout return type; Node | null. */
|
|
27
|
+
export type Center = Node | null;
|
|
28
|
+
|
|
29
|
+
/** Add only edges whose both endpoints belong to sg. */
|
|
30
|
+
export function induceEdges(g: Graph, sg: Graph): void {
|
|
31
|
+
sg.edges = g.edges.filter(
|
|
32
|
+
e => sg.nodes.has(e.tail.name) && sg.nodes.has(e.head.name),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Prefer globalRoot if it is in sg; otherwise scan for root attribute. */
|
|
37
|
+
export function resolveCenter(sg: Graph, globalRoot: Center): Center {
|
|
38
|
+
if (globalRoot !== null && sg.nodes.has(globalRoot.name)) return globalRoot;
|
|
39
|
+
return findRootNode(sg);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Lay out one component; return the chosen center node. */
|
|
43
|
+
export function layoutComponent(g: Graph, sg: Graph, globalRoot: Center): Center {
|
|
44
|
+
induceEdges(g, sg);
|
|
45
|
+
const lctr = resolveCenter(sg, globalRoot);
|
|
46
|
+
const center = circleLayout(sg, lctr);
|
|
47
|
+
adjustNodes(sg);
|
|
48
|
+
return center;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Build a PackInfo for multi-component packing.
|
|
53
|
+
*
|
|
54
|
+
* @see lib/twopigen/twopiinit.c:twopi_layout (getPackInfo call with l_node)
|
|
55
|
+
*/
|
|
56
|
+
export function buildPackInfo(g: Graph): PackInfo {
|
|
57
|
+
const pinfo: PackInfo = {
|
|
58
|
+
aspect: 1, sz: 0, margin: CL_OFFSET, doSplines: false,
|
|
59
|
+
mode: PackMode.Node, fixed: null, vals: null, flags: 0,
|
|
60
|
+
};
|
|
61
|
+
// C: getPackInfo(g, l_node, CL_OFFSET) — polyomino node-mode packing.
|
|
62
|
+
getPackInfo(g, PackMode.Node, CL_OFFSET, pinfo);
|
|
63
|
+
pinfo.doSplines = false;
|
|
64
|
+
return pinfo;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Single-component pipeline: layout → cleanup → splines → coords. */
|
|
68
|
+
export function layoutSingle(g: Graph, comps: Graph[], globalRoot: Center, setRoot: boolean): void {
|
|
69
|
+
const sg = comps[0]!;
|
|
70
|
+
const center = layoutComponent(g, sg, globalRoot);
|
|
71
|
+
if (setRoot && globalRoot === null && center !== null) {
|
|
72
|
+
g.attrs.set('root', center.name);
|
|
73
|
+
}
|
|
74
|
+
twopiCleanup(g); // ORDERING: before spline routing
|
|
75
|
+
// C: spline_edges(g) — shifts pos to the origin, syncs coord, routes.
|
|
76
|
+
splineEdgesShifted(g);
|
|
77
|
+
finaliseCoords(g);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Multi-component pipeline: per-component layout + coords, then cleanup,
|
|
82
|
+
* pack, re-sync coords, splines.
|
|
83
|
+
*
|
|
84
|
+
* finaliseCoords per component runs BEFORE packSubgraphs so that
|
|
85
|
+
* computeSubgraphBB reads real point-coords for bounding-box calculation.
|
|
86
|
+
* After packing shifts pos (inches), finaliseCoords re-syncs coord.
|
|
87
|
+
*/
|
|
88
|
+
export function layoutMulti(g: Graph, comps: Graph[], globalRoot: Center, pinfo: PackInfo): void {
|
|
89
|
+
for (const sg of comps) {
|
|
90
|
+
layoutComponent(g, sg, globalRoot);
|
|
91
|
+
finaliseCoords(sg);
|
|
92
|
+
}
|
|
93
|
+
twopiCleanup(g); // ORDERING: before spline routing
|
|
94
|
+
packSubgraphs(comps.length, comps, g, pinfo);
|
|
95
|
+
// C: spline_edges(g) — shifts pos to the origin, syncs coord, routes.
|
|
96
|
+
splineEdgesShifted(g);
|
|
97
|
+
finaliseCoords(g);
|
|
98
|
+
}
|