@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,367 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Fill, border, and rule-line helpers for HTML label emission.
|
|
5
|
+
* Ports setFill, mkPts, doSide, doBorder from lib/common/htmltable.c.
|
|
6
|
+
*
|
|
7
|
+
* @see lib/common/htmltable.c:setFill
|
|
8
|
+
* @see lib/common/htmltable.c:mkPts
|
|
9
|
+
* @see lib/common/htmltable.c:doSide
|
|
10
|
+
* @see lib/common/htmltable.c:doBorder
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { Point, Box } from '../model/geom.js';
|
|
14
|
+
import type { ObjState, RenderJob } from '../gvc/job.js';
|
|
15
|
+
import { ObjType, EmitState, MapShape } from '../gvc/job.js';
|
|
16
|
+
import type { RendererPlugin } from '../gvc/context.js';
|
|
17
|
+
import { FillType, PenType } from '../gvc/context.js';
|
|
18
|
+
import { transformPoint } from '../gvc/device.js';
|
|
19
|
+
import { resolveRenderColor } from '../render/color-resolve.js';
|
|
20
|
+
import { emitRoundedBezier } from './poly-shapes.js';
|
|
21
|
+
import { parseStyleFlags } from './style-resolve.js';
|
|
22
|
+
import {
|
|
23
|
+
BORDER_LEFT,
|
|
24
|
+
BORDER_TOP,
|
|
25
|
+
BORDER_RIGHT,
|
|
26
|
+
BORDER_BOTTOM,
|
|
27
|
+
BORDER_MASK,
|
|
28
|
+
} from './htmltable-types.js';
|
|
29
|
+
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Gradient spec parser
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Parse a color spec for gradient: "color1:color2" → [color1, color2].
|
|
36
|
+
* Single-color strings return null (not a gradient spec).
|
|
37
|
+
*
|
|
38
|
+
* @see lib/common/emit.c:findStopColor
|
|
39
|
+
*/
|
|
40
|
+
export function parseGradientSpec(color: string): [string, string] | null {
|
|
41
|
+
const idx = color.indexOf(':');
|
|
42
|
+
if (idx < 1) return null;
|
|
43
|
+
const c0 = color.slice(0, idx).trim();
|
|
44
|
+
const c1 = color.slice(idx + 1).trim();
|
|
45
|
+
if (c0.length === 0) return null;
|
|
46
|
+
return [c0, c1.length > 0 ? c1 : 'black'];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Scoped paint state — the port of C's gvrender set_fillcolor/set_pencolor
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Reusable scoped ObjState for HTML decoration painting.
|
|
55
|
+
*
|
|
56
|
+
* The live render path keeps no persistent ObjState (job.obj is null
|
|
57
|
+
* outside the dormant emit family), so decoration drawing pushes this
|
|
58
|
+
* one for the duration of each paint call. Mirrors C's
|
|
59
|
+
* gvrender_set_fillcolor/gvrender_set_pencolor on the active obj
|
|
60
|
+
* before each drawing call in emit_html_tbl / emit_html_cell.
|
|
61
|
+
*
|
|
62
|
+
* Module-level reuse avoids per-decoration allocation (hot-loop rule).
|
|
63
|
+
*
|
|
64
|
+
* @see lib/common/htmltable.c:setFill
|
|
65
|
+
*/
|
|
66
|
+
const paintObj: ObjState = {
|
|
67
|
+
parent: null, type: ObjType.Node, graphObj: null,
|
|
68
|
+
emitState: EmitState.NDraw,
|
|
69
|
+
penColor: { type: 'string', s: 'black' },
|
|
70
|
+
fillColor: { type: 'none' },
|
|
71
|
+
stopColor: { type: 'none' },
|
|
72
|
+
gradientAngle: 0, gradientFrac: 0,
|
|
73
|
+
pen: PenType.Solid, fill: FillType.None, penWidth: 1.0,
|
|
74
|
+
rawStyle: [],
|
|
75
|
+
label: null, xlabel: null, tailLabel: null, headLabel: null,
|
|
76
|
+
url: null, id: null, labelUrl: null, tailUrl: null, headUrl: null,
|
|
77
|
+
tooltip: null, labelTooltip: null, tailTooltip: null, headTooltip: null,
|
|
78
|
+
target: null, labelTarget: null, tailTarget: null, headTarget: null,
|
|
79
|
+
explicitTooltip: false, explicitTailTooltip: false,
|
|
80
|
+
explicitHeadTooltip: false, explicitLabelTooltip: false,
|
|
81
|
+
explicitTailTarget: false, explicitHeadTarget: false,
|
|
82
|
+
explicitEdgeTarget: false, explicitTailUrl: false,
|
|
83
|
+
explicitHeadUrl: false, labelEdgeAligned: false,
|
|
84
|
+
urlMapShape: MapShape.Rectangle,
|
|
85
|
+
urlMapPts: [], urlBsplineMapPts: [],
|
|
86
|
+
tailEndMapPts: [], headEndMapPts: [],
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/** Paint requested for a scoped drawing call. */
|
|
90
|
+
export interface HtmlPaint {
|
|
91
|
+
/** Solid fill color, or the first stop of a gradient when `stop` is set. */
|
|
92
|
+
fill?: string;
|
|
93
|
+
/** Pen (stroke) color; absent → "none" (transparent). */
|
|
94
|
+
pen?: string;
|
|
95
|
+
/** Pen width; default 1.0 (omitted from SVG at 1.0). */
|
|
96
|
+
penWidth?: number;
|
|
97
|
+
/** Style string; "dashed"/"dotted" map to the pen type. */
|
|
98
|
+
penStyle?: string;
|
|
99
|
+
/**
|
|
100
|
+
* Second/stop color of a gradient fill. Presence switches the fill from
|
|
101
|
+
* solid to a gradient (linear, or radial when `radial` is true), mirroring
|
|
102
|
+
* C setFill's findStopColor hit. @see lib/common/htmltable.c:setFill
|
|
103
|
+
*/
|
|
104
|
+
stop?: string;
|
|
105
|
+
/** Gradient angle in degrees; defaults to 0. Ignored without `stop`. */
|
|
106
|
+
gradientAngle?: number;
|
|
107
|
+
/** True → radial gradient (RGRADIENT); else linear. Ignored without `stop`. */
|
|
108
|
+
radial?: boolean;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// HTML fill pen-width state — the port of gvrender's persistent penwidth
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The live gvrender pen width during HTML emission. C never resets it before a
|
|
117
|
+
* bgcolor fill: `setFill` sets only the fill color, so a cell/table fill draws
|
|
118
|
+
* at whatever pen width the *previous* `doBorder` left (the oracle emits
|
|
119
|
+
* `stroke-width="N"` on a bordered cell's fill, leaked from the prior cell's
|
|
120
|
+
* border, even though `stroke="none"`). `doBorder` writes it; the bgcolor fill
|
|
121
|
+
* reads it. Reset to 1.0 at each top-level table — the node/cluster shape drew
|
|
122
|
+
* at pen width 1 immediately before, so the first table/cell fill carries no
|
|
123
|
+
* stroke-width. Module-level to mirror gvrender job state and to stay reset per
|
|
124
|
+
* render (multi-diagram safety).
|
|
125
|
+
* @see lib/common/htmltable.c:doBorder (gvrender_set_penwidth(job, dp->border))
|
|
126
|
+
* @see lib/common/htmltable.c:setFill (sets fill color only, not penwidth)
|
|
127
|
+
*/
|
|
128
|
+
let htmlFillPen = 1.0;
|
|
129
|
+
|
|
130
|
+
/** Current leaked fill pen width, read by the bgcolor fill for its stroke-width. */
|
|
131
|
+
export function htmlFillPenWidth(): number {
|
|
132
|
+
return htmlFillPen;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Reset the leaked fill pen width to 1.0 — call at each top-level table entry. */
|
|
136
|
+
export function resetHtmlFillPenWidth(): void {
|
|
137
|
+
htmlFillPen = 1.0;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Map a style string to the C pen type. @see lib/common/htmltable.c:doBorder */
|
|
141
|
+
function penTypeOf(style: string | undefined): PenType {
|
|
142
|
+
if (style !== undefined && style.includes('dashed')) return PenType.Dashed;
|
|
143
|
+
if (style !== undefined && style.includes('dotted')) return PenType.Dotted;
|
|
144
|
+
return PenType.Solid;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Run drawFn with a scoped ObjState carrying the given paint colors,
|
|
149
|
+
* then restore the previous (usually null) obj state.
|
|
150
|
+
*
|
|
151
|
+
* @see lib/common/htmltable.c:setFill
|
|
152
|
+
*/
|
|
153
|
+
export function withHtmlPaint(paint: HtmlPaint, job: RenderJob, drawFn: () => void): void {
|
|
154
|
+
paintObj.fillColor = paint.fill !== undefined
|
|
155
|
+
? resolveRenderColor(paint.fill) : { type: 'none' };
|
|
156
|
+
paintObj.penColor = paint.pen !== undefined
|
|
157
|
+
? resolveRenderColor(paint.pen) : { type: 'string', s: 'transparent' };
|
|
158
|
+
applyHtmlFill(paint);
|
|
159
|
+
paintObj.pen = penTypeOf(paint.penStyle);
|
|
160
|
+
paintObj.penWidth = paint.penWidth !== undefined ? paint.penWidth : 1.0;
|
|
161
|
+
// C sets the default line style ("solid") before each HTML table/cell draw,
|
|
162
|
+
// so xdot emits `S 5 -solid` per border/fill. rawStyle carries it (SVG's
|
|
163
|
+
// style emit treats "solid" as the default → no visible change).
|
|
164
|
+
paintObj.rawStyle = paintObj.pen === PenType.Solid ? ['solid'] : [];
|
|
165
|
+
// Inherit the enclosing object's emit-state (the label state during an HTML
|
|
166
|
+
// label emit) so the fill/border ops route to the same xbuf as the label
|
|
167
|
+
// (_ldraw_), not the shape draw buffer. SVG ignores emit_state, so unchanged.
|
|
168
|
+
paintObj.emitState = job.obj?.emitState ?? EmitState.NDraw;
|
|
169
|
+
job.pushObj(paintObj);
|
|
170
|
+
try { drawFn(); } finally { job.popObj(); }
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Set the fill type + gradient fields on paintObj from a paint request.
|
|
175
|
+
* A `stop` color switches solid → gradient, mirroring C setFill's
|
|
176
|
+
* findStopColor hit (clrs[0] is the fill, clrs[1] the gradient stop).
|
|
177
|
+
* For the "c0:c1" form with no explicit fraction the frac is 0
|
|
178
|
+
* (findStopColor's else branch). @see lib/common/htmltable.c:setFill
|
|
179
|
+
*/
|
|
180
|
+
function applyHtmlFill(paint: HtmlPaint): void {
|
|
181
|
+
if (paint.stop !== undefined) {
|
|
182
|
+
paintObj.fill = paint.radial === true ? FillType.Radial : FillType.Linear;
|
|
183
|
+
paintObj.stopColor = resolveRenderColor(paint.stop);
|
|
184
|
+
paintObj.gradientAngle = paint.gradientAngle ?? 0;
|
|
185
|
+
paintObj.gradientFrac = 0;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
paintObj.fill = paint.fill !== undefined ? FillType.Solid : FillType.None;
|
|
189
|
+
paintObj.stopColor = { type: 'none' };
|
|
190
|
+
paintObj.gradientAngle = 0;
|
|
191
|
+
paintObj.gradientFrac = 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// mkPts
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Build the four inset corner points of box b (SW, SE, NE, NW).
|
|
200
|
+
* When border > 1, insets by border/2 on each side.
|
|
201
|
+
*
|
|
202
|
+
* @see lib/common/htmltable.c:mkPts
|
|
203
|
+
*/
|
|
204
|
+
export function mkPts(b: Box, border: number, pos: Point): Point[] {
|
|
205
|
+
let llx = b.ll.x + pos.x;
|
|
206
|
+
let lly = b.ll.y + pos.y;
|
|
207
|
+
let urx = b.ur.x + pos.x;
|
|
208
|
+
let ury = b.ur.y + pos.y;
|
|
209
|
+
if (border > 1) {
|
|
210
|
+
const delta = border / 2.0;
|
|
211
|
+
llx += delta; lly += delta;
|
|
212
|
+
urx -= delta; ury -= delta;
|
|
213
|
+
}
|
|
214
|
+
return [
|
|
215
|
+
{ x: llx, y: lly }, // SW
|
|
216
|
+
{ x: urx, y: lly }, // SE
|
|
217
|
+
{ x: urx, y: ury }, // NE
|
|
218
|
+
{ x: llx, y: ury }, // NW
|
|
219
|
+
];
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// doSide
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Emit a filled rule box from point p with given width/height.
|
|
228
|
+
* wd=0 means a vertical rule; ht=0 means a horizontal rule.
|
|
229
|
+
*
|
|
230
|
+
* @see lib/common/htmltable.c:doSide
|
|
231
|
+
*/
|
|
232
|
+
export function doSide(
|
|
233
|
+
p: Point,
|
|
234
|
+
wd: number,
|
|
235
|
+
ht: number,
|
|
236
|
+
renderer: RendererPlugin,
|
|
237
|
+
job: RenderJob,
|
|
238
|
+
): void {
|
|
239
|
+
const pts = [
|
|
240
|
+
{ x: p.x, y: p.y },
|
|
241
|
+
{ x: p.x, y: p.y + ht },
|
|
242
|
+
{ x: p.x + wd, y: p.y + ht },
|
|
243
|
+
{ x: p.x + wd, y: p.y },
|
|
244
|
+
].map((pt) => transformPoint(pt, job));
|
|
245
|
+
renderer.polygon(pts, true, job);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// doBorder — descriptor type + implementation
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
|
|
252
|
+
/** Parameters for doBorder, grouped to stay within the 5-param limit. */
|
|
253
|
+
export interface BorderSpec {
|
|
254
|
+
box: Box;
|
|
255
|
+
pos: Point;
|
|
256
|
+
border: number;
|
|
257
|
+
color: string;
|
|
258
|
+
/** SIDES bitmask (0 / undefined → full box). */
|
|
259
|
+
sides?: number;
|
|
260
|
+
/** Style string: "dashed", "dotted", etc. */
|
|
261
|
+
style?: string;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Emit a rectangular border for box b, respecting SIDES bitmask.
|
|
266
|
+
* When sides is 0 or undefined, emits a full-box polygon (unfilled).
|
|
267
|
+
*
|
|
268
|
+
* @see lib/common/htmltable.c:doBorder
|
|
269
|
+
*/
|
|
270
|
+
export function doBorder(
|
|
271
|
+
spec: BorderSpec,
|
|
272
|
+
renderer: RendererPlugin,
|
|
273
|
+
job: RenderJob,
|
|
274
|
+
): void {
|
|
275
|
+
const { box, pos, border, color, sides, style } = spec;
|
|
276
|
+
// C: gvrender_set_penwidth(job, dp->border) before drawing the border; the
|
|
277
|
+
// value persists and leaks into the next bgcolor fill's stroke-width.
|
|
278
|
+
htmlFillPen = border;
|
|
279
|
+
withHtmlPaint({ pen: color, penWidth: border, penStyle: style }, job, () => {
|
|
280
|
+
if (parseStyleFlags(style).rounded) {
|
|
281
|
+
// C: round_corners(job, mkPts(AF,b,border), 4, {rounded}, 0) — unfilled
|
|
282
|
+
// rounded border path; emitRoundedBezier transforms the AF ring itself.
|
|
283
|
+
emitRoundedBezier(mkPts(box, border, pos), { x: 0, y: 0 }, false, { renderer, job });
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const effSides = (sides !== undefined) ? (sides & BORDER_MASK) : 0;
|
|
287
|
+
if (effSides !== 0) {
|
|
288
|
+
const corners = mkPts(box, border, pos).map((p) => transformPoint(p, job));
|
|
289
|
+
emitSidedPolylines(effSides, corners, renderer, job);
|
|
290
|
+
} else {
|
|
291
|
+
emitFullBoxBorder(box, pos, border, renderer, job);
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/** Emit an inset full-box border polygon (unfilled). */
|
|
297
|
+
function emitFullBoxBorder(
|
|
298
|
+
box: Box,
|
|
299
|
+
pos: Point,
|
|
300
|
+
border: number,
|
|
301
|
+
renderer: RendererPlugin,
|
|
302
|
+
job: RenderJob,
|
|
303
|
+
): void {
|
|
304
|
+
const b2: Box = border > 1 ? {
|
|
305
|
+
ll: { x: box.ll.x + border / 2, y: box.ll.y + border / 2 },
|
|
306
|
+
ur: { x: box.ur.x - border / 2, y: box.ur.y - border / 2 },
|
|
307
|
+
} : box;
|
|
308
|
+
const pts = [
|
|
309
|
+
{ x: b2.ll.x + pos.x, y: b2.ll.y + pos.y },
|
|
310
|
+
{ x: b2.ll.x + pos.x, y: b2.ur.y + pos.y },
|
|
311
|
+
{ x: b2.ur.x + pos.x, y: b2.ur.y + pos.y },
|
|
312
|
+
{ x: b2.ur.x + pos.x, y: b2.ll.y + pos.y },
|
|
313
|
+
].map((pt) => transformPoint(pt, job));
|
|
314
|
+
renderer.polygon(pts, false, job);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// ---------------------------------------------------------------------------
|
|
318
|
+
// emitSidedPolylines — lookup table, CCN ≤ 4
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
|
|
321
|
+
// Corner index aliases: 0=SW, 1=SE, 2=NE, 3=NW
|
|
322
|
+
const SW = 0, SE = 1, NE = 2, NW = 3;
|
|
323
|
+
const B = BORDER_BOTTOM, R = BORDER_RIGHT, T = BORDER_TOP, L = BORDER_LEFT;
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Lookup table: sides bitmask → list of polyline sequences (each sequence is
|
|
327
|
+
* an array of corner indices into [SW, SE, NE, NW]).
|
|
328
|
+
* Matches C doBorder switch-case exactly (htmltable.c:278-330).
|
|
329
|
+
*
|
|
330
|
+
* @see lib/common/htmltable.c:doBorder
|
|
331
|
+
*/
|
|
332
|
+
const SIDES_TABLE: ReadonlyMap<number, ReadonlyArray<ReadonlyArray<number>>> = new Map([
|
|
333
|
+
[B|R|T|L, [[SW,SE,NE,NW,SW]]],
|
|
334
|
+
[B|R|T, [[SW,SE,NE,NW]] ],
|
|
335
|
+
[R|T|L, [[SE,NE,NW,SW]] ],
|
|
336
|
+
[T|L|B, [[NE,NW,SW,SE]] ],
|
|
337
|
+
[L|B|R, [[NW,SW,SE,NE]] ],
|
|
338
|
+
[B|R, [[SW,SE,NE]] ],
|
|
339
|
+
[R|T, [[SE,NE,NW]] ],
|
|
340
|
+
[T|L, [[NE,NW,SW]] ],
|
|
341
|
+
[L|B, [[NW,SW,SE]] ],
|
|
342
|
+
[T|B, [[SW,SE],[NE,NW]] ],
|
|
343
|
+
[L|R, [[NW,SW],[SE,NE]] ],
|
|
344
|
+
[B, [[SW,SE]] ],
|
|
345
|
+
[R, [[SE,NE]] ],
|
|
346
|
+
[T, [[NE,NW]] ],
|
|
347
|
+
[L, [[NW,SW]] ],
|
|
348
|
+
]);
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Emit polyline segments for a SIDES bitmask via a lookup table.
|
|
352
|
+
* CCN = 2 (loop + no-match guard).
|
|
353
|
+
*
|
|
354
|
+
* @see lib/common/htmltable.c:doBorder
|
|
355
|
+
*/
|
|
356
|
+
function emitSidedPolylines(
|
|
357
|
+
sides: number,
|
|
358
|
+
corners: Point[],
|
|
359
|
+
renderer: RendererPlugin,
|
|
360
|
+
job: RenderJob,
|
|
361
|
+
): void {
|
|
362
|
+
const seqs = SIDES_TABLE.get(sides & BORDER_MASK);
|
|
363
|
+
if (seqs === undefined) return;
|
|
364
|
+
for (const seq of seqs) {
|
|
365
|
+
renderer.polyline(seq.map((i) => corners[i]!), job);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* HTML rule-line emission and anchor helpers.
|
|
5
|
+
* Ports emit_html_rules, initAnchor, endAnchor from lib/common/htmltable.c.
|
|
6
|
+
*
|
|
7
|
+
* @see lib/common/htmltable.c:emit_html_rules
|
|
8
|
+
* @see lib/common/htmltable.c:initAnchor
|
|
9
|
+
* @see lib/common/htmltable.c:endAnchor
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Point, Box } from '../model/geom.js';
|
|
13
|
+
import type { RenderJob } from '../gvc/job.js';
|
|
14
|
+
import type { RendererPlugin } from '../gvc/context.js';
|
|
15
|
+
import type { PlacedCell, PlacedHtml } from './htmltable-pos.js';
|
|
16
|
+
import { doSide, withHtmlPaint } from './htmltable-emit-fill.js';
|
|
17
|
+
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Rule context
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
/** Shared context for rule-line helpers, grouping all inputs. */
|
|
23
|
+
export interface RuleCtx {
|
|
24
|
+
cell: PlacedCell;
|
|
25
|
+
tbl: PlacedHtml;
|
|
26
|
+
pos: Point;
|
|
27
|
+
color: string;
|
|
28
|
+
/** Next cell in row-major order; C passes *cells after increment. */
|
|
29
|
+
nextCell?: PlacedCell;
|
|
30
|
+
renderer: RendererPlugin;
|
|
31
|
+
job: RenderJob;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// emitHtmlRules
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Emit vertical/horizontal rule lines for a cell that has vruled/hruled set.
|
|
40
|
+
* Pen width forced to 1.0 per C (emit_html_tbl:576 comment); rules draw
|
|
41
|
+
* as filled boxes with fill = pen = rule color.
|
|
42
|
+
*
|
|
43
|
+
* @see lib/common/htmltable.c:emit_html_rules
|
|
44
|
+
*/
|
|
45
|
+
export function emitHtmlRules(ctx: RuleCtx): void {
|
|
46
|
+
withHtmlPaint({ fill: ctx.color, pen: ctx.color, penWidth: 1 }, ctx.job, () => {
|
|
47
|
+
if (ctx.cell.vruled === true) emitVRuleIfNeeded(ctx);
|
|
48
|
+
if (ctx.cell.hruled === true) emitHRuleIfNeeded(ctx);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Vertical rule
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
|
|
56
|
+
/** Cell position summary used by rule param helpers. */
|
|
57
|
+
interface CellPos {
|
|
58
|
+
idx: number; // row or col index
|
|
59
|
+
span: number; // rowspan or colspan
|
|
60
|
+
count: number; // rowCount or columnCount
|
|
61
|
+
border: number;
|
|
62
|
+
sp: number;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Base extension and start coordinate for a vertical rule. */
|
|
66
|
+
function vRuleCoords(lly: number, p: CellPos): { ruleY: number; base: number } {
|
|
67
|
+
if (p.idx === 0) {
|
|
68
|
+
return { ruleY: lly - p.sp / 2, base: p.border + p.sp / 2 };
|
|
69
|
+
}
|
|
70
|
+
if (p.idx + p.span === p.count) {
|
|
71
|
+
const base = p.border + p.sp / 2;
|
|
72
|
+
return { ruleY: lly - p.sp / 2 - base, base };
|
|
73
|
+
}
|
|
74
|
+
return { ruleY: lly - p.sp / 2, base: 0 };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Emit vertical rule if cell does not span to the last column. */
|
|
78
|
+
function emitVRuleIfNeeded(ctx: RuleCtx): void {
|
|
79
|
+
const { cell, tbl, pos, renderer, job } = ctx;
|
|
80
|
+
if (cell.col + cell.colspan >= tbl.columnCount) return;
|
|
81
|
+
const sp = tbl.spacing;
|
|
82
|
+
const lly = cell.box.ll.y + pos.y;
|
|
83
|
+
const ury = cell.box.ur.y + pos.y;
|
|
84
|
+
const urx = cell.box.ur.x + pos.x;
|
|
85
|
+
const p: CellPos = { idx: cell.row, span: cell.rowspan, count: tbl.rowCount, border: tbl.border, sp };
|
|
86
|
+
const { ruleY, base } = vRuleCoords(lly, p);
|
|
87
|
+
doSide({ x: urx + sp / 2, y: ruleY }, 0, base + (ury - lly) + sp, renderer, job);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Horizontal rule
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Base extension and start coordinate for a horizontal rule.
|
|
96
|
+
* Mirrors the C first/last-column branches, including the base
|
|
97
|
+
* doubling when a col-0 cell is also the last column and the
|
|
98
|
+
* incomplete-row extension to the table edge.
|
|
99
|
+
* @see lib/common/htmltable.c:emit_html_rules (:488-512)
|
|
100
|
+
*/
|
|
101
|
+
function hRuleCoords(ctx: RuleCtx, llx: number, urx: number): { ruleX: number; base: number } {
|
|
102
|
+
const { cell, tbl, pos, nextCell } = ctx;
|
|
103
|
+
const sp = tbl.spacing;
|
|
104
|
+
const lastCol = cell.col + cell.colspan === tbl.columnCount;
|
|
105
|
+
// C: nextc && nextc->row != cp->row — incomplete row of cells
|
|
106
|
+
const extend = nextCell !== undefined && nextCell.row !== cell.row
|
|
107
|
+
? tbl.box.ur.x + pos.x - (urx + sp / 2) : 0;
|
|
108
|
+
if (cell.col === 0) {
|
|
109
|
+
let base = tbl.border + sp / 2;
|
|
110
|
+
const ruleX = llx - base - sp / 2;
|
|
111
|
+
if (lastCol) base *= 2;
|
|
112
|
+
else if (extend !== 0) base += extend;
|
|
113
|
+
return { ruleX, base };
|
|
114
|
+
}
|
|
115
|
+
if (lastCol) {
|
|
116
|
+
return { ruleX: llx - sp / 2, base: tbl.border + sp / 2 };
|
|
117
|
+
}
|
|
118
|
+
return { ruleX: llx - sp / 2, base: extend };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Emit horizontal rule if cell does not span to the last row. */
|
|
122
|
+
function emitHRuleIfNeeded(ctx: RuleCtx): void {
|
|
123
|
+
const { cell, tbl, pos, renderer, job } = ctx;
|
|
124
|
+
if (cell.row + cell.rowspan >= tbl.rowCount) return;
|
|
125
|
+
const sp = tbl.spacing;
|
|
126
|
+
const llx = cell.box.ll.x + pos.x;
|
|
127
|
+
const urx = cell.box.ur.x + pos.x;
|
|
128
|
+
const lly = cell.box.ll.y + pos.y;
|
|
129
|
+
const { ruleX, base } = hRuleCoords(ctx, llx, urx);
|
|
130
|
+
doSide({ x: ruleX, y: lly - sp / 2 }, base + (urx - llx) + sp, 0, renderer, job);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
// Anchor data + helpers
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
|
|
137
|
+
/** Anchor metadata extracted from cell/table HTML attributes. */
|
|
138
|
+
export interface AnchorData {
|
|
139
|
+
href?: string;
|
|
140
|
+
title?: string;
|
|
141
|
+
target?: string;
|
|
142
|
+
id?: string;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Current object context for html anchors. C keeps this on job->obj
|
|
147
|
+
* (set by emit_begin_node/edge/graph); the port's live path has no
|
|
148
|
+
* persistent obj state, so the device walk sets it here before
|
|
149
|
+
* emitting each object's labels.
|
|
150
|
+
* objLabel feeds the C default tooltip (initMapData: tooltip falls
|
|
151
|
+
* back to obj->label — "<TABLE>" for table labels).
|
|
152
|
+
* @see lib/common/emit.c:initMapData (line 163)
|
|
153
|
+
*/
|
|
154
|
+
const anchorEnv: { objId: string; objLabel: string | null; imgscale: string } =
|
|
155
|
+
{ objId: '', objLabel: null, imgscale: 'false' };
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Effective anchor obj-state, mirroring C's job->obj url/tooltip/target
|
|
159
|
+
* fields as saved/overlaid by initAnchor + initMapData: a cell that declares
|
|
160
|
+
* only TARGET (or only TITLE) still anchors, inheriting url/tooltip from the
|
|
161
|
+
* enclosing table/cell/object scope. Each initHtmlAnchor pushes an overlaid
|
|
162
|
+
* frame; endHtmlAnchor pops (C's htmlmap_data_t save/RESET).
|
|
163
|
+
* @see lib/common/htmltable.c:initAnchor/endAnchor, lib/common/emit.c:initMapData
|
|
164
|
+
*/
|
|
165
|
+
interface AnchorFrame {
|
|
166
|
+
url: string | null;
|
|
167
|
+
tooltip: string | null;
|
|
168
|
+
explicitTooltip: boolean;
|
|
169
|
+
target: string | null;
|
|
170
|
+
opened: boolean;
|
|
171
|
+
}
|
|
172
|
+
const anchorBase: AnchorFrame = { url: null, tooltip: null, explicitTooltip: false, target: null, opened: false };
|
|
173
|
+
const anchorStack: AnchorFrame[] = [];
|
|
174
|
+
function anchorTop(): AnchorFrame {
|
|
175
|
+
return anchorStack.length > 0 ? anchorStack[anchorStack.length - 1] : anchorBase;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Anchor id counter — C's `static int anchorId` in initAnchor, reset per render job (each dot invocation is one process). */
|
|
179
|
+
let anchorSeq = 0;
|
|
180
|
+
|
|
181
|
+
/** Set the current object context for anchor id/tooltip resolution.
|
|
182
|
+
* base seeds the inherited url/tooltip scope from the object's own
|
|
183
|
+
* attributes (C: job->obj populated at emit_begin_node/edge/cluster). */
|
|
184
|
+
export function setHtmlAnchorObj(
|
|
185
|
+
objId: string, objLabel: string | null,
|
|
186
|
+
base?: { url: string | null; tooltip: string | null; explicitTooltip?: boolean; target: string | null },
|
|
187
|
+
): void {
|
|
188
|
+
anchorEnv.objId = objId;
|
|
189
|
+
anchorEnv.objLabel = objLabel;
|
|
190
|
+
anchorEnv.imgscale = 'false';
|
|
191
|
+
anchorStack.length = 0;
|
|
192
|
+
anchorBase.url = base?.url ?? null;
|
|
193
|
+
anchorBase.tooltip = base?.tooltip ?? null;
|
|
194
|
+
anchorBase.explicitTooltip = base?.explicitTooltip ?? false;
|
|
195
|
+
anchorBase.target = base?.target ?? null;
|
|
196
|
+
anchorBase.opened = false;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Record the current object's imagescale attribute — C's
|
|
201
|
+
* env.imgscale = agget(obj, "imagescale"), defaulting to "false".
|
|
202
|
+
* @see lib/common/htmltable.c:emit_html_label (lines 768-772)
|
|
203
|
+
*/
|
|
204
|
+
export function setHtmlObjImgscale(imgscale: string | undefined): void {
|
|
205
|
+
anchorEnv.imgscale = imgscale !== undefined && imgscale !== '' ? imgscale : 'false';
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** The IMG SCALE fallback for the object being emitted. @see setHtmlObjImgscale */
|
|
209
|
+
export function htmlObjImgscale(): string {
|
|
210
|
+
return anchorEnv.imgscale;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Reset the per-render anchor id counter. Call at render start. */
|
|
214
|
+
export function resetHtmlAnchorIds(): void {
|
|
215
|
+
anchorSeq = 0;
|
|
216
|
+
anchorEnv.objId = '';
|
|
217
|
+
anchorEnv.objLabel = null;
|
|
218
|
+
anchorEnv.imgscale = 'false';
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** Normalise AnchorData to plain strings (empty when absent). */
|
|
222
|
+
function normaliseAnchor(data: AnchorData): { h: string; t: string; tg: string; i: string } {
|
|
223
|
+
return {
|
|
224
|
+
h: data.href !== undefined ? data.href : '',
|
|
225
|
+
t: data.title !== undefined ? data.title : '',
|
|
226
|
+
tg: data.target !== undefined ? data.target : '',
|
|
227
|
+
i: data.id !== undefined ? data.id : '',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Open an anchor when the data carries href/title/target.
|
|
233
|
+
*
|
|
234
|
+
* Mirrors C initAnchor exactly: an internal id `<objId>_<n>` is
|
|
235
|
+
* generated (consuming the counter) whenever the call is made without
|
|
236
|
+
* an explicit ID attr, but the anchor element only opens when there is
|
|
237
|
+
* a URL or an explicit tooltip (initMapData: obj->url ||
|
|
238
|
+
* obj->explicit_tooltip). A missing TITLE inherits the object label
|
|
239
|
+
* as tooltip.
|
|
240
|
+
* Returns true when an anchor was opened (caller must endHtmlAnchor).
|
|
241
|
+
*
|
|
242
|
+
* @see lib/common/htmltable.c:initAnchor (line 381)
|
|
243
|
+
* @see lib/common/emit.c:initMapData (line 163)
|
|
244
|
+
*/
|
|
245
|
+
export function initHtmlAnchor(
|
|
246
|
+
data: AnchorData,
|
|
247
|
+
box: Box,
|
|
248
|
+
renderer: RendererPlugin,
|
|
249
|
+
job: RenderJob,
|
|
250
|
+
): boolean {
|
|
251
|
+
// C's emit_html_cell/tbl gate: the element declares href, target or title
|
|
252
|
+
// (htmltable.c:630 doAnchor); the anchor's URL and tooltip then come from
|
|
253
|
+
// the OVERLAID obj state — a TARGET-only cell inherits the enclosing
|
|
254
|
+
// table's HREF (2619's dat TDs). initMapData overlays only non-empty
|
|
255
|
+
// fields; the <a> element opens iff effective url || explicit tooltip.
|
|
256
|
+
if (data.href === undefined && data.title === undefined && data.target === undefined) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
const id = data.id !== undefined && data.id !== ''
|
|
260
|
+
? data.id
|
|
261
|
+
: `${anchorEnv.objId}_${anchorSeq++}`;
|
|
262
|
+
const parent = anchorTop();
|
|
263
|
+
const frame: AnchorFrame = { ...parent, opened: false };
|
|
264
|
+
if (data.href !== undefined && data.href !== '') frame.url = data.href;
|
|
265
|
+
if (data.title !== undefined && data.title !== '') {
|
|
266
|
+
frame.tooltip = data.title;
|
|
267
|
+
frame.explicitTooltip = true;
|
|
268
|
+
} else if (frame.tooltip === null && anchorEnv.objLabel !== null) {
|
|
269
|
+
// C initMapData: tooltip falls back to obj->label (not explicit).
|
|
270
|
+
frame.tooltip = anchorEnv.objLabel;
|
|
271
|
+
}
|
|
272
|
+
if (data.target !== undefined && data.target !== '') frame.target = data.target;
|
|
273
|
+
if (frame.url !== null || frame.explicitTooltip) {
|
|
274
|
+
// C initAnchor: emit_map_rect(job, b) then gvrender_begin_anchor — the
|
|
275
|
+
// rectangle seeds obj.urlMapPts so the map device emits this cell/table's
|
|
276
|
+
// <area>. @see lib/common/htmltable.c:410
|
|
277
|
+
renderer.emitMapRect?.(box, job);
|
|
278
|
+
renderer.beginAnchor?.(frame.url ?? '', frame.tooltip ?? '', frame.target ?? '', id, job);
|
|
279
|
+
frame.opened = true;
|
|
280
|
+
}
|
|
281
|
+
anchorStack.push(frame);
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Close anchor opened by initHtmlAnchor.
|
|
287
|
+
*
|
|
288
|
+
* @see lib/common/htmltable.c:endAnchor
|
|
289
|
+
*/
|
|
290
|
+
export function endHtmlAnchor(renderer: RendererPlugin, job: RenderJob): void {
|
|
291
|
+
const frame = anchorStack.pop();
|
|
292
|
+
if (frame?.opened) renderer.endAnchor?.(job);
|
|
293
|
+
}
|