@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,475 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shape rendering (polygon/ellipse + label) for polygon nodes.
|
|
5
|
+
*
|
|
6
|
+
* @see lib/common/shapes.c:poly_gencode
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Node } from '../model/node.js';
|
|
10
|
+
import type { Point } from '../model/geom.js';
|
|
11
|
+
import type { RenderJob } from '../gvc/job.js';
|
|
12
|
+
import type { RendererPlugin } from '../gvc/context.js';
|
|
13
|
+
import { gvrenderTextspan, withLabelEmitState } from '../gvc/textspan-emit.js';
|
|
14
|
+
import type { PolygonT, TextlabelT, GraphvizPolygonStyle, ShapeDesc } from './types.js';
|
|
15
|
+
import { ShapeKind } from './types.js';
|
|
16
|
+
import type { TextSpan } from './emit-types.js';
|
|
17
|
+
import { STAR } from './shapeData.js';
|
|
18
|
+
import type { PlacedHtml } from './htmltable-pos.js';
|
|
19
|
+
import type { ObjState } from '../gvc/job.js';
|
|
20
|
+
import { EMIT_CLUSTERS_LAST } from '../gvc/job.js';
|
|
21
|
+
import { FillType } from '../gvc/context.js';
|
|
22
|
+
import { emitHtmlLabel } from './htmltable-emit.js';
|
|
23
|
+
import { transformPoint } from '../gvc/device.js';
|
|
24
|
+
import { nodeAttr } from './poly-init.js';
|
|
25
|
+
import { substObjAnchor, interpretCRNL } from './subst.js';
|
|
26
|
+
import type { ResolvedFill, PolyStyleFlags } from './style-resolve.js';
|
|
27
|
+
import {
|
|
28
|
+
parseStyleFlags,
|
|
29
|
+
resolveNodeFillEx,
|
|
30
|
+
resolvePenColor,
|
|
31
|
+
resolvePenType,
|
|
32
|
+
resolvePenWidth,
|
|
33
|
+
styleTokens,
|
|
34
|
+
} from './style-resolve.js';
|
|
35
|
+
import { stripedBox, wedgedEllipse } from '../render/svg-multicolor.js';
|
|
36
|
+
import { resolveRenderColor, withColorScheme } from '../render/color-resolve.js';
|
|
37
|
+
import { svgNodeId } from '../render/svg-id.js';
|
|
38
|
+
import { drawRoundCorners, mcircleHack, underlineDraw } from './poly-shapes.js';
|
|
39
|
+
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Multicolor test
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* True when the fillcolor string contains more than one color segment.
|
|
46
|
+
* @see lib/common/shapes.c:2917 multicolor()
|
|
47
|
+
*/
|
|
48
|
+
function isMulticolor(fillcolor: string): boolean {
|
|
49
|
+
return fillcolor.includes(':');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Periphery ring renderers
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
|
|
56
|
+
/** Render one ellipse periphery ring for a node. */
|
|
57
|
+
export function renderEllipse(
|
|
58
|
+
ring: Point[],
|
|
59
|
+
coord: Point,
|
|
60
|
+
renderer: RendererPlugin,
|
|
61
|
+
job: RenderJob,
|
|
62
|
+
filled: boolean,
|
|
63
|
+
): void {
|
|
64
|
+
const rx = Math.abs((ring[1]!.x - ring[0]!.x) / 2);
|
|
65
|
+
const ry = Math.abs((ring[1]!.y - ring[0]!.y) / 2);
|
|
66
|
+
const center = transformPoint(coord, job);
|
|
67
|
+
renderer.ellipse(center, rx, ry, filled, job);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Render one polygon periphery ring for a node. */
|
|
71
|
+
export function renderPolygon(
|
|
72
|
+
ring: Point[], coord: Point, renderer: RendererPlugin, job: RenderJob, filled: boolean,
|
|
73
|
+
): void {
|
|
74
|
+
const pts = ring.map((v) => transformPoint({ x: v.x + coord.x, y: v.y + coord.y }, job));
|
|
75
|
+
renderer.polygon(pts, filled, job);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Bundled render context for periphery ring helpers. */
|
|
79
|
+
interface RingCtx {
|
|
80
|
+
renderer: RendererPlugin;
|
|
81
|
+
job: RenderJob;
|
|
82
|
+
style: PolyStyleFlags;
|
|
83
|
+
fillcolor: string;
|
|
84
|
+
shape: number;
|
|
85
|
+
diagonals: boolean;
|
|
86
|
+
rounded: boolean;
|
|
87
|
+
underline: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Render one ellipse periphery ring, dispatching to wedgedEllipse when
|
|
92
|
+
* style.wedged + j==0 + multicolor fillcolor.
|
|
93
|
+
* @see lib/common/shapes.c:poly_gencode :3026-3033
|
|
94
|
+
*/
|
|
95
|
+
function renderEllipseRing(
|
|
96
|
+
ring: Point[], coord: Point, filled: boolean, j: number, ctx: RingCtx,
|
|
97
|
+
): void {
|
|
98
|
+
if (ctx.style.wedged && j === 0 && isMulticolor(ctx.fillcolor)) {
|
|
99
|
+
const pf = ring.map(
|
|
100
|
+
(v) => transformPoint({ x: v.x + coord.x, y: v.y + coord.y }, ctx.job),
|
|
101
|
+
);
|
|
102
|
+
wedgedEllipse(ctx.job, pf, ctx.fillcolor, ctx.renderer);
|
|
103
|
+
renderEllipse(ring, coord, ctx.renderer, ctx.job, false); // boundary unfilled
|
|
104
|
+
} else {
|
|
105
|
+
renderEllipse(ring, coord, ctx.renderer, ctx.job, filled);
|
|
106
|
+
}
|
|
107
|
+
// Mcircle: two chords after the ellipse. @see lib/common/shapes.c:3034
|
|
108
|
+
if (ctx.diagonals) mcircleHack(ring, coord, ctx);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Render one polygon periphery ring, dispatching to stripedBox when
|
|
113
|
+
* style.striped + j==0.
|
|
114
|
+
* @see lib/common/shapes.c:poly_gencode :3037-3043
|
|
115
|
+
*/
|
|
116
|
+
/** Striped j===0 ring: the multicolor box plus an unfilled boundary polygon. */
|
|
117
|
+
function renderStripedRing(ring: Point[], coord: Point, ctx: RingCtx): void {
|
|
118
|
+
const af = ring.map((v) => transformPoint({ x: v.x + coord.x, y: v.y + coord.y }, ctx.job));
|
|
119
|
+
stripedBox(ctx.job, af, ctx.fillcolor, true, ctx.renderer);
|
|
120
|
+
renderPolygon(ring, coord, ctx.renderer, ctx.job, false); // boundary unfilled
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function renderPolyRing(
|
|
124
|
+
ring: Point[], coord: Point, filled: boolean, j: number, ctx: RingCtx,
|
|
125
|
+
): void {
|
|
126
|
+
// C dispatch order: striped, underline, SPECIAL_CORNERS, plain.
|
|
127
|
+
// @see lib/common/shapes.c:poly_gencode :3037-3052
|
|
128
|
+
if (ctx.style.striped && j === 0) renderStripedRing(ring, coord, ctx);
|
|
129
|
+
else if (ctx.underline) underlineDraw(ring, coord, filled, ctx);
|
|
130
|
+
// STAR carries a custom vertex generator but draws as a PLAIN filled polygon
|
|
131
|
+
// (C's p_star has option.shape=0 — no special-draw style), unlike CYLINDER and
|
|
132
|
+
// the biological shapes. @see lib/common/shapes.c:p_star / poly_gencode
|
|
133
|
+
else if ((ctx.shape !== 0 && ctx.shape !== STAR) || ctx.diagonals || ctx.rounded) {
|
|
134
|
+
drawRoundCorners(ring, coord, filled, ctx);
|
|
135
|
+
} else renderPolygon(ring, coord, ctx.renderer, ctx.job, filled);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Draw the node boundary: one ring per periphery, innermost first.
|
|
140
|
+
* The `filled` flag is passed to the FIRST ring (j===0) only; all
|
|
141
|
+
* later rings receive false — matching C: `filled = 0` after first ring.
|
|
142
|
+
*
|
|
143
|
+
* @see lib/common/shapes.c:poly_gencode (peripheries draw loop, :3018-3056)
|
|
144
|
+
*/
|
|
145
|
+
function renderPeripheries(
|
|
146
|
+
poly: PolygonT, coord: Point, filled: boolean, ctx: RingCtx,
|
|
147
|
+
): void {
|
|
148
|
+
const sides = poly.sides <= 2 ? 2 : poly.sides;
|
|
149
|
+
const verts = poly.vertices!;
|
|
150
|
+
for (let j = 0; j < poly.peripheries; j++) {
|
|
151
|
+
const ring = verts.slice(j * sides, (j + 1) * sides);
|
|
152
|
+
if (ring.length < sides) break;
|
|
153
|
+
// C: filled applies to j===0 only; filled=0 for all later rings.
|
|
154
|
+
const ringFilled = j === 0 ? filled : false;
|
|
155
|
+
if (poly.sides <= 2) {
|
|
156
|
+
renderEllipseRing(ring, coord, ringFilled, j, ctx);
|
|
157
|
+
} else {
|
|
158
|
+
renderPolyRing(ring, coord, ringFilled, j, ctx);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// Label rendering
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Render the text label for a node.
|
|
169
|
+
*
|
|
170
|
+
* @see lib/common/labels.c:emit_label
|
|
171
|
+
* @see lib/common/shapes.c:poly_gencode (sets ND_label.pos = ND_coord)
|
|
172
|
+
*/
|
|
173
|
+
export function renderLabel(
|
|
174
|
+
label: TextlabelT,
|
|
175
|
+
coord: Point,
|
|
176
|
+
renderer: RendererPlugin,
|
|
177
|
+
job: RenderJob,
|
|
178
|
+
): void {
|
|
179
|
+
if (label.u.kind !== 'txt' || label.u.nspans < 1) return;
|
|
180
|
+
label.pos = coord;
|
|
181
|
+
label.set = true;
|
|
182
|
+
// First-span baseline per valign (labelloc). @see lib/common/labels.c:240-251
|
|
183
|
+
const VALIGN_TOP = 't'.charCodeAt(0);
|
|
184
|
+
const VALIGN_BOTTOM = 'b'.charCodeAt(0);
|
|
185
|
+
let py = label.valign === VALIGN_TOP
|
|
186
|
+
? coord.y + label.space.y / 2.0 - label.fontsize
|
|
187
|
+
: label.valign === VALIGN_BOTTOM
|
|
188
|
+
? coord.y - label.space.y / 2.0 + label.dimen.y - label.fontsize
|
|
189
|
+
: coord.y + label.dimen.y / 2.0 - label.fontsize;
|
|
190
|
+
for (let i = 0; i < label.u.nspans; i++) {
|
|
191
|
+
const span = label.u.span[i] as TextSpan;
|
|
192
|
+
// @see lib/common/labels.c:emit_label (254-266)
|
|
193
|
+
const px = span.just === 'l' ? coord.x - label.space.x / 2.0
|
|
194
|
+
: span.just === 'r' ? coord.x + label.space.x / 2.0
|
|
195
|
+
: coord.x;
|
|
196
|
+
gvrenderTextspan(renderer, { x: px, y: py }, span, job);
|
|
197
|
+
py -= span.size.y;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Dispatch HTML or text label rendering for a node. */
|
|
202
|
+
function renderNodeLabel(
|
|
203
|
+
n: Node,
|
|
204
|
+
coord: Point,
|
|
205
|
+
renderer: RendererPlugin,
|
|
206
|
+
job: RenderJob,
|
|
207
|
+
): void {
|
|
208
|
+
const label = n.info.label as TextlabelT | undefined;
|
|
209
|
+
if (label === undefined) return;
|
|
210
|
+
if (label.html && label.u.kind === 'html') {
|
|
211
|
+
label.pos = coord;
|
|
212
|
+
label.set = true;
|
|
213
|
+
// Route the HTML label's box/fill/text ops into the node LABEL emit-state
|
|
214
|
+
// (→ _ldraw_ for xdot), not the node DRAW state. SVG ignores emit_state.
|
|
215
|
+
const html = label.u.html as PlacedHtml;
|
|
216
|
+
withLabelEmitState(job, () => emitHtmlLabel(html, coord, renderer, job));
|
|
217
|
+
} else {
|
|
218
|
+
renderLabel(label, coord, renderer, job);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Anchor helpers
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
|
|
226
|
+
/** Non-empty node attr (root-default inheritance), or undefined. */
|
|
227
|
+
function anchorAttr(n: Node, key: string): string | undefined {
|
|
228
|
+
const v = nodeAttr(n, n.root, key);
|
|
229
|
+
return v !== undefined && v !== '' ? v : undefined;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** Resolve tooltip string: explicit attr, or fall back to label text. */
|
|
233
|
+
function resolveTooltip(n: Node, tooltip: string | undefined): string {
|
|
234
|
+
if (tooltip !== undefined) return substObjAnchor(interpretCRNL(tooltip), n);
|
|
235
|
+
const label = n.info.label as TextlabelT | undefined;
|
|
236
|
+
return label?.text ?? '';
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Open the whole-node anchor when the node has a URL or tooltip.
|
|
241
|
+
* Returns true when the caller must close the anchor after the label.
|
|
242
|
+
* @see lib/common/shapes.c:poly_gencode (doMap)
|
|
243
|
+
* @see lib/common/emit.c:initObjMapData / initMapData
|
|
244
|
+
*/
|
|
245
|
+
function beginNodeAnchor(n: Node, renderer: RendererPlugin, job: RenderJob): boolean {
|
|
246
|
+
const url = anchorAttr(n, 'href') ?? anchorAttr(n, 'URL');
|
|
247
|
+
const tooltip = anchorAttr(n, 'tooltip');
|
|
248
|
+
if (url === undefined && tooltip === undefined) return false;
|
|
249
|
+
renderer.beginAnchor?.(
|
|
250
|
+
url !== undefined ? substObjAnchor(url, n) : '',
|
|
251
|
+
resolveTooltip(n, tooltip),
|
|
252
|
+
anchorAttr(n, 'target') ?? '',
|
|
253
|
+
svgNodeId(n, job),
|
|
254
|
+
job,
|
|
255
|
+
);
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// ---------------------------------------------------------------------------
|
|
260
|
+
// Style resolution — populates job.obj from node attrs
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Copy gradient fields from a linear/radial ResolvedFill onto obj.
|
|
265
|
+
* Extracted helper; keeps applyFillState within CCN/param limits.
|
|
266
|
+
* @see lib/common/shapes.c:2985-2998 GRADIENT/RGRADIENT block
|
|
267
|
+
*/
|
|
268
|
+
function applyGradientFields(
|
|
269
|
+
obj: ObjState,
|
|
270
|
+
fill: Extract<ResolvedFill, { kind: 'linear' | 'radial' }>,
|
|
271
|
+
): void {
|
|
272
|
+
obj.fill = fill.kind === 'radial' ? FillType.Radial : FillType.Linear;
|
|
273
|
+
obj.fillColor = resolveRenderColor(fill.fillColor);
|
|
274
|
+
obj.stopColor = resolveRenderColor(fill.stopColor);
|
|
275
|
+
obj.gradientFrac = fill.frac;
|
|
276
|
+
obj.gradientAngle = fill.angle;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** True when the node's bound shape is `shape=point`. @see types.h:SH_POINT */
|
|
280
|
+
export function isPointNode(n: Node): boolean {
|
|
281
|
+
return (n.info.shape as ShapeDesc | undefined)?.kind === ShapeKind.SH_POINT;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Default fill color for a point: fillcolor, else color, else "black".
|
|
286
|
+
* @see lib/common/shapes.c:findFillDflt (point_gencode passes "black")
|
|
287
|
+
*/
|
|
288
|
+
function findFillDflt(n: Node): string {
|
|
289
|
+
const fillcolor = nodeAttr(n, n.root, 'fillcolor');
|
|
290
|
+
if (fillcolor !== undefined && fillcolor !== '') return fillcolor;
|
|
291
|
+
const color = nodeAttr(n, n.root, 'color');
|
|
292
|
+
if (color !== undefined && color !== '') return color;
|
|
293
|
+
return 'black';
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Apply fill state to obj using the discriminated resolveNodeFillEx.
|
|
298
|
+
* Sets obj.id to the node's SVG id (nodeN) so emitGradientDefs can
|
|
299
|
+
* prefix the gradient id correctly.
|
|
300
|
+
* Returns true when the node should render as filled (truthy fill kind).
|
|
301
|
+
* @see lib/common/shapes.c:2981-2999 GRADIENT/RGRADIENT/FILL/0 block
|
|
302
|
+
* @see plugin/core/gvrender_core_svg.c:572 svg_gradstyle (id prefix from obj->id)
|
|
303
|
+
*/
|
|
304
|
+
function applyFillState(obj: ObjState, n: Node, job: RenderJob): boolean {
|
|
305
|
+
// Set obj.id so gradient prefix matches C's getObjId result (DOT `id` attr,
|
|
306
|
+
// or "<gid>_node<seq>"). @see lib/common/emit.c:209 getObjId (AGNODE case)
|
|
307
|
+
obj.id = svgNodeId(n, job);
|
|
308
|
+
// point_gencode always fills, defaulting to black (AD-4).
|
|
309
|
+
if (isPointNode(n)) {
|
|
310
|
+
obj.fill = FillType.Solid;
|
|
311
|
+
obj.fillColor = resolveRenderColor(findFillDflt(n));
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
const fillRes = resolveNodeFillEx({
|
|
315
|
+
style: nodeAttr(n, n.root, 'style'),
|
|
316
|
+
fillcolor: nodeAttr(n, n.root, 'fillcolor'),
|
|
317
|
+
color: nodeAttr(n, n.root, 'color'),
|
|
318
|
+
gradientangle: nodeAttr(n, n.root, 'gradientangle'),
|
|
319
|
+
});
|
|
320
|
+
if (fillRes.kind === 'none') { obj.fill = FillType.None; return false; }
|
|
321
|
+
if (fillRes.kind === 'solid') {
|
|
322
|
+
obj.fill = FillType.Solid;
|
|
323
|
+
obj.fillColor = resolveRenderColor(fillRes.color);
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
applyGradientFields(obj, fillRes);
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** Apply pen state (color, type, width) to obj. @see lib/common/shapes.c:3007 */
|
|
331
|
+
function applyPenState(obj: ObjState, styleAttr: string | undefined,
|
|
332
|
+
colorAttr: string | undefined, penwidthAttr: string | undefined): void {
|
|
333
|
+
const flags = parseStyleFlags(styleAttr);
|
|
334
|
+
obj.penColor = resolveRenderColor(resolvePenColor(colorAttr));
|
|
335
|
+
obj.pen = resolvePenType(flags);
|
|
336
|
+
obj.penWidth = resolvePenWidth(flags, penwidthAttr);
|
|
337
|
+
// Raw style tokens for xdot's `S` ops; SVG reads only obj.pen (xdot-only).
|
|
338
|
+
obj.rawStyle = styleTokens(styleAttr);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Resolve and apply node style/fill/pen attrs to the given ObjState.
|
|
343
|
+
* Returns true when the node should be rendered as filled.
|
|
344
|
+
*
|
|
345
|
+
* Gradient fills: Linear/Radial FillType + fillColor/stopColor/frac/angle set.
|
|
346
|
+
* Shared with record_gencode (records resolve style identically in C).
|
|
347
|
+
* @see lib/common/shapes.c:poly_gencode (~2981-3007)
|
|
348
|
+
*/
|
|
349
|
+
export function applyNodeStyle(obj: ObjState, n: Node, job: RenderJob): boolean {
|
|
350
|
+
const styleAttr = nodeAttr(n, n.root, 'style');
|
|
351
|
+
const colorAttr = nodeAttr(n, n.root, 'color');
|
|
352
|
+
// C wraps each node's color block with setColorScheme so a `colorscheme`
|
|
353
|
+
// attr applies to bare scheme indices. @see lib/common/emit.c:1781/1789
|
|
354
|
+
return withColorScheme(nodeAttr(n, n.root, 'colorscheme'), () => {
|
|
355
|
+
const filled = applyFillState(obj, n, job);
|
|
356
|
+
applyPenState(obj, styleAttr, colorAttr, nodeAttr(n, n.root, 'penwidth'));
|
|
357
|
+
return filled;
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Compute effective poly for borderless-filled case; applies transparent pen.
|
|
363
|
+
* C: if (peripheries==0 && filled && pfilled) { peripheries=1; pencolor=transparent }
|
|
364
|
+
* @see lib/common/shapes.c:3012-3016
|
|
365
|
+
*/
|
|
366
|
+
function prepareDrawPoly(poly: PolygonT, filled: boolean, obj: ObjState): PolygonT {
|
|
367
|
+
if (poly.peripheries !== 0 || !filled) return poly;
|
|
368
|
+
obj.penColor = { type: 'string', s: 'transparent' };
|
|
369
|
+
return { ...poly, peripheries: 1 };
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// ---------------------------------------------------------------------------
|
|
373
|
+
// Public entry point
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
|
|
376
|
+
/** Resolved draw inputs for polyGencode — reduces CCN of the entry point. */
|
|
377
|
+
interface NodeDrawCtx {
|
|
378
|
+
poly: PolygonT;
|
|
379
|
+
coord: Point;
|
|
380
|
+
filled: boolean;
|
|
381
|
+
ringCtx: RingCtx;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* C poly_gencode scales every vertex by xsize/ysize = (ND_lw+ND_rw) /
|
|
386
|
+
* INCH2PS(ND_width) etc. (shapes.c:3010-3011) — squashing the polygon back to
|
|
387
|
+
* the lw/rw/ht extent when an engine leaves ND_width/ND_height divergent
|
|
388
|
+
* (patchwork's finishNode lets poly_init clobber them while the tile survives
|
|
389
|
+
* in lw/rw/ht). On the normal path C's factor is EXACTLY 1.0 by construction
|
|
390
|
+
* (gv_nodesize derives lw/rw from INCH2PS(ND_width)); the port's compressed
|
|
391
|
+
* dataflow can land at 1±ULP where C is exactly 1, so identity-within-ULP is
|
|
392
|
+
* treated as C's exact-1 case and left unscaled.
|
|
393
|
+
*/
|
|
394
|
+
function vertexScale(n: Node, poly: PolygonT): PolygonT {
|
|
395
|
+
const info = n.info;
|
|
396
|
+
if (poly.vertices == null || info.width === undefined || info.height === undefined) {
|
|
397
|
+
return poly;
|
|
398
|
+
}
|
|
399
|
+
const xsize = (info.lw + info.rw) / (info.width * 72);
|
|
400
|
+
const ysize = info.ht / (info.height * 72);
|
|
401
|
+
if (Math.abs(xsize - 1) < 1e-9 && Math.abs(ysize - 1) < 1e-9) return poly;
|
|
402
|
+
return {
|
|
403
|
+
...poly,
|
|
404
|
+
vertices: poly.vertices.map((v) => ({ x: v.x * xsize, y: v.y * ysize })),
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/** Validate and resolve poly/style context for a node; returns null if skip. */
|
|
409
|
+
function resolveNodeDrawCtx(job: RenderJob, n: Node): NodeDrawCtx | null {
|
|
410
|
+
const rawPoly = n.info.shape_info as PolygonT | undefined;
|
|
411
|
+
if (rawPoly === undefined || rawPoly.vertices === undefined) return null;
|
|
412
|
+
const poly = vertexScale(n, rawPoly);
|
|
413
|
+
const coord = n.info.coord ?? { x: 0, y: 0 };
|
|
414
|
+
const obj = job.obj;
|
|
415
|
+
const filled = obj !== null && applyNodeStyle(obj, n, job);
|
|
416
|
+
const drawPoly = obj !== null ? prepareDrawPoly(poly, filled, obj) : poly;
|
|
417
|
+
const styleFlags = parseStyleFlags(nodeAttr(n, n.root, 'style'));
|
|
418
|
+
const ringCtx: RingCtx = {
|
|
419
|
+
renderer: job.renderer!,
|
|
420
|
+
job,
|
|
421
|
+
style: styleFlags,
|
|
422
|
+
fillcolor: nodeAttr(n, n.root, 'fillcolor') ?? '',
|
|
423
|
+
...specialCornerFlags(drawPoly.option, styleFlags),
|
|
424
|
+
};
|
|
425
|
+
return { poly: drawPoly, coord, filled, ringCtx };
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Combine the shape's polygon-option flags with the style-attribute flags, as
|
|
430
|
+
* C does (checkStyle: istyle = style_or(istyle, poly->option)).
|
|
431
|
+
*/
|
|
432
|
+
function specialCornerFlags(
|
|
433
|
+
opt: GraphvizPolygonStyle, style: PolyStyleFlags,
|
|
434
|
+
): { shape: number; diagonals: boolean; rounded: boolean; underline: boolean } {
|
|
435
|
+
return {
|
|
436
|
+
shape: opt.shape,
|
|
437
|
+
diagonals: opt.diagonals || style.diagonals,
|
|
438
|
+
rounded: opt.rounded || style.rounded,
|
|
439
|
+
underline: opt.underline || style.underline,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Render node shape (polygon/ellipse) and label.
|
|
445
|
+
* Shape codefn — called from walkNodes.
|
|
446
|
+
* @see lib/common/shapes.c:poly_gencode
|
|
447
|
+
*/
|
|
448
|
+
export function polyGencode(rawJob: unknown, rawNode: unknown): void {
|
|
449
|
+
const job = rawJob as RenderJob;
|
|
450
|
+
const n = rawNode as Node;
|
|
451
|
+
const renderer = job.renderer;
|
|
452
|
+
if (!renderer) return;
|
|
453
|
+
const ctx = resolveNodeDrawCtx(job, n);
|
|
454
|
+
if (ctx === null) return;
|
|
455
|
+
// EMIT_CLUSTERS_LAST (map device): the node's own anchor <area> is emitted
|
|
456
|
+
// AFTER its shape and label, so an inner HTML cell's area precedes the
|
|
457
|
+
// node's. Save the node hot spot first — HTML cells overwrite obj.urlMapPts
|
|
458
|
+
// via emit_map_rect — and restore it for the deferred anchor.
|
|
459
|
+
// @see lib/common/shapes.c:poly_gencode (2936, 3087-3092)
|
|
460
|
+
const clustersLast = (job.flags & EMIT_CLUSTERS_LAST) !== 0;
|
|
461
|
+
const savedShape = job.obj?.urlMapShape;
|
|
462
|
+
const savedPts = job.obj?.urlMapPts;
|
|
463
|
+
let inAnchor = clustersLast ? false : beginNodeAnchor(n, renderer, job);
|
|
464
|
+
renderPeripheries(ctx.poly, ctx.coord, ctx.filled, ctx.ringCtx);
|
|
465
|
+
// point_gencode never emits a label (AD-3).
|
|
466
|
+
if (!isPointNode(n)) renderNodeLabel(n, ctx.coord, renderer, job);
|
|
467
|
+
if (clustersLast) {
|
|
468
|
+
if (job.obj && savedPts !== undefined && savedShape !== undefined) {
|
|
469
|
+
job.obj.urlMapShape = savedShape;
|
|
470
|
+
job.obj.urlMapPts = savedPts;
|
|
471
|
+
}
|
|
472
|
+
inAnchor = beginNodeAnchor(n, renderer, job);
|
|
473
|
+
}
|
|
474
|
+
if (inAnchor) renderer.endAnchor?.(job);
|
|
475
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shape and label initialisation for polygon nodes.
|
|
5
|
+
*
|
|
6
|
+
* @see lib/common/shapes.c:poly_init
|
|
7
|
+
* @see lib/common/utils.c:common_init_node
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Node } from '../model/node.js';
|
|
11
|
+
import type { Graph } from '../model/graph.js';
|
|
12
|
+
import type { TextMeasurer } from './textmeasure.js';
|
|
13
|
+
import type { PolygonT, ShapeDesc } from './types.js';
|
|
14
|
+
import { ShapeKind } from './types.js';
|
|
15
|
+
import type { TextlabelT } from './types.js';
|
|
16
|
+
import { bindShape } from './shapes.js';
|
|
17
|
+
import { isHtmlValue, htmlValueContent } from './html-string.js';
|
|
18
|
+
// Circular imports: poly-init ↔ record / htmltable-pos — safe for function declarations.
|
|
19
|
+
import { recordNodeInit } from './record.js';
|
|
20
|
+
import {
|
|
21
|
+
makeAnyLabel,
|
|
22
|
+
DEFAULT_FONTSIZE,
|
|
23
|
+
DEFAULT_FONTNAME,
|
|
24
|
+
DEFAULT_COLOR,
|
|
25
|
+
} from './make-label.js';
|
|
26
|
+
import { computeVertices } from './poly-vertices.js';
|
|
27
|
+
|
|
28
|
+
// Default half-dimensions in points (72 dpi, 0.75 in wide, 0.5 in tall)
|
|
29
|
+
const DEFAULT_LW = 27;
|
|
30
|
+
const DEFAULT_RW = 27;
|
|
31
|
+
const DEFAULT_HT = 36;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Read a node attribute: the node's own value, else the node-attribute defaults
|
|
35
|
+
* (`node [...]`) captured from the node's declaring scope up to root *at the
|
|
36
|
+
* time the node was created*. The snapshot makes a `node [...]` declared after
|
|
37
|
+
* the node — at any scope — correctly not apply, and lets a cluster-scoped
|
|
38
|
+
* default reach nodes declared in that cluster, as the oracle does.
|
|
39
|
+
*
|
|
40
|
+
* Programmatically created nodes have no snapshot; they fall back to the live
|
|
41
|
+
* defaults of the passed graph `g` and root.
|
|
42
|
+
* @see lib/cgraph/attr.c:agxget; src/parser/builder.ts:effectiveNodeDefaults
|
|
43
|
+
*/
|
|
44
|
+
export function nodeAttr(n: Node, g: Graph, key: string): string | undefined {
|
|
45
|
+
const own = n.attrs.get(key);
|
|
46
|
+
if (own !== undefined) return own;
|
|
47
|
+
if (n.nodeDefaultsSnapshot !== undefined) return n.nodeDefaultsSnapshot.get(key);
|
|
48
|
+
return g.nodeDefaults.get(key)
|
|
49
|
+
?? (g !== g.root ? g.root.nodeDefaults.get(key) : undefined);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Read label-font attributes from node, falling back to defaults. */
|
|
53
|
+
export function readFontAttrs(n: Node, g: Graph): {
|
|
54
|
+
fontname: string;
|
|
55
|
+
fontsize: number;
|
|
56
|
+
fontcolor: string;
|
|
57
|
+
} {
|
|
58
|
+
return {
|
|
59
|
+
fontname: nodeAttr(n, g, 'fontname') ?? DEFAULT_FONTNAME,
|
|
60
|
+
fontsize: parseFloat(nodeAttr(n, g, 'fontsize') ?? String(DEFAULT_FONTSIZE)),
|
|
61
|
+
fontcolor: nodeAttr(n, g, 'fontcolor') ?? DEFAULT_COLOR,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Assign computed polygon vertices to node shape_info.
|
|
66
|
+
*
|
|
67
|
+
* Vertices are computed from the UNFLIPPED visual dimensions (width × 72,
|
|
68
|
+
* height × 72) so that the rendered ellipse/polygon is always the
|
|
69
|
+
* correct shape before any rotation is applied by gvPostprocess.
|
|
70
|
+
*
|
|
71
|
+
* n.info.width / n.info.height are stored in INCHES (unflipped) by
|
|
72
|
+
* storeNodeSize (nodeinit.ts). lw/rw/ht are the LAYOUT-FLIPPED values;
|
|
73
|
+
* using them would produce swapped rx/ry for LR/RL graphs.
|
|
74
|
+
*
|
|
75
|
+
* @see lib/common/shapes.c:poly_init — vertices use bb.x/bb.y (unflipped)
|
|
76
|
+
*/
|
|
77
|
+
export function assignShapeInfo(n: Node, polyDesc: PolygonT): void {
|
|
78
|
+
// Prefer the stored unflipped dimensions; fall back to lw+rw / ht for
|
|
79
|
+
// the no-measurer path where width/height may not be set.
|
|
80
|
+
const w = n.info.width !== undefined
|
|
81
|
+
? n.info.width * 72
|
|
82
|
+
: (n.info.lw || DEFAULT_LW) + (n.info.rw || DEFAULT_RW);
|
|
83
|
+
const h = n.info.height !== undefined
|
|
84
|
+
? n.info.height * 72
|
|
85
|
+
: (n.info.ht || DEFAULT_HT);
|
|
86
|
+
const base = n.info.base_width !== undefined && n.info.base_height !== undefined
|
|
87
|
+
? { w: n.info.base_width * 72, h: n.info.base_height * 72 }
|
|
88
|
+
: undefined;
|
|
89
|
+
n.info.shape_info = {
|
|
90
|
+
...polyDesc,
|
|
91
|
+
vertices: computeVertices(polyDesc, w, h, base),
|
|
92
|
+
} as PolygonT;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Initialise shape descriptor and label for a node before rendering.
|
|
97
|
+
* Record nodes are initialised during layout (their size depends on the
|
|
98
|
+
* field tree); only build them here if layout did not.
|
|
99
|
+
* @see lib/common/shapes.c:poly_init
|
|
100
|
+
*/
|
|
101
|
+
/** Build the node's label via the unified C make_label boundary. */
|
|
102
|
+
export function buildNodeLabel(n: Node, g: Graph, measurer: TextMeasurer): void {
|
|
103
|
+
// Layout init may already have built the label; keep it (and any
|
|
104
|
+
// position it acquired) rather than re-measuring at render time.
|
|
105
|
+
if ((n.info.label as TextlabelT | undefined) !== undefined) return;
|
|
106
|
+
const labelAttr = nodeAttr(n, g, 'label');
|
|
107
|
+
const font = readFontAttrs(n, g);
|
|
108
|
+
const isHtml = labelAttr !== undefined && isHtmlValue(labelAttr);
|
|
109
|
+
const content = isHtml ? htmlValueContent(labelAttr) : (labelAttr ?? n.name);
|
|
110
|
+
n.info.label = makeAnyLabel(content, isHtml, font, measurer, n);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function polyInit(n: Node, g: Graph, measurer: TextMeasurer): void {
|
|
114
|
+
const shapeName = nodeAttr(n, g, 'shape') ?? 'ellipse';
|
|
115
|
+
const shapefile = nodeAttr(n, g, 'shapefile');
|
|
116
|
+
n.info.shape = bindShape(shapeName, shapefile);
|
|
117
|
+
// C warns when the custom shape's image cannot be sized (headless: always).
|
|
118
|
+
// @see lib/common/shapes.c:2027-2033
|
|
119
|
+
if (shapefile !== undefined && shapefile !== '' && shapeName !== 'epsf') {
|
|
120
|
+
console.error(`Warning: No or improper shapefile="${shapefile}" for node "${n.name}"`);
|
|
121
|
+
}
|
|
122
|
+
if ((n.info.shape as ShapeDesc).kind === ShapeKind.SH_RECORD) {
|
|
123
|
+
if (n.info.shape_info === undefined) recordNodeInit(n, g, measurer);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
buildNodeLabel(n, g, measurer);
|
|
127
|
+
|
|
128
|
+
// Layout-time common_init_node already installed the attr-resolved
|
|
129
|
+
// polygon; keep it (C never re-runs poly_init at render time).
|
|
130
|
+
if (n.info.shape_info !== undefined) return;
|
|
131
|
+
const polyDesc = (n.info.shape as ShapeDesc).polygon;
|
|
132
|
+
if (polyDesc !== null) assignShapeInfo(n, polyDesc);
|
|
133
|
+
}
|