@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,639 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Label-driven node sizing — a faithful port of the sizing portion of
|
|
5
|
+
* poly_init. Computes the node bounding box from the label dimensions
|
|
6
|
+
* and node attributes, then converts to lw/rw/ht via gv_nodesize.
|
|
7
|
+
*
|
|
8
|
+
* poly_desc size_gen hooks (star_size, cylinder_size) ARE ported — see
|
|
9
|
+
* starSize/cylinderSize and the shapes.c:2073-2085 dispatch in polySize.
|
|
10
|
+
* The star_vertices aspect-correction feedback into node width (shapes.c:2217,
|
|
11
|
+
* only observable when an explicit width/height forces a non-star aspect) is
|
|
12
|
+
* NOT yet replicated — polygonBB sizes the star via a regular decagon.
|
|
13
|
+
*
|
|
14
|
+
* Not ported (no TS counterpart yet, no suite coverage):
|
|
15
|
+
* - usershape/image sizing (gvusershape_size) — needs an image loader.
|
|
16
|
+
*
|
|
17
|
+
* @see lib/common/shapes.c:poly_init
|
|
18
|
+
* @see lib/common/utils.c:gv_nodesize
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type { Point } from '../model/geom.js';
|
|
22
|
+
import { STAR, CYLINDER } from './shapeData.js';
|
|
23
|
+
import { starVertices } from './poly-vertices.js';
|
|
24
|
+
import { fma } from './fma.js';
|
|
25
|
+
|
|
26
|
+
/** Whitespace in points around labels / between peripheries. @see lib/common/const.h:GAP */
|
|
27
|
+
export const GAP = 4;
|
|
28
|
+
/** @see lib/common/macros.h:XPAD */
|
|
29
|
+
const XPAD = 4 * GAP;
|
|
30
|
+
/** @see lib/common/macros.h:YPAD */
|
|
31
|
+
const YPAD = 2 * GAP;
|
|
32
|
+
/** @see lib/common/arith.h:SQRT2 */
|
|
33
|
+
const SQRT2 = 1.41421356237309504880;
|
|
34
|
+
/** Points per inch. @see lib/common/geom.h:INCH2PS */
|
|
35
|
+
const INCH2PS = 72;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Inputs for polySize, mirroring what poly_init reads from the node.
|
|
39
|
+
* All lengths are in points unless suffixed `In` (inches).
|
|
40
|
+
*/
|
|
41
|
+
export interface PolySizeParams {
|
|
42
|
+
/** Label size in points. @see ND_label(n)->dimen */
|
|
43
|
+
labelDimen: Point;
|
|
44
|
+
/** Effective polygon sides after attr resolution (0 means attr-driven). */
|
|
45
|
+
sides: number;
|
|
46
|
+
/** Periphery count after the peripheries attr override. */
|
|
47
|
+
peripheries: number;
|
|
48
|
+
/** Orientation in degrees (shape base + orientation attr). */
|
|
49
|
+
orientation: number;
|
|
50
|
+
/** Distortion factor. */
|
|
51
|
+
distortion: number;
|
|
52
|
+
/** Skew factor. */
|
|
53
|
+
skew: number;
|
|
54
|
+
/** Shape regular flag OR'd with the regular attr. */
|
|
55
|
+
regular: boolean;
|
|
56
|
+
/** True for shape=plain. @see lib/common/shapes.c:IS_PLAIN */
|
|
57
|
+
isPlain: boolean;
|
|
58
|
+
/** width attr in inches (default 0.75, min 0.01). */
|
|
59
|
+
widthIn: number;
|
|
60
|
+
/** height attr in inches (default 0.5, min 0.02). */
|
|
61
|
+
heightIn: number;
|
|
62
|
+
/** INCH2PS(max(width attr, height attr)), 0 when unset. @see shapes.c:userSize */
|
|
63
|
+
userSizePts: number;
|
|
64
|
+
/** Raw margin attr (inches, "x" or "x,y"), undefined when unset. */
|
|
65
|
+
margin: string | undefined;
|
|
66
|
+
/** fixedsize attr (default "false"). */
|
|
67
|
+
fixedsize: string;
|
|
68
|
+
/** labelloc attr, undefined when unset. */
|
|
69
|
+
labelloc: string | undefined;
|
|
70
|
+
/** Graph quantum attr in inches (0 disables quantization). */
|
|
71
|
+
quantumIn: number;
|
|
72
|
+
/** True when rankdir flips coordinates. @see GD_flip */
|
|
73
|
+
flip: boolean;
|
|
74
|
+
/** penwidth attr (default 1, min 0). @see lib/common/const.h:DEFAULT_NODEPENWIDTH */
|
|
75
|
+
penwidth?: number;
|
|
76
|
+
/**
|
|
77
|
+
* polygon->option.shape — the size_gen discriminant. STAR and CYLINDER have a
|
|
78
|
+
* poly_desc (star_gen/cylinder_gen) whose size_gen inflates the label box;
|
|
79
|
+
* every other value (0, or an SBOL shape) takes the generic ellipse fit.
|
|
80
|
+
* @see lib/common/shapes.c:2075 (`else if (polygon->vertices) bb = size_gen(bb)`)
|
|
81
|
+
*/
|
|
82
|
+
optionShape?: number;
|
|
83
|
+
/**
|
|
84
|
+
* nojustify attr. When true, the label's justification borders shrink to the
|
|
85
|
+
* label's own width instead of the node width, so a `\l`/`\r` line aligns to
|
|
86
|
+
* the centered label block rather than the node edge.
|
|
87
|
+
* @see lib/common/shapes.c:2132-2145
|
|
88
|
+
*/
|
|
89
|
+
nojustify?: boolean;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Node geometry in points: left/right half-widths and height. */
|
|
93
|
+
export interface NodeSize {
|
|
94
|
+
lw: number;
|
|
95
|
+
rw: number;
|
|
96
|
+
ht: number;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** polySize result: node size plus unflipped outline extents (points). */
|
|
100
|
+
export interface PolySizeResult extends NodeSize {
|
|
101
|
+
/** Outline width in points (bb + penwidth growth). @see ND_outline_width */
|
|
102
|
+
outlineW: number;
|
|
103
|
+
/** Outline height in points. @see ND_outline_height */
|
|
104
|
+
outlineH: number;
|
|
105
|
+
/**
|
|
106
|
+
* Pre-periphery-growth bb (points) — the box C scales the BASE
|
|
107
|
+
* (innermost) vertex ring to before stepping rings outward. Needed
|
|
108
|
+
* by ring generation for multi-periphery general polygons.
|
|
109
|
+
* @see lib/common/shapes.c:poly_init (bb before the outp loop)
|
|
110
|
+
*/
|
|
111
|
+
baseW: number;
|
|
112
|
+
baseH: number;
|
|
113
|
+
/**
|
|
114
|
+
* Justification borders — the space available for the label within the node
|
|
115
|
+
* box. `emit_label` reads this (not `dimen`) for `labelloc` top/bottom and
|
|
116
|
+
* left/right justification; without it a `labelloc=b` label centers.
|
|
117
|
+
* @see lib/common/shapes.c:poly_init (2132-2152)
|
|
118
|
+
*/
|
|
119
|
+
space: Point;
|
|
120
|
+
/** Resolved vertical alignment ('t'/'c'/'b') from labelloc. */
|
|
121
|
+
valign: string;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** @see lib/common/utils.c:mapbool */
|
|
125
|
+
function mapbool(s: string | undefined): boolean {
|
|
126
|
+
if (!s || s.toLowerCase() === 'false' || s.toLowerCase() === 'no') return false;
|
|
127
|
+
if (s.toLowerCase() === 'true' || s.toLowerCase() === 'yes') return true;
|
|
128
|
+
const n = parseInt(s, 10);
|
|
129
|
+
return !Number.isNaN(n) && n !== 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Initial width/height in points from the width/height attrs,
|
|
134
|
+
* the regular flag, and the plain special case.
|
|
135
|
+
* @see lib/common/shapes.c:poly_init (width/height setup)
|
|
136
|
+
*/
|
|
137
|
+
export function initialSizePts(p: PolySizeParams): { width: number; height: number } {
|
|
138
|
+
if (p.isPlain) return { width: 0, height: 0 };
|
|
139
|
+
if (p.regular) {
|
|
140
|
+
if (p.userSizePts > 0) return { width: p.userSizePts, height: p.userSizePts };
|
|
141
|
+
const m = INCH2PS * Math.min(p.widthIn, p.heightIn);
|
|
142
|
+
return { width: m, height: m };
|
|
143
|
+
}
|
|
144
|
+
return { width: INCH2PS * p.widthIn, height: INCH2PS * p.heightIn };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Parse the margin attr like sscanf("%lf,%lf"); null means PAD instead. */
|
|
148
|
+
function parseMargin(margin: string | undefined): Point | null {
|
|
149
|
+
if (margin === undefined) return null;
|
|
150
|
+
const mx = parseFloat(margin);
|
|
151
|
+
if (Number.isNaN(mx)) return null;
|
|
152
|
+
const comma = margin.indexOf(',');
|
|
153
|
+
const my = comma >= 0 ? parseFloat(margin.slice(comma + 1)) : NaN;
|
|
154
|
+
const x = Math.max(mx, 0);
|
|
155
|
+
return { x, y: Number.isNaN(my) ? x : Math.max(my, 0) };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Add minimal whitespace around the label: the margin attr in inches,
|
|
160
|
+
* or PAD (16x8 points) when unset. Plain shapes get no padding.
|
|
161
|
+
* @see lib/common/shapes.c:poly_init (margin/PAD block)
|
|
162
|
+
*/
|
|
163
|
+
export function padLabelDimen(
|
|
164
|
+
labelDimen: Point,
|
|
165
|
+
margin: string | undefined,
|
|
166
|
+
isPlain: boolean,
|
|
167
|
+
): Point {
|
|
168
|
+
const d = { x: labelDimen.x, y: labelDimen.y };
|
|
169
|
+
if ((d.x > 0 || d.y > 0) && !isPlain) {
|
|
170
|
+
const m = parseMargin(margin);
|
|
171
|
+
if (m) {
|
|
172
|
+
d.x += 2 * INCH2PS * m.x;
|
|
173
|
+
d.y += 2 * INCH2PS * m.y;
|
|
174
|
+
} else {
|
|
175
|
+
d.x += XPAD;
|
|
176
|
+
d.y += YPAD;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return d;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Round up to a multiple of the quantum (inches). @see lib/common/shapes.c:quant */
|
|
183
|
+
function quantize(d: Point, quantumIn: number): Point {
|
|
184
|
+
if (quantumIn <= 0) return d;
|
|
185
|
+
const q = INCH2PS * quantumIn;
|
|
186
|
+
return { x: Math.ceil(d.x / q) * q, y: Math.ceil(d.y / q) * q };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Expand bb so the smallest ellipse (or inscribing polygon) centered on
|
|
191
|
+
* the origin contains the label box. Boxes are exempt (exact fit).
|
|
192
|
+
* @see lib/common/shapes.c:poly_init (ellipse/polygon expansion)
|
|
193
|
+
*/
|
|
194
|
+
/**
|
|
195
|
+
* star_gen size_gen: inflate the label box to the node size a 5-pointed star
|
|
196
|
+
* needs so the label fits inside its inner pentagon. Much larger than the
|
|
197
|
+
* generic ellipse fit — omitting it leaves the node box too small, so the
|
|
198
|
+
* star's outer points render outside the node bbox and the graph viewport.
|
|
199
|
+
* @see lib/common/shapes.c:4039 star_size (alpha = PI/10)
|
|
200
|
+
*/
|
|
201
|
+
export function starSize(bb: Point): Point {
|
|
202
|
+
const alpha = Math.PI / 10;
|
|
203
|
+
const alpha2 = 2 * alpha, alpha3 = 3 * alpha, alpha4 = 2 * alpha2;
|
|
204
|
+
const rx = bb.x / (2 * Math.cos(alpha));
|
|
205
|
+
const ry = bb.y / (Math.sin(alpha) + Math.sin(alpha3));
|
|
206
|
+
const r0 = Math.max(rx, ry);
|
|
207
|
+
const r = (r0 * Math.sin(alpha4) * Math.cos(alpha2)) / (Math.cos(alpha) * Math.cos(alpha4));
|
|
208
|
+
return { x: 2 * r * Math.cos(alpha), y: r * (1 + Math.sin(alpha3)) };
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* cylinder_gen size_gen: scale height by 1.375 (x unchanged), leaving room for
|
|
213
|
+
* the top/bottom ellipse arcs. @see lib/common/shapes.c:4153 cylinder_size
|
|
214
|
+
*/
|
|
215
|
+
export function cylinderSize(bb: Point): Point {
|
|
216
|
+
return { x: bb.x, y: bb.y * 1.375 };
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export function expandForShape(
|
|
220
|
+
bb: Point,
|
|
221
|
+
sides: number,
|
|
222
|
+
heightPts: number,
|
|
223
|
+
valign: string,
|
|
224
|
+
): Point {
|
|
225
|
+
const b = { x: bb.x, y: bb.y };
|
|
226
|
+
const temp = b.y * SQRT2;
|
|
227
|
+
if (heightPts > temp && valign === 'c') {
|
|
228
|
+
// spare height + vertically centered label: pad x only
|
|
229
|
+
b.x *= Math.sqrt(1 / (1 - (b.y / heightPts) ** 2));
|
|
230
|
+
} else {
|
|
231
|
+
b.x *= SQRT2;
|
|
232
|
+
b.y = temp;
|
|
233
|
+
}
|
|
234
|
+
if (sides > 2) {
|
|
235
|
+
const c = Math.cos(Math.PI / sides);
|
|
236
|
+
b.x /= c;
|
|
237
|
+
b.y /= c;
|
|
238
|
+
}
|
|
239
|
+
return b;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Grow an ellipse bb by GAP per extra periphery; the outline adds half
|
|
244
|
+
* the penwidth on each side. @see shapes.c:poly_init (sides < 3)
|
|
245
|
+
*/
|
|
246
|
+
function ellipsePeripheryBB(
|
|
247
|
+
bb: Point,
|
|
248
|
+
peripheries: number,
|
|
249
|
+
penwidth: number,
|
|
250
|
+
hasOutline: boolean,
|
|
251
|
+
): { bb: Point; outline: Point } {
|
|
252
|
+
let b = bb;
|
|
253
|
+
if (peripheries > 1) {
|
|
254
|
+
const grow = 2 * GAP * (peripheries - 1);
|
|
255
|
+
b = { x: bb.x + grow, y: bb.y + grow };
|
|
256
|
+
}
|
|
257
|
+
const outline = hasOutline ? { x: b.x + penwidth, y: b.y + penwidth } : b;
|
|
258
|
+
return { bb: b, outline };
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** Effective polygon geometry for the unit vertex loop. */
|
|
262
|
+
export interface PolyGeom {
|
|
263
|
+
sides: number;
|
|
264
|
+
orientation: number;
|
|
265
|
+
distortion: number;
|
|
266
|
+
skew: number;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** Distort, skew, orient, and scale one unit vertex. @see shapes.c:poly_init */
|
|
270
|
+
function transformUnitVertex(R: Point, g: PolyGeom, c: { skewdist: number; gdistortion: number; gskew: number }, bb: Point): Point {
|
|
271
|
+
const D = { x: R.x * (c.skewdist + R.y * c.gdistortion) + R.y * c.gskew, y: R.y };
|
|
272
|
+
const alpha = (g.orientation * Math.PI) / 180 + Math.atan2(D.y, D.x);
|
|
273
|
+
// C uses libm hypot(D.x, D.y). V8's Math.hypot is a scaled algorithm that
|
|
274
|
+
// returns a result 1 ULP off from libm hypot for in-range polygon vertices
|
|
275
|
+
// (e.g. hypot(0.35355…, 0.35355…): libm = 0.5 exactly, Math.hypot = 0.5+1ULP),
|
|
276
|
+
// whereas the naive sqrt(x²+y²) reproduces libm's value bit-for-bit here.
|
|
277
|
+
// That ULP inflated ND_ht by ~7e-15, and pack.c genPoly's GRID(=ceil) rounded
|
|
278
|
+
// an exactly-on-boundary component height up a cell, reordering polyomino
|
|
279
|
+
// packing and swapping two circo/osage components. @see shapes.c:poly_init
|
|
280
|
+
const r = Math.sqrt(D.x * D.x + D.y * D.y);
|
|
281
|
+
return { x: r * Math.cos(alpha) * bb.x, y: r * Math.sin(alpha) * bb.y };
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Unit-polygon vertex loop: distort, skew, orient, then scale by bb.
|
|
286
|
+
* Returns the scaled vertices and the bounding half-extents.
|
|
287
|
+
* @see lib/common/shapes.c:poly_init (polygon vertex loop)
|
|
288
|
+
*/
|
|
289
|
+
export function polygonVertices(
|
|
290
|
+
bb: Point,
|
|
291
|
+
g: PolyGeom,
|
|
292
|
+
isBox: boolean,
|
|
293
|
+
): { verts: Point[]; xmax: number; ymax: number } {
|
|
294
|
+
const sectorangle = (2 * Math.PI) / g.sides;
|
|
295
|
+
const sidelength = Math.sin(sectorangle / 2);
|
|
296
|
+
const c = {
|
|
297
|
+
skewdist: Math.hypot(Math.abs(g.distortion) + Math.abs(g.skew), 1),
|
|
298
|
+
gdistortion: (g.distortion * SQRT2) / Math.cos(sectorangle / 2),
|
|
299
|
+
gskew: g.skew / 2,
|
|
300
|
+
};
|
|
301
|
+
let angle = (sectorangle - Math.PI) / 2;
|
|
302
|
+
const R = { x: 0.5 * Math.cos(angle), y: 0.5 * Math.sin(angle) };
|
|
303
|
+
angle += (Math.PI - sectorangle) / 2;
|
|
304
|
+
const verts: Point[] = [];
|
|
305
|
+
for (let i = 0; i < g.sides; i++) {
|
|
306
|
+
angle += sectorangle;
|
|
307
|
+
// C's `R.x += sidelength*cosx` is contracted by clang (-ffp-contract) into a
|
|
308
|
+
// single-rounding fmadd; two-rounding JS `+=` drifts 1 ULP, and for distorted
|
|
309
|
+
// 5-gons (house/invhouse) that inflated the accumulated vertex y from 0.5 to
|
|
310
|
+
// 0.5+1ULP -> ND_ht 36+7e-15 -> a swapped pack cell. @see shapes.c:poly_init
|
|
311
|
+
R.x = fma(sidelength, Math.cos(angle), R.x);
|
|
312
|
+
R.y = fma(sidelength, Math.sin(angle), R.y);
|
|
313
|
+
const P = transformUnitVertex(R, g, c, bb);
|
|
314
|
+
verts.push(P);
|
|
315
|
+
if (isBox) {
|
|
316
|
+
// enforce exact symmetry of box
|
|
317
|
+
verts.push({ x: -P.x, y: P.y }, { x: -P.x, y: -P.y }, { x: P.x, y: -P.y });
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return { verts, ...vertexExtents(verts) };
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/** Max |x| / |y| half-extents over a vertex list. */
|
|
325
|
+
function vertexExtents(verts: Point[]): { xmax: number; ymax: number } {
|
|
326
|
+
let xmax = 0;
|
|
327
|
+
let ymax = 0;
|
|
328
|
+
for (const v of verts) {
|
|
329
|
+
xmax = Math.max(Math.abs(v.x), xmax);
|
|
330
|
+
ymax = Math.max(Math.abs(v.y), ymax);
|
|
331
|
+
}
|
|
332
|
+
return { xmax, ymax };
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/** Mutable bisector-walk state shared across vertices. */
|
|
336
|
+
interface BisectorState {
|
|
337
|
+
beta: number;
|
|
338
|
+
Qprev: Point;
|
|
339
|
+
sinx: number;
|
|
340
|
+
cosx: number;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/** Initial bisector state from the last distinct vertex pair. @see shapes.c:poly_init */
|
|
344
|
+
function initBisector(verts: Point[], sides: number): BisectorState {
|
|
345
|
+
const R = verts[0]!;
|
|
346
|
+
let Q = R;
|
|
347
|
+
for (let j = 1; j < sides; j++) {
|
|
348
|
+
Q = verts[(sides - j) % sides]!;
|
|
349
|
+
if (Q.x !== R.x || Q.y !== R.y) break;
|
|
350
|
+
}
|
|
351
|
+
return { beta: Math.atan2(R.y - Q.y, R.x - Q.x), Qprev: Q, sinx: 0, cosx: 0 };
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Per-vertex GAP offset along the angle bisector; degenerate sides
|
|
356
|
+
* keep the previous offset (cylinder-style shapes).
|
|
357
|
+
* @see lib/common/shapes.c:poly_init (peripheries bisector loop)
|
|
358
|
+
*/
|
|
359
|
+
function bisectorOffset(verts: Point[], sides: number, i: number, st: BisectorState): void {
|
|
360
|
+
const V = verts[i]!;
|
|
361
|
+
if (V.x !== st.Qprev.x || V.y !== st.Qprev.y) {
|
|
362
|
+
let R = V;
|
|
363
|
+
for (let j = 1; j < sides; j++) {
|
|
364
|
+
R = verts[(i + j) % sides]!;
|
|
365
|
+
if (R.x !== V.x || R.y !== V.y) break;
|
|
366
|
+
}
|
|
367
|
+
const alpha = st.beta;
|
|
368
|
+
st.beta = Math.atan2(R.y - V.y, R.x - V.x);
|
|
369
|
+
const gamma = (alpha + Math.PI - st.beta) / 2;
|
|
370
|
+
const temp = GAP / Math.sin(gamma);
|
|
371
|
+
st.sinx = Math.sin(alpha - gamma) * temp;
|
|
372
|
+
st.cosx = Math.cos(alpha - gamma) * temp;
|
|
373
|
+
}
|
|
374
|
+
st.Qprev = V;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Per-vertex bisector GAP offsets for a polygon ring — the (cosx, sinx)
|
|
379
|
+
* pairs C uses to place each successive periphery.
|
|
380
|
+
* @see lib/common/shapes.c:poly_init (peripheries bisector loop)
|
|
381
|
+
*/
|
|
382
|
+
export function polygonRingOffsets(verts: Point[], sides: number): Point[] {
|
|
383
|
+
const st = initBisector(verts, sides);
|
|
384
|
+
const out: Point[] = [];
|
|
385
|
+
for (let i = 0; i < sides; i++) {
|
|
386
|
+
bisectorOffset(verts, sides, i, st);
|
|
387
|
+
out.push({ x: st.cosx, y: st.sinx });
|
|
388
|
+
}
|
|
389
|
+
return out;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* The outline ring: each vertex offset along its angle bisector by
|
|
394
|
+
* half the penwidth (the stroked boundary poly_inside clips against).
|
|
395
|
+
* @see lib/common/shapes.c:poly_init (outline ring at outp)
|
|
396
|
+
*/
|
|
397
|
+
export function polygonOutlineRing(verts: Point[], sides: number, penwidth: number): Point[] {
|
|
398
|
+
const st = initBisector(verts, sides);
|
|
399
|
+
const out: Point[] = [];
|
|
400
|
+
const k = penwidth / 2 / GAP;
|
|
401
|
+
for (let i = 0; i < sides; i++) {
|
|
402
|
+
bisectorOffset(verts, sides, i, st);
|
|
403
|
+
const V = verts[i]!;
|
|
404
|
+
out.push({ x: V.x + k * st.cosx, y: V.y + k * st.sinx });
|
|
405
|
+
}
|
|
406
|
+
return out;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Grow a polygon bb to cover the outermost periphery ring, and the
|
|
411
|
+
* outline bb to cover the half-penwidth ring beyond it.
|
|
412
|
+
* @see lib/common/shapes.c:poly_init (peripheries bisector loop)
|
|
413
|
+
*/
|
|
414
|
+
export function polygonPeripheryBB(
|
|
415
|
+
verts: Point[],
|
|
416
|
+
sides: number,
|
|
417
|
+
p: { peripheries: number; penwidth: number; hasOutline: boolean },
|
|
418
|
+
bb: Point,
|
|
419
|
+
): { bb: Point; outline: Point } {
|
|
420
|
+
const st = initBisector(verts, sides);
|
|
421
|
+
const out = { x: bb.x, y: bb.y };
|
|
422
|
+
const outl = { x: bb.x, y: bb.y };
|
|
423
|
+
for (let i = 0; i < sides; i++) {
|
|
424
|
+
bisectorOffset(verts, sides, i, st);
|
|
425
|
+
const off = p.peripheries - 1;
|
|
426
|
+
const V = verts[i]!;
|
|
427
|
+
const P = { x: V.x + off * st.cosx, y: V.y + off * st.sinx };
|
|
428
|
+
out.x = Math.max(2 * Math.abs(P.x), out.x);
|
|
429
|
+
out.y = Math.max(2 * Math.abs(P.y), out.y);
|
|
430
|
+
// outline ring: half the penwidth outside the outermost periphery
|
|
431
|
+
const k = p.hasOutline ? p.penwidth / 2 / GAP : 0;
|
|
432
|
+
const Q = { x: P.x + k * st.cosx, y: P.y + k * st.sinx };
|
|
433
|
+
outl.x = Math.max(2 * Math.abs(Q.x), outl.x);
|
|
434
|
+
outl.y = Math.max(2 * Math.abs(Q.y), outl.y);
|
|
435
|
+
}
|
|
436
|
+
return { bb: out, outline: { x: Math.max(outl.x, out.x), y: Math.max(outl.y, out.y) } };
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Polygon (sides >= 3) bounding box: apply minimum dimensions against
|
|
441
|
+
* the vertex extents, then grow for peripheries and the outline.
|
|
442
|
+
* @see lib/common/shapes.c:poly_init (apply minimum dimensions)
|
|
443
|
+
*/
|
|
444
|
+
/**
|
|
445
|
+
* Vertex generation + extent for a STAR, mirroring C's star_vertices poly_desc
|
|
446
|
+
* (shapes.c:4066): it scales the box to the star's aspect ratio and reports the
|
|
447
|
+
* scaled box as the extent (`*bb = sz`), so xmax/ymax = sz/2. The vertices come
|
|
448
|
+
* from the port's starVertices (same r as C, computed from the aspect-adjusted
|
|
449
|
+
* width). @see lib/common/shapes.c:star_vertices
|
|
450
|
+
*/
|
|
451
|
+
function starVertexGen(bb: Point): { verts: Point[]; xmax: number; ymax: number } {
|
|
452
|
+
const alpha = Math.PI / 10, alpha3 = 3 * alpha;
|
|
453
|
+
const aspect = (1 + Math.sin(alpha3)) / (2 * Math.cos(alpha));
|
|
454
|
+
let sz = bb;
|
|
455
|
+
if (bb.x > 0) {
|
|
456
|
+
const a = bb.y / bb.x;
|
|
457
|
+
if (a > aspect) sz = { x: bb.y / aspect, y: bb.y };
|
|
458
|
+
else if (a < aspect) sz = { x: bb.x, y: bb.x * aspect };
|
|
459
|
+
}
|
|
460
|
+
return { verts: starVertices(bb.x, bb.y), xmax: sz.x / 2, ymax: sz.y / 2 };
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
function polygonBB(
|
|
464
|
+
bb: Point,
|
|
465
|
+
minSize: Point,
|
|
466
|
+
p: PolySizeParams & { penwidth: number; hasOutline: boolean },
|
|
467
|
+
sides: number,
|
|
468
|
+
isBox: boolean,
|
|
469
|
+
): { bb: Point; outline: Point; base: Point } {
|
|
470
|
+
const geom: PolyGeom = {
|
|
471
|
+
sides, orientation: p.orientation, distortion: p.distortion, skew: p.skew,
|
|
472
|
+
};
|
|
473
|
+
// C poly_init (shapes.c:2214-2222) dispatches vertex generation to the
|
|
474
|
+
// shape's poly_desc: a STAR's vertex_gen mutates bb to the aspect-adjusted
|
|
475
|
+
// extent (its outer points reach beyond the label box) and reports
|
|
476
|
+
// xmax=bb.x/2, ymax=bb.y/2 from that. The generic n-gon path here would use a
|
|
477
|
+
// regular 10-gon inscribed in the label box, undercounting the star's real
|
|
478
|
+
// extent — leaving ND_ht at the un-inflated minimum and shrinking every rank
|
|
479
|
+
// gap (1718: rank pitch 72 vs native 87.35). @see shapes.c:star_vertices
|
|
480
|
+
const { verts, xmax, ymax } = p.optionShape === STAR
|
|
481
|
+
? starVertexGen(bb)
|
|
482
|
+
: polygonVertices(bb, geom, isBox);
|
|
483
|
+
const xmax2 = 2 * xmax;
|
|
484
|
+
const ymax2 = 2 * ymax;
|
|
485
|
+
const nbb = { x: Math.max(minSize.x, xmax2), y: Math.max(minSize.y, ymax2) };
|
|
486
|
+
// C gates the bisector walk on outp > 1; peripheries < 1 never enters it.
|
|
487
|
+
const walk = p.peripheries > 1 || (p.peripheries >= 1 && p.penwidth > 0);
|
|
488
|
+
if (!walk) return { bb: nbb, outline: nbb, base: nbb };
|
|
489
|
+
const scalex = nbb.x / xmax2;
|
|
490
|
+
const scaley = nbb.y / ymax2;
|
|
491
|
+
for (const v of verts) {
|
|
492
|
+
v.x *= scalex;
|
|
493
|
+
v.y *= scaley;
|
|
494
|
+
}
|
|
495
|
+
return { ...polygonPeripheryBB(verts, isBox ? 4 : sides, p, nbb), base: nbb };
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/** Convert final node width/height (points) to lw/rw/ht. @see lib/common/utils.c:gv_nodesize */
|
|
499
|
+
export function gvNodesize(widthPts: number, heightPts: number, flip: boolean): NodeSize {
|
|
500
|
+
if (flip) return { lw: heightPts / 2, rw: heightPts / 2, ht: widthPts };
|
|
501
|
+
return { lw: widthPts / 2, rw: widthPts / 2, ht: heightPts };
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/** Result of the fixedsize/regular constraint block. */
|
|
505
|
+
interface SizeConstraints {
|
|
506
|
+
bb: Point;
|
|
507
|
+
width: number;
|
|
508
|
+
height: number;
|
|
509
|
+
fixedshape: boolean;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/** Apply fixedsize/regular minimums. @see shapes.c:poly_init ("increase node size") */
|
|
513
|
+
function applySizeConstraints(
|
|
514
|
+
p: PolySizeParams,
|
|
515
|
+
bb0: Point,
|
|
516
|
+
width0: number,
|
|
517
|
+
height0: number,
|
|
518
|
+
): SizeConstraints {
|
|
519
|
+
let c: SizeConstraints;
|
|
520
|
+
if (p.fixedsize === 'shape') {
|
|
521
|
+
c = { bb: { x: width0, y: height0 }, width: width0, height: height0, fixedshape: true };
|
|
522
|
+
} else if (mapbool(p.fixedsize)) {
|
|
523
|
+
c = { bb: { x: width0, y: height0 }, width: width0, height: height0, fixedshape: false };
|
|
524
|
+
} else {
|
|
525
|
+
const bb = { x: Math.max(width0, bb0.x), y: Math.max(height0, bb0.y) };
|
|
526
|
+
c = { bb, width: bb.x, height: bb.y, fixedshape: false };
|
|
527
|
+
}
|
|
528
|
+
if (p.regular) {
|
|
529
|
+
const m = Math.max(c.bb.x, c.bb.y);
|
|
530
|
+
c = { bb: { x: m, y: m }, width: m, height: m, fixedshape: c.fixedshape };
|
|
531
|
+
}
|
|
532
|
+
return c;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Compute node dimensions from label size and attrs — the sizing
|
|
537
|
+
* portion of poly_init followed by gv_nodesize.
|
|
538
|
+
* @see lib/common/shapes.c:poly_init
|
|
539
|
+
*/
|
|
540
|
+
export function polySize(p: PolySizeParams): PolySizeResult {
|
|
541
|
+
const init = initialSizePts(p);
|
|
542
|
+
const dimen = quantize(padLabelDimen(p.labelDimen, p.margin, p.isPlain), p.quantumIn);
|
|
543
|
+
const { sides, isBox } = effectiveShape(p);
|
|
544
|
+
let bb: Point = { x: dimen.x, y: dimen.y };
|
|
545
|
+
// C shapes.c:2073-2085 dispatch: box → exact fit; poly_desc shapes (star,
|
|
546
|
+
// cylinder) → their size_gen; everything else → generic ellipse fit.
|
|
547
|
+
if (isBox) {
|
|
548
|
+
// exact fit — no expansion
|
|
549
|
+
} else if (p.optionShape === STAR) {
|
|
550
|
+
bb = starSize(bb);
|
|
551
|
+
} else if (p.optionShape === CYLINDER) {
|
|
552
|
+
bb = cylinderSize(bb);
|
|
553
|
+
} else {
|
|
554
|
+
bb = expandForShape(bb, sides, init.height, labelValign(p));
|
|
555
|
+
}
|
|
556
|
+
const minBb = bb; // C min_bb (shapes.c:2106): after shape fit, before size constraints
|
|
557
|
+
|
|
558
|
+
const c = applySizeConstraints(p, bb, init.width, init.height);
|
|
559
|
+
const penwidth = p.penwidth ?? 1; // DEFAULT_NODEPENWIDTH
|
|
560
|
+
// C: outp exceeds peripheries when an outline ring is added.
|
|
561
|
+
const hasOutline = penwidth > 0 || p.peripheries < 1;
|
|
562
|
+
// C shapes.c:2288-2296: polygonBB folds the distortion-inflated vertex
|
|
563
|
+
// extent back into nbb (the base periphery ring) and that IS the base box;
|
|
564
|
+
// the ellipse path (sides < 3) has no such ring, so base stays c.bb (the
|
|
565
|
+
// pre-inflation box) there — it is unconsumed for ellipses.
|
|
566
|
+
const grown = sides < 3
|
|
567
|
+
? { ...ellipsePeripheryBB(c.bb, p.peripheries, penwidth, hasOutline), base: c.bb }
|
|
568
|
+
: polygonBB(c.bb, { x: c.width, y: c.height }, { ...p, penwidth, hasOutline }, sides, isBox);
|
|
569
|
+
const result = assembleResult(p, dimen, grown, c.fixedshape);
|
|
570
|
+
return { ...result, ...labelSpace(p, dimen, c.bb, minBb, isBox, c.fixedshape) };
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Compute the label's justification borders (ND_label->space) and vertical
|
|
575
|
+
* alignment — the "space available for label" block of poly_init. `bb` is the
|
|
576
|
+
* final (constrained) box; `minBb` is the pre-constraint shape-fit box.
|
|
577
|
+
* Image sizing is unported, so `imagesize` is 0 (which matches C for the
|
|
578
|
+
* missing-image repro cases); revisit when image loading lands.
|
|
579
|
+
* @see lib/common/shapes.c:poly_init (2132-2152)
|
|
580
|
+
*/
|
|
581
|
+
function labelSpace(
|
|
582
|
+
p: PolySizeParams, dimen: Point, bb: Point, minBb: Point, isBox: boolean, fixedshape: boolean,
|
|
583
|
+
): { space: Point; valign: string } {
|
|
584
|
+
const spacex = dimen.x - p.labelDimen.x; // shapes.c:2011 (padding added to the label)
|
|
585
|
+
// shapes.c:2132-2145: justified borders span the node (bb.x); nojustify shrinks
|
|
586
|
+
// them to the label's own width (dimen.x) so a \l/\r line aligns to the block.
|
|
587
|
+
let spaceX: number;
|
|
588
|
+
if (p.nojustify) {
|
|
589
|
+
spaceX = dimen.x - spacex;
|
|
590
|
+
} else if (isBox) {
|
|
591
|
+
spaceX = Math.max(dimen.x, bb.x) - spacex;
|
|
592
|
+
} else if (dimen.y < bb.y) {
|
|
593
|
+
spaceX = Math.max(dimen.x, bb.x * Math.sqrt(1 - (dimen.y * dimen.y) / (bb.y * bb.y))) - spacex;
|
|
594
|
+
} else {
|
|
595
|
+
spaceX = dimen.x - spacex;
|
|
596
|
+
}
|
|
597
|
+
// space.y: !fixedshape → dimen.y + (bb.y - min_bb.y); fixedshape keeps dimen.y.
|
|
598
|
+
const spaceY = fixedshape ? dimen.y : dimen.y + (bb.y - minBb.y);
|
|
599
|
+
return { space: { x: spaceX, y: spaceY }, valign: labelValign(p) };
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/** Effective sides (distortion/skew turn ellipses into 120-gons) and box test. */
|
|
603
|
+
function effectiveShape(p: PolySizeParams): { sides: number; isBox: boolean } {
|
|
604
|
+
let sides = p.sides;
|
|
605
|
+
if (sides <= 2 && (p.distortion !== 0 || p.skew !== 0)) sides = 120;
|
|
606
|
+
const isBox =
|
|
607
|
+
sides === 4 && Math.abs(p.orientation % 90) < 0.5 &&
|
|
608
|
+
p.distortion === 0 && p.skew === 0;
|
|
609
|
+
return { sides, isBox };
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/** labelloc -> vertical alignment character. @see shapes.c:poly_init */
|
|
613
|
+
function labelValign(p: PolySizeParams): string {
|
|
614
|
+
const ll = p.labelloc?.[0];
|
|
615
|
+
return ll === 't' || ll === 'b' ? ll : 'c';
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
/** Final width/height selection (fixedshape covers the label) + gv_nodesize. */
|
|
619
|
+
function assembleResult(
|
|
620
|
+
p: PolySizeParams,
|
|
621
|
+
dimen: Point,
|
|
622
|
+
grown: { bb: Point; outline: Point; base: Point },
|
|
623
|
+
fixedshape: boolean,
|
|
624
|
+
): Omit<PolySizeResult, 'space' | 'valign'> {
|
|
625
|
+
if (fixedshape) {
|
|
626
|
+
return {
|
|
627
|
+
...gvNodesize(Math.max(dimen.x, grown.bb.x), Math.max(dimen.y, grown.bb.y), p.flip),
|
|
628
|
+
outlineW: Math.max(dimen.x, grown.outline.x),
|
|
629
|
+
outlineH: Math.max(dimen.y, grown.outline.y),
|
|
630
|
+
baseW: grown.base.x, baseH: grown.base.y,
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
return {
|
|
634
|
+
...gvNodesize(grown.bb.x, grown.bb.y, p.flip),
|
|
635
|
+
outlineW: grown.outline.x,
|
|
636
|
+
outlineH: grown.outline.y,
|
|
637
|
+
baseW: grown.base.x, baseH: grown.base.y,
|
|
638
|
+
};
|
|
639
|
+
}
|