@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,251 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* In-place sort matching C's `qsort(3)` permutation, including its treatment of
|
|
5
|
+
* comparator-equal elements.
|
|
6
|
+
*
|
|
7
|
+
* Graphviz sorts via `LIST_SORT` → `gv_list_sort_` → libc `qsort`
|
|
8
|
+
* (`lib/util/list.c:gv_list_sort_`). libc `qsort` is **not stable**: it reorders
|
|
9
|
+
* comparator-equal elements in an implementation-defined permutation. Most port
|
|
10
|
+
* sort sites can use JS's stable `Array.prototype.sort` because their comparator
|
|
11
|
+
* never reports a tie (e.g. `edge-order.ts`). Where ties DO occur AND the
|
|
12
|
+
* downstream result depends on their order, a stable sort diverges from the C
|
|
13
|
+
* oracle.
|
|
14
|
+
*
|
|
15
|
+
* `TB_balance` (`lib/common/ns.c`) is such a site: it sorts nodes by rank
|
|
16
|
+
* (`increasingrankcmpf`, which returns 0 for equal ranks) and then walks the
|
|
17
|
+
* sorted list mutating a per-rank population count, so the order of equal-rank
|
|
18
|
+
* nodes changes which rank each tied node lands on. The macOS/BSD libc `qsort`
|
|
19
|
+
* the oracle links against is the Bentley & McIlroy "Engineering a Sort
|
|
20
|
+
* Function" (1993) introspective quicksort: median-of-3 pivot (pseudo-median of
|
|
21
|
+
* 9 above 40 elements), three-way "fat partition" of equal keys, and an
|
|
22
|
+
* insertion sort for sub-arrays below 7 elements. This module reproduces that
|
|
23
|
+
* algorithm exactly so tie ordering matches the oracle.
|
|
24
|
+
*
|
|
25
|
+
* Verified: on `graphs/mike.gv` TB_balance this reproduces the oracle's 33-node
|
|
26
|
+
* permutation byte-for-byte (threshold 7; thresholds 4/6/8 do not match).
|
|
27
|
+
*
|
|
28
|
+
* @see lib/util/list.c:gv_list_sort_ (the LIST_SORT backend)
|
|
29
|
+
* @see Bentley, McIlroy, "Engineering a Sort Function", Softw. Pract. Exper. 1993
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/** Sub-array size below which the C qsort switches to insertion sort. */
|
|
33
|
+
const THRESH = 7;
|
|
34
|
+
/** Array size above which the C qsort uses a pseudo-median of 9 for the pivot. */
|
|
35
|
+
const BIG = 40;
|
|
36
|
+
|
|
37
|
+
function swap<T>(arr: T[], i: number, j: number): void {
|
|
38
|
+
const t = arr[i];
|
|
39
|
+
arr[i] = arr[j];
|
|
40
|
+
arr[j] = t;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Swap `n` consecutive elements starting at `i` with those starting at `j`. */
|
|
44
|
+
function vecswap<T>(arr: T[], i: number, j: number, n: number): void {
|
|
45
|
+
let k = n;
|
|
46
|
+
while (k-- > 0) swap(arr, i++, j++);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Median of the elements at indices a, b, c under `cmp` (B&M `med3`). */
|
|
50
|
+
function med3<T>(arr: T[], a: number, b: number, c: number, cmp: (x: T, y: T) => number): number {
|
|
51
|
+
return cmp(arr[a], arr[b]) < 0
|
|
52
|
+
? (cmp(arr[b], arr[c]) < 0 ? b : (cmp(arr[a], arr[c]) < 0 ? c : a))
|
|
53
|
+
: (cmp(arr[b], arr[c]) > 0 ? b : (cmp(arr[a], arr[c]) < 0 ? a : c));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Insertion sort of `arr[lo .. lo+n)` with an optional swap budget (Apple
|
|
58
|
+
* `_isort`). `swapLimit === 0` means unlimited (the small-array branch, which
|
|
59
|
+
* must complete). With a positive limit, returns `false` — leaving the array
|
|
60
|
+
* PARTIALLY sorted, mutations kept, exactly like the C code — once the number
|
|
61
|
+
* of swaps exceeds the limit.
|
|
62
|
+
*/
|
|
63
|
+
function insertionSort<T>(
|
|
64
|
+
arr: T[], lo: number, n: number, cmp: (x: T, y: T) => number, swapLimit = 0,
|
|
65
|
+
): boolean {
|
|
66
|
+
let swapCnt = 0;
|
|
67
|
+
for (let pm = lo + 1; pm < lo + n; pm++)
|
|
68
|
+
for (let pl = pm; pl > lo && cmp(arr[pl - 1], arr[pl]) > 0; pl--) {
|
|
69
|
+
swap(arr, pl, pl - 1);
|
|
70
|
+
if (swapLimit !== 0 && ++swapCnt > swapLimit) return false;
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Pick the pivot index for `arr[lo .. lo+n)` (median-of-3, pseudo-median of 9). */
|
|
76
|
+
function choosePivot<T>(arr: T[], lo: number, n: number, cmp: (x: T, y: T) => number): number {
|
|
77
|
+
let pm = lo + (n >> 1);
|
|
78
|
+
let pl = lo;
|
|
79
|
+
let pn = lo + (n - 1);
|
|
80
|
+
if (n > BIG) {
|
|
81
|
+
const d = n >> 3;
|
|
82
|
+
pl = med3(arr, pl, pl + d, pl + 2 * d, cmp);
|
|
83
|
+
pm = med3(arr, pm - d, pm, pm + d, cmp);
|
|
84
|
+
pn = med3(arr, pn - 2 * d, pn - d, pn, cmp);
|
|
85
|
+
}
|
|
86
|
+
return med3(arr, pl, pm, pn, cmp);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Boundaries of the three-way partition: [lo,pb) < pivot, [pc..) > pivot. */
|
|
90
|
+
interface Part { pa: number; pb: number; pc: number; pd: number; swapped: boolean; }
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Three-way ("fat") partition around the pivot at `arr[lo]`. Equal keys are
|
|
94
|
+
* shoved to the two ends (pa/pd) and swapped back to the middle by the caller.
|
|
95
|
+
*/
|
|
96
|
+
function partition3<T>(arr: T[], lo: number, n: number, cmp: (x: T, y: T) => number): Part {
|
|
97
|
+
let pa = lo + 1;
|
|
98
|
+
let pb = lo + 1;
|
|
99
|
+
let pc = lo + (n - 1);
|
|
100
|
+
let pd = lo + (n - 1);
|
|
101
|
+
let swapped = false;
|
|
102
|
+
for (;;) {
|
|
103
|
+
let r: number;
|
|
104
|
+
while (pb <= pc && (r = cmp(arr[pb], arr[lo])) <= 0) {
|
|
105
|
+
if (r === 0) { swapped = true; swap(arr, pa, pb); pa++; }
|
|
106
|
+
pb++;
|
|
107
|
+
}
|
|
108
|
+
while (pb <= pc && (r = cmp(arr[pc], arr[lo])) >= 0) {
|
|
109
|
+
if (r === 0) { swapped = true; swap(arr, pc, pd); pd--; }
|
|
110
|
+
pc--;
|
|
111
|
+
}
|
|
112
|
+
if (pb > pc) break;
|
|
113
|
+
swap(arr, pb, pc);
|
|
114
|
+
swapped = true;
|
|
115
|
+
pb++;
|
|
116
|
+
pc--;
|
|
117
|
+
}
|
|
118
|
+
return { pa, pb, pc, pd, swapped };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Sift the 1-based virtual index `parI` down through the max-heap occupying
|
|
123
|
+
* `arr[lo .. lo+nmemb)` (virtual indices `1..nmemb`, `at(i) = arr[lo+i-1]`) to
|
|
124
|
+
* restore heap order. Ported from the `CREATE` macro's loop body.
|
|
125
|
+
* @see apple-oss-distributions/Libc stdlib/FreeBSD/heapsort.c:CREATE
|
|
126
|
+
*/
|
|
127
|
+
function heapSiftDown<T>(
|
|
128
|
+
arr: T[], lo: number, nmemb: number, parI: number, cmp: (a: T, b: T) => number,
|
|
129
|
+
): void {
|
|
130
|
+
const at = (i: number) => arr[lo + i - 1];
|
|
131
|
+
for (;;) {
|
|
132
|
+
let childI = parI * 2;
|
|
133
|
+
if (childI > nmemb) return;
|
|
134
|
+
if (childI < nmemb && cmp(at(childI), at(childI + 1)) < 0) childI++;
|
|
135
|
+
if (cmp(at(childI), at(parI)) <= 0) return;
|
|
136
|
+
const tmp = arr[lo + parI - 1];
|
|
137
|
+
arr[lo + parI - 1] = arr[lo + childI - 1];
|
|
138
|
+
arr[lo + childI - 1] = tmp;
|
|
139
|
+
parI = childI;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Remove the heap root (already saved by the caller into `k`) from the
|
|
145
|
+
* `nmemb`-element heap in `arr[lo .. lo+nmemb)`, then re-insert `k`. Ported
|
|
146
|
+
* from the `SELECT` macro: first follow the larger-child path down from the
|
|
147
|
+
* root copying child values up into their parent's slot (a "hole" moves
|
|
148
|
+
* down without full swaps), then walk the hole back up toward the root to
|
|
149
|
+
* find `k`'s resting place.
|
|
150
|
+
* @see apple-oss-distributions/Libc stdlib/FreeBSD/heapsort.c:SELECT
|
|
151
|
+
*/
|
|
152
|
+
function heapSelect<T>(
|
|
153
|
+
arr: T[], lo: number, nmemb: number, k: T, cmp: (a: T, b: T) => number,
|
|
154
|
+
): void {
|
|
155
|
+
const at = (i: number) => arr[lo + i - 1];
|
|
156
|
+
let parI = 1;
|
|
157
|
+
let childI: number;
|
|
158
|
+
for (;;) {
|
|
159
|
+
childI = parI * 2;
|
|
160
|
+
if (childI > nmemb) break;
|
|
161
|
+
if (childI < nmemb && cmp(at(childI), at(childI + 1)) < 0) childI++;
|
|
162
|
+
arr[lo + parI - 1] = arr[lo + childI - 1];
|
|
163
|
+
parI = childI;
|
|
164
|
+
}
|
|
165
|
+
for (;;) {
|
|
166
|
+
childI = parI;
|
|
167
|
+
parI = childI >> 1;
|
|
168
|
+
if (childI === 1 || cmp(k, at(parI)) < 0) {
|
|
169
|
+
arr[lo + childI - 1] = k;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
arr[lo + childI - 1] = arr[lo + parI - 1];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* BSD heapsort — the fallback Apple libc `_qsort` dispatches to when
|
|
178
|
+
* introsort's recursion-depth budget (`2*(fls(n)-1)`) is exhausted, guarding
|
|
179
|
+
* against adversarial inputs that defeat median-of-3 pivot selection. Not
|
|
180
|
+
* observed to trigger on this corpus (all inputs stay within budget), but
|
|
181
|
+
* CLAUDE.md requires porting every branch a faithful port can reach.
|
|
182
|
+
*
|
|
183
|
+
* @see apple-oss-distributions/Libc stdlib/FreeBSD/heapsort.c:heapsort
|
|
184
|
+
*/
|
|
185
|
+
export function heapSort<T>(arr: T[], lo: number, n: number, cmp: (a: T, b: T) => number): void {
|
|
186
|
+
if (n <= 1) return;
|
|
187
|
+
for (let l = n >> 1; l >= 1; l--) heapSiftDown(arr, lo, n, l, cmp);
|
|
188
|
+
for (let nmemb = n; nmemb > 1; nmemb--) {
|
|
189
|
+
const k = arr[lo + nmemb - 1];
|
|
190
|
+
arr[lo + nmemb - 1] = arr[lo];
|
|
191
|
+
heapSelect(arr, lo, nmemb - 1, k, cmp);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Sort `arr[lo .. lo+n)` in place (Apple Libc `_qsort` body, R4 prototype). */
|
|
196
|
+
function qsortRange<T>(
|
|
197
|
+
arr: T[], lo: number, n: number, cmp: (x: T, y: T) => number, depthLimit: number,
|
|
198
|
+
): void {
|
|
199
|
+
for (;;) {
|
|
200
|
+
if (depthLimit-- <= 0) {
|
|
201
|
+
// We've hit our recursion limit, switch to heapsort.
|
|
202
|
+
// @see apple-oss-distributions/Libc stdlib/FreeBSD/qsort.c (depth_limit check)
|
|
203
|
+
heapSort(arr, lo, n, cmp);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (n <= THRESH) { insertionSort(arr, lo, n, cmp); return; }
|
|
207
|
+
swap(arr, lo, choosePivot(arr, lo, n, cmp)); // pivot to front
|
|
208
|
+
const { pa, pb, pc, pd, swapped } = partition3(arr, lo, n, cmp);
|
|
209
|
+
const pn = lo + n;
|
|
210
|
+
let r = Math.min(pa - lo, pb - pa);
|
|
211
|
+
vecswap(arr, lo, pb - r, r);
|
|
212
|
+
r = Math.min(pd - pc, pn - pd - 1);
|
|
213
|
+
vecswap(arr, pb, pn - r, r);
|
|
214
|
+
// Apple: a swap-free partition pass means "nearly sorted" — try a bounded
|
|
215
|
+
// insertion sort over the whole range; bail back to quicksort (keeping the
|
|
216
|
+
// partial mutations!) once swaps exceed 1 + n/4.
|
|
217
|
+
if (!swapped) {
|
|
218
|
+
const limit = 1 + Math.floor(n / 4);
|
|
219
|
+
if (insertionSort(arr, lo, n, cmp, limit)) return;
|
|
220
|
+
}
|
|
221
|
+
const leftN = pb - pa; // count of elements < pivot
|
|
222
|
+
const rightN = pd - pc; // count of elements > pivot
|
|
223
|
+
if (leftN <= rightN) {
|
|
224
|
+
if (leftN > 1) qsortRange(arr, lo, leftN, cmp, depthLimit);
|
|
225
|
+
if (rightN > 1) { lo = pn - rightN; n = rightN; continue; }
|
|
226
|
+
} else {
|
|
227
|
+
if (rightN > 1) qsortRange(arr, pn - rightN, rightN, cmp, depthLimit);
|
|
228
|
+
if (leftN > 1) { n = leftN; continue; }
|
|
229
|
+
}
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Sort `arr` in place, reproducing libc `qsort`'s permutation of
|
|
236
|
+
* comparator-equal elements (Bentley–McIlroy quicksort). Use this instead of
|
|
237
|
+
* `Array.prototype.sort` only where the C oracle's `qsort` tie ordering is
|
|
238
|
+
* load-bearing; elsewhere the stable native sort is preferred.
|
|
239
|
+
*
|
|
240
|
+
* @param arr Array sorted in place (also returned for convenience).
|
|
241
|
+
* @param cmp Comparator returning <0, 0, or >0 — matching the C comparator's
|
|
242
|
+
* sign, including 0 for elements the C comparator treats as equal.
|
|
243
|
+
*/
|
|
244
|
+
export function gvQsort<T>(arr: T[], cmp: (a: T, b: T) => number): T[] {
|
|
245
|
+
// DEPTH(n) = 2 * (fls(n) - 1); fls(n) = 32 - clz32(n) for n > 0.
|
|
246
|
+
if (arr.length > 1) {
|
|
247
|
+
const depth = 2 * (32 - Math.clz32(arr.length) - 1);
|
|
248
|
+
qsortRange(arr, 0, arr.length, cmp, depth);
|
|
249
|
+
}
|
|
250
|
+
return arr;
|
|
251
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Public re-exports for src/util.
|
|
4
|
+
*/
|
|
5
|
+
export { AgBuffer } from "./agxbuf.js";
|
|
6
|
+
export { List } from "./list.js";
|
|
7
|
+
export { gvXmlEscape } from "./xml.js";
|
|
8
|
+
export type { XmlFlags } from "./xml.js";
|
|
9
|
+
export {
|
|
10
|
+
isExactlyZero,
|
|
11
|
+
isExactlyEqual,
|
|
12
|
+
fcmp,
|
|
13
|
+
imax,
|
|
14
|
+
imin,
|
|
15
|
+
d2i,
|
|
16
|
+
d2f,
|
|
17
|
+
gvStrtod,
|
|
18
|
+
} from "./math.js";
|
|
19
|
+
export {
|
|
20
|
+
rkNewState,
|
|
21
|
+
rkSeed,
|
|
22
|
+
rkRandom,
|
|
23
|
+
rkInterval,
|
|
24
|
+
} from "./mt19937.js";
|
|
25
|
+
export type { RkState } from "./mt19937.js";
|
package/src/util/list.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Generic doubly-linked list, replacing the C LIST macro.
|
|
4
|
+
*
|
|
5
|
+
* The C LIST macro is a type-generic ring-buffer backed dynamic array.
|
|
6
|
+
* For the TypeScript port we expose the same logical API using a simple
|
|
7
|
+
* doubly-linked node structure. The ring-buffer internals need not be
|
|
8
|
+
* replicated; only the observable contract matters.
|
|
9
|
+
*
|
|
10
|
+
* @see lib/util/list.h
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
interface ListNode<T> {
|
|
14
|
+
value: T;
|
|
15
|
+
prev: ListNode<T> | null;
|
|
16
|
+
next: ListNode<T> | null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Type-generic doubly-linked list.
|
|
21
|
+
*
|
|
22
|
+
* Matches the observable behaviour of the C LIST macro:
|
|
23
|
+
* push / pop — operate on the back (LIST_APPEND / LIST_POP_BACK)
|
|
24
|
+
* unshift / shift — operate on the front (LIST_PREPEND / LIST_POP_FRONT)
|
|
25
|
+
* remove — linear scan by identity (LIST_REMOVE)
|
|
26
|
+
* Symbol.iterator — logical order, front to back
|
|
27
|
+
*/
|
|
28
|
+
export class List<T> {
|
|
29
|
+
private _head: ListNode<T> | null = null;
|
|
30
|
+
private _tail: ListNode<T> | null = null;
|
|
31
|
+
private _size: number = 0;
|
|
32
|
+
|
|
33
|
+
/** Append item to back. @see lib/util/list.h:LIST_APPEND */
|
|
34
|
+
push(item: T): void {
|
|
35
|
+
const node: ListNode<T> = { value: item, prev: this._tail, next: null };
|
|
36
|
+
if (this._tail !== null) {
|
|
37
|
+
this._tail.next = node;
|
|
38
|
+
} else {
|
|
39
|
+
this._head = node;
|
|
40
|
+
}
|
|
41
|
+
this._tail = node;
|
|
42
|
+
this._size++;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Remove and return the last item, or undefined if empty.
|
|
46
|
+
* @see lib/util/list.h:LIST_POP_BACK */
|
|
47
|
+
pop(): T | undefined {
|
|
48
|
+
if (this._tail === null) return undefined;
|
|
49
|
+
const value = this._tail.value;
|
|
50
|
+
this._unlink(this._tail);
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Remove and return the first item, or undefined if empty.
|
|
55
|
+
* @see lib/util/list.h:LIST_POP_FRONT */
|
|
56
|
+
shift(): T | undefined {
|
|
57
|
+
if (this._head === null) return undefined;
|
|
58
|
+
const value = this._head.value;
|
|
59
|
+
this._unlink(this._head);
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Prepend item to front. @see lib/util/list.h:LIST_PREPEND */
|
|
64
|
+
unshift(item: T): void {
|
|
65
|
+
const node: ListNode<T> = { value: item, prev: null, next: this._head };
|
|
66
|
+
if (this._head !== null) {
|
|
67
|
+
this._head.prev = node;
|
|
68
|
+
} else {
|
|
69
|
+
this._tail = node;
|
|
70
|
+
}
|
|
71
|
+
this._head = node;
|
|
72
|
+
this._size++;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Remove the first occurrence of item (by reference equality).
|
|
77
|
+
* Returns true if found and removed.
|
|
78
|
+
* @see lib/util/list.h:LIST_REMOVE
|
|
79
|
+
*/
|
|
80
|
+
remove(item: T): boolean {
|
|
81
|
+
for (let n = this._head; n !== null; n = n.next) {
|
|
82
|
+
if (n.value === item) {
|
|
83
|
+
this._unlink(n);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Iterate items in logical order (front to back). */
|
|
91
|
+
[Symbol.iterator](): Iterator<T> {
|
|
92
|
+
let current = this._head;
|
|
93
|
+
return {
|
|
94
|
+
next(): IteratorResult<T> {
|
|
95
|
+
if (current === null) return { value: undefined as unknown as T, done: true };
|
|
96
|
+
const value = current.value;
|
|
97
|
+
current = current.next;
|
|
98
|
+
return { value, done: false };
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Number of items in the list. @see lib/util/list.h:LIST_SIZE */
|
|
104
|
+
get size(): number {
|
|
105
|
+
return this._size;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Detach a node from the list. */
|
|
109
|
+
private _unlink(node: ListNode<T>): void {
|
|
110
|
+
if (node.prev !== null) {
|
|
111
|
+
node.prev.next = node.next;
|
|
112
|
+
} else {
|
|
113
|
+
this._head = node.next;
|
|
114
|
+
}
|
|
115
|
+
if (node.next !== null) {
|
|
116
|
+
node.next.prev = node.prev;
|
|
117
|
+
} else {
|
|
118
|
+
this._tail = node.prev;
|
|
119
|
+
}
|
|
120
|
+
this._size--;
|
|
121
|
+
}
|
|
122
|
+
}
|
package/src/util/math.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Arithmetic helper functions.
|
|
4
|
+
*
|
|
5
|
+
* @see lib/util/gv_math.h
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// INT32 limits used by d2i (mirrors C INT_MAX / INT_MIN for 32-bit int)
|
|
9
|
+
const INT32_MAX = 2_147_483_647;
|
|
10
|
+
const INT32_MIN = -2_147_483_648;
|
|
11
|
+
|
|
12
|
+
// FLT_MAX: largest finite single-precision float
|
|
13
|
+
const FLT_MAX = 3.4028234663852886e+38;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Bit-exact zero check via DataView (mirrors C memcmp against 0).
|
|
17
|
+
* -0.0 returns false; +0.0 returns true.
|
|
18
|
+
*
|
|
19
|
+
* CRITICAL (AD-9): must use bit-level comparison, NOT === 0.
|
|
20
|
+
* @see lib/util/gv_math.h:is_exactly_zero
|
|
21
|
+
*/
|
|
22
|
+
export function isExactlyZero(v: number): boolean {
|
|
23
|
+
const buf = new ArrayBuffer(8);
|
|
24
|
+
new DataView(buf).setFloat64(0, v, false);
|
|
25
|
+
const bytes = new Uint8Array(buf);
|
|
26
|
+
return bytes.every((b) => b === 0);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Bit-exact equality via DataView (mirrors C memcmp).
|
|
31
|
+
* Distinguishes +0.0 from -0.0.
|
|
32
|
+
*
|
|
33
|
+
* CRITICAL (AD-9): must use bit-level comparison, NOT ===.
|
|
34
|
+
* @see lib/util/gv_math.h:is_exactly_equal
|
|
35
|
+
*/
|
|
36
|
+
export function isExactlyEqual(a: number, b: number): boolean {
|
|
37
|
+
const buf = new ArrayBuffer(16);
|
|
38
|
+
const dv = new DataView(buf);
|
|
39
|
+
dv.setFloat64(0, a, false);
|
|
40
|
+
dv.setFloat64(8, b, false);
|
|
41
|
+
const bytes = new Uint8Array(buf);
|
|
42
|
+
for (let i = 0; i < 8; i++) {
|
|
43
|
+
if (bytes[i] !== bytes[i + 8]) return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Three-way double comparator.
|
|
50
|
+
* Returns -1 if a<b, 0 if a==b, 1 if a>b (numerical, not bit-exact).
|
|
51
|
+
* @see lib/util/gv_math.h:fcmp
|
|
52
|
+
*/
|
|
53
|
+
export function fcmp(a: number, b: number): -1 | 0 | 1 {
|
|
54
|
+
if (a < b) return -1;
|
|
55
|
+
if (a > b) return 1;
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Integer maximum.
|
|
61
|
+
* @see lib/util/gv_math.h:imax
|
|
62
|
+
*/
|
|
63
|
+
export function imax(a: number, b: number): number {
|
|
64
|
+
return a > b ? a : b;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Integer minimum.
|
|
69
|
+
* @see lib/util/gv_math.h:imin
|
|
70
|
+
*/
|
|
71
|
+
export function imin(a: number, b: number): number {
|
|
72
|
+
return a < b ? a : b;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Convert double to int32, clamping to [INT_MIN, INT_MAX].
|
|
77
|
+
* @see lib/util/gv_math.h:d2i
|
|
78
|
+
*/
|
|
79
|
+
export function d2i(v: number): number {
|
|
80
|
+
if (v > INT32_MAX) return INT32_MAX;
|
|
81
|
+
if (v < INT32_MIN) return INT32_MIN;
|
|
82
|
+
return Math.trunc(v);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Round-trip through Float32Array to get float32 precision,
|
|
87
|
+
* clamping to [-FLT_MAX, FLT_MAX].
|
|
88
|
+
* @see lib/util/gv_math.h:d2f
|
|
89
|
+
*/
|
|
90
|
+
export function d2f(v: number): number {
|
|
91
|
+
if (v > FLT_MAX) return FLT_MAX;
|
|
92
|
+
if (v < -FLT_MAX) return -FLT_MAX;
|
|
93
|
+
const f32 = new Float32Array(1);
|
|
94
|
+
f32[0] = v;
|
|
95
|
+
return f32[0];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Parse a string to a number. Returns NaN for non-numeric strings.
|
|
100
|
+
* Wraps parseFloat, matching C strtod behaviour for well-formed input.
|
|
101
|
+
*/
|
|
102
|
+
export function gvStrtod(s: string): number {
|
|
103
|
+
return parseFloat(s);
|
|
104
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* MT19937 Mersenne Twister — port of Random Kit 1.3.
|
|
4
|
+
*
|
|
5
|
+
* Must produce bit-identical output to the C reference for any seed.
|
|
6
|
+
* All arithmetic is kept in 32-bit unsigned space via >>> 0.
|
|
7
|
+
*
|
|
8
|
+
* @see lib/neatogen/randomkit.c
|
|
9
|
+
* @see lib/neatogen/randomkit.h
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** Number of state words. @see randomkit.h:RK_STATE_LEN */
|
|
13
|
+
const RK_STATE_LEN = 624;
|
|
14
|
+
|
|
15
|
+
/** Twist constants. @see randomkit.c */
|
|
16
|
+
const N = 624;
|
|
17
|
+
const M = 397;
|
|
18
|
+
const MATRIX_A = 0x9908b0df;
|
|
19
|
+
const UPPER_MASK = 0x80000000;
|
|
20
|
+
const LOWER_MASK = 0x7fffffff;
|
|
21
|
+
|
|
22
|
+
/** Initialisation multiplier (Knuth PRNG). @see randomkit.c:rk_seed */
|
|
23
|
+
const INIT_MULT = 1812433253;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Mersenne Twister state.
|
|
27
|
+
* @see randomkit.h:rk_state_
|
|
28
|
+
*/
|
|
29
|
+
export interface RkState {
|
|
30
|
+
/** 624-element state array (uint32). */
|
|
31
|
+
mt: Uint32Array;
|
|
32
|
+
/** Current position in the state array; RK_STATE_LEN means "needs twist". */
|
|
33
|
+
mti: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Allocate a fresh, uninitialised state. */
|
|
37
|
+
export function rkNewState(): RkState {
|
|
38
|
+
return { mt: new Uint32Array(RK_STATE_LEN), mti: RK_STATE_LEN };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Seed the RNG with a 32-bit unsigned integer.
|
|
43
|
+
* @see randomkit.c:rk_seed
|
|
44
|
+
*/
|
|
45
|
+
export function rkSeed(seed: number, state: RkState): void {
|
|
46
|
+
let s = (seed >>> 0) & 0xffffffff;
|
|
47
|
+
for (let pos = 0; pos < RK_STATE_LEN; pos++) {
|
|
48
|
+
state.mt[pos] = s;
|
|
49
|
+
s = rkSeedStep(s, pos);
|
|
50
|
+
}
|
|
51
|
+
state.mti = RK_STATE_LEN;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* One step of Knuth's PRNG used during seeding.
|
|
56
|
+
* Kept separate to stay within CCN limit.
|
|
57
|
+
*/
|
|
58
|
+
function rkSeedStep(s: number, pos: number): number {
|
|
59
|
+
// (1812433253 * (s ^ (s >> 30)) + pos + 1) & 0xffffffff
|
|
60
|
+
const xor = (s ^ (s >>> 30)) >>> 0;
|
|
61
|
+
// multiply as 32-bit: split into hi/lo to avoid float precision loss
|
|
62
|
+
const lo = (INIT_MULT * (xor & 0xffff)) >>> 0;
|
|
63
|
+
const hi = (INIT_MULT * (xor >>> 16)) >>> 0;
|
|
64
|
+
return (lo + ((hi << 16) >>> 0) + pos + 1) >>> 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Generate the next 32-bit pseudo-random value.
|
|
69
|
+
* @see randomkit.c:rk_random
|
|
70
|
+
*/
|
|
71
|
+
export function rkRandom(state: RkState): number {
|
|
72
|
+
if (state.mti === RK_STATE_LEN) {
|
|
73
|
+
rkTwist(state);
|
|
74
|
+
}
|
|
75
|
+
let y = state.mt[state.mti++];
|
|
76
|
+
y = rkTemper(y);
|
|
77
|
+
return y >>> 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* MT19937 twist operation — refill the state array.
|
|
82
|
+
* @see randomkit.c:rk_random (inner if block)
|
|
83
|
+
*/
|
|
84
|
+
function rkTwist(state: RkState): void {
|
|
85
|
+
const mt = state.mt;
|
|
86
|
+
let i = 0;
|
|
87
|
+
for (; i < N - M; i++) {
|
|
88
|
+
const y = ((mt[i] & UPPER_MASK) | (mt[i + 1] & LOWER_MASK)) >>> 0;
|
|
89
|
+
mt[i] = (mt[i + M] ^ (y >>> 1) ^ ((y & 1) * MATRIX_A)) >>> 0;
|
|
90
|
+
}
|
|
91
|
+
for (; i < N - 1; i++) {
|
|
92
|
+
const y = ((mt[i] & UPPER_MASK) | (mt[i + 1] & LOWER_MASK)) >>> 0;
|
|
93
|
+
mt[i] = (mt[i + (M - N)] ^ (y >>> 1) ^ ((y & 1) * MATRIX_A)) >>> 0;
|
|
94
|
+
}
|
|
95
|
+
const y = ((mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK)) >>> 0;
|
|
96
|
+
mt[N - 1] = (mt[M - 1] ^ (y >>> 1) ^ ((y & 1) * MATRIX_A)) >>> 0;
|
|
97
|
+
state.mti = 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* MT19937 tempering transformation.
|
|
102
|
+
* @see randomkit.c:rk_random (Tempering block)
|
|
103
|
+
*/
|
|
104
|
+
function rkTemper(y: number): number {
|
|
105
|
+
let v = y >>> 0;
|
|
106
|
+
v ^= v >>> 11;
|
|
107
|
+
v ^= (v << 7) & 0x9d2c5680;
|
|
108
|
+
v ^= (v << 15) & 0xefc60000;
|
|
109
|
+
v ^= v >>> 18;
|
|
110
|
+
return v >>> 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Return a random value in [0, max] inclusive.
|
|
115
|
+
* Uses rejection sampling to avoid modulo bias.
|
|
116
|
+
* On this platform ULONG_MAX == 0xffffffff (32-bit path).
|
|
117
|
+
*
|
|
118
|
+
* @see randomkit.c:rk_interval
|
|
119
|
+
*/
|
|
120
|
+
export function rkInterval(max: number, state: RkState): number {
|
|
121
|
+
const m = max >>> 0;
|
|
122
|
+
if (m === 0) return 0;
|
|
123
|
+
const mask = buildMask(m);
|
|
124
|
+
let value: number;
|
|
125
|
+
do {
|
|
126
|
+
value = (rkRandom(state) & mask) >>> 0;
|
|
127
|
+
} while (value > m);
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Build the smallest all-ones bitmask >= max.
|
|
133
|
+
* @see randomkit.c:rk_interval (mask computation)
|
|
134
|
+
*/
|
|
135
|
+
function buildMask(max: number): number {
|
|
136
|
+
let mask = max >>> 0;
|
|
137
|
+
mask |= mask >>> 1;
|
|
138
|
+
mask |= mask >>> 2;
|
|
139
|
+
mask |= mask >>> 4;
|
|
140
|
+
mask |= mask >>> 8;
|
|
141
|
+
mask |= mask >>> 16;
|
|
142
|
+
return mask >>> 0;
|
|
143
|
+
}
|