@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,263 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
//
|
|
3
|
+
// DOT language grammar for Peggy (PEG parser generator).
|
|
4
|
+
// Derived from:
|
|
5
|
+
// grammar.y — Bison LALR(1) grammar (lib/cgraph/grammar.y)
|
|
6
|
+
// scan.l — Flex lexer (lib/cgraph/scan.l)
|
|
7
|
+
//
|
|
8
|
+
// Architecture decision AD-11: this file is the canonical faithfulness
|
|
9
|
+
// artifact; every production cites its Bison rule or Flex token.
|
|
10
|
+
|
|
11
|
+
// ── Top-level rule ───────────────────────────────────────────────────────────
|
|
12
|
+
// grammar.y: graph : hdr body | error | /* empty */
|
|
13
|
+
|
|
14
|
+
Graph
|
|
15
|
+
= _ s:OptStrict _ t:GraphType _ id:OptGraphName _ "{" _ stmts:StmtList _ "}" _
|
|
16
|
+
{
|
|
17
|
+
return {
|
|
18
|
+
type: "graph",
|
|
19
|
+
strict: s,
|
|
20
|
+
directed: t,
|
|
21
|
+
id: id,
|
|
22
|
+
stmts: stmts
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/ _ "" { return { type: "graph", strict: false, directed: false, id: null, stmts: [] }; }
|
|
26
|
+
|
|
27
|
+
// grammar.y: hdr : optstrict graphtype optgraphname
|
|
28
|
+
// grammar.y: optstrict : T_strict | /* empty */
|
|
29
|
+
OptStrict
|
|
30
|
+
= StrictKw _ { return true; }
|
|
31
|
+
/ "" { return false; }
|
|
32
|
+
|
|
33
|
+
// grammar.y: graphtype : T_graph | T_digraph
|
|
34
|
+
// scan.l: "graph" → T_graph, "digraph" → T_digraph (case-insensitive per keywords)
|
|
35
|
+
GraphType
|
|
36
|
+
= DigraphKw { return true; }
|
|
37
|
+
/ GraphKw { return false; }
|
|
38
|
+
|
|
39
|
+
// grammar.y: optgraphname : atom | /* empty */
|
|
40
|
+
OptGraphName
|
|
41
|
+
= a:Atom _ { return a; }
|
|
42
|
+
/ "" { return null; }
|
|
43
|
+
|
|
44
|
+
// grammar.y: optstmtlist : stmtlist | /* empty */
|
|
45
|
+
// grammar.y: stmtlist : stmtlist stmt | stmt
|
|
46
|
+
StmtList
|
|
47
|
+
= stmts:( s:Stmt _ { return s; } )* { return stmts; }
|
|
48
|
+
|
|
49
|
+
// grammar.y: stmt : attrstmt optsemi | compound optsemi
|
|
50
|
+
// grammar.y: optsemi : ';' | /* empty */
|
|
51
|
+
Stmt
|
|
52
|
+
= s:AttrStmt _ ( ";" _ )? { return s; }
|
|
53
|
+
/ s:Compound _ ( ";" _ )? { return s; }
|
|
54
|
+
|
|
55
|
+
// ── Attribute statement ───────────────────────────────────────────────────────
|
|
56
|
+
// grammar.y: attrstmt : attrtype optmacroname attrlist | graphattrdefs
|
|
57
|
+
// grammar.y: attrtype : T_graph | T_node | T_edge
|
|
58
|
+
// grammar.y: graphattrdefs : attrassignment (bare key=value at graph level)
|
|
59
|
+
AttrStmt
|
|
60
|
+
= t:AttrType _ attrs:AttrList
|
|
61
|
+
{ return { type: "attr", target: t, attrs: attrs }; }
|
|
62
|
+
/ a:AttrAssignment
|
|
63
|
+
{ return { type: "assign", key: a.key, value: a.value }; }
|
|
64
|
+
|
|
65
|
+
// grammar.y: attrtype : T_graph | T_node | T_edge
|
|
66
|
+
AttrType
|
|
67
|
+
= GraphKw { return "graph"; }
|
|
68
|
+
/ NodeKw { return "node"; }
|
|
69
|
+
/ EdgeKw { return "edge"; }
|
|
70
|
+
|
|
71
|
+
// grammar.y: optattr : attrlist | /* empty */
|
|
72
|
+
// grammar.y: attrlist : optattr '[' optattrdefs ']'
|
|
73
|
+
AttrList
|
|
74
|
+
= _ "[" _ defs:AttrDefs _ "]" rest:AttrList
|
|
75
|
+
{ return defs.concat(rest); }
|
|
76
|
+
/ _ "[" _ defs:AttrDefs _ "]"
|
|
77
|
+
{ return defs; }
|
|
78
|
+
/ "" { return []; }
|
|
79
|
+
|
|
80
|
+
// grammar.y: optattrdefs : optattrdefs attrdefs | /* empty */
|
|
81
|
+
// grammar.y: attrdefs : attrassignment optseparator
|
|
82
|
+
// grammar.y: optseparator : ';' | ',' | /* empty */
|
|
83
|
+
AttrDefs
|
|
84
|
+
= pairs:( a:AttrAssignment _ ( [;,] _ )? { return a; } )*
|
|
85
|
+
{ return pairs; }
|
|
86
|
+
|
|
87
|
+
// grammar.y: attrassignment : atom '=' atom
|
|
88
|
+
AttrAssignment
|
|
89
|
+
= k:Atom _ "=" _ v:Atom
|
|
90
|
+
{ return { key: k, value: v }; }
|
|
91
|
+
|
|
92
|
+
// ── Compound (node/edge) statement ───────────────────────────────────────────
|
|
93
|
+
// grammar.y: compound : simple rcompound optattr
|
|
94
|
+
// grammar.y: simple : nodelist | subgraph
|
|
95
|
+
Compound
|
|
96
|
+
= head:Simple _ chain:EdgeChain _ attrs:AttrList
|
|
97
|
+
{
|
|
98
|
+
if (chain.length > 0) {
|
|
99
|
+
const nodes = [head].concat(chain);
|
|
100
|
+
return { type: "edge", nodes: nodes, attrs: attrs };
|
|
101
|
+
} else {
|
|
102
|
+
// single node or subgraph — treat subgraph as subgraph stmt
|
|
103
|
+
if (head.type === "subgraph") {
|
|
104
|
+
// bare subgraph with no edges
|
|
105
|
+
return head;
|
|
106
|
+
}
|
|
107
|
+
// NodeId array — return NodeStmt(s) for first element only
|
|
108
|
+
return { type: "node", id: head, attrs: attrs };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// grammar.y: simple : nodelist | subgraph
|
|
113
|
+
// grammar.y: nodelist : node | nodelist ',' node
|
|
114
|
+
// We return either a NodeId (plain node) or a SubgraphStmt.
|
|
115
|
+
Simple
|
|
116
|
+
= s:Subgraph { return s; }
|
|
117
|
+
/ n:Node { return n; }
|
|
118
|
+
|
|
119
|
+
// grammar.y: node : atom | atom ':' atom | atom ':' atom ':' atom
|
|
120
|
+
// scan.l: NAME token is an atom; compass points are also atoms
|
|
121
|
+
Node
|
|
122
|
+
= id:Atom _ ":" _ port:Atom _ ":" _ compass:Atom
|
|
123
|
+
{ return { id: id, port: port, compass: compass }; }
|
|
124
|
+
/ id:Atom _ ":" _ port:Atom
|
|
125
|
+
{ return { id: id, port: port, compass: null }; }
|
|
126
|
+
/ id:Atom
|
|
127
|
+
{ return { id: id, port: null, compass: null }; }
|
|
128
|
+
|
|
129
|
+
// grammar.y: rcompound : T_edgeop simple rcompound | /* empty */
|
|
130
|
+
// scan.l: "->" and "--" both return T_edgeop (direction validated by wrapper)
|
|
131
|
+
EdgeChain
|
|
132
|
+
= EdgeOp _ s:Simple _ rest:EdgeChain
|
|
133
|
+
{ return [s].concat(rest); }
|
|
134
|
+
/ "" { return []; }
|
|
135
|
+
|
|
136
|
+
// scan.l: "->" | "--" → T_edgeop
|
|
137
|
+
EdgeOp "edge operator"
|
|
138
|
+
= "->" / "--"
|
|
139
|
+
|
|
140
|
+
// ── Subgraph ──────────────────────────────────────────────────────────────────
|
|
141
|
+
// grammar.y: subgraph : optsubghdr body
|
|
142
|
+
// grammar.y: optsubghdr : T_subgraph atom | T_subgraph | /* empty */
|
|
143
|
+
Subgraph
|
|
144
|
+
= SubgraphKw _ id:Atom _ "{" _ stmts:StmtList _ "}"
|
|
145
|
+
{ return { type: "subgraph", id: id, stmts: stmts }; }
|
|
146
|
+
/ SubgraphKw _ "{" _ stmts:StmtList _ "}"
|
|
147
|
+
{ return { type: "subgraph", id: null, stmts: stmts }; }
|
|
148
|
+
/ "{" _ stmts:StmtList _ "}"
|
|
149
|
+
{ return { type: "subgraph", id: null, stmts: stmts }; }
|
|
150
|
+
|
|
151
|
+
// ── Atoms / identifiers ───────────────────────────────────────────────────────
|
|
152
|
+
// grammar.y: atom : T_atom | qatom
|
|
153
|
+
// grammar.y: qatom : T_qatom | qatom '+' T_qatom (string concatenation)
|
|
154
|
+
Atom
|
|
155
|
+
= first:QAtom rest:( _ "+" _ s:QAtom { return s; } )*
|
|
156
|
+
{ return rest.length > 0 ? first + rest.join("") : first; }
|
|
157
|
+
/ PlainAtom
|
|
158
|
+
|
|
159
|
+
// grammar.y: qatom : T_qatom (a single quoted string or HTML string).
|
|
160
|
+
// Concatenation is ONLY via the '+' operator (handled by `Atom`,
|
|
161
|
+
// grammar.y: qatom '+' T_qatom). Two adjacent quoted strings with no '+'
|
|
162
|
+
// are NOT concatenated — they are separate tokens (e.g. `a="x" "B"->c`),
|
|
163
|
+
// so QAtom must not implicitly join them.
|
|
164
|
+
QAtom
|
|
165
|
+
= QuotedString
|
|
166
|
+
/ HtmlString
|
|
167
|
+
|
|
168
|
+
// scan.l: ["] begins qstring state; ["] ends it → T_qatom
|
|
169
|
+
// scan.l applies exactly TWO transformations inside quoted strings:
|
|
170
|
+
// \" → " and \<newline> → dropped (escaped line continuation).
|
|
171
|
+
// EVERYTHING else — \\, \n, \l, \r, \t, \N, \X — is kept verbatim;
|
|
172
|
+
// escape interpretation belongs to the consumers (make_simple_label,
|
|
173
|
+
// strdup_and_subst_obj0, interpretCRNL, record parsing).
|
|
174
|
+
// @see lib/cgraph/scan.l (qstring rules, :137-142)
|
|
175
|
+
QuotedString
|
|
176
|
+
= '"' chars:QChar* '"'
|
|
177
|
+
{ return chars.join(""); }
|
|
178
|
+
|
|
179
|
+
QChar
|
|
180
|
+
= '\\"' { return '"'; }
|
|
181
|
+
/ '\\\n' { return ''; } // scan.l:140 escaped newline ignored
|
|
182
|
+
/ '\\' c:. { return '\\' + c; } // scan.l:139,142 escapes kept verbatim
|
|
183
|
+
/ [^"\\]
|
|
184
|
+
|
|
185
|
+
// scan.l: [<] begins hstring state; tracks html_nest for matching '>'
|
|
186
|
+
// Content between outer <> is returned verbatim (including inner <>).
|
|
187
|
+
// HTML strings are prefixed with U+0001 (cgraph's aghtmlstr flag) so a
|
|
188
|
+
// quoted string that happens to start with '<' stays distinguishable.
|
|
189
|
+
HtmlString
|
|
190
|
+
= "<" content:HtmlContent ">"
|
|
191
|
+
{ return "\u0001" + content; }
|
|
192
|
+
|
|
193
|
+
HtmlContent
|
|
194
|
+
= chars:HtmlChar*
|
|
195
|
+
{ return chars.join(""); }
|
|
196
|
+
|
|
197
|
+
HtmlChar
|
|
198
|
+
= nested:"<" content:HtmlContent ">"
|
|
199
|
+
{ return "<" + content + ">"; }
|
|
200
|
+
/ [^<>]
|
|
201
|
+
|
|
202
|
+
// scan.l: {NAME} → T_atom (case-sensitive identifier)
|
|
203
|
+
// scan.l: {NUMBER} → T_atom (numeric literal returned as string)
|
|
204
|
+
// Keywords are excluded from plain atoms to avoid ambiguity.
|
|
205
|
+
PlainAtom
|
|
206
|
+
= NumericLiteral
|
|
207
|
+
/ !ReservedWord n:Name { return n; }
|
|
208
|
+
|
|
209
|
+
// scan.l: NAME = {LETTER}({LETTER}|{DIGIT})*
|
|
210
|
+
// scan.l: LETTER = [A-Za-z_\200-\377] (underscore + ASCII letters + high bytes)
|
|
211
|
+
// scan.l treats any byte >= 0x80 as a NAME character; on UTF-8 input that is
|
|
212
|
+
// any non-ASCII code point, so the class spans \x80– (the BMP: Cyrillic,
|
|
213
|
+
// CJK, etc.), not just the Latin-1 \x80–\xFF range.
|
|
214
|
+
Name
|
|
215
|
+
= first:[A-Za-z_\x80-] rest:[A-Za-z_0-9\x80-]*
|
|
216
|
+
{ return first + rest.join(""); }
|
|
217
|
+
|
|
218
|
+
// scan.l: NUMBER = [-]?(({DIGIT}+(\.{DIGIT}*)?)|(\.{DIGIT}+))
|
|
219
|
+
// Returned as string per spec requirement.
|
|
220
|
+
NumericLiteral
|
|
221
|
+
= s:( "-"? ( [0-9]+ ( "." [0-9]* )? / "." [0-9]+ ) ( [eE] [+-]? [0-9]+ )? )
|
|
222
|
+
{ return Array.isArray(s) ? s.flat(Infinity).filter(x => x !== null && x !== undefined).join("") : String(s); }
|
|
223
|
+
|
|
224
|
+
// ── Case-insensitive keywords ─────────────────────────────────────────────────
|
|
225
|
+
// scan.l: keywords are matched case-insensitively in the flex rules
|
|
226
|
+
// (flex rules come before NAME rule, so they take priority)
|
|
227
|
+
StrictKw = [Ss][Tt][Rr][Ii][Cc][Tt] !NameContinue
|
|
228
|
+
GraphKw = [Gg][Rr][Aa][Pp][Hh] !NameContinue
|
|
229
|
+
DigraphKw = [Dd][Ii][Gg][Rr][Aa][Pp][Hh] !NameContinue
|
|
230
|
+
NodeKw = [Nn][Oo][Dd][Ee] !NameContinue
|
|
231
|
+
EdgeKw = [Ee][Dd][Gg][Ee] !NameContinue
|
|
232
|
+
SubgraphKw = [Ss][Uu][Bb][Gg][Rr][Aa][Pp][Hh] !NameContinue
|
|
233
|
+
|
|
234
|
+
NameContinue = [A-Za-z_0-9\x80-]
|
|
235
|
+
|
|
236
|
+
// Reserved word set — used to exclude keywords from PlainAtom
|
|
237
|
+
ReservedWord
|
|
238
|
+
= ( [Ss][Tt][Rr][Ii][Cc][Tt]
|
|
239
|
+
/ [Dd][Ii][Gg][Rr][Aa][Pp][Hh]
|
|
240
|
+
/ [Gg][Rr][Aa][Pp][Hh]
|
|
241
|
+
/ [Nn][Oo][Dd][Ee]
|
|
242
|
+
/ [Ee][Dd][Gg][Ee]
|
|
243
|
+
/ [Ss][Uu][Bb][Gg][Rr][Aa][Pp][Hh]
|
|
244
|
+
) !NameContinue
|
|
245
|
+
|
|
246
|
+
// ── Whitespace and comments ───────────────────────────────────────────────────
|
|
247
|
+
// scan.l: [ \t\r] → ignored whitespace
|
|
248
|
+
// scan.l: \n → line_num++
|
|
249
|
+
// scan.l: "/*" → BEGIN(comment) ... "*"+"/" → BEGIN(INITIAL)
|
|
250
|
+
// scan.l: "//".* → ignored C++-style comment
|
|
251
|
+
// scan.l: ^"#".* → ppDirective (preprocessor line directives, ignored here)
|
|
252
|
+
// scan.l: "#".* → ignored shell-like comment
|
|
253
|
+
_ = ( [ \t\r\n]+ / BlockComment / LineComment / ShellComment )*
|
|
254
|
+
|
|
255
|
+
BlockComment
|
|
256
|
+
= "/*" ( !"*/" . )* "*/"
|
|
257
|
+
|
|
258
|
+
LineComment
|
|
259
|
+
= "//" [^\n]* ( "\n" / !. )
|
|
260
|
+
|
|
261
|
+
// scan.l: "#".* → ignore shell-like comments (also preprocessor directives)
|
|
262
|
+
ShellComment
|
|
263
|
+
= "#" [^\n]* ( "\n" / !. )
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Public API for the DOT-language parser.
|
|
5
|
+
*
|
|
6
|
+
* @see lib/cgraph/grammar.y
|
|
7
|
+
* @see lib/cgraph/scan.l
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { parse as peggyParse } from './dot.js';
|
|
11
|
+
import { Graph } from '../model/graph.js';
|
|
12
|
+
import type { GraphKind } from '../model/graph.js';
|
|
13
|
+
import type { Edge } from '../model/edge.js';
|
|
14
|
+
import { isHtmlValue, htmlValueContent } from '../common/html-string.js';
|
|
15
|
+
import { buildFromAst } from './builder.js';
|
|
16
|
+
import type { ParsedGraph } from './ast.js';
|
|
17
|
+
import type { GvError, GvErrorCode, GvExpectation } from '../errors.js';
|
|
18
|
+
import { friendlyMessageFor } from '../errors.js';
|
|
19
|
+
|
|
20
|
+
// ── ParseError ────────────────────────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Thrown for syntax errors or edge-direction violations.
|
|
24
|
+
*
|
|
25
|
+
* Implements the structured {@link GvError} contract: `location` is primary;
|
|
26
|
+
* `line`/`column` are convenience getters that delegate to it.
|
|
27
|
+
*/
|
|
28
|
+
export class ParseError extends Error implements GvError {
|
|
29
|
+
readonly type = 'syntax';
|
|
30
|
+
readonly code: GvErrorCode;
|
|
31
|
+
readonly friendlyMessage: string;
|
|
32
|
+
readonly location: { line: number; column: number; offset?: number };
|
|
33
|
+
readonly expected?: GvExpectation[];
|
|
34
|
+
|
|
35
|
+
constructor(
|
|
36
|
+
message: string,
|
|
37
|
+
code: GvErrorCode,
|
|
38
|
+
location: { line: number; column: number; offset?: number },
|
|
39
|
+
expected?: GvExpectation[],
|
|
40
|
+
) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.name = 'ParseError';
|
|
43
|
+
this.code = code;
|
|
44
|
+
this.location = location;
|
|
45
|
+
this.friendlyMessage = friendlyMessageFor(code);
|
|
46
|
+
if (expected !== undefined) this.expected = expected;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get line(): number {
|
|
50
|
+
return this.location.line;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get column(): number {
|
|
54
|
+
return this.location.column;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ── Source stripping ──────────────────────────────────────────────────────────
|
|
59
|
+
// Blank comments and the *interiors* of quoted / HTML strings so that
|
|
60
|
+
// validateEdgeOperators can regex for `--`/`->` without false positives from
|
|
61
|
+
// operators that merely appear inside a string or comment. Output is the SAME
|
|
62
|
+
// LENGTH as the input (every char maps to a space or itself) so a match offset
|
|
63
|
+
// in the stripped text maps 1:1 back to a line/column in the original source.
|
|
64
|
+
//
|
|
65
|
+
// This is a single left-to-right pass mirroring scan.l's start-conditions: a
|
|
66
|
+
// comment introducer (`#`, `//`, `/*`) is only recognized in the INITIAL state,
|
|
67
|
+
// never inside a quoted or HTML string; a `"`/`<` only opens a string in the
|
|
68
|
+
// initial state, never inside a comment. A previous regex-cascade stripped
|
|
69
|
+
// comments before strings, so a `#` inside a `_draw_="...-#000000..."` color
|
|
70
|
+
// (or `//` in a URL, `/*` in a label) was mistaken for a comment and blanked
|
|
71
|
+
// the string's closing `"` — corrupting quote parity for the rest of the file.
|
|
72
|
+
//
|
|
73
|
+
// @see lib/cgraph/scan.l — start-conditions: INITIAL, qstring, hstring;
|
|
74
|
+
// comment rules (:122-123 `#`, block/line comments) fire only in INITIAL;
|
|
75
|
+
// qstring rules (:137-142) handle `\"`, `\\`, and `\<newline>` continuation.
|
|
76
|
+
|
|
77
|
+
export class Stripper {
|
|
78
|
+
static strip(src: string): string {
|
|
79
|
+
const out: string[] = [];
|
|
80
|
+
const n = src.length;
|
|
81
|
+
let i = 0;
|
|
82
|
+
while (i < n) {
|
|
83
|
+
const c = src[i]!;
|
|
84
|
+
if (c === '/' && src[i + 1] === '*') i = Stripper.blankBlock(src, i, out);
|
|
85
|
+
else if ((c === '/' && src[i + 1] === '/') || c === '#') i = Stripper.blankLine(src, i, out);
|
|
86
|
+
else if (c === '"') i = Stripper.blankQuoted(src, i, out);
|
|
87
|
+
else if (c === '<') i = Stripper.blankHtml(src, i, out);
|
|
88
|
+
else { out.push(c); i++; }
|
|
89
|
+
}
|
|
90
|
+
return out.join('');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Blank a C-style block comment (incl. its newlines). @returns next index. */
|
|
94
|
+
private static blankBlock(src: string, i: number, out: string[]): number {
|
|
95
|
+
const n = src.length;
|
|
96
|
+
out.push(' ');
|
|
97
|
+
i += 2;
|
|
98
|
+
while (i < n && !(src[i] === '*' && src[i + 1] === '/')) { out.push(' '); i++; }
|
|
99
|
+
if (i < n) { out.push(' '); i += 2; }
|
|
100
|
+
return i;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Blank a `//` line comment or `#` shell comment to end of line (the newline
|
|
105
|
+
* is preserved). scan.l recognizes `#` as a comment anywhere in the initial
|
|
106
|
+
* state — but never inside a string, which is why this only fires from the
|
|
107
|
+
* top-level dispatch. @returns next index.
|
|
108
|
+
*/
|
|
109
|
+
private static blankLine(src: string, i: number, out: string[]): number {
|
|
110
|
+
const n = src.length;
|
|
111
|
+
const width = src[i] === '#' ? 1 : 2;
|
|
112
|
+
out.push(' '.repeat(width));
|
|
113
|
+
i += width;
|
|
114
|
+
while (i < n && src[i] !== '\n') { out.push(' '); i++; }
|
|
115
|
+
return i;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Blank the interior of a quoted string, keeping both quotes. `\<any>` (incl.
|
|
120
|
+
* `\"`, `\\`, and a `\<newline>` continuation) never terminates the string.
|
|
121
|
+
* @see lib/cgraph/scan.l qstring rules (:137-142). @returns next index.
|
|
122
|
+
*/
|
|
123
|
+
private static blankQuoted(src: string, i: number, out: string[]): number {
|
|
124
|
+
const n = src.length;
|
|
125
|
+
out.push('"');
|
|
126
|
+
i++;
|
|
127
|
+
while (i < n && src[i] !== '"') {
|
|
128
|
+
if (src[i] === '\\' && i + 1 < n) { out.push(' '); i += 2; }
|
|
129
|
+
else { out.push(' '); i++; }
|
|
130
|
+
}
|
|
131
|
+
if (i < n) { out.push('"'); i++; }
|
|
132
|
+
return i;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Blank the interior of an HTML string `<...>`, keeping the outer brackets and
|
|
137
|
+
* tracking nested `<>` like scan.l's html_nest counter. @returns next index.
|
|
138
|
+
*/
|
|
139
|
+
private static blankHtml(src: string, i: number, out: string[]): number {
|
|
140
|
+
const n = src.length;
|
|
141
|
+
out.push('<');
|
|
142
|
+
i++;
|
|
143
|
+
let depth = 1;
|
|
144
|
+
while (i < n && depth > 0) {
|
|
145
|
+
if (src[i] === '<') depth++;
|
|
146
|
+
else if (src[i] === '>') { depth--; if (depth === 0) break; }
|
|
147
|
+
out.push(' ');
|
|
148
|
+
i++;
|
|
149
|
+
}
|
|
150
|
+
if (i < n) { out.push('>'); i++; }
|
|
151
|
+
return i;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function stripCommentsAndStrings(src: string): string {
|
|
156
|
+
return Stripper.strip(src);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ── Edge-operator validation ──────────────────────────────────────────────────
|
|
160
|
+
|
|
161
|
+
export function offsetToLineCol(
|
|
162
|
+
src: string,
|
|
163
|
+
idx: number,
|
|
164
|
+
): { line: number; column: number; offset: number } {
|
|
165
|
+
const before = src.slice(0, idx);
|
|
166
|
+
const lines = before.split('\n');
|
|
167
|
+
return {
|
|
168
|
+
line: lines.length,
|
|
169
|
+
column: (lines[lines.length - 1]?.length ?? 0) + 1,
|
|
170
|
+
offset: idx,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export function findEdgeOp(
|
|
175
|
+
src: string,
|
|
176
|
+
pattern: RegExp,
|
|
177
|
+
): { line: number; column: number; offset: number } {
|
|
178
|
+
const idx = Stripper.strip(src).search(pattern);
|
|
179
|
+
return idx === -1 ? { line: 1, column: 1, offset: 0 } : offsetToLineCol(src, idx);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** @throws ParseError if the wrong edge operator is found. */
|
|
183
|
+
export function validateEdgeOperators(src: string, directed: boolean): void {
|
|
184
|
+
const stripped = Stripper.strip(src);
|
|
185
|
+
if (directed && /--(?!>)/.test(stripped)) {
|
|
186
|
+
const loc = findEdgeOp(src, /--(?!>)/);
|
|
187
|
+
throw new ParseError(
|
|
188
|
+
"undirected edge operator '--' is not allowed in a digraph; use '->'",
|
|
189
|
+
'EDGE_OP_UNDIRECTED_IN_DIRECTED',
|
|
190
|
+
loc,
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
if (!directed && /->/.test(stripped)) {
|
|
194
|
+
const loc = findEdgeOp(src, /->/);
|
|
195
|
+
throw new ParseError(
|
|
196
|
+
"directed edge operator '->' is not allowed in an undirected graph; use '--'",
|
|
197
|
+
'EDGE_OP_DIRECTED_IN_UNDIRECTED',
|
|
198
|
+
loc,
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// ── Peggy error unwrapping ────────────────────────────────────────────────────
|
|
204
|
+
|
|
205
|
+
export function isPeggyError(err: unknown): err is {
|
|
206
|
+
location: { start: { line: number; column: number; offset: number } };
|
|
207
|
+
expected: GvExpectation[];
|
|
208
|
+
found: string | null;
|
|
209
|
+
} {
|
|
210
|
+
if (err === null || typeof err !== 'object') return false;
|
|
211
|
+
const e = err as Record<string, unknown>;
|
|
212
|
+
if (typeof e['location'] !== 'object' || e['location'] === null) return false;
|
|
213
|
+
return 'start' in (e['location'] as object);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// ── Public parse ──────────────────────────────────────────────────────────────
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Parse a DOT-language string and return a Graph model.
|
|
220
|
+
* @throws ParseError for syntax errors or edge-direction violations.
|
|
221
|
+
*/
|
|
222
|
+
export function parse(src: string): Graph {
|
|
223
|
+
if (typeof src !== 'string') {
|
|
224
|
+
// Runtime guard for JS callers (the TS signature already forbids this):
|
|
225
|
+
// a non-string argument must not surface as an opaque internal TypeError.
|
|
226
|
+
throw new ParseError('DOT source must be a string', 'GENERIC_ERROR', {
|
|
227
|
+
line: 1,
|
|
228
|
+
column: 1,
|
|
229
|
+
offset: 0,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
let ast: ParsedGraph;
|
|
233
|
+
try {
|
|
234
|
+
ast = peggyParse(src) as ParsedGraph;
|
|
235
|
+
} catch (err: unknown) {
|
|
236
|
+
if (isPeggyError(err)) {
|
|
237
|
+
const start = err.location.start;
|
|
238
|
+
const code: GvErrorCode =
|
|
239
|
+
err.found === null ? 'SYNTAX_UNEXPECTED_EOF' : 'SYNTAX_ERROR';
|
|
240
|
+
throw new ParseError(
|
|
241
|
+
err instanceof Error ? err.message : String(err),
|
|
242
|
+
code,
|
|
243
|
+
{ line: start.line, column: start.column, offset: start.offset },
|
|
244
|
+
err.expected,
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
// Deeply-nested input overflows the recursive-descent parser's call stack;
|
|
248
|
+
// honor the documented ParseError contract instead of leaking a raw
|
|
249
|
+
// RangeError. @see ~/.claude/rules/security.md (bound untrusted input)
|
|
250
|
+
if (err instanceof RangeError) {
|
|
251
|
+
throw new ParseError(
|
|
252
|
+
'DOT source is too deeply nested to parse',
|
|
253
|
+
'GENERIC_ERROR',
|
|
254
|
+
{ line: 1, column: 1, offset: 0 },
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
throw err;
|
|
258
|
+
}
|
|
259
|
+
validateEdgeOperators(src, ast.directed);
|
|
260
|
+
return buildFromAst(ast);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// ── Serializer ────────────────────────────────────────────────────────────────
|
|
264
|
+
|
|
265
|
+
export function dotKeyword(kind: GraphKind): string {
|
|
266
|
+
if (kind === 'directed') return 'digraph';
|
|
267
|
+
if (kind === 'strict-directed') return 'strict digraph';
|
|
268
|
+
if (kind === 'undirected') return 'graph';
|
|
269
|
+
return 'strict graph';
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export function quoteId(id: string): string {
|
|
273
|
+
const rName = new RegExp('^[A-Za-z_\\x80-\\xFF][A-Za-z_0-9\\x80-\\xFF]*$');
|
|
274
|
+
const rNum = new RegExp('^-?(\\d+(\\.\\d*)?|\\.\\d+)$');
|
|
275
|
+
if (rName.test(id)) return id;
|
|
276
|
+
if (rNum.test(id)) return id;
|
|
277
|
+
return '"' + id.replace(/[\\]/g, '\\\\').replace(/["]/g, '\\"') + '"';
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export function attrMapStr(attrs: Map<string, string>): string {
|
|
281
|
+
const parts: string[] = [];
|
|
282
|
+
for (const [k, v] of attrs) {
|
|
283
|
+
const val = isHtmlValue(v) ? `<${htmlValueContent(v)}>` : quoteId(v);
|
|
284
|
+
parts.push(`${quoteId(k)}=${val}`);
|
|
285
|
+
}
|
|
286
|
+
return parts.join(', ');
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export function serializeHeader(g: Graph): string[] {
|
|
290
|
+
const nameStr = g.name ? ` ${quoteId(g.name)}` : '';
|
|
291
|
+
const keyword = g.parent !== null ? 'subgraph' : dotKeyword(g.kind);
|
|
292
|
+
const lines = [`${keyword}${nameStr} {`];
|
|
293
|
+
for (const [k, v] of g.attrs) lines.push(` ${quoteId(k)}=${quoteId(v)};`);
|
|
294
|
+
if (g.nodeDefaults.size > 0) lines.push(` node [${attrMapStr(g.nodeDefaults)}];`);
|
|
295
|
+
if (g.edgeDefaults.size > 0) lines.push(` edge [${attrMapStr(g.edgeDefaults)}];`);
|
|
296
|
+
return lines;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/** True when a child subgraph also contains the node (it will be written there). */
|
|
300
|
+
export function nodeInChildSubgraph(g: Graph, name: string): boolean {
|
|
301
|
+
for (const [, sg] of g.subgraphs) if (sg.nodes.has(name)) return true;
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** True when a child subgraph also contains the edge (it will be written there). */
|
|
306
|
+
export function edgeInChildSubgraph(g: Graph, edge: Edge): boolean {
|
|
307
|
+
for (const [, sg] of g.subgraphs) if (sg.edges.includes(edge)) return true;
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export function serializeNodes(g: Graph): string[] {
|
|
312
|
+
const lines: string[] = [];
|
|
313
|
+
for (const [, node] of g.nodes) {
|
|
314
|
+
if (nodeInChildSubgraph(g, node.name)) continue;
|
|
315
|
+
const q = quoteId(node.name);
|
|
316
|
+
if (node.attrs.size > 0) lines.push(` ${q} [${attrMapStr(node.attrs)}];`);
|
|
317
|
+
else lines.push(` ${q};`);
|
|
318
|
+
}
|
|
319
|
+
return lines;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export function serializeEdges(g: Graph): string[] {
|
|
323
|
+
const op = (g.kind === 'directed' || g.kind === 'strict-directed') ? '->' : '--';
|
|
324
|
+
const lines: string[] = [];
|
|
325
|
+
for (const edge of g.edges) {
|
|
326
|
+
if (edgeInChildSubgraph(g, edge)) continue;
|
|
327
|
+
const attr = edge.attrs.size > 0 ? ` [${attrMapStr(edge.attrs)}]` : '';
|
|
328
|
+
lines.push(` ${quoteId(edge.tail.name)} ${op} ${quoteId(edge.head.name)}${attr};`);
|
|
329
|
+
}
|
|
330
|
+
return lines;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export function serializeSubgraphs(g: Graph): string[] {
|
|
334
|
+
const lines: string[] = [];
|
|
335
|
+
for (const [, sg] of g.subgraphs) {
|
|
336
|
+
for (const line of serialize(sg).split('\n')) lines.push(` ${line}`);
|
|
337
|
+
}
|
|
338
|
+
return lines;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Serialize a Graph to DOT syntax for round-trip verification.
|
|
343
|
+
* Node/edge counts and attribute values are preserved.
|
|
344
|
+
*/
|
|
345
|
+
export function serialize(g: Graph): string {
|
|
346
|
+
return [
|
|
347
|
+
...serializeHeader(g),
|
|
348
|
+
...serializeNodes(g),
|
|
349
|
+
...serializeEdges(g),
|
|
350
|
+
...serializeSubgraphs(g),
|
|
351
|
+
'}',
|
|
352
|
+
].join('\n');
|
|
353
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
/** @see lib/pathplan/ */
|
|
3
|
+
|
|
4
|
+
export { POLYID_NONE, POLYID_UNKNOWN, inPoly } from './visibility.js';
|
|
5
|
+
export { triangulate } from './triang.js';
|
|
6
|
+
export { shortestPath } from './shortest.js';
|
|
7
|
+
export { obsOpen, obsClose, obsPath } from './vispath.js';
|
|
8
|
+
export { routeSpline, polyBarriers, makePolyline } from './route.js';
|
|
9
|
+
export type { Point, Poly, Edge } from './types.js';
|