@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,192 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Label construction for plain-text and HTML node labels.
|
|
5
|
+
* Unified entry point mirrors C labels.c:make_label which branches
|
|
6
|
+
* internally on is_html.
|
|
7
|
+
*
|
|
8
|
+
* @see lib/common/labels.c:make_label
|
|
9
|
+
* @see lib/common/htmltable.c:make_html_label
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { TextlabelT } from './types.js';
|
|
13
|
+
import type { TextMeasurer, TextSize } from './textmeasure.js';
|
|
14
|
+
import type { TextSpan } from './emit-types.js';
|
|
15
|
+
import { makeHtmlLabel } from './htmltable-pos.js';
|
|
16
|
+
import { substObj, type GraphObj } from './subst.js';
|
|
17
|
+
import { htmlEntityUTF8 } from './html-entities.js';
|
|
18
|
+
|
|
19
|
+
export const DEFAULT_FONTSIZE = 14.0;
|
|
20
|
+
export const DEFAULT_FONTNAME = 'Times,serif';
|
|
21
|
+
export const DEFAULT_COLOR = 'black';
|
|
22
|
+
|
|
23
|
+
// htmlEntityUTF8 moved to html-entities.ts (a leaf module) so the HTML lexer
|
|
24
|
+
// can decode entities in text runs without an import cycle. Re-exported here
|
|
25
|
+
// for existing callers. @see lib/common/utils.c:htmlEntityUTF8 / htmlEntity
|
|
26
|
+
export { htmlEntityUTF8 };
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The object's pen color: `pencolor` attr, else `color` attr, else undefined
|
|
30
|
+
* (no default). An HTML table/cell border with no explicit COLOR inherits it.
|
|
31
|
+
* @see lib/common/htmltable.c:getPenColor
|
|
32
|
+
*/
|
|
33
|
+
function getPenColor(obj?: GraphObj): string | undefined {
|
|
34
|
+
if (obj === undefined) return undefined;
|
|
35
|
+
const pc = obj.attrs.get('pencolor');
|
|
36
|
+
if (pc !== undefined && pc !== '') return pc;
|
|
37
|
+
const c = obj.attrs.get('color');
|
|
38
|
+
if (c !== undefined && c !== '') return c;
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Font attributes bundle — mirrors C fontinfo_t fields used in label init. */
|
|
43
|
+
export interface FontInfo {
|
|
44
|
+
fontname: string;
|
|
45
|
+
fontsize: number;
|
|
46
|
+
fontcolor: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function buildSpan(
|
|
50
|
+
text: string,
|
|
51
|
+
font: FontInfo,
|
|
52
|
+
measured: TextSize,
|
|
53
|
+
): TextSpan {
|
|
54
|
+
return {
|
|
55
|
+
str: text,
|
|
56
|
+
fontName: font.fontname,
|
|
57
|
+
fontSize: font.fontsize,
|
|
58
|
+
fontColor: font.fontcolor,
|
|
59
|
+
fontFlags: 0,
|
|
60
|
+
yoffset_layout: 0,
|
|
61
|
+
yoffset_centerline: measured.yoffsetCenterline ?? 0.05 * font.fontsize,
|
|
62
|
+
size: { x: measured.w, y: measured.h },
|
|
63
|
+
just: 'n',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** One line split out of a label, with its justification terminator. */
|
|
68
|
+
interface LabelLine { text: string; just: 'n' | 'l' | 'r'; }
|
|
69
|
+
|
|
70
|
+
const isJust = (c: string | undefined): c is 'n' | 'l' | 'r' =>
|
|
71
|
+
c === 'n' || c === 'l' || c === 'r';
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Split label text into lines at \n / \l / \r escapes and literal
|
|
75
|
+
* newlines; the terminator becomes the line's justification. Any other
|
|
76
|
+
* escape drops its backslash and keeps the following character
|
|
77
|
+
* (including \\ → \) — the lexer delivers escapes verbatim and this
|
|
78
|
+
* is where C interprets them.
|
|
79
|
+
* @see lib/common/labels.c:make_simple_label
|
|
80
|
+
*/
|
|
81
|
+
export function splitLabelLines(text: string): LabelLine[] {
|
|
82
|
+
const lines: LabelLine[] = [];
|
|
83
|
+
let cur = '';
|
|
84
|
+
for (let i = 0; i < text.length; i++) {
|
|
85
|
+
const c = text[i]!;
|
|
86
|
+
if (c === '\\' && i + 1 < text.length) {
|
|
87
|
+
const e = text[++i]!;
|
|
88
|
+
if (isJust(e)) {
|
|
89
|
+
lines.push({ text: cur, just: e });
|
|
90
|
+
cur = '';
|
|
91
|
+
} else {
|
|
92
|
+
cur += e; // C default: agxbputc(&line, *p) — backslash dropped
|
|
93
|
+
}
|
|
94
|
+
} else if (c === '\n') {
|
|
95
|
+
lines.push({ text: cur, just: 'n' });
|
|
96
|
+
cur = '';
|
|
97
|
+
} else {
|
|
98
|
+
cur += c;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (cur.length > 0) lines.push({ text: cur, just: 'n' });
|
|
102
|
+
return lines;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** C LINESPACING — empty lines take (int)(fontsize * 1.2). @see const.h:LINESPACING */
|
|
106
|
+
const LINESPACING = 1.2;
|
|
107
|
+
|
|
108
|
+
/** Build one measured span for a label line. @see labels.c:storeline */
|
|
109
|
+
function buildLineSpan(line: LabelLine, font: FontInfo, measurer: TextMeasurer): TextSpan {
|
|
110
|
+
const measured = line.text.length > 0
|
|
111
|
+
? measurer.measure(line.text, font.fontname, font.fontsize)
|
|
112
|
+
: { w: 0, h: Math.trunc(font.fontsize * LINESPACING) };
|
|
113
|
+
const span = buildSpan(line.text, font, measured);
|
|
114
|
+
span.just = line.just;
|
|
115
|
+
return span;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** @see lib/common/labels.c:make_simple_label / storeline */
|
|
119
|
+
function makePlainLabel(
|
|
120
|
+
text: string,
|
|
121
|
+
font: FontInfo,
|
|
122
|
+
measurer: TextMeasurer,
|
|
123
|
+
): TextlabelT {
|
|
124
|
+
const spans = splitLabelLines(text).map((ln) => buildLineSpan(ln, font, measurer));
|
|
125
|
+
// dimen.x = max line width; dimen.y accumulates heights; space = dimen.
|
|
126
|
+
const w = spans.reduce((a, sp) => Math.max(a, sp.size.x), 0);
|
|
127
|
+
const h = spans.reduce((a, sp) => a + sp.size.y, 0);
|
|
128
|
+
return {
|
|
129
|
+
text, ...font, charset: 0,
|
|
130
|
+
dimen: { x: w, y: h },
|
|
131
|
+
space: { x: w, y: h },
|
|
132
|
+
pos: { x: 0, y: 0 },
|
|
133
|
+
u: { kind: 'txt', span: spans, nspans: spans.length },
|
|
134
|
+
valign: 'c'.charCodeAt(0),
|
|
135
|
+
set: false, html: false,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Create a TextlabelT for a plain-text label string.
|
|
141
|
+
* @see lib/common/labels.c:make_label
|
|
142
|
+
*/
|
|
143
|
+
export function makeLabel(
|
|
144
|
+
text: string,
|
|
145
|
+
fontname: string,
|
|
146
|
+
fontsize: number,
|
|
147
|
+
fontcolor: string,
|
|
148
|
+
measurer: TextMeasurer,
|
|
149
|
+
): TextlabelT {
|
|
150
|
+
return makePlainLabel(text, { fontname, fontsize, fontcolor }, measurer);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Unified label entry mirroring C labels.c:make_label(obj, str, kind).
|
|
155
|
+
*
|
|
156
|
+
* C branches on `kind & LT_HTML` (labels.c:145,147). isHtml is the port
|
|
157
|
+
* equivalent (aghtmlstr / HTML_STRING_MARK).
|
|
158
|
+
*
|
|
159
|
+
* Empty-string case (labels.c:119): "disregard HTML intent for empty
|
|
160
|
+
* string labels" — C: is_html &= !streq(str, "");
|
|
161
|
+
*
|
|
162
|
+
* Parse-failure fallback (htmltable.c:1884-1907): "Parse of label failed;
|
|
163
|
+
* revert to simple text label" — C sets lp->html=false and substitutes the
|
|
164
|
+
* object name. The port has no object context so it keeps the markup text,
|
|
165
|
+
* matching makeHtmlLabel's existing fallback contract.
|
|
166
|
+
*
|
|
167
|
+
* @see lib/common/labels.c:make_label
|
|
168
|
+
* @see lib/common/htmltable.c:make_html_label
|
|
169
|
+
*/
|
|
170
|
+
export function makeAnyLabel(
|
|
171
|
+
content: string,
|
|
172
|
+
isHtml: boolean,
|
|
173
|
+
font: FontInfo,
|
|
174
|
+
measurer: TextMeasurer,
|
|
175
|
+
obj?: GraphObj,
|
|
176
|
+
): TextlabelT {
|
|
177
|
+
// labels.c:119 — is_html &= !streq(str, "");
|
|
178
|
+
if (isHtml && content !== '') {
|
|
179
|
+
// labels.c:145-161; htmltable.c:1856 — on parse failure falls back to
|
|
180
|
+
// plain text (html=false) per htmltable.c:1892. Thread the owning object's
|
|
181
|
+
// pen color so an HTML table/cell border with no explicit COLOR inherits
|
|
182
|
+
// it (htmltable.c:1911 getPenColor). @see getPenColor
|
|
183
|
+
return makeHtmlLabel(content, { ...font, pencolor: getPenColor(obj) }, measurer);
|
|
184
|
+
}
|
|
185
|
+
// Plain path: resolve \G \N \E \T \H \L against the owning object
|
|
186
|
+
// BEFORE measuring, as C does (labels.c:169, escBackslash=0; the
|
|
187
|
+
// formatting escapes \n \l \r are handled separately), then decode HTML
|
|
188
|
+
// entities (labels.c:174 htmlEntityUTF8, UTF-8 default branch).
|
|
189
|
+
const subst = obj !== undefined ? substObj(content, obj, false) : content;
|
|
190
|
+
const text = htmlEntityUTF8(subst);
|
|
191
|
+
return makePlainLabel(text, font, measurer);
|
|
192
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared multicolor color-list parser (AD4).
|
|
5
|
+
*
|
|
6
|
+
* Ports the colorseg_t / colorsegs_t types and the parseSegs function
|
|
7
|
+
* from lib/common/emit.c. Pure data-in / data-out — no rendering, no
|
|
8
|
+
* ObjState mutation. Consumed by findStopColor (style-resolve.ts),
|
|
9
|
+
* stripedBox / wedgedEllipse (S1), and multicolor edges (M1).
|
|
10
|
+
*
|
|
11
|
+
* @see lib/common/emit.c:411 colorseg_t
|
|
12
|
+
* @see lib/common/emit.c:422 colorsegs_t
|
|
13
|
+
* @see lib/common/emit.c:470 parseSegs
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Types
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* One color segment in a colon-separated color list.
|
|
22
|
+
* @see lib/common/emit.c:411 colorseg_t
|
|
23
|
+
*/
|
|
24
|
+
export interface ColorSeg {
|
|
25
|
+
/** Color name/spec; null when the token was empty. */
|
|
26
|
+
color: string | null;
|
|
27
|
+
/** Fractional width of this segment in [0, 1]. */
|
|
28
|
+
t: number;
|
|
29
|
+
/**
|
|
30
|
+
* True when the segment carried an explicit positive fraction (`;f`).
|
|
31
|
+
* False when no semicolon was present or the fraction was 0.
|
|
32
|
+
* @see lib/common/emit.c:488-489
|
|
33
|
+
*/
|
|
34
|
+
hasFraction: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Constants
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
/** @see lib/common/emit.c:451 EPS */
|
|
42
|
+
const EPS = 1e-5;
|
|
43
|
+
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Helpers
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
/** True when |x| < EPS. @see lib/common/emit.c:452 AEQ0 */
|
|
49
|
+
function aeq0(x: number): boolean {
|
|
50
|
+
return x < EPS && x > -EPS;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Parse "color;fraction" or "color" into { color, v }.
|
|
55
|
+
* v === 0 → no semicolon (no explicit fraction).
|
|
56
|
+
* v > 0 → valid non-negative fraction.
|
|
57
|
+
* v === -1 → semicolon present but no valid non-negative float.
|
|
58
|
+
* @see lib/common/emit.c:429 getSegLen
|
|
59
|
+
*/
|
|
60
|
+
function getSegLen(token: string): { color: string; v: number } {
|
|
61
|
+
const semi = token.indexOf(';');
|
|
62
|
+
if (semi === -1) return { color: token, v: 0 };
|
|
63
|
+
const color = token.slice(0, semi);
|
|
64
|
+
const rest = token.slice(semi + 1);
|
|
65
|
+
if (rest.length === 0) return { color, v: -1 };
|
|
66
|
+
const parsed = parseFloat(rest);
|
|
67
|
+
return !isNaN(parsed) && parsed >= 0 ? { color, v: parsed } : { color, v: -1 };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Clamp one token against `left`, append to `segs`, return updated `left`.
|
|
72
|
+
* Returns null on a parse error (bad float after semicolon).
|
|
73
|
+
* @see lib/common/emit.c:476-506
|
|
74
|
+
*/
|
|
75
|
+
function appendSeg(
|
|
76
|
+
token: string,
|
|
77
|
+
left: number,
|
|
78
|
+
segs: ColorSeg[],
|
|
79
|
+
warnedExceeded: { v: boolean },
|
|
80
|
+
): { left: number; rval: 0 | 3 } | null {
|
|
81
|
+
const { color, v } = getSegLen(token);
|
|
82
|
+
if (v < 0) return null;
|
|
83
|
+
|
|
84
|
+
let t = v;
|
|
85
|
+
let rval: 0 | 3 = 0;
|
|
86
|
+
const del = t - left;
|
|
87
|
+
if (del > 0) {
|
|
88
|
+
if (!aeq0(del) && !warnedExceeded.v) {
|
|
89
|
+
warnedExceeded.v = true;
|
|
90
|
+
rval = 3;
|
|
91
|
+
}
|
|
92
|
+
t = left;
|
|
93
|
+
}
|
|
94
|
+
left -= t;
|
|
95
|
+
segs.push({ color: color.length > 0 ? color : null, t, hasFraction: t > 0 && v > 0 });
|
|
96
|
+
return { left, rval };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Distribute `left` weight among zero-t segments; if none, add to last.
|
|
101
|
+
* @see lib/common/emit.c:509-526
|
|
102
|
+
*/
|
|
103
|
+
function distributeLeft(segs: ColorSeg[], left: number): void {
|
|
104
|
+
if (left <= 0) return;
|
|
105
|
+
const zeroCount = segs.filter(s => s.t <= 0).length;
|
|
106
|
+
if (zeroCount > 0) {
|
|
107
|
+
const delta = left / zeroCount;
|
|
108
|
+
for (const s of segs) {
|
|
109
|
+
if (s.t <= 0) s.t = delta;
|
|
110
|
+
}
|
|
111
|
+
} else if (segs.length > 0) {
|
|
112
|
+
segs[segs.length - 1]!.t += left;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Drop trailing zero-t segments (mirrors C's LIST_DROP_BACK loop).
|
|
118
|
+
* @see lib/common/emit.c:528-532
|
|
119
|
+
*/
|
|
120
|
+
function trimTrailing(segs: ColorSeg[]): void {
|
|
121
|
+
while (segs.length > 0 && (segs[segs.length - 1]?.t ?? 0) <= 0) {
|
|
122
|
+
segs.pop();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Public API
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Parse `"c1;f1:c2;f2:…"` into segments.
|
|
132
|
+
*
|
|
133
|
+
* Fractions are optional and non-negative; their sum must not exceed 1.
|
|
134
|
+
* Segments without an explicit fraction share the remaining weight equally;
|
|
135
|
+
* if none exist the remainder is added to the last segment.
|
|
136
|
+
*
|
|
137
|
+
* Return codes (mirror C):
|
|
138
|
+
* 0 → ok; 1 → silent error; 2 → error with message; 3 → warning (sum > 1).
|
|
139
|
+
* On rv 1 or 2 the returned segs array is empty.
|
|
140
|
+
*
|
|
141
|
+
* @see lib/common/emit.c:470 parseSegs
|
|
142
|
+
*/
|
|
143
|
+
export function parseSegs(
|
|
144
|
+
colorlist: string,
|
|
145
|
+
): { segs: ColorSeg[]; error: 0 | 1 | 2 | 3 } {
|
|
146
|
+
const segs: ColorSeg[] = [];
|
|
147
|
+
let left = 1;
|
|
148
|
+
let rval: 0 | 3 = 0;
|
|
149
|
+
let badFloatCount = 0;
|
|
150
|
+
const warnedExceeded = { v: false };
|
|
151
|
+
|
|
152
|
+
for (const token of colorlist.split(':')) {
|
|
153
|
+
const result = appendSeg(token, left, segs, warnedExceeded);
|
|
154
|
+
if (result === null) {
|
|
155
|
+
const errCode: 1 | 2 = badFloatCount === 0 ? 2 : 1;
|
|
156
|
+
badFloatCount++;
|
|
157
|
+
return { segs: [], error: errCode };
|
|
158
|
+
}
|
|
159
|
+
if (result.rval === 3) rval = 3;
|
|
160
|
+
left = result.left;
|
|
161
|
+
if (aeq0(left)) { left = 0; break; }
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
distributeLeft(segs, left);
|
|
165
|
+
trimTrailing(segs);
|
|
166
|
+
return { segs, error: rval };
|
|
167
|
+
}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Common node geometry initialisation shared by all layout engines.
|
|
4
|
+
* Ports common_init_node / gv_nodesize from lib/common/utils.c: binds
|
|
5
|
+
* the shape, builds the label (text/html/record), and sizes the node
|
|
6
|
+
* from the label via the poly_init port.
|
|
7
|
+
*
|
|
8
|
+
* @see lib/common/utils.c:common_init_node
|
|
9
|
+
* @see lib/common/utils.c:gv_nodesize
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Graph } from '../model/graph.js';
|
|
13
|
+
import type { Node } from '../model/node.js';
|
|
14
|
+
import type { TextMeasurer } from './textmeasure.js';
|
|
15
|
+
import type { PolygonT, ShapeDesc, TextlabelT } from './types.js';
|
|
16
|
+
import { ShapeKind } from './types.js';
|
|
17
|
+
import { bindShape } from './shapes.js';
|
|
18
|
+
import { assignShapeInfo, buildNodeLabel, nodeAttr, readFontAttrs } from './poly-init.js';
|
|
19
|
+
import { makeAnyLabel } from './make-label.js';
|
|
20
|
+
import { isHtmlValue, htmlValueContent } from './html-string.js';
|
|
21
|
+
import { NODE_XLABEL } from '../layout/dot/rank.js';
|
|
22
|
+
import { recordInit, recordMakeLabel } from './record.js';
|
|
23
|
+
import {
|
|
24
|
+
GAP,
|
|
25
|
+
gvNodesize,
|
|
26
|
+
polySize,
|
|
27
|
+
type PolySizeParams,
|
|
28
|
+
type PolySizeResult,
|
|
29
|
+
} from './poly-sizing.js';
|
|
30
|
+
|
|
31
|
+
/** Default node half-width in points. C: DEFAULT_NODEWIDTH=0.75in/2 * 72 = 27 */
|
|
32
|
+
export const DEFAULT_NODE_LW = 27;
|
|
33
|
+
/** Default node full-height in points. C: DEFAULT_NODEHEIGHT=0.5in * 72 = 36 */
|
|
34
|
+
export const DEFAULT_NODE_HT = 36;
|
|
35
|
+
|
|
36
|
+
/** @see lib/common/const.h:DEFAULT_NODEWIDTH / MIN_NODEWIDTH */
|
|
37
|
+
const DEFAULT_NODEWIDTH = 0.75;
|
|
38
|
+
const MIN_NODEWIDTH = 0.01;
|
|
39
|
+
/** @see lib/common/const.h:DEFAULT_NODEHEIGHT / MIN_NODEHEIGHT */
|
|
40
|
+
const DEFAULT_NODEHEIGHT = 0.5;
|
|
41
|
+
const MIN_NODEHEIGHT = 0.02;
|
|
42
|
+
|
|
43
|
+
/** Points per inch. @see lib/common/geom.h:POINTS_PER_INCH */
|
|
44
|
+
const POINTS_PER_INCH = 72;
|
|
45
|
+
/** Default point size in inches (3.6pt). @see lib/common/shapes.c:42 DEF_POINT */
|
|
46
|
+
const DEF_POINT = 0.05;
|
|
47
|
+
/** Minimum point size in inches. @see lib/common/shapes.c:47 MIN_POINT */
|
|
48
|
+
const MIN_POINT = 0.0003;
|
|
49
|
+
/** Default / minimum node penwidth. @see lib/common/const.h DEFAULT_NODEPENWIDTH */
|
|
50
|
+
const DEFAULT_NODEPENWIDTH = 1;
|
|
51
|
+
const MIN_NODEPENWIDTH = 0;
|
|
52
|
+
|
|
53
|
+
/** Parse a double attr with default and minimum. @see lib/common/utils.c:late_double */
|
|
54
|
+
export function lateDouble(
|
|
55
|
+
s: string | undefined,
|
|
56
|
+
defaultValue: number,
|
|
57
|
+
minimum: number,
|
|
58
|
+
): number {
|
|
59
|
+
if (s === undefined || s === '') return defaultValue;
|
|
60
|
+
const rv = parseFloat(s);
|
|
61
|
+
if (Number.isNaN(rv)) return defaultValue;
|
|
62
|
+
return rv < minimum ? minimum : rv;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Parse an int attr with default and minimum. @see lib/common/utils.c:late_int */
|
|
66
|
+
export function lateInt(
|
|
67
|
+
s: string | undefined,
|
|
68
|
+
defaultValue: number,
|
|
69
|
+
minimum: number,
|
|
70
|
+
): number {
|
|
71
|
+
if (s === undefined || s === '') return defaultValue;
|
|
72
|
+
const rv = parseInt(s, 10);
|
|
73
|
+
if (Number.isNaN(rv)) return defaultValue;
|
|
74
|
+
return rv < minimum ? minimum : rv;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** @see lib/common/utils.c:mapbool */
|
|
78
|
+
function mapbool(s: string | undefined): boolean {
|
|
79
|
+
if (!s || s.toLowerCase() === 'false' || s.toLowerCase() === 'no') return false;
|
|
80
|
+
if (s.toLowerCase() === 'true' || s.toLowerCase() === 'yes') return true;
|
|
81
|
+
const n = parseInt(s, 10);
|
|
82
|
+
return !Number.isNaN(n) && n !== 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** The text measurer threaded through the GVC context, if any. */
|
|
86
|
+
export function layoutMeasurer(g: Graph): TextMeasurer | undefined {
|
|
87
|
+
return g.root.info.gvc?.textMeasurer;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Resolve sides/skew/distortion: builtin descriptors win; shape=polygon
|
|
92
|
+
* (sides == 0) reads the attrs. @see lib/common/shapes.c:poly_init
|
|
93
|
+
*/
|
|
94
|
+
function resolvePolyGeometry(
|
|
95
|
+
n: Node,
|
|
96
|
+
g: Graph,
|
|
97
|
+
poly: PolygonT,
|
|
98
|
+
): { sides: number; skew: number; distortion: number } {
|
|
99
|
+
if (poly.sides !== 0) {
|
|
100
|
+
return { sides: poly.sides, skew: poly.skew, distortion: poly.distortion };
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
skew: lateDouble(nodeAttr(n, g, 'skew'), 0.0, -100.0),
|
|
104
|
+
sides: lateInt(nodeAttr(n, g, 'sides'), 4, 0),
|
|
105
|
+
distortion: lateDouble(nodeAttr(n, g, 'distortion'), 0.0, -100.0),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** User size in points: max of set width/height attrs, 0 when unset. @see shapes.c:userSize */
|
|
110
|
+
function userSizePts(n: Node, g: Graph): number {
|
|
111
|
+
const uw = lateDouble(nodeAttr(n, g, 'width'), 0.0, MIN_NODEWIDTH);
|
|
112
|
+
const uh = lateDouble(nodeAttr(n, g, 'height'), 0.0, MIN_NODEHEIGHT);
|
|
113
|
+
return 72 * Math.max(uw, uh);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Size-related plain attrs read by poly_init. */
|
|
117
|
+
function sizeAttrs(
|
|
118
|
+
n: Node,
|
|
119
|
+
g: Graph,
|
|
120
|
+
): Pick<PolySizeParams, 'widthIn' | 'heightIn' | 'userSizePts' | 'margin' | 'fixedsize' | 'labelloc' | 'quantumIn'> {
|
|
121
|
+
return {
|
|
122
|
+
widthIn: lateDouble(nodeAttr(n, g, 'width'), DEFAULT_NODEWIDTH, MIN_NODEWIDTH),
|
|
123
|
+
heightIn: lateDouble(nodeAttr(n, g, 'height'), DEFAULT_NODEHEIGHT, MIN_NODEHEIGHT),
|
|
124
|
+
userSizePts: userSizePts(n, g),
|
|
125
|
+
margin: nodeAttr(n, g, 'margin'),
|
|
126
|
+
fixedsize: nodeAttr(n, g, 'fixedsize') ?? 'false',
|
|
127
|
+
labelloc: nodeAttr(n, g, 'labelloc'),
|
|
128
|
+
quantumIn: lateDouble(g.root.attrs.get('quantum'), 0.0, 0.0),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Resolve poly_init's sizing inputs from node attrs and the bound
|
|
134
|
+
* polygon descriptor.
|
|
135
|
+
* @see lib/common/shapes.c:poly_init (attribute resolution)
|
|
136
|
+
*/
|
|
137
|
+
export function polySizeParamsFromNode(
|
|
138
|
+
n: Node,
|
|
139
|
+
g: Graph,
|
|
140
|
+
shape: ShapeDesc & { polygon: PolygonT },
|
|
141
|
+
labelDimen: { x: number; y: number },
|
|
142
|
+
flip: boolean,
|
|
143
|
+
): PolySizeParams {
|
|
144
|
+
const poly = shape.polygon;
|
|
145
|
+
return {
|
|
146
|
+
labelDimen,
|
|
147
|
+
...resolvePolyGeometry(n, g, poly),
|
|
148
|
+
...sizeAttrs(n, g),
|
|
149
|
+
peripheries: lateInt(nodeAttr(n, g, 'peripheries'), poly.peripheries, 0),
|
|
150
|
+
orientation: poly.orientation + lateDouble(nodeAttr(n, g, 'orientation'), 0.0, -360.0),
|
|
151
|
+
// @see lib/common/shapes.c:poly_init — late_double(n, N_penwidth, 1.0, 0.0)
|
|
152
|
+
penwidth: lateDouble(nodeAttr(n, g, 'penwidth'), 1.0, 0.0),
|
|
153
|
+
regular: poly.regular || mapbool(nodeAttr(n, g, 'regular')),
|
|
154
|
+
isPlain: shape.name === 'plain',
|
|
155
|
+
optionShape: poly.option.shape, // size_gen discriminant (STAR/CYLINDER)
|
|
156
|
+
nojustify: mapbool(nodeAttr(n, g, 'nojustify')), // shapes.c:2133
|
|
157
|
+
flip,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Create ND_xlabel when the xlabel attr is non-empty and set NODE_XLABEL.
|
|
163
|
+
* @see lib/common/utils.c:443-447
|
|
164
|
+
* @see lib/common/utils.c:447 — GD_has_labels scoped to agraphof(n) root
|
|
165
|
+
*/
|
|
166
|
+
function initNodeXLabel(n: Node, g: Graph, measurer: TextMeasurer): void {
|
|
167
|
+
const str = nodeAttr(n, g, 'xlabel');
|
|
168
|
+
if (!str || str.length === 0) return;
|
|
169
|
+
const font = readFontAttrs(n, g);
|
|
170
|
+
const isHtml = isHtmlValue(str);
|
|
171
|
+
const content = isHtml ? htmlValueContent(str) : str;
|
|
172
|
+
// utils.c:444 — make_label(n, str, aghtmlstr(str), false, ...)
|
|
173
|
+
n.info.xlabel = makeAnyLabel(content, isHtml, font, measurer, n);
|
|
174
|
+
g.root.info.has_labels = (g.root.info.has_labels ?? 0) | NODE_XLABEL;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Point diameter in inches per point_init: w = min(width, height); if
|
|
179
|
+
* neither attr is user-set use DEF_POINT, else clamp positive widths to
|
|
180
|
+
* MIN_POINT. The (suppressed) label never drives the size.
|
|
181
|
+
* @see lib/common/shapes.c:point_init (width/height block)
|
|
182
|
+
*/
|
|
183
|
+
function pointWidthInches(n: Node, g: Graph): number {
|
|
184
|
+
const w = lateDouble(nodeAttr(n, g, 'width'), Number.MAX_VALUE, MIN_NODEWIDTH);
|
|
185
|
+
const h = lateDouble(nodeAttr(n, g, 'height'), Number.MAX_VALUE, MIN_NODEHEIGHT);
|
|
186
|
+
const m = Math.min(w, h);
|
|
187
|
+
if (m === Number.MAX_VALUE) return DEF_POINT; // neither width nor height set
|
|
188
|
+
return m > 0.0 ? Math.max(m, MIN_POINT) : m;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* point_init's size math: the dot diameter `sz0` grown by GAP per extra
|
|
193
|
+
* periphery, plus the outline ring at half the penwidth each side.
|
|
194
|
+
* @see lib/common/shapes.c:point_init (periphery/outline blocks)
|
|
195
|
+
*/
|
|
196
|
+
function pointSizeResult(
|
|
197
|
+
sz0: number, peripheries: number, penwidth: number,
|
|
198
|
+
): Omit<PolySizeResult, 'space' | 'valign'> {
|
|
199
|
+
const sz = peripheries > 1 ? sz0 + 2 * GAP * (peripheries - 1) : sz0;
|
|
200
|
+
const szOutline = peripheries >= 1 && penwidth > 0 ? sz + penwidth : sz;
|
|
201
|
+
return {
|
|
202
|
+
...gvNodesize(sz, sz, false),
|
|
203
|
+
outlineW: szOutline, outlineH: szOutline, baseW: sz0, baseH: sz0,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Size a `shape=point` node per point_init: a filled dot, DEF_POINT (or
|
|
209
|
+
* the min set width/height) wide, bypassing label-driven sizing. Reuses
|
|
210
|
+
* the ellipse vertex/periphery path (AD-5): the resolved sides=2 polygon
|
|
211
|
+
* renders via the existing `sides<=2` ellipse branch.
|
|
212
|
+
* @see lib/common/shapes.c:point_init
|
|
213
|
+
*/
|
|
214
|
+
function initPointSize(n: Node, g: Graph, shape: ShapeDesc & { polygon: PolygonT }): void {
|
|
215
|
+
const flip = g.root.info.flip === true;
|
|
216
|
+
const peripheries = lateInt(nodeAttr(n, g, 'peripheries'), shape.polygon.peripheries, 0);
|
|
217
|
+
const penwidth = lateDouble(nodeAttr(n, g, 'penwidth'), DEFAULT_NODEPENWIDTH, MIN_NODEPENWIDTH);
|
|
218
|
+
const sz0 = pointWidthInches(n, g) * POINTS_PER_INCH;
|
|
219
|
+
storeNodeSize(n, pointSizeResult(sz0, peripheries, penwidth), flip);
|
|
220
|
+
assignShapeInfo(n, { ...shape.polygon, peripheries, sides: 2, penwidth, vertices: null });
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Build the label and size the node from it, mirroring
|
|
225
|
+
* common_init_node + the shape initfn. Returns false when the shape
|
|
226
|
+
* has no polygon descriptor to size against.
|
|
227
|
+
* @see lib/common/utils.c:common_init_node
|
|
228
|
+
*/
|
|
229
|
+
function initNodeFromLabel(n: Node, g: Graph, measurer: TextMeasurer): boolean {
|
|
230
|
+
const shape = bindShape(nodeAttr(n, g, 'shape') ?? 'ellipse', nodeAttr(n, g, 'shapefile'));
|
|
231
|
+
n.info.shape = shape;
|
|
232
|
+
if (shape.kind === ShapeKind.SH_RECORD) {
|
|
233
|
+
// C runs the SAME three steps for every shape: make_label (with the
|
|
234
|
+
// is_record flag), then ND_xlabel, then the shape's initfn. SH_RECORD
|
|
235
|
+
// only selects make_label's is_record flag and initfn=record_init — it is
|
|
236
|
+
// NOT a reason to skip the xlabel (utils.c:441/443/453).
|
|
237
|
+
recordMakeLabel(n, g, measurer);
|
|
238
|
+
initNodeXLabel(n, g, measurer);
|
|
239
|
+
recordInit(n, g, measurer); // initfn: sets lw/rw/ht from the field tree
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
buildNodeLabel(n, g, measurer);
|
|
243
|
+
initNodeXLabel(n, g, measurer);
|
|
244
|
+
const poly = shape.polygon;
|
|
245
|
+
if (poly === null) return false;
|
|
246
|
+
if (shape.kind === ShapeKind.SH_POINT) {
|
|
247
|
+
// point_init overrides sizing independent of the label (AD-2).
|
|
248
|
+
initPointSize(n, g, { ...shape, polygon: poly });
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
const label = n.info.label as TextlabelT;
|
|
252
|
+
const flip = g.root.info.flip === true;
|
|
253
|
+
const params = polySizeParamsFromNode(n, g, { ...shape, polygon: poly }, label.dimen, flip);
|
|
254
|
+
// Unflipped size first so width/height (inches) match C's ND_width/ND_height.
|
|
255
|
+
const sz = polySize({ ...params, flip: false });
|
|
256
|
+
// Install the label's justification borders + valign, as C's poly_init mutates
|
|
257
|
+
// ND_label(n)->space / ->valign in place — consumed by emit_label/renderLabel
|
|
258
|
+
// for labelloc top/bottom and left/right justification.
|
|
259
|
+
label.space = sz.space;
|
|
260
|
+
label.valign = sz.valign.charCodeAt(0);
|
|
261
|
+
storeNodeSize(n, sz, flip);
|
|
262
|
+
// C poly_init installs the ATTR-RESOLVED polygon into ND_shape_info
|
|
263
|
+
// (sides/orientation/skew/distortion/peripheries/regular); edge
|
|
264
|
+
// clipping and rendering read it.
|
|
265
|
+
assignShapeInfo(n, effectivePolygon(poly, params));
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** The attr-resolved polygon poly_init stores. @see shapes.c:poly_init (poly->... assignments) */
|
|
270
|
+
function effectivePolygon(poly: PolygonT, p: PolySizeParams): PolygonT {
|
|
271
|
+
let sides = p.sides;
|
|
272
|
+
// ellipses with distortion/skew become 120-gons
|
|
273
|
+
if (sides <= 2 && (p.distortion !== 0 || p.skew !== 0)) sides = 120;
|
|
274
|
+
return {
|
|
275
|
+
...poly,
|
|
276
|
+
regular: p.regular,
|
|
277
|
+
peripheries: p.peripheries,
|
|
278
|
+
sides,
|
|
279
|
+
orientation: p.orientation,
|
|
280
|
+
distortion: p.distortion,
|
|
281
|
+
skew: p.skew,
|
|
282
|
+
penwidth: p.penwidth ?? 1,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Write polySize results onto the node (gv_nodesize flip applied last). */
|
|
287
|
+
function storeNodeSize(
|
|
288
|
+
n: Node, unflipped: Omit<PolySizeResult, 'space' | 'valign'>, flip: boolean,
|
|
289
|
+
): void {
|
|
290
|
+
const widthPts = unflipped.lw + unflipped.rw;
|
|
291
|
+
n.info.width = widthPts / 72;
|
|
292
|
+
n.info.height = unflipped.ht / 72;
|
|
293
|
+
n.info.outline_width = unflipped.outlineW / 72;
|
|
294
|
+
n.info.outline_height = unflipped.outlineH / 72;
|
|
295
|
+
n.info.base_width = unflipped.baseW / 72;
|
|
296
|
+
n.info.base_height = unflipped.baseH / 72;
|
|
297
|
+
// C gv_nodesize derives lw/rw/ht from INCH2PS(ND_width/ND_height), i.e. it
|
|
298
|
+
// round-trips the points size through the PS2INCH inch value it just stored
|
|
299
|
+
// (shapes.c:2372 ND_width=PS2INCH(bb.x); utils.c:1543 w=INCH2PS(ND_width)).
|
|
300
|
+
// Passing the raw poly points here skips that round-trip, so ND_xsize
|
|
301
|
+
// (lw+rw) would differ from INCH2PS(ND_width) by 1 ULP — which in osage
|
|
302
|
+
// desyncs the packing-box centre from addNodeObj's coord-sz/2 and flips a
|
|
303
|
+
// floor() in objplpmks. Round-trip to match C exactly.
|
|
304
|
+
const size = gvNodesize(
|
|
305
|
+
n.info.width * POINTS_PER_INCH, n.info.height * POINTS_PER_INCH, flip,
|
|
306
|
+
);
|
|
307
|
+
n.info.lw = size.lw;
|
|
308
|
+
n.info.rw = size.rw;
|
|
309
|
+
n.info.ht = size.ht;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/** Pre-T1 fallback sizing from width/height attrs only (no measurer). */
|
|
313
|
+
function initNodeDefaults(n: Node, g: Graph): void {
|
|
314
|
+
const widthIn = lateDouble(nodeAttr(n, g, 'width'), DEFAULT_NODEWIDTH, MIN_NODEWIDTH);
|
|
315
|
+
const heightIn = lateDouble(nodeAttr(n, g, 'height'), DEFAULT_NODEHEIGHT, MIN_NODEHEIGHT);
|
|
316
|
+
const flip = g.root.info.flip === true;
|
|
317
|
+
const w = flip ? heightIn : widthIn;
|
|
318
|
+
const h = flip ? widthIn : heightIn;
|
|
319
|
+
if (!n.info.lw) n.info.lw = Math.max((w * 72) / 2, DEFAULT_NODE_LW);
|
|
320
|
+
if (!n.info.rw) n.info.rw = Math.max((w * 72) / 2, DEFAULT_NODE_LW);
|
|
321
|
+
if (!n.info.ht) n.info.ht = Math.max(h * 72, DEFAULT_NODE_HT);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Initialise per-node geometry: shape-aware, label-driven sizing when a
|
|
326
|
+
* text measurer is available; width/height attr defaults otherwise.
|
|
327
|
+
* @see lib/common/utils.c:common_init_node
|
|
328
|
+
* @see lib/common/utils.c:gv_nodesize
|
|
329
|
+
*/
|
|
330
|
+
export function commonInitNode(n: Node, g: Graph): void {
|
|
331
|
+
const measurer = layoutMeasurer(g);
|
|
332
|
+
if (measurer !== undefined && initNodeFromLabel(n, g, measurer)) return;
|
|
333
|
+
initNodeDefaults(n, g);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/** Call commonInitNode for every node in the graph. */
|
|
337
|
+
export function commonInitNodeEdge(g: Graph): void {
|
|
338
|
+
for (const n of g.nodes.values()) commonInitNode(n, g);
|
|
339
|
+
}
|