@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,203 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
//
|
|
3
|
+
// Drawing-scale (viewport fit) for the `size=` graph attribute. Ports the parse
|
|
4
|
+
// (getdoubles2ptf) and the zoom factor Z (init_job_viewport) so SVG output is
|
|
5
|
+
// fitted to the requested size, exactly as native `dot` does. The zoom is
|
|
6
|
+
// carried by the SVG group transform, never by the coordinates (decisions D4).
|
|
7
|
+
//
|
|
8
|
+
// Also ports the `pad=` graph-attribute parse (init_gvc's attr read +
|
|
9
|
+
// init_job_pad's fallback), threaded into the fit computation exactly as C's
|
|
10
|
+
// init_job_viewport does (job->bb = graph bb expanded by job->pad on every
|
|
11
|
+
// side before the size= fit is computed).
|
|
12
|
+
//
|
|
13
|
+
// Also ports the `margin=` graph-attribute parse (init_gvc's attr read +
|
|
14
|
+
// init_job_margin's fallback). Unlike pad, margin does NOT feed the size=
|
|
15
|
+
// fit; it only affects job.width/job.height and the page group translate
|
|
16
|
+
// (device.ts render() / svg-graph.ts emitSvgTag+svgBeginPage), applied AFTER
|
|
17
|
+
// the size= zoom Z (matching C's init_job_margin -> ... -> init_job_pagination
|
|
18
|
+
// call order, emit.c:4290-4294).
|
|
19
|
+
//
|
|
20
|
+
// @see lib/common/input.c:476 getdoubles2ptf
|
|
21
|
+
// @see lib/common/emit.c:3356 init_job_viewport
|
|
22
|
+
// @see lib/common/emit.c:3230-3251 init_gvc (pad attr read)
|
|
23
|
+
// @see lib/common/emit.c:3290-3304 init_job_pad
|
|
24
|
+
// @see lib/common/emit.c:3229-3239 init_gvc (margin attr read)
|
|
25
|
+
// @see lib/common/emit.c:3309-3331 init_job_margin
|
|
26
|
+
|
|
27
|
+
import type { Box, Point } from '../model/geom.js';
|
|
28
|
+
import { POINTS_PER_INCH } from '../model/geom.js';
|
|
29
|
+
import { SVG_PAD, SVG_MARGIN } from '../render/svg-helpers.js';
|
|
30
|
+
import type { Graph } from '../model/graph.js';
|
|
31
|
+
import { cround } from '../common/arith.js';
|
|
32
|
+
|
|
33
|
+
/** Parsed `size=` drawing size in points, plus the *filled* flag. */
|
|
34
|
+
export interface DrawingSize {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
filled: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** A C-`sscanf("%lf")`-style float token (sign, digits, optional exponent). */
|
|
41
|
+
const FLOAT = '[-+]?[0-9.]+(?:[eE][-+]?[0-9]+)?';
|
|
42
|
+
/** sscanf("%lf,%lf%c"): two floats (whitespace-tolerant) then the next char. */
|
|
43
|
+
const SIZE_XY_RE = new RegExp(`^\\s*(${FLOAT})\\s*,\\s*(${FLOAT})(.?)`);
|
|
44
|
+
/** sscanf("%lf%c"): a lone float (square box) then the next char. */
|
|
45
|
+
const SIZE_X_RE = new RegExp(`^\\s*(${FLOAT})(.?)`);
|
|
46
|
+
/** sscanf("%lf,%lf") without the trailing-char capture used by `pad=`. */
|
|
47
|
+
const PAD_XY_RE = new RegExp(`^\\s*(${FLOAT})\\s*,\\s*(${FLOAT})`);
|
|
48
|
+
/** sscanf("%lf") without the trailing-char capture used by `pad=`. */
|
|
49
|
+
const PAD_X_RE = new RegExp(`^\\s*(${FLOAT})`);
|
|
50
|
+
|
|
51
|
+
/** Inches→points exactly as C's POINTS macro: ROUND(in * 72). @see geom.h:62 */
|
|
52
|
+
function toPoints(inches: number): number {
|
|
53
|
+
return cround(inches * POINTS_PER_INCH);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Port of getdoubles2ptf(g, "size", …) for the `size=` attribute: parse
|
|
58
|
+
* `"x,y"` (or a lone `"x"` meaning square), convert inches→points, and treat a
|
|
59
|
+
* trailing `!` as the *filled* flag. Returns null when `size` is absent or
|
|
60
|
+
* non-positive (Z stays 1 — D5).
|
|
61
|
+
* @see lib/common/input.c:476 getdoubles2ptf
|
|
62
|
+
*/
|
|
63
|
+
export function parseDrawingSize(raw: string | undefined): DrawingSize | null {
|
|
64
|
+
if (raw === undefined) return null;
|
|
65
|
+
const xy = SIZE_XY_RE.exec(raw);
|
|
66
|
+
if (xy) {
|
|
67
|
+
const xf = Number(xy[1]);
|
|
68
|
+
const yf = Number(xy[2]);
|
|
69
|
+
if (xf > 0 && yf > 0) return { x: toPoints(xf), y: toPoints(yf), filled: xy[3] === '!' };
|
|
70
|
+
}
|
|
71
|
+
const x = SIZE_X_RE.exec(raw);
|
|
72
|
+
if (x) {
|
|
73
|
+
const xf = Number(x[1]);
|
|
74
|
+
if (xf > 0) return { x: toPoints(xf), y: toPoints(xf), filled: x[2] === '!' };
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Port of the `pad=` graph-attribute parse: init_gvc reads it via
|
|
81
|
+
* `sscanf(p, "%lf,%lf", &xf, &yf)` (2 values matched → both axes
|
|
82
|
+
* independently; 1 value → y = x; 0 matched — attr absent or unparsable —
|
|
83
|
+
* leaves `graph_sets_pad` false) and init_job_pad falls back to the SVG
|
|
84
|
+
* plugin's `default_pad` (this port's only renderer) when unset, which is
|
|
85
|
+
* numerically identical to `DEFAULT_GRAPH_PAD` (4pt) — so the two C fallback
|
|
86
|
+
* branches collapse to the same constant here (`SVG_PAD`).
|
|
87
|
+
*
|
|
88
|
+
* Unlike `size=`, pad values are NOT rounded (`xf * POINTS_PER_INCH`
|
|
89
|
+
* directly — no `POINTS()` macro) and are not required to be positive.
|
|
90
|
+
*
|
|
91
|
+
* @see lib/common/emit.c:3241-3251 init_gvc (pad attr read)
|
|
92
|
+
* @see lib/common/emit.c:3290-3304 init_job_pad (fallback)
|
|
93
|
+
*/
|
|
94
|
+
export function parseGraphPad(raw: string | undefined): Point {
|
|
95
|
+
if (raw !== undefined) {
|
|
96
|
+
const xy = PAD_XY_RE.exec(raw);
|
|
97
|
+
if (xy) {
|
|
98
|
+
return { x: Number(xy[1]) * POINTS_PER_INCH, y: Number(xy[2]) * POINTS_PER_INCH };
|
|
99
|
+
}
|
|
100
|
+
const x = PAD_X_RE.exec(raw);
|
|
101
|
+
if (x) {
|
|
102
|
+
const v = Number(x[1]) * POINTS_PER_INCH;
|
|
103
|
+
return { x: v, y: v };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { x: SVG_PAD, y: SVG_PAD };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Port of the `margin=` graph-attribute parse: init_gvc reads it via the same
|
|
111
|
+
* `sscanf(p, "%lf,%lf", &xf, &yf)` shape as `pad=` (2 values matched → both
|
|
112
|
+
* axes independently; 1 value → y = x; 0 matched leaves `graph_sets_margin`
|
|
113
|
+
* false) and init_job_margin falls back to the SVG plugin's
|
|
114
|
+
* `device_features_svg.default_margin` ({0,0}) when unset — the
|
|
115
|
+
* `GVRENDER_PLUGIN` branch of init_job_margin's fallback switch (the
|
|
116
|
+
* PCL/MIF/etc. print-margin and generic embed-margin branches never apply to
|
|
117
|
+
* this port's only renderer).
|
|
118
|
+
*
|
|
119
|
+
* This is a distinct attribute/mechanism from the already-ported per-node and
|
|
120
|
+
* per-cluster `margin=` (shape internal label margin) — do not conflate.
|
|
121
|
+
* Unlike `size=`, margin values are NOT rounded (`xf * POINTS_PER_INCH`
|
|
122
|
+
* directly) and are not required to be positive, matching `pad=`.
|
|
123
|
+
*
|
|
124
|
+
* @see lib/common/emit.c:3229-3239 init_gvc (margin attr read)
|
|
125
|
+
* @see lib/common/emit.c:3309-3331 init_job_margin (fallback)
|
|
126
|
+
*/
|
|
127
|
+
export function parseGraphMargin(raw: string | undefined): Point {
|
|
128
|
+
if (raw !== undefined) {
|
|
129
|
+
const xy = PAD_XY_RE.exec(raw);
|
|
130
|
+
if (xy) {
|
|
131
|
+
return { x: Number(xy[1]) * POINTS_PER_INCH, y: Number(xy[2]) * POINTS_PER_INCH };
|
|
132
|
+
}
|
|
133
|
+
const x = PAD_X_RE.exec(raw);
|
|
134
|
+
if (x) {
|
|
135
|
+
const v = Number(x[1]) * POINTS_PER_INCH;
|
|
136
|
+
return { x: v, y: v };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { x: SVG_MARGIN, y: SVG_MARGIN };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Port of `mapbool` for the `landscape=` branch only: falsy spellings →
|
|
144
|
+
* false, truthy spellings → true, else `atoi(s) != 0`. Kept local (not imported
|
|
145
|
+
* from layout/dot) to avoid pulling the layout engine into this leaf module.
|
|
146
|
+
* @see lib/common/utils.c:mapbool
|
|
147
|
+
*/
|
|
148
|
+
function landscapeMapbool(s: string): boolean {
|
|
149
|
+
const v = s.toLowerCase();
|
|
150
|
+
if (v === '' || v === 'false' || v === 'no') return false;
|
|
151
|
+
if (v === 'true' || v === 'yes') return true;
|
|
152
|
+
return Number.parseInt(s, 10) !== 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Port of the landscape detection in `input.c`: `rotate=90`, or
|
|
157
|
+
* `orientation` starting with `l`/`L`, or a truthy `landscape`. Each branch is
|
|
158
|
+
* mutually exclusive in the same precedence as C (rotate wins over orientation
|
|
159
|
+
* wins over landscape). Returns false when no rotation attribute is present.
|
|
160
|
+
* This flag is **emit-only** — it drives `job.rotation`, never layout (ADR-1).
|
|
161
|
+
* @see lib/common/input.c:699-704
|
|
162
|
+
*/
|
|
163
|
+
export function parseLandscape(g: Graph): boolean {
|
|
164
|
+
const rotate = g.attrs.get('rotate');
|
|
165
|
+
if (rotate !== undefined) return Number.parseInt(rotate, 10) === 90;
|
|
166
|
+
const orientation = g.attrs.get('orientation');
|
|
167
|
+
if (orientation !== undefined) {
|
|
168
|
+
return orientation[0] === 'l' || orientation[0] === 'L';
|
|
169
|
+
}
|
|
170
|
+
const landscape = g.attrs.get('landscape');
|
|
171
|
+
if (landscape !== undefined) return landscapeMapbool(landscape);
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Whether the drawing needs scaling to fit `size`: too big in either axis, or
|
|
177
|
+
* (when *filled*) too small in both. @see lib/common/emit.c:3380-3382
|
|
178
|
+
*/
|
|
179
|
+
function drawingNeedsFit(size: DrawingSize, szx: number, szy: number): boolean {
|
|
180
|
+
const tooBig = size.x < szx || size.y < szy;
|
|
181
|
+
const fillsUp = size.filled && size.x > szx && size.y > szy;
|
|
182
|
+
return tooBig || fillsUp;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Port of init_job_viewport's zoom factor Z (emit.c:3375-3384). When the user
|
|
187
|
+
* gave a `size=`, fit the drawing (size `sz` = bb plus pad, in points) into it.
|
|
188
|
+
* Z stays 1.0 otherwise, leaving every non-`size` byte unchanged (D5). SVG
|
|
189
|
+
* carries Z via the group transform, not the coordinates (D4). `pad` is the
|
|
190
|
+
* resolved `job.pad` (parseGraphPad), matching C's `job->bb = bb ± job->pad`
|
|
191
|
+
* before `sz = job->bb.UR - job->bb.LL` (emit.c:3363-3368).
|
|
192
|
+
* @see lib/common/emit.c:3356 init_job_viewport
|
|
193
|
+
*/
|
|
194
|
+
export function initJobViewportZoom(bb: Box, size: DrawingSize | null, pad: Point): number {
|
|
195
|
+
if (size === null || size.x <= 0.001 || size.y <= 0.001) return 1.0;
|
|
196
|
+
// sz = bb extent including the pad the SVG emit adds on every side.
|
|
197
|
+
let szx = bb.ur.x - bb.ll.x + 2 * pad.x;
|
|
198
|
+
let szy = bb.ur.y - bb.ll.y + 2 * pad.y;
|
|
199
|
+
if (szx <= 0.001) szx = size.x;
|
|
200
|
+
if (szy <= 0.001) szy = size.y;
|
|
201
|
+
if (drawingNeedsFit(size, szx, szy)) return Math.min(size.x / szx, size.y / szy);
|
|
202
|
+
return 1.0;
|
|
203
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Public entry point for the graphviz-ts library.
|
|
5
|
+
*
|
|
6
|
+
* Wires together the parser, layout engines, SVG renderer, and GVC
|
|
7
|
+
* orchestration layer into a single renderSvg function.
|
|
8
|
+
*
|
|
9
|
+
* @see lib/gvc/gvc.h
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { parse } from './parser/index.js';
|
|
13
|
+
import { RenderError } from './errors.js';
|
|
14
|
+
import type { GvError, RenderResult } from './errors.js';
|
|
15
|
+
import type { EngineName } from './gvc/context.js';
|
|
16
|
+
import { render as deviceRender } from './gvc/device.js';
|
|
17
|
+
import { createDefaultContext } from './gvc/default-context.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Duck-type a thrown value as a {@link GvError}: an object carrying a string
|
|
21
|
+
* `type` and a string `code`. Covers `ParseError`, `HtmlParseError`, and
|
|
22
|
+
* `RenderError` without per-subclass `instanceof`.
|
|
23
|
+
*/
|
|
24
|
+
function isGvErrorLike(err: unknown): err is GvError {
|
|
25
|
+
return (
|
|
26
|
+
typeof err === 'object' &&
|
|
27
|
+
err !== null &&
|
|
28
|
+
typeof (err as { type?: unknown }).type === 'string' &&
|
|
29
|
+
typeof (err as { code?: unknown }).code === 'string'
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* v8 ignore start -- defensive normalizers for non-Error / genuinely-unknown
|
|
34
|
+
throws. Unreachable via the public API (renderSvg normalizes every throw to
|
|
35
|
+
GvError-like; parse only throws ParseError) but mandated by ADR-3 and the
|
|
36
|
+
render wrap. */
|
|
37
|
+
function messageOf(err: unknown): string {
|
|
38
|
+
return err instanceof Error ? err.message : String(err);
|
|
39
|
+
}
|
|
40
|
+
function renderErrorFromUnknown(err: unknown): RenderError {
|
|
41
|
+
return new RenderError(messageOf(err), 'GENERIC_ERROR');
|
|
42
|
+
}
|
|
43
|
+
/* v8 ignore stop */
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Normalize any thrown value to a plain, JSON-serializable {@link GvError}
|
|
47
|
+
* (no stack). Structured throws are copied; unknown throws → `GENERIC_ERROR`.
|
|
48
|
+
*/
|
|
49
|
+
function classifyError(err: unknown): GvError {
|
|
50
|
+
/* v8 ignore next -- the unknown-throw fallback is unreachable via the public
|
|
51
|
+
API (see helpers above); ADR-3 still mandates it. */
|
|
52
|
+
const gv: GvError = isGvErrorLike(err) ? err : renderErrorFromUnknown(err);
|
|
53
|
+
const out: GvError = {
|
|
54
|
+
type: gv.type, code: gv.code, message: gv.message, friendlyMessage: gv.friendlyMessage,
|
|
55
|
+
};
|
|
56
|
+
if (gv.location !== undefined) out.location = gv.location;
|
|
57
|
+
if (gv.expected !== undefined) out.expected = gv.expected;
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Render a DOT-language string to SVG using the specified layout engine.
|
|
63
|
+
*
|
|
64
|
+
* Always throws a value implementing {@link GvError}: parse failures throw
|
|
65
|
+
* `ParseError`; layout/render failures surface as `RenderError`
|
|
66
|
+
* (`RENDER_ERROR`).
|
|
67
|
+
*
|
|
68
|
+
* @remarks
|
|
69
|
+
* Security: when `dotSource` is untrusted, treat the returned SVG as
|
|
70
|
+
* attacker-controlled markup. Attribute values are XML-escaped (no element or
|
|
71
|
+
* attribute breakout), but URL schemes and resource origins in `href`/`URL`/
|
|
72
|
+
* `image`/`stylesheet` are passed through unfiltered, matching native Graphviz.
|
|
73
|
+
* Embedding pages should apply a Content-Security-Policy (or sanitize the
|
|
74
|
+
* markup) — see the "Security" section of the README.
|
|
75
|
+
*
|
|
76
|
+
* @param dotSource - DOT-language graph source
|
|
77
|
+
* @param engine - layout engine name ({@link EngineName}): a built-in
|
|
78
|
+
* ('dot', 'neato', 'fdp', 'sfdp', 'circo', 'twopi',
|
|
79
|
+
* 'osage', 'patchwork') or any custom-registered name
|
|
80
|
+
* @returns SVG string
|
|
81
|
+
* @throws ParseError if dotSource is not valid DOT
|
|
82
|
+
* @throws RenderError if layout or rendering fails
|
|
83
|
+
*/
|
|
84
|
+
export function renderSvg(dotSource: string, engine: EngineName): string {
|
|
85
|
+
const ctx = createDefaultContext();
|
|
86
|
+
try {
|
|
87
|
+
// parse() is inside the try so any non-ParseError throw (e.g. a raw
|
|
88
|
+
// RangeError from stack exhaustion) is still normalized to a GvError,
|
|
89
|
+
// honoring the "always throws a value implementing GvError" contract.
|
|
90
|
+
const g = parse(dotSource);
|
|
91
|
+
ctx.layout(g, engine);
|
|
92
|
+
const svg = deviceRender(ctx, g, 'svg');
|
|
93
|
+
// C: gvFreeLayout runs after gvRenderJobs; cleanup is destructive.
|
|
94
|
+
ctx.freeLayout(g, engine);
|
|
95
|
+
return svg;
|
|
96
|
+
} catch (err: unknown) {
|
|
97
|
+
// A render-stage throw already implementing GvError (e.g. HtmlParseError)
|
|
98
|
+
// is re-surfaced unchanged; only genuinely-unknown throws become RENDER_ERROR.
|
|
99
|
+
/* v8 ignore next -- current engines don't throw a GvError-like value here */
|
|
100
|
+
if (isGvErrorLike(err)) throw err;
|
|
101
|
+
throw new RenderError(messageOf(err), 'RENDER_ERROR');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Result-style render: returns `{ svg }` on success or `{ errors: [one] }` on
|
|
107
|
+
* the first failure (svg XOR errors). Errors are plain JSON-serializable
|
|
108
|
+
* {@link GvError} data objects.
|
|
109
|
+
*
|
|
110
|
+
* @remarks
|
|
111
|
+
* Security: same untrusted-input caveat as {@link renderSvg} — the returned
|
|
112
|
+
* `svg` is attacker-controlled markup for untrusted `dotSource`; apply a CSP or
|
|
113
|
+
* sanitize before embedding. See the README "Security" section.
|
|
114
|
+
*/
|
|
115
|
+
export function tryRenderSvg(dotSource: string, engine: EngineName): RenderResult {
|
|
116
|
+
try {
|
|
117
|
+
return { svg: renderSvg(dotSource, engine) };
|
|
118
|
+
} catch (err: unknown) {
|
|
119
|
+
return { errors: [classifyError(err)] };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { parse } from './parser/index.js';
|
|
124
|
+
export { ParseError } from './parser/index.js';
|
|
125
|
+
export { RenderError } from './errors.js';
|
|
126
|
+
export type {
|
|
127
|
+
GvError,
|
|
128
|
+
GvErrorType,
|
|
129
|
+
GvErrorCode,
|
|
130
|
+
GvExpectation,
|
|
131
|
+
RenderResult,
|
|
132
|
+
} from './errors.js';
|
|
133
|
+
export { setImageSizer } from './gvc/usershape.js';
|
|
134
|
+
export type { ImageSizer } from './common/htmltable-types.js';
|
|
135
|
+
export { setImageResolver } from './gvc/image-resolver.js';
|
|
136
|
+
export type { ImageResolver } from './gvc/image-resolver.js';
|
|
137
|
+
|
|
138
|
+
// Text measurement: install a custom measurer (deterministic tests, or a
|
|
139
|
+
// host-faithful Node measurer wired from node-canvas). The library auto-resolves
|
|
140
|
+
// browser canvas → Node LUT by default and never imports `canvas` itself (zero
|
|
141
|
+
// runtime deps). @see plans/fix-xcoord-position/DESIGN.md
|
|
142
|
+
export { setTextMeasurer, getTextMeasurer } from './common/textmeasure-factory.js';
|
|
143
|
+
export {
|
|
144
|
+
CanvasTextMeasurer, EstimateTextMeasurer, LutTextMeasurer,
|
|
145
|
+
} from './common/textmeasure.js';
|
|
146
|
+
export type { TextMeasurer, TextSize, TextVariantFlags } from './common/textmeasure.js';
|
|
147
|
+
export { GvcContext } from './gvc/context.js';
|
|
148
|
+
export type { BuiltinEngine, EngineName } from './gvc/context.js';
|
|
149
|
+
|
|
150
|
+
// Lower-level renderer-pipeline primitive: render a graph against a
|
|
151
|
+
// caller-built `GvcContext`. The root `render` name is taken by the new
|
|
152
|
+
// public `render(g, format, opts?)` (collision resolution below), so this
|
|
153
|
+
// is namespaced as `renderWithContext` to preserve the GvcContext workflow.
|
|
154
|
+
export { render as renderWithContext } from './gvc/device.js';
|
|
155
|
+
|
|
156
|
+
// Discoverable root re-exports of the api + render surfaces (ADR-2): root
|
|
157
|
+
// `graphviz-ts` exposes everything from `graphviz-ts/api` and
|
|
158
|
+
// `graphviz-ts/render` for one-import discoverability.
|
|
159
|
+
//
|
|
160
|
+
// Collision resolution: the root `render` is the new public
|
|
161
|
+
// `render(g, format, opts?)` from `./render`. The low-level
|
|
162
|
+
// `render(ctx, g, format)` is re-exported as `renderWithContext` (above)
|
|
163
|
+
// rather than `render`. See decisions.md ADR-5 and the decision journal.
|
|
164
|
+
export * from './api/index.js';
|
|
165
|
+
export * from './render/index.js';
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* R-tree public API: open/close/insert/search.
|
|
5
|
+
* @see label/index.h
|
|
6
|
+
* @see label/index.c
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { type Rect, overlap, combineRect, NUMDIMS } from './rectangle.js';
|
|
10
|
+
import {
|
|
11
|
+
NODECARD,
|
|
12
|
+
type Branch,
|
|
13
|
+
type Node,
|
|
14
|
+
type SplitQ,
|
|
15
|
+
rTreeNewNode,
|
|
16
|
+
nodeCover,
|
|
17
|
+
pickBranch,
|
|
18
|
+
addBranch,
|
|
19
|
+
disconnectBranch,
|
|
20
|
+
makeSplitQ,
|
|
21
|
+
} from './node.js';
|
|
22
|
+
|
|
23
|
+
// Import split-q.ts for its side-effect: registerSplitNode().
|
|
24
|
+
// Without this import addBranch will throw when a split is needed.
|
|
25
|
+
import './split-q.js';
|
|
26
|
+
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Types
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* An R-tree leaf: the bounding rect and the caller-supplied data pointer.
|
|
33
|
+
*
|
|
34
|
+
* In C this is `Leaf_t { Rect_t rect; void *data; }` and a leaf branch is
|
|
35
|
+
* cast directly to Leaf_t* — `branch[i].child` holds the data pointer while
|
|
36
|
+
* `branch[i].rect` is the bounding rectangle. We replicate that layout here.
|
|
37
|
+
*
|
|
38
|
+
* @see label/index.h:Leaf_t
|
|
39
|
+
*/
|
|
40
|
+
export interface Leaf {
|
|
41
|
+
rect: Rect;
|
|
42
|
+
/** Caller-supplied opaque data (C: void *). */
|
|
43
|
+
data: unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* R-tree: root node plus the SplitQ scratchpad.
|
|
48
|
+
* @see label/index.h:struct RTree
|
|
49
|
+
*/
|
|
50
|
+
export interface RTree {
|
|
51
|
+
root: Node | null;
|
|
52
|
+
split: SplitQ;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Internal leaf-list helpers
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Leaf list node — a singly-linked cons cell.
|
|
61
|
+
*
|
|
62
|
+
* C iterates with `for (LeafList_t *ilp = llp; ilp; ilp = ilp->next)`.
|
|
63
|
+
* Each new hit is prepended (list-cons), so within a leaf node the order
|
|
64
|
+
* is REVERSED relative to branch-slot scan order (slot 0 is last in list).
|
|
65
|
+
* Between subtrees of an internal node, child results are appended to the
|
|
66
|
+
* tail in child-slot order.
|
|
67
|
+
*
|
|
68
|
+
* rTreeSearch returns a plain Leaf[] that reproduces this exact iteration
|
|
69
|
+
* sequence: within each leaf, hits appear in reverse slot order; across
|
|
70
|
+
* internal-node children, results are in forward slot order.
|
|
71
|
+
*
|
|
72
|
+
* @see label/index.c:LeafList_t
|
|
73
|
+
*/
|
|
74
|
+
interface LeafListNode {
|
|
75
|
+
leaf: Leaf;
|
|
76
|
+
next: LeafListNode | null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Prepend a new hit to the list — mirrors RTreeLeafListAdd. */
|
|
80
|
+
function leafListAdd(head: LeafListNode | null, leaf: Leaf): LeafListNode {
|
|
81
|
+
return { leaf, next: head };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Append list `tail` to the end of `head`; returns the new head. */
|
|
85
|
+
function leafListAppend(
|
|
86
|
+
head: LeafListNode | null,
|
|
87
|
+
tail: LeafListNode | null,
|
|
88
|
+
): LeafListNode | null {
|
|
89
|
+
if (!head) return tail;
|
|
90
|
+
if (!tail) return head;
|
|
91
|
+
let cur: LeafListNode = head;
|
|
92
|
+
while (cur.next) cur = cur.next;
|
|
93
|
+
cur.next = tail;
|
|
94
|
+
return head;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Convert a linked list to an array, preserving iteration order. */
|
|
98
|
+
function leafListToArray(head: LeafListNode | null): Leaf[] {
|
|
99
|
+
const result: Leaf[] = [];
|
|
100
|
+
for (let cur = head; cur !== null; cur = cur.next) {
|
|
101
|
+
result.push(cur.leaf);
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// Public API
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Allocate and initialise a new R-tree.
|
|
112
|
+
* @see label/index.c:RTreeOpen
|
|
113
|
+
*/
|
|
114
|
+
export function rTreeOpen(): RTree {
|
|
115
|
+
return { root: rTreeNewIndex(), split: makeSplitQ() };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Recursively free all nodes. In GC'd TS the objects will be collected
|
|
120
|
+
* anyway; this mirrors the C traversal so behaviour is faithful.
|
|
121
|
+
* @see label/index.c:RTreeClose2
|
|
122
|
+
*/
|
|
123
|
+
function rTreeClose2(n: Node): void {
|
|
124
|
+
if (n.level > 0) {
|
|
125
|
+
for (let i = 0; i < NODECARD; i++) {
|
|
126
|
+
if (!n.branch[i].child) continue;
|
|
127
|
+
rTreeClose2(n.branch[i].child as Node);
|
|
128
|
+
disconnectBranch(n, i);
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
for (let i = 0; i < NODECARD; i++) {
|
|
132
|
+
if (!n.branch[i].child) continue;
|
|
133
|
+
disconnectBranch(n, i);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Close (free) the R-tree.
|
|
140
|
+
* In GC'd TS this is a no-op in practice, but we walk and clear the tree
|
|
141
|
+
* faithfully to mirror the C version and release references eagerly.
|
|
142
|
+
* @see label/index.c:RTreeClose
|
|
143
|
+
*/
|
|
144
|
+
export function rTreeClose(rtp: RTree): void {
|
|
145
|
+
if (rtp.root) {
|
|
146
|
+
rTreeClose2(rtp.root);
|
|
147
|
+
rtp.root = null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Make a new empty index (single leaf node at level 0).
|
|
153
|
+
* @see label/index.c:RTreeNewIndex
|
|
154
|
+
*/
|
|
155
|
+
export function rTreeNewIndex(): Node {
|
|
156
|
+
const x = rTreeNewNode();
|
|
157
|
+
x.level = 0; // leaf
|
|
158
|
+
return x;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
// Search
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Recursive search helper.
|
|
167
|
+
*
|
|
168
|
+
* Leaf-list construction mirrors C exactly:
|
|
169
|
+
* - Leaf node: `RTreeLeafListAdd` prepends each hit → reverse slot order
|
|
170
|
+
* within a leaf.
|
|
171
|
+
* - Internal node: each child's result list is appended to the tail of
|
|
172
|
+
* the accumulator → child results in forward slot order.
|
|
173
|
+
*
|
|
174
|
+
* @see label/index.c:RTreeSearch
|
|
175
|
+
*/
|
|
176
|
+
/** Search internal node: recurse into overlapping children, append results. */
|
|
177
|
+
function searchInternal(n: Node, r: Rect): LeafListNode | null {
|
|
178
|
+
let llp: LeafListNode | null = null;
|
|
179
|
+
for (let i = 0; i < NODECARD; i++) {
|
|
180
|
+
if (n.branch[i].child && overlap(r, n.branch[i].rect)) {
|
|
181
|
+
const tlp = rTreeSearchRec(n.branch[i].child as Node, r);
|
|
182
|
+
llp = leafListAppend(llp, tlp);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return llp;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Search leaf node: prepend each matching branch (reverse slot order). */
|
|
189
|
+
function searchLeaf(n: Node, r: Rect): LeafListNode | null {
|
|
190
|
+
let llp: LeafListNode | null = null;
|
|
191
|
+
for (let i = 0; i < NODECARD; i++) {
|
|
192
|
+
if (n.branch[i].child && overlap(r, n.branch[i].rect)) {
|
|
193
|
+
llp = leafListAdd(llp, { rect: n.branch[i].rect, data: n.branch[i].child });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return llp;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function rTreeSearchRec(n: Node, r: Rect): LeafListNode | null {
|
|
200
|
+
return n.level > 0 ? searchInternal(n, r) : searchLeaf(n, r);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Search the index for all data rectangles overlapping `r`.
|
|
205
|
+
*
|
|
206
|
+
* Returns a Leaf[] whose iteration order matches C's LeafList_t traversal:
|
|
207
|
+
* within each leaf node hits are in reverse branch-slot order (list-cons
|
|
208
|
+
* prepend); across internal-node children results are in forward slot order.
|
|
209
|
+
*
|
|
210
|
+
* @see label/index.c:RTreeSearch
|
|
211
|
+
*/
|
|
212
|
+
export function rTreeSearch(rtp: RTree, n: Node, r: Rect): Leaf[] {
|
|
213
|
+
void rtp; // rtp unused in search (matches C signature for API parity)
|
|
214
|
+
return leafListToArray(rTreeSearchRec(n, r));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
// Insert
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
|
|
221
|
+
/** Bundled insert context — reduces per-call param count. */
|
|
222
|
+
interface InsertCtx {
|
|
223
|
+
rtp: RTree;
|
|
224
|
+
r: Rect;
|
|
225
|
+
data: unknown;
|
|
226
|
+
level: number;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** Insert2: handle n.level > ctx.level (descend, propagate split). */
|
|
230
|
+
function insert2Descend(
|
|
231
|
+
ctx: InsertCtx, n: Node, newOut: { value: Node | null },
|
|
232
|
+
): number {
|
|
233
|
+
const n2Out: { value: Node | null } = { value: null };
|
|
234
|
+
const i = pickBranch(ctx.r, n);
|
|
235
|
+
if (!rTreeInsert2(ctx, n.branch[i].child as Node, n2Out)) {
|
|
236
|
+
n.branch[i].rect = combineRect(ctx.r, n.branch[i].rect);
|
|
237
|
+
return 0;
|
|
238
|
+
}
|
|
239
|
+
n.branch[i].rect = nodeCover(n.branch[i].child as Node);
|
|
240
|
+
const b: Branch = { rect: nodeCover(n2Out.value as Node), child: n2Out.value };
|
|
241
|
+
return addBranch(ctx.rtp, b, n, newOut);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Recursive insert helper.
|
|
246
|
+
* Returns 0 if node not split; 1 + sets newOut.value if split.
|
|
247
|
+
* @see label/index.c:RTreeInsert2
|
|
248
|
+
*/
|
|
249
|
+
function rTreeInsert2(
|
|
250
|
+
ctx: InsertCtx, n: Node, newOut: { value: Node | null },
|
|
251
|
+
): number {
|
|
252
|
+
if (n.level > ctx.level) return insert2Descend(ctx, n, newOut);
|
|
253
|
+
if (n.level === ctx.level) {
|
|
254
|
+
return addBranch(ctx.rtp, { rect: ctx.r, child: ctx.data as Node }, n, newOut);
|
|
255
|
+
}
|
|
256
|
+
return 0; // should never happen
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/** Validate rect: low side must be <= high side per dimension. */
|
|
260
|
+
function validateRect(r: Rect): void {
|
|
261
|
+
for (let i = 0; i < NUMDIMS; i++) {
|
|
262
|
+
if (r.boundary[i] > r.boundary[NUMDIMS + i]) {
|
|
263
|
+
throw new Error('rTreeInsert: rect low > high');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/** Grow a new root after the old root was split into oldRoot + sibling. */
|
|
269
|
+
function growRoot(rtp: RTree, sibling: Node): void {
|
|
270
|
+
const newRoot = rTreeNewNode();
|
|
271
|
+
newRoot.level = (rtp.root as Node).level + 1;
|
|
272
|
+
addBranch(rtp, { rect: nodeCover(rtp.root as Node), child: rtp.root }, newRoot, { value: null });
|
|
273
|
+
addBranch(rtp, { rect: nodeCover(sibling), child: sibling }, newRoot, { value: null });
|
|
274
|
+
rtp.root = newRoot;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Insert a data rectangle into the index.
|
|
279
|
+
* Returns 1 if root was split, 0 otherwise. Updates rtp.root on split.
|
|
280
|
+
* @see label/index.c:RTreeInsert
|
|
281
|
+
*/
|
|
282
|
+
export function rTreeInsert(rtp: RTree, r: Rect, data: unknown): number {
|
|
283
|
+
validateRect(r);
|
|
284
|
+
const newNodeOut: { value: Node | null } = { value: null };
|
|
285
|
+
const ctx: InsertCtx = { rtp, r, data, level: 0 };
|
|
286
|
+
if (!rTreeInsert2(ctx, rtp.root as Node, newNodeOut)) return 0;
|
|
287
|
+
growRoot(rtp, newNodeOut.value as Node);
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Free a LeafList. In GC'd TypeScript this is a documented no-op stub;
|
|
293
|
+
* the caller may discard the Leaf[] returned by rTreeSearch without calling
|
|
294
|
+
* this function.
|
|
295
|
+
*
|
|
296
|
+
* Kept as a named export so callers ported from C can call it without change.
|
|
297
|
+
*
|
|
298
|
+
* @see label/index.c:RTreeLeafListFree
|
|
299
|
+
*/
|
|
300
|
+
export function rTreeLeafListFree(_leaves: Leaf[]): void {
|
|
301
|
+
// No-op: GC handles deallocation.
|
|
302
|
+
}
|