@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,237 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Vertex computation helpers for polygon shape initialisation.
|
|
5
|
+
*
|
|
6
|
+
* @see lib/common/shapes.c:poly_init
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { PolygonT } from './types.js';
|
|
10
|
+
import type { Point } from '../model/geom.js';
|
|
11
|
+
import { polygonVertices, polygonRingOffsets, GAP } from './poly-sizing.js';
|
|
12
|
+
import { CYLINDER, STAR } from './shapeData.js';
|
|
13
|
+
|
|
14
|
+
/** Compute vertices for an ellipse/circle (sides <= 2). */
|
|
15
|
+
export function ellipseVertices(w: number, h: number): Point[] {
|
|
16
|
+
return [
|
|
17
|
+
{ x: -w / 2, y: -h / 2 },
|
|
18
|
+
{ x: w / 2, y: h / 2 },
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Cylinder control polygon: 19 Bézier control points (origin-centred), ported
|
|
24
|
+
* verbatim from C's cylinder_vertices. Drawn as a bezier outline, not a polygon.
|
|
25
|
+
* @see lib/common/shapes.c:4159 cylinder_vertices
|
|
26
|
+
*/
|
|
27
|
+
export function cylinderVertices(w: number, h: number): Point[] {
|
|
28
|
+
const x = w / 2, y = h / 2, yr = h / 11;
|
|
29
|
+
const r = (1 - 0.551784) * yr;
|
|
30
|
+
const yflip = (p: Point): Point => ({ x: p.x, y: -p.y });
|
|
31
|
+
// v0..v6: top-right corner, top cap arc, top-left corner.
|
|
32
|
+
const v: Point[] = [
|
|
33
|
+
{ x, y: y - yr }, { x, y: y - r }, { x: 0.551784 * x, y },
|
|
34
|
+
{ x: 0, y }, { x: -0.551784 * x, y }, { x: -x, y: y - r }, { x: -x, y: y - yr },
|
|
35
|
+
];
|
|
36
|
+
v.push(v[6]!, { x: -x, y: yr - y }); // v7=v6, v8 (left side down)
|
|
37
|
+
v.push(v[8]!); // v9=v8
|
|
38
|
+
for (let k = 5; k >= 0; k--) v.push(yflip(v[k]!)); // v10..v15: bottom = yflip(v5..v0)
|
|
39
|
+
v.push(v[15]!, v[0]!, v[0]!); // v16=v15, v17=v18=v0
|
|
40
|
+
return v;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Compute vertices for a simple box (sides == 4, no distortion/skew).
|
|
45
|
+
* Order matches C poly_init: top-right → top-left → bottom-left → bottom-right.
|
|
46
|
+
* @see lib/common/shapes.c:poly_init
|
|
47
|
+
*/
|
|
48
|
+
export function boxVertices(w: number, h: number, orientation = 0): Point[] {
|
|
49
|
+
// C computes vertices[0] with the orientation rotation, then forces the other
|
|
50
|
+
// three corners symmetric about it. For a box, orientation is a multiple of 90
|
|
51
|
+
// (the isBox test), so vertices[0] steps TR->TL->BL->BR as orientation goes
|
|
52
|
+
// 0->90->180->270 — same rectangle, different starting corner (hence
|
|
53
|
+
// structural-match, not diverged). orientation=0 is the fixed order below.
|
|
54
|
+
// @see lib/common/shapes.c:poly_init (2244-2268, isBox symmetry)
|
|
55
|
+
const corners: Point[] = [
|
|
56
|
+
{ x: w / 2, y: h / 2 }, // TR — orientation 0
|
|
57
|
+
{ x: -w / 2, y: h / 2 }, // TL — orientation 90
|
|
58
|
+
{ x: -w / 2, y: -h / 2 }, // BL — orientation 180
|
|
59
|
+
{ x: w / 2, y: -h / 2 }, // BR — orientation 270
|
|
60
|
+
];
|
|
61
|
+
const k = ((Math.round(orientation / 90) % 4) + 4) % 4;
|
|
62
|
+
const p = corners[k]!;
|
|
63
|
+
return [
|
|
64
|
+
{ x: p.x, y: p.y },
|
|
65
|
+
{ x: -p.x, y: p.y },
|
|
66
|
+
{ x: -p.x, y: -p.y },
|
|
67
|
+
{ x: p.x, y: -p.y },
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Compute vertices for a regular polygon with arbitrary sides.
|
|
73
|
+
*
|
|
74
|
+
* Starting angle matches C poly_init: first vertex at 3π/n - π/2
|
|
75
|
+
* (top-right for n=4, top for n=3).
|
|
76
|
+
* @see lib/common/shapes.c:poly_init (polygon vertex loop)
|
|
77
|
+
*/
|
|
78
|
+
export function generalPolyVertices(poly: PolygonT, w: number, h: number): Point[] {
|
|
79
|
+
// C computes the unit ring (distort/skew/orient), then scales so its
|
|
80
|
+
// extents exactly span the node box. @see shapes.c:poly_init (scale)
|
|
81
|
+
const { verts, xmax, ymax } = polygonVertices(
|
|
82
|
+
{ x: w, y: h },
|
|
83
|
+
{
|
|
84
|
+
sides: poly.sides,
|
|
85
|
+
orientation: poly.orientation,
|
|
86
|
+
distortion: poly.distortion,
|
|
87
|
+
skew: poly.skew,
|
|
88
|
+
},
|
|
89
|
+
false,
|
|
90
|
+
);
|
|
91
|
+
const sx = xmax !== 0 ? w / (2 * xmax) : 1;
|
|
92
|
+
const sy = ymax !== 0 ? h / (2 * ymax) : 1;
|
|
93
|
+
return verts.map((v) => ({ x: v.x * sx, y: v.y * sy }));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Concentric ellipse rings, innermost first (C vertex layout
|
|
98
|
+
* vertices[i + j*sides], sides = 2). The node box spans the OUTERMOST
|
|
99
|
+
* ring; inner rings shrink by GAP per ring — the inverse of poly_init,
|
|
100
|
+
* which grows bb to the outermost ring after placing rings outward.
|
|
101
|
+
* @see lib/common/shapes.c:poly_init (ellipse peripheries, :2173-2184)
|
|
102
|
+
*/
|
|
103
|
+
function ellipseRings(w: number, h: number, peripheries: number): Point[] {
|
|
104
|
+
const out: Point[] = [];
|
|
105
|
+
for (let j = 0; j < peripheries; j++) {
|
|
106
|
+
const inset = (peripheries - 1 - j) * GAP;
|
|
107
|
+
out.push(...ellipseVertices(w - 2 * inset, h - 2 * inset));
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Concentric box rings, innermost first. C runs the SAME bisector periphery
|
|
114
|
+
* loop for boxes as for general polygons (isBox only forces base-vertex
|
|
115
|
+
* symmetry, not a different periphery walk). The per-vertex GAP offset follows
|
|
116
|
+
* the base ring's vertex winding, so orientation 0/180 (counter-clockwise) steps
|
|
117
|
+
* OUTWARD while 90/270 (clockwise) steps INWARD — which flips the two rings'
|
|
118
|
+
* draw order. The fixed-inset form (always innermost-first) matches only the
|
|
119
|
+
* outward case; it reversed the ring order for 90/270 boxes (polypoly under
|
|
120
|
+
* patchwork, 9012/9016). With the base box we reproduce C exactly for every
|
|
121
|
+
* orientation. Without a base (no-measurer fallback) we keep the inset form.
|
|
122
|
+
* @see lib/common/shapes.c:poly_init (peripheries bisector loop)
|
|
123
|
+
*/
|
|
124
|
+
function boxRings(
|
|
125
|
+
w: number,
|
|
126
|
+
h: number,
|
|
127
|
+
peripheries: number,
|
|
128
|
+
orientation: number,
|
|
129
|
+
base?: { w: number; h: number },
|
|
130
|
+
): Point[] {
|
|
131
|
+
if (peripheries <= 1 || base === undefined) {
|
|
132
|
+
const out: Point[] = [];
|
|
133
|
+
for (let j = 0; j < peripheries; j++) {
|
|
134
|
+
const inset = (peripheries - 1 - j) * GAP;
|
|
135
|
+
out.push(...boxVertices(w - 2 * inset, h - 2 * inset, orientation));
|
|
136
|
+
}
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
const inner = boxVertices(base.w, base.h, orientation);
|
|
140
|
+
const offs = polygonRingOffsets(inner, 4);
|
|
141
|
+
const rings: Point[][] = [inner];
|
|
142
|
+
for (let j = 1; j < peripheries; j++) {
|
|
143
|
+
rings.push(inner.map((v, i) => ({ x: v.x + j * offs[i]!.x, y: v.y + j * offs[i]!.y })));
|
|
144
|
+
}
|
|
145
|
+
return rings.flat();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* General polygon rings, innermost first, in C's forward order: the
|
|
150
|
+
* base ring is scaled to the pre-growth box, then each further ring
|
|
151
|
+
* steps OUTWARD by the per-vertex bisector GAP offsets computed from
|
|
152
|
+
* the base ring's angles. Without a base box (no-measurer fallback)
|
|
153
|
+
* the node box is used directly, stepping inward — exact only for
|
|
154
|
+
* peripheries = 1.
|
|
155
|
+
* @see lib/common/shapes.c:poly_init (peripheries bisector loop)
|
|
156
|
+
*/
|
|
157
|
+
function generalPolyRings(
|
|
158
|
+
poly: PolygonT,
|
|
159
|
+
box: { w: number; h: number; base?: { w: number; h: number } },
|
|
160
|
+
peripheries: number,
|
|
161
|
+
): Point[] {
|
|
162
|
+
if (peripheries <= 1 || box.base === undefined) {
|
|
163
|
+
return generalPolyVertices(poly, box.w, box.h);
|
|
164
|
+
}
|
|
165
|
+
const inner = generalPolyVertices(poly, box.base.w, box.base.h);
|
|
166
|
+
const offs = polygonRingOffsets(inner, poly.sides);
|
|
167
|
+
const rings: Point[][] = [inner];
|
|
168
|
+
for (let j = 1; j < peripheries; j++) {
|
|
169
|
+
rings.push(inner.map((v, i) =>
|
|
170
|
+
({ x: v.x + j * offs[i]!.x, y: v.y + j * offs[i]!.y })));
|
|
171
|
+
}
|
|
172
|
+
return rings.flat();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Star (5-pointed) base vertices: 10 points alternating an outer radius `r` and
|
|
177
|
+
* inner radius `r0`, shifted down by `offset`. The box is first scaled to the
|
|
178
|
+
* star aspect ratio (the `a < aspect` branch grows only the unused y extent).
|
|
179
|
+
* @see lib/common/shapes.c:star_vertices (alpha = PI/10)
|
|
180
|
+
*/
|
|
181
|
+
export function starVertices(w: number, h: number): Point[] {
|
|
182
|
+
const alpha = Math.PI / 10;
|
|
183
|
+
const alpha2 = 2 * alpha, alpha3 = 3 * alpha, alpha4 = 2 * alpha2;
|
|
184
|
+
let szx = w;
|
|
185
|
+
const aspect = (1 + Math.sin(alpha3)) / (2 * Math.cos(alpha));
|
|
186
|
+
if (h / szx > aspect) szx = h / aspect;
|
|
187
|
+
const r = szx / (2 * Math.cos(alpha));
|
|
188
|
+
const r0 = (r * Math.cos(alpha) * Math.cos(alpha4)) / (Math.sin(alpha4) * Math.cos(alpha2));
|
|
189
|
+
const offset = (r * (1 - Math.sin(alpha3))) / 2;
|
|
190
|
+
const v: Point[] = [];
|
|
191
|
+
let theta = alpha;
|
|
192
|
+
for (let i = 0; i < 10; i += 2) {
|
|
193
|
+
v.push({ x: r * Math.cos(theta), y: r * Math.sin(theta) - offset });
|
|
194
|
+
theta += alpha2;
|
|
195
|
+
v.push({ x: r0 * Math.cos(theta), y: r0 * Math.sin(theta) - offset });
|
|
196
|
+
theta += alpha2;
|
|
197
|
+
}
|
|
198
|
+
return v;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Star periphery rings — like generalPolyRings but over the 10 star vertices. */
|
|
202
|
+
function starRings(
|
|
203
|
+
box: { w: number; h: number; base?: { w: number; h: number } },
|
|
204
|
+
peripheries: number,
|
|
205
|
+
): Point[] {
|
|
206
|
+
if (peripheries <= 1 || box.base === undefined) return starVertices(box.w, box.h);
|
|
207
|
+
const inner = starVertices(box.base.w, box.base.h);
|
|
208
|
+
const offs = polygonRingOffsets(inner, 10);
|
|
209
|
+
const rings: Point[][] = [inner];
|
|
210
|
+
for (let j = 1; j < peripheries; j++) {
|
|
211
|
+
rings.push(inner.map((v, i) => ({ x: v.x + j * offs[i]!.x, y: v.y + j * offs[i]!.y })));
|
|
212
|
+
}
|
|
213
|
+
return rings.flat();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Choose vertex layout strategy based on polygon descriptor and size. */
|
|
217
|
+
export function computeVertices(
|
|
218
|
+
poly: PolygonT,
|
|
219
|
+
w: number,
|
|
220
|
+
h: number,
|
|
221
|
+
base?: { w: number; h: number },
|
|
222
|
+
): Point[] {
|
|
223
|
+
const sides = poly.sides;
|
|
224
|
+
// Cylinder is a 19-point bezier control polygon, not a regular 19-gon.
|
|
225
|
+
if (poly.option.shape === CYLINDER) return cylinderVertices(w, h);
|
|
226
|
+
// C generates one ring even for peripheries=0 (outp >= 1); the draw
|
|
227
|
+
// loop is what skips it. @see lib/common/shapes.c:poly_init (outp)
|
|
228
|
+
const peripheries = Math.max(poly.peripheries, 1);
|
|
229
|
+
if (poly.option.shape === STAR) return starRings({ w, h, base }, peripheries);
|
|
230
|
+
if (sides <= 2) return ellipseRings(w, h, peripheries);
|
|
231
|
+
// C's isBox test: right angles only (diamond = orientation 45).
|
|
232
|
+
if (sides === 4 && Math.abs(poly.orientation % 90) < 0.5
|
|
233
|
+
&& poly.distortion === 0 && poly.skew === 0) {
|
|
234
|
+
return boxRings(w, h, peripheries, poly.orientation, base);
|
|
235
|
+
}
|
|
236
|
+
return generalPolyRings(poly, { w, h, base }, peripheries);
|
|
237
|
+
}
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TypeScript port of lib/common/postproc.c — gv_postprocess (coordinate
|
|
5
|
+
* rotation + translation pass run after spline routing).
|
|
6
|
+
*
|
|
7
|
+
* addXLabels logic lives in xlabels-place.ts to keep this file under the
|
|
8
|
+
* 500-line limit. It is called from gvPostprocess at the C point
|
|
9
|
+
* (postproc.c:616 — after graph-label placement, before the bb adjustment).
|
|
10
|
+
*
|
|
11
|
+
* @see lib/common/postproc.c:gv_postprocess
|
|
12
|
+
* @see lib/common/postproc.c:map_point
|
|
13
|
+
* @see lib/common/postproc.c:translate_bb
|
|
14
|
+
* @see lib/common/postproc.c:translate_drawing
|
|
15
|
+
* @see lib/common/postproc.c:addXLabels
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { Graph } from '../model/graph.js';
|
|
19
|
+
import type { Point, Box } from '../model/geom.js';
|
|
20
|
+
import { ccwrotatepf } from '../model/geom.js';
|
|
21
|
+
import type { ArrowDrawOp } from './arrows-types.js';
|
|
22
|
+
import { mapArrowOpPoints } from './arrows-shapes-util.js';
|
|
23
|
+
import type { TextlabelT } from './types.js';
|
|
24
|
+
import { gvNodesize } from './poly-sizing.js';
|
|
25
|
+
import {
|
|
26
|
+
RANKDIR_TB, RANKDIR_LR, RANKDIR_BT, RANKDIR_RL,
|
|
27
|
+
} from '../layout/dot/init.js';
|
|
28
|
+
import { addXLabels } from './xlabels-place.js';
|
|
29
|
+
|
|
30
|
+
/** Concentrated multi-edge duplicate — never drawn. @see lib/common/const.h:IGNORED */
|
|
31
|
+
const IGNORED_EDGE = 6;
|
|
32
|
+
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Module-level state (mirrors the C file-scope statics Rankdir, Flip, Offset)
|
|
35
|
+
// These are set once per gvPostprocess call and read by the helpers.
|
|
36
|
+
// @see lib/common/postproc.c:56-58
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
let Rankdir = 0;
|
|
40
|
+
let Offset: Point = { x: 0, y: 0 };
|
|
41
|
+
|
|
42
|
+
/** The edge-info shape map_edge reads/writes (spline, labels, arrow ops). */
|
|
43
|
+
interface EdgeArrowInfo {
|
|
44
|
+
spl?: { list: Array<{ list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }> };
|
|
45
|
+
label?: unknown;
|
|
46
|
+
xlabel?: unknown;
|
|
47
|
+
head_label?: unknown;
|
|
48
|
+
tail_label?: unknown;
|
|
49
|
+
headArrowOps?: ArrowDrawOp[];
|
|
50
|
+
tailArrowOps?: ArrowDrawOp[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// map_point
|
|
55
|
+
// @see lib/common/postproc.c:90-96
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Apply the CCW rotation (Rankdir*90 degrees) then subtract Offset.
|
|
60
|
+
* @see lib/common/postproc.c:map_point
|
|
61
|
+
*/
|
|
62
|
+
function mapPoint(p: Point): Point {
|
|
63
|
+
const r = ccwrotatepf(p, Rankdir * 90);
|
|
64
|
+
return { x: r.x - Offset.x, y: r.y - Offset.y };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Label-position mapping helpers
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
|
|
71
|
+
/** Map pos on a TextlabelT in place if the label and its pos exist. */
|
|
72
|
+
function mapLabelPos(raw: unknown): void {
|
|
73
|
+
const lab = raw as TextlabelT | undefined;
|
|
74
|
+
if (lab?.pos !== undefined) lab.pos = mapPoint(lab.pos);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Bezier / spline helpers
|
|
79
|
+
// @see lib/common/postproc.c:98-125 (map_edge)
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
|
|
82
|
+
/** Map all control points in one Bezier segment. */
|
|
83
|
+
function mapBezierPoints(bz: { list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }): void {
|
|
84
|
+
for (let k = 0; k < bz.list.length; k++) {
|
|
85
|
+
bz.list[k] = mapPoint(bz.list[k]);
|
|
86
|
+
}
|
|
87
|
+
if (bz.sflag) bz.sp = mapPoint(bz.sp);
|
|
88
|
+
if (bz.eflag) bz.ep = mapPoint(bz.ep);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Map all spline segments on an edge. */
|
|
92
|
+
function mapSpl(spl: { list: Array<{ list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }> }): void {
|
|
93
|
+
for (let j = 0; j < spl.list.length; j++) {
|
|
94
|
+
mapBezierPoints(spl.list[j]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// map_edge
|
|
100
|
+
// @see lib/common/postproc.c:98-125
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
|
|
103
|
+
/** Rotate the stored arrow draw-ops for the rankdir transform.
|
|
104
|
+
* BT (180°) and RL (270°) are reflections (det = -1): they reverse polygon
|
|
105
|
+
* winding, so each polygon's vertices are reversed to match the order the C
|
|
106
|
+
* render-time generator produces. TB (0°) and LR (90°) are proper rotations
|
|
107
|
+
* (det = +1) and need no reversal. @see lib/common/postproc.c:map_edge
|
|
108
|
+
*/
|
|
109
|
+
function mapArrowOps(ops: ArrowDrawOp[] | undefined): ArrowDrawOp[] | undefined {
|
|
110
|
+
if (!ops) return ops;
|
|
111
|
+
const isReflection = Rankdir === RANKDIR_BT || Rankdir === RANKDIR_RL;
|
|
112
|
+
return ops.map((op) => {
|
|
113
|
+
const m = mapArrowOpPoints(op, mapPoint);
|
|
114
|
+
if (isReflection && m.kind === 'polygon') return { ...m, points: [...m.points].reverse() };
|
|
115
|
+
return m;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** The edge-info shape map_edge reads/writes (spline, labels, arrow ops). */
|
|
120
|
+
interface EdgeArrowInfo {
|
|
121
|
+
spl?: { list: Array<{ list: Point[]; sflag: number; eflag: number; sp: Point; ep: Point }> };
|
|
122
|
+
label?: unknown;
|
|
123
|
+
xlabel?: unknown;
|
|
124
|
+
head_label?: unknown;
|
|
125
|
+
tail_label?: unknown;
|
|
126
|
+
headArrowOps?: ArrowDrawOp[];
|
|
127
|
+
tailArrowOps?: ArrowDrawOp[];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Map spline control points, label positions, and pre-computed arrow draw-ops
|
|
132
|
+
* for one edge. The C port regenerates arrowheads at render time from the
|
|
133
|
+
* rotated ep/sp; this port pre-computes them during routing, so they are
|
|
134
|
+
* rotated here to match the post-gvPostprocess coordinate space.
|
|
135
|
+
* @see lib/common/postproc.c:map_edge
|
|
136
|
+
*/
|
|
137
|
+
function mapEdge(e: { info: EdgeArrowInfo }): void {
|
|
138
|
+
const spl = e.info.spl;
|
|
139
|
+
if (spl === undefined) return;
|
|
140
|
+
mapSpl(spl);
|
|
141
|
+
mapLabelPos(e.info.label);
|
|
142
|
+
mapLabelPos(e.info.xlabel);
|
|
143
|
+
mapLabelPos(e.info.head_label);
|
|
144
|
+
mapLabelPos(e.info.tail_label);
|
|
145
|
+
// Rotate pre-computed arrowhead draw-ops (TS-only: C computes at render time).
|
|
146
|
+
e.info.headArrowOps = mapArrowOps(e.info.headArrowOps);
|
|
147
|
+
e.info.tailArrowOps = mapArrowOps(e.info.tailArrowOps);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
// translate_bb — bounding-box rotation per rankdir
|
|
152
|
+
// @see lib/common/postproc.c:127-146
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
|
|
155
|
+
/** Compute the new bb after mapping corners (LR/BT swap corners first). */
|
|
156
|
+
function rotateBb(bb: Box, rankdir: number): Box {
|
|
157
|
+
if (rankdir === RANKDIR_LR || rankdir === RANKDIR_BT) {
|
|
158
|
+
return {
|
|
159
|
+
ll: mapPoint({ x: bb.ll.x, y: bb.ur.y }),
|
|
160
|
+
ur: mapPoint({ x: bb.ur.x, y: bb.ll.y }),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
ll: mapPoint({ x: bb.ll.x, y: bb.ll.y }),
|
|
165
|
+
ur: mapPoint({ x: bb.ur.x, y: bb.ur.y }),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Rotate the bounding box of a graph (and its clusters, recursively).
|
|
171
|
+
* @see lib/common/postproc.c:translate_bb
|
|
172
|
+
*/
|
|
173
|
+
export function translateBb(g: Graph, rankdir: number): void {
|
|
174
|
+
g.info.bb = rotateBb(g.info.bb, rankdir);
|
|
175
|
+
mapLabelPos(g.info.label);
|
|
176
|
+
const nc = g.info.n_cluster ?? 0;
|
|
177
|
+
const clust = g.info.clust;
|
|
178
|
+
for (let c = 1; c <= nc; c++) {
|
|
179
|
+
if (clust?.[c - 1]) translateBb(clust[c - 1], rankdir);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
// Node-size reset helper
|
|
185
|
+
// @see lib/common/utils.c:gv_nodesize (flip=false branch)
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
|
|
188
|
+
/** Reset node lw/rw/ht to unflipped (width-based) values. */
|
|
189
|
+
function resetNodeSize(v: { info: { width?: number; height?: number; lw?: number; rw?: number; ht?: number } }): void {
|
|
190
|
+
const widthPts = v.info.width !== undefined ? v.info.width * 72 : (v.info.lw ?? 0) + (v.info.rw ?? 0);
|
|
191
|
+
const heightPts = v.info.height !== undefined ? v.info.height * 72 : (v.info.ht ?? 0);
|
|
192
|
+
const ns = gvNodesize(widthPts, heightPts, false);
|
|
193
|
+
v.info.lw = ns.lw;
|
|
194
|
+
v.info.rw = ns.rw;
|
|
195
|
+
v.info.ht = ns.ht;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Map coord + xlabel for one node; resize if rankdir is non-TB. */
|
|
199
|
+
function mapNode(v: { info: { coord?: Point; xlabel?: unknown; width?: number; height?: number; lw?: number; rw?: number; ht?: number } }): void {
|
|
200
|
+
if (Rankdir) resetNodeSize(v);
|
|
201
|
+
v.info.coord = mapPoint(v.info.coord ?? { x: 0, y: 0 });
|
|
202
|
+
mapLabelPos(v.info.xlabel);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
// translate_drawing
|
|
207
|
+
// @see lib/common/postproc.c:153-172
|
|
208
|
+
// ---------------------------------------------------------------------------
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Translate and/or rotate nodes, splines, and bbox info.
|
|
212
|
+
*
|
|
213
|
+
* NOTE: The C comment says "if Rankdir (!= RANKDIR_BT), reset ND_lw/rw/ht"
|
|
214
|
+
* but the code calls gv_nodesize(v, false) whenever Rankdir != 0.
|
|
215
|
+
* We follow the code.
|
|
216
|
+
*
|
|
217
|
+
* @see lib/common/postproc.c:translate_drawing
|
|
218
|
+
*/
|
|
219
|
+
function translateDrawing(g: Graph): void {
|
|
220
|
+
const shift = Offset.x !== 0 || Offset.y !== 0;
|
|
221
|
+
if (!shift && !Rankdir) return;
|
|
222
|
+
|
|
223
|
+
for (const v of g.nodes.values()) {
|
|
224
|
+
mapNode(v);
|
|
225
|
+
// State == GVSPLINES is always true post-spline-routing in the dot pipeline
|
|
226
|
+
for (const e of g.edges) {
|
|
227
|
+
if (e.tail !== v) continue;
|
|
228
|
+
// C map_edge: a spline-less (non-concentrate, non-IGNORED) edge was
|
|
229
|
+
// LOST during routing — warn and skip, exactly as native dot.
|
|
230
|
+
// @see lib/common/postproc.c:map_edge ("lost %s %s edge")
|
|
231
|
+
if (e.info.spl === undefined) {
|
|
232
|
+
if (!(g.info.concentrate ?? false) && (e.info.edge_type ?? 0) !== IGNORED_EDGE) {
|
|
233
|
+
console.warn(`lost ${e.tail.name} ${e.head.name} edge`);
|
|
234
|
+
}
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
mapEdge(e);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
translateBb(g, g.info.rankdir & 0x3);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// Offset computation per rankdir
|
|
245
|
+
// @see lib/common/postproc.c:657-672
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
|
|
248
|
+
/** Compute Offset from the current bb for the given rankdir. */
|
|
249
|
+
function computeOffset(bb: Box, rankdir: number): Point {
|
|
250
|
+
switch (rankdir) {
|
|
251
|
+
case RANKDIR_TB: return { x: bb.ll.x, y: bb.ll.y };
|
|
252
|
+
case RANKDIR_LR: return { x: -bb.ur.y, y: bb.ll.x };
|
|
253
|
+
case RANKDIR_BT: return { x: bb.ll.x, y: -bb.ur.y };
|
|
254
|
+
case RANKDIR_RL: return { x: bb.ll.y, y: bb.ll.x };
|
|
255
|
+
default: return { x: 0, y: 0 };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// ---------------------------------------------------------------------------
|
|
260
|
+
// LABEL_AT constants
|
|
261
|
+
// @see lib/common/const.h:LABEL_AT_BOTTOM / LABEL_AT_TOP / LABEL_AT_LEFT / LABEL_AT_RIGHT
|
|
262
|
+
// ---------------------------------------------------------------------------
|
|
263
|
+
|
|
264
|
+
/** @see lib/common/const.h:LABEL_AT_BOTTOM */
|
|
265
|
+
const LABEL_AT_BOTTOM = 0;
|
|
266
|
+
/** @see lib/common/const.h:LABEL_AT_TOP */
|
|
267
|
+
const LABEL_AT_TOP = 1;
|
|
268
|
+
/** @see lib/common/const.h:LABEL_AT_LEFT */
|
|
269
|
+
const LABEL_AT_LEFT = 2;
|
|
270
|
+
/** @see lib/common/const.h:LABEL_AT_RIGHT */
|
|
271
|
+
const LABEL_AT_RIGHT = 4;
|
|
272
|
+
|
|
273
|
+
/** PAD constants (GAP=4): x += 4*GAP=16, y += 2*GAP=8. @see lib/common/macros.h:PAD */
|
|
274
|
+
const XPAD_AMOUNT = 16;
|
|
275
|
+
const YPAD_AMOUNT = 8;
|
|
276
|
+
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
// rootLabelPos — read label position flags directly from graph attrs
|
|
279
|
+
// Used when doGraphLabel hasn't set label_pos on the root graph.
|
|
280
|
+
// @see lib/common/input.c:do_graph_label:866-877
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Compute the label-position flag for the root graph from its attributes.
|
|
285
|
+
* Root default is LABEL_AT_BOTTOM (unlike clusters which default to TOP).
|
|
286
|
+
* @see lib/common/input.c:do_graph_label:866-877
|
|
287
|
+
*/
|
|
288
|
+
function rootLabelPos(g: Graph): number {
|
|
289
|
+
const loc = g.attrs.get('labelloc');
|
|
290
|
+
let pos: number = loc && loc[0] === 't' ? LABEL_AT_TOP : LABEL_AT_BOTTOM;
|
|
291
|
+
const just = g.attrs.get('labeljust');
|
|
292
|
+
if (just) {
|
|
293
|
+
if (just[0] === 'l') pos |= LABEL_AT_LEFT;
|
|
294
|
+
else if (just[0] === 'r') pos |= LABEL_AT_RIGHT;
|
|
295
|
+
}
|
|
296
|
+
return pos;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// ---------------------------------------------------------------------------
|
|
300
|
+
// expandBbForRootLabel — expand bounding box for unplaced root graph label
|
|
301
|
+
// @see lib/common/postproc.c:619-655
|
|
302
|
+
// ---------------------------------------------------------------------------
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* If the root graph has an unset label, expand the bounding box to make
|
|
306
|
+
* room for it and return the padded dimen. Returns {x:0, y:0} otherwise.
|
|
307
|
+
*
|
|
308
|
+
* Called after addXLabels (postproc.c:616), before Offset/translateDrawing.
|
|
309
|
+
*
|
|
310
|
+
* @see lib/common/postproc.c:619-655
|
|
311
|
+
*/
|
|
312
|
+
function expandBbForRootLabel(g: Graph): { x: number; y: number } {
|
|
313
|
+
const label = g.info.label as TextlabelT | undefined;
|
|
314
|
+
if (!label || label.set) return { x: 0, y: 0 };
|
|
315
|
+
|
|
316
|
+
const dimen = { x: label.dimen.x + XPAD_AMOUNT, y: label.dimen.y + YPAD_AMOUNT };
|
|
317
|
+
const labelPos = rootLabelPos(g);
|
|
318
|
+
const flip = g.info.flip ?? false;
|
|
319
|
+
const bb = g.info.bb;
|
|
320
|
+
|
|
321
|
+
if (flip) {
|
|
322
|
+
expandBbFlip(bb, dimen, labelPos);
|
|
323
|
+
} else {
|
|
324
|
+
expandBbNoFlip(bb, dimen, labelPos, Rankdir);
|
|
325
|
+
}
|
|
326
|
+
return dimen;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/** @see lib/common/postproc.c:622-634 (Flip branch) */
|
|
330
|
+
function expandBbFlip(bb: { ll: { x: number; y: number }; ur: { x: number; y: number } }, dimen: { x: number; y: number }, labelPos: number): void {
|
|
331
|
+
if (labelPos & LABEL_AT_TOP) {
|
|
332
|
+
bb.ur.x += dimen.y;
|
|
333
|
+
} else {
|
|
334
|
+
bb.ll.x -= dimen.y;
|
|
335
|
+
}
|
|
336
|
+
const span = bb.ur.y - bb.ll.y;
|
|
337
|
+
if (dimen.x > span) {
|
|
338
|
+
const diff = (dimen.x - span) / 2;
|
|
339
|
+
bb.ll.y -= diff;
|
|
340
|
+
bb.ur.y += diff;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/** Expand bb y-axis for label height in the non-flip case. @see lib/common/postproc.c:636-646 */
|
|
345
|
+
function expandBbNoFlipY(bb: { ll: { x: number; y: number }; ur: { x: number; y: number } }, dy: number, labelPos: number, rankdir: number): void {
|
|
346
|
+
if (labelPos & LABEL_AT_TOP) {
|
|
347
|
+
if (rankdir === RANKDIR_TB) bb.ur.y += dy; else bb.ll.y -= dy;
|
|
348
|
+
} else {
|
|
349
|
+
if (rankdir === RANKDIR_TB) bb.ll.y -= dy; else bb.ur.y += dy;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/** @see lib/common/postproc.c:635-654 (non-Flip branch) */
|
|
354
|
+
function expandBbNoFlip(bb: { ll: { x: number; y: number }; ur: { x: number; y: number } }, dimen: { x: number; y: number }, labelPos: number, rankdir: number): void {
|
|
355
|
+
expandBbNoFlipY(bb, dimen.y, labelPos, rankdir);
|
|
356
|
+
const span = bb.ur.x - bb.ll.x;
|
|
357
|
+
if (dimen.x > span) {
|
|
358
|
+
const diff = (dimen.x - span) / 2;
|
|
359
|
+
bb.ll.x -= diff;
|
|
360
|
+
bb.ur.x += diff;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// ---------------------------------------------------------------------------
|
|
365
|
+
// place_root_label
|
|
366
|
+
// @see lib/common/postproc.c:174-200
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
|
|
369
|
+
/** Label x-coordinate per justification flags. @see lib/common/postproc.c:184-190 */
|
|
370
|
+
function rootLabelX(bb: Box, labelPos: number, dimX: number): number {
|
|
371
|
+
if (labelPos & LABEL_AT_RIGHT) return bb.ur.x - dimX / 2;
|
|
372
|
+
if (labelPos & LABEL_AT_LEFT) return bb.ll.x + dimX / 2;
|
|
373
|
+
return (bb.ll.x + bb.ur.x) / 2;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/** Label y-coordinate per position flag. @see lib/common/postproc.c:192-196 */
|
|
377
|
+
function rootLabelY(bb: Box, labelPos: number, dimY: number): number {
|
|
378
|
+
if (labelPos & LABEL_AT_TOP) return bb.ur.y - dimY / 2;
|
|
379
|
+
return bb.ll.y + dimY / 2;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Set the position of the root graph label.
|
|
384
|
+
* Called after translate_drawing so the bb is already in output space;
|
|
385
|
+
* no flip/rotation compensation is needed here.
|
|
386
|
+
*
|
|
387
|
+
* @see lib/common/postproc.c:place_root_label
|
|
388
|
+
*/
|
|
389
|
+
export function placeRootLabel(g: Graph, dimen: { x: number; y: number }): void {
|
|
390
|
+
const label = g.info.label as TextlabelT | undefined;
|
|
391
|
+
if (!label) return;
|
|
392
|
+
const labelPos = rootLabelPos(g);
|
|
393
|
+
const bb = g.info.bb;
|
|
394
|
+
label.pos = { x: rootLabelX(bb, labelPos, dimen.x), y: rootLabelY(bb, labelPos, dimen.y) };
|
|
395
|
+
label.set = true;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// ---------------------------------------------------------------------------
|
|
399
|
+
// gvPostprocess
|
|
400
|
+
// @see lib/common/postproc.c:599-687
|
|
401
|
+
// ---------------------------------------------------------------------------
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Port of gv_postprocess. `allowTranslation` mirrors the C parameter:
|
|
405
|
+
* `dotneato_postprocess` (dot, sfdp, circo, twopi) and `neato_layout` pass 1;
|
|
406
|
+
* `fdp_layout` passes 0 (layout.c:1076) because fdp's finalCC has already
|
|
407
|
+
* placed the drawing at the origin.
|
|
408
|
+
*
|
|
409
|
+
* Order matches C: addXLabels → expand bb for root label → compute Offset →
|
|
410
|
+
* translateDrawing → place_root_label.
|
|
411
|
+
*
|
|
412
|
+
* addXLabels is called at postproc.c:616 — after place_graph_label (cluster
|
|
413
|
+
* labels handled elsewhere), before bb adjustment.
|
|
414
|
+
* Root graph label is placed at postproc.c:675-676, after translateDrawing.
|
|
415
|
+
*
|
|
416
|
+
* @see lib/common/postproc.c:gv_postprocess
|
|
417
|
+
* @see lib/common/postproc.c:dotneato_postprocess
|
|
418
|
+
*/
|
|
419
|
+
export function gvPostprocess(g: Graph, allowTranslation = true): void {
|
|
420
|
+
Rankdir = g.info.rankdir & 0x3;
|
|
421
|
+
// addXLabels at postproc.c:616 — after place_graph_label, before bb adjust.
|
|
422
|
+
addXLabels(g);
|
|
423
|
+
// Expand bb to make room for root graph label (postproc.c:619-655).
|
|
424
|
+
const dimen = expandBbForRootLabel(g);
|
|
425
|
+
// Compute Offset from the (possibly expanded) bb, then translate
|
|
426
|
+
// (postproc.c:656-674 — gated on allowTranslation).
|
|
427
|
+
if (allowTranslation) {
|
|
428
|
+
Offset = computeOffset(g.info.bb, Rankdir);
|
|
429
|
+
translateDrawing(g);
|
|
430
|
+
}
|
|
431
|
+
// Place root graph label after translation (postproc.c:675-676).
|
|
432
|
+
const rootLabel = g.info.label as TextlabelT | undefined;
|
|
433
|
+
if (rootLabel && !rootLabel.set) {
|
|
434
|
+
placeRootLabel(g, dimen);
|
|
435
|
+
}
|
|
436
|
+
}
|