@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,601 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* HTML label positioning: converts a sized HtmlLabel into a placed
|
|
5
|
+
* structure with cell boxes and text baselines relative to the label
|
|
6
|
+
* center, mirroring pos_html_tbl / pos_html_cell / emit_htextspans
|
|
7
|
+
* geometry.
|
|
8
|
+
*
|
|
9
|
+
* Decoration metadata (bgcolor, color, sides, href, title, target, id,
|
|
10
|
+
* style, vruled, hruled, col, row, colspan, rowspan) is carried directly
|
|
11
|
+
* on PlacedCell/PlacedHtml — matching C's htmlcell_t/htmltbl_t layout.
|
|
12
|
+
*
|
|
13
|
+
* @see lib/common/htmltable.c:pos_html_tbl
|
|
14
|
+
* @see lib/common/htmltable.c:pos_html_cell
|
|
15
|
+
* @see lib/common/htmltable.c:emit_htextspans
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { Box } from '../model/geom.js';
|
|
19
|
+
import type { TextlabelT } from './types.js';
|
|
20
|
+
import type { TextMeasurer } from './textmeasure.js';
|
|
21
|
+
import type { HtmlCell, HtmlImage, HtmlLabel, HtmlTable, HtmlText, ImageSizer } from './htmltable-types.js';
|
|
22
|
+
import { layoutHtmlTable, cellPad, cellBorder, sizeHtmlLabel, parseHtmlLabel } from './htmltable.js';
|
|
23
|
+
import { makeLabel } from './make-label.js';
|
|
24
|
+
import { TOP, BOTTOM, LEFT, RIGHT } from './splines-constants.js';
|
|
25
|
+
import type { PlacedLine, HtmlFontInfo } from './htmltable-pos-runs.js';
|
|
26
|
+
import {
|
|
27
|
+
itemFontFlags, buildLineRuns, runsAreSimple, placeRunItems, placeTextRuns,
|
|
28
|
+
} from './htmltable-pos-runs.js';
|
|
29
|
+
|
|
30
|
+
// Re-export the text-run layout API (moved to htmltable-pos-runs.ts) so existing
|
|
31
|
+
// importers of './htmltable-pos.js' keep working unchanged.
|
|
32
|
+
export type { PlacedLine, HtmlFontInfo };
|
|
33
|
+
export { itemFontFlags, buildLineRuns, runsAreSimple, placeRunItems, placeTextRuns };
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A placed IMG element inside a cell.
|
|
37
|
+
* Carries the sized box (relative to label center) and scale attribute.
|
|
38
|
+
*
|
|
39
|
+
* Geometry: emit_html_img centers the image in the cell box, applying scale.
|
|
40
|
+
* @see lib/common/htmltable.c:emit_html_img (line 597)
|
|
41
|
+
*/
|
|
42
|
+
export interface PlacedImage {
|
|
43
|
+
src: string;
|
|
44
|
+
/** Scale attribute from <IMG SCALE="..."/>. */
|
|
45
|
+
scale?: string;
|
|
46
|
+
/** Intrinsic image width (from the ImageSizer), pre-scale. */
|
|
47
|
+
iw: number;
|
|
48
|
+
/** Intrinsic image height (from the ImageSizer), pre-scale. */
|
|
49
|
+
ih: number;
|
|
50
|
+
/** Target box for the image (alignment-adjusted cell content area). */
|
|
51
|
+
box: Box;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A positioned cell: border box plus its text runs and optional image.
|
|
56
|
+
* Carries decoration metadata from htmlcell_t so the emitter can apply
|
|
57
|
+
* bgcolor fill, per-side borders, anchors, and rules without a separate
|
|
58
|
+
* decorated type.
|
|
59
|
+
*
|
|
60
|
+
* @see lib/common/htmltable.h:htmlcell_t
|
|
61
|
+
*/
|
|
62
|
+
export interface PlacedCell {
|
|
63
|
+
box: Box;
|
|
64
|
+
border: number;
|
|
65
|
+
lines: PlacedLine[];
|
|
66
|
+
/** Placed image, present when the cell contains an <IMG> element. */
|
|
67
|
+
image?: PlacedImage;
|
|
68
|
+
/**
|
|
69
|
+
* Placed nested table, present when the cell's child is a <TABLE>.
|
|
70
|
+
* @see lib/common/htmltable.h:htmlcell_t.child (HTML_TBL)
|
|
71
|
+
*/
|
|
72
|
+
nested?: PlacedHtml;
|
|
73
|
+
/** PORT name on this cell, for html_port edge resolution. */
|
|
74
|
+
port?: string;
|
|
75
|
+
/** Boundary mask (C `sides & mask`): which node sides this cell touches. */
|
|
76
|
+
sidesMask?: number;
|
|
77
|
+
/** BGCOLOR attribute (solid color or "color1:color2" gradient spec). */
|
|
78
|
+
bgcolor?: string;
|
|
79
|
+
/** Pen (border) color override. */
|
|
80
|
+
color?: string;
|
|
81
|
+
/** SIDES bitmask (BORDER_LEFT|TOP|RIGHT|BOTTOM). */
|
|
82
|
+
sides?: number;
|
|
83
|
+
/** HREF for this cell's anchor. */
|
|
84
|
+
href?: string;
|
|
85
|
+
/** TOOLTIP for this cell's anchor. */
|
|
86
|
+
title?: string;
|
|
87
|
+
/** TARGET for this cell's anchor. */
|
|
88
|
+
target?: string;
|
|
89
|
+
/** ID attribute. */
|
|
90
|
+
id?: string;
|
|
91
|
+
/** Style string (dashed, dotted, rounded, …). */
|
|
92
|
+
style?: string;
|
|
93
|
+
/** Gradient angle (deg) for a gradient bgcolor. @see htmltable.h:htmlcell_t */
|
|
94
|
+
gradientangle?: number;
|
|
95
|
+
/** Column index (0-based). @see lib/common/htmltable.h:htmlcell_t.col */
|
|
96
|
+
col: number;
|
|
97
|
+
/** Row index (0-based). @see lib/common/htmltable.h:htmlcell_t.row */
|
|
98
|
+
row: number;
|
|
99
|
+
/** Column span (≥1). */
|
|
100
|
+
colspan: number;
|
|
101
|
+
/** Row span (≥1). */
|
|
102
|
+
rowspan: number;
|
|
103
|
+
/**
|
|
104
|
+
* True when this cell has a vertical rule to its right.
|
|
105
|
+
* Set by table vrule (COLUMNS="*") or explicit <VR/> in the row.
|
|
106
|
+
* @see lib/common/htmltable.h:htmlcell_t.vruled
|
|
107
|
+
*/
|
|
108
|
+
vruled?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* True when this cell has a horizontal rule below it.
|
|
111
|
+
* Set by table hrule (ROWS="*") propagated via row_t.ruled.
|
|
112
|
+
* @see lib/common/htmltable.h:htmlcell_t.hruled
|
|
113
|
+
*/
|
|
114
|
+
hruled?: boolean;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* A fully positioned HTML label (table).
|
|
119
|
+
* Carries table-level decoration metadata from htmltbl_t.
|
|
120
|
+
*
|
|
121
|
+
* @see lib/common/htmltable.h:htmltbl_t
|
|
122
|
+
*/
|
|
123
|
+
export interface PlacedHtml {
|
|
124
|
+
box: Box;
|
|
125
|
+
border: number;
|
|
126
|
+
cells: PlacedCell[];
|
|
127
|
+
/** PORT name on this table, for html_port edge resolution. */
|
|
128
|
+
port?: string;
|
|
129
|
+
/** Boundary mask placed with (ALL top-level; parent cell mask if nested). */
|
|
130
|
+
boundarySides?: number;
|
|
131
|
+
/** BGCOLOR attribute for the table background. */
|
|
132
|
+
bgcolor?: string;
|
|
133
|
+
/** Pen color for the table border. */
|
|
134
|
+
color?: string;
|
|
135
|
+
/** SIDES bitmask. */
|
|
136
|
+
sides?: number;
|
|
137
|
+
/** Table HREF anchor. */
|
|
138
|
+
href?: string;
|
|
139
|
+
/** Table TOOLTIP. */
|
|
140
|
+
title?: string;
|
|
141
|
+
/** Table TARGET. */
|
|
142
|
+
target?: string;
|
|
143
|
+
/** Table ID. */
|
|
144
|
+
id?: string;
|
|
145
|
+
/** Table style string. */
|
|
146
|
+
style?: string;
|
|
147
|
+
/** Gradient angle (deg) for a gradient bgcolor. @see htmltable.h:htmltbl_t */
|
|
148
|
+
gradientangle?: number;
|
|
149
|
+
/**
|
|
150
|
+
* Total number of columns (used for vruled boundary check).
|
|
151
|
+
* @see lib/common/htmltable.h:htmltbl_t.column_count
|
|
152
|
+
*/
|
|
153
|
+
columnCount: number;
|
|
154
|
+
/**
|
|
155
|
+
* Total number of rows (used for hruled boundary check).
|
|
156
|
+
* @see lib/common/htmltable.h:htmltbl_t.row_count
|
|
157
|
+
*/
|
|
158
|
+
rowCount: number;
|
|
159
|
+
/**
|
|
160
|
+
* Cell spacing (cellspacing attribute or default).
|
|
161
|
+
* @see lib/common/htmltable.h:htmldata_t.space
|
|
162
|
+
*/
|
|
163
|
+
spacing: number;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Shrink `box` to (w,h) per the cell's HALIGN/VALIGN, mirroring C's text branch
|
|
168
|
+
* of pos_html_cell: LEFT flushes the box right edge in (`ur.x -= delx`), RIGHT
|
|
169
|
+
* flushes the left edge in, default splits (center); VALIGN BOTTOM/TOP flush,
|
|
170
|
+
* default centers on BOTH axes. Parallels the existing `alignImageBox`, but
|
|
171
|
+
* text default-centers vertically where an image does not.
|
|
172
|
+
* (`parseAlign` never yields HALIGN_TEXT, so the cell box always shrinks here —
|
|
173
|
+
* exactly what C does for every non-TEXT cell.)
|
|
174
|
+
* @see lib/common/htmltable.c:pos_html_cell (text branch, :1487-1526)
|
|
175
|
+
*/
|
|
176
|
+
export function alignContentBox(box: Box, cell: HtmlCell, w: number, h: number): Box {
|
|
177
|
+
const out: Box = { ll: { ...box.ll }, ur: { ...box.ur } };
|
|
178
|
+
const delx = out.ur.x - out.ll.x - w;
|
|
179
|
+
if (delx > 0) {
|
|
180
|
+
if (cell.align === 'left') out.ur.x -= delx;
|
|
181
|
+
else if (cell.align === 'right') out.ll.x += delx;
|
|
182
|
+
else { out.ll.x += delx / 2; out.ur.x -= delx / 2; }
|
|
183
|
+
}
|
|
184
|
+
const dely = out.ur.y - out.ll.y - h;
|
|
185
|
+
if (dely > 0) {
|
|
186
|
+
if (cell.valign === 'bottom') out.ur.y -= dely;
|
|
187
|
+
else if (cell.valign === 'top') out.ll.y += dely;
|
|
188
|
+
else { out.ll.y += dely / 2; out.ur.y -= dely / 2; }
|
|
189
|
+
}
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** All four boundary sides — the top-level table's placement mask. */
|
|
194
|
+
export const HTML_ALL_SIDES = TOP | BOTTOM | LEFT | RIGHT;
|
|
195
|
+
|
|
196
|
+
/** Cell placement context: geometry + grid position, used by placeCell. */
|
|
197
|
+
export interface CellPlaceCtx {
|
|
198
|
+
cell: HtmlCell;
|
|
199
|
+
tbl: HtmlTable;
|
|
200
|
+
box: Box;
|
|
201
|
+
finfo: HtmlFontInfo;
|
|
202
|
+
measurer: TextMeasurer;
|
|
203
|
+
col: number;
|
|
204
|
+
row: number;
|
|
205
|
+
colspan: number;
|
|
206
|
+
rowspan: number;
|
|
207
|
+
/** Boundary mask for this cell (C `sides & mask`). */
|
|
208
|
+
sidesMask: number;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Place text runs for a cell, returning the inset content box. */
|
|
212
|
+
function placeCellRuns(
|
|
213
|
+
ctx: CellPlaceCtx,
|
|
214
|
+
): PlacedLine[] {
|
|
215
|
+
const { cell, tbl, box, finfo, measurer } = ctx;
|
|
216
|
+
const border = cellBorder(cell, tbl);
|
|
217
|
+
const inset = border + cellPad(cell, tbl);
|
|
218
|
+
const cbox: Box = {
|
|
219
|
+
ll: { x: box.ll.x + inset, y: box.ll.y + inset },
|
|
220
|
+
ur: { x: box.ur.x - inset, y: box.ur.y - inset },
|
|
221
|
+
};
|
|
222
|
+
const texts = cell.content.filter((c): c is HtmlText => c.kind === 'text');
|
|
223
|
+
const runs = buildLineRuns(texts, finfo, measurer);
|
|
224
|
+
// pos_html_txt (htmltable.c:1541): each line whose justification is still
|
|
225
|
+
// UNSET_ALIGN inherits the cell's BALIGN default (BALIGN_MASK →
|
|
226
|
+
// 'l'/'r'/'n'). A BR with an explicit ALIGN already set run.just; only the
|
|
227
|
+
// unset ones fall through here. BALIGN center/absent is 'n' (leave centered),
|
|
228
|
+
// so only left/right override — matching balignfn (htmllex.c:350), which
|
|
229
|
+
// sets the flag for LEFT/RIGHT only. Without this a BALIGN="LEFT" cell's
|
|
230
|
+
// multi-line text centered each line instead of flushing left (2619_1/2).
|
|
231
|
+
if (cell.balign === 'left' || cell.balign === 'right') {
|
|
232
|
+
for (const r of runs) if (r.just === undefined) r.just = cell.balign;
|
|
233
|
+
}
|
|
234
|
+
const w = Math.max(...runs.map(r => r.width), 0);
|
|
235
|
+
// Block height for vertical centering must equal size_html_txt's box.UR.y:
|
|
236
|
+
// a single line uses its measured height (mxysize); a multi-line block sums
|
|
237
|
+
// lsize, which is the measured height for a "simple" block but the raw max
|
|
238
|
+
// font size (mxfsize) for a non-simple one (any line with >1 item, font
|
|
239
|
+
// flags, or mixed faces/sizes). placeComplexRuns already advances baselines
|
|
240
|
+
// by fontSize, so centering must use the same height or the block is
|
|
241
|
+
// mis-centered — e.g. 2619 I63's card, whose "Male" line carries a trailing
|
|
242
|
+
// 14pt space, was centered 1.5pt too high.
|
|
243
|
+
// @see lib/common/htmltable.c:size_html_txt (lsize = simple ? mxysize : mxfsize)
|
|
244
|
+
const simple = runs.length === 1 || runsAreSimple(runs, finfo);
|
|
245
|
+
const h = runs.reduce((a, r) => a + (simple ? r.height : r.fontSize), 0);
|
|
246
|
+
return placeTextRuns(runs, alignContentBox(cbox, cell, w, h), finfo, measurer);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Build the placed image for a cell containing an <IMG> element.
|
|
251
|
+
*
|
|
252
|
+
* The target box is the inset content area, shrunk per the cell's
|
|
253
|
+
* halign/valign exactly as pos_html_cell's image branch does
|
|
254
|
+
* ("alignment trumps scaling"); the default alignment leaves the full
|
|
255
|
+
* content box, and emission centers/scales the intrinsic image within
|
|
256
|
+
* it (gvrender_usershape with imagepos "mc").
|
|
257
|
+
*
|
|
258
|
+
* @see lib/common/htmltable.c:pos_html_cell (image branch, :1456-1486)
|
|
259
|
+
*/
|
|
260
|
+
function placeCellImage(cell: HtmlCell, tbl: HtmlTable, box: Box): PlacedImage | undefined {
|
|
261
|
+
const img = cell.content.find((c): c is HtmlImage => c.kind === 'image');
|
|
262
|
+
if (img === undefined) return undefined;
|
|
263
|
+
const inset = cellBorder(cell, tbl) + cellPad(cell, tbl);
|
|
264
|
+
const iw = img.width ?? 0;
|
|
265
|
+
const ih = img.height ?? 0;
|
|
266
|
+
const cbox: Box = {
|
|
267
|
+
ll: { x: box.ll.x + inset, y: box.ll.y + inset },
|
|
268
|
+
ur: { x: box.ur.x - inset, y: box.ur.y - inset },
|
|
269
|
+
};
|
|
270
|
+
alignImageBox(cbox, cell, iw, ih);
|
|
271
|
+
return { src: img.src, scale: img.scale, iw, ih, box: cbox };
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Shrink the content box per the cell's halign/valign so the intrinsic
|
|
276
|
+
* image sits flush ("alignment trumps scaling"); default alignment is a
|
|
277
|
+
* no-op. @see lib/common/htmltable.c:pos_html_cell (image branch)
|
|
278
|
+
*/
|
|
279
|
+
function alignImageBox(cbox: Box, cell: HtmlCell, iw: number, ih: number): void {
|
|
280
|
+
const delx = cbox.ur.x - cbox.ll.x - iw;
|
|
281
|
+
if (delx > 0) {
|
|
282
|
+
if (cell.align === 'left') cbox.ur.x -= delx;
|
|
283
|
+
else if (cell.align === 'right') cbox.ll.x += delx;
|
|
284
|
+
}
|
|
285
|
+
const dely = cbox.ur.y - cbox.ll.y - ih;
|
|
286
|
+
if (dely > 0) {
|
|
287
|
+
if (cell.valign === 'bottom') cbox.ur.y -= dely;
|
|
288
|
+
else if (cell.valign === 'top') cbox.ll.y += dely;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/** Position a nested <TABLE> child inside the cell's inset content box.
|
|
293
|
+
* @see lib/common/htmltable.c:pos_html_cell (HTML_TBL branch) */
|
|
294
|
+
function placeCellNested(ctx: CellPlaceCtx): PlacedHtml | undefined {
|
|
295
|
+
const { cell, tbl, box, finfo, measurer, sidesMask } = ctx;
|
|
296
|
+
const nested = cell.content.find((c): c is HtmlTable => c.kind === 'table');
|
|
297
|
+
if (nested === undefined) return undefined;
|
|
298
|
+
const inset = cellBorder(cell, tbl) + cellPad(cell, tbl);
|
|
299
|
+
const cbox: Box = {
|
|
300
|
+
ll: { x: box.ll.x + inset, y: box.ll.y + inset },
|
|
301
|
+
ur: { x: box.ur.x - inset, y: box.ur.y - inset },
|
|
302
|
+
};
|
|
303
|
+
return posHtmlTable(nested, finfo, measurer, cbox, sidesMask);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** Position one cell's text inside its box, copying decoration metadata. @see pos_html_cell */
|
|
307
|
+
export function placeCell(ctx: CellPlaceCtx): PlacedCell {
|
|
308
|
+
const { cell, tbl, box, col, row, colspan, rowspan } = ctx;
|
|
309
|
+
const border = cellBorder(cell, tbl);
|
|
310
|
+
// vruled is fully resolved at parse time (setCell for COLUMNS="*",
|
|
311
|
+
// "cells VR cell" for explicit <VR>); copy it through.
|
|
312
|
+
// @see lib/common/htmlparse.y:329,434-435
|
|
313
|
+
const vruled = cell.vruled;
|
|
314
|
+
const nested = placeCellNested(ctx);
|
|
315
|
+
const image = nested === undefined ? placeCellImage(cell, tbl, box) : undefined;
|
|
316
|
+
return {
|
|
317
|
+
box, border,
|
|
318
|
+
lines: nested === undefined ? placeCellRuns(ctx) : [],
|
|
319
|
+
image,
|
|
320
|
+
nested,
|
|
321
|
+
port: cell.port,
|
|
322
|
+
sidesMask: ctx.sidesMask,
|
|
323
|
+
bgcolor: cell.bgcolor,
|
|
324
|
+
color: cell.color,
|
|
325
|
+
sides: cell.sides,
|
|
326
|
+
href: cell.href,
|
|
327
|
+
title: cell.title,
|
|
328
|
+
target: cell.target,
|
|
329
|
+
id: cell.id,
|
|
330
|
+
style: cell.style,
|
|
331
|
+
gradientangle: cell.gradientangle,
|
|
332
|
+
col, row, colspan, rowspan,
|
|
333
|
+
vruled,
|
|
334
|
+
// hruled set post-construction in posHtmlTable from hrule propagation
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Distribute extra box space evenly across the column/row sizes, mirroring
|
|
340
|
+
* C's literal arithmetic: `extra = del / count` (fractional) plus a ROUND()ed
|
|
341
|
+
* remainder handed out 1pt to the first `plus` slots (≈0 under double
|
|
342
|
+
* division; kept for bit-fidelity). @see lib/common/htmltable.c:1602-1617
|
|
343
|
+
*/
|
|
344
|
+
function distributeExtra(sizes: number[], del: number, count: number): number[] {
|
|
345
|
+
if (del <= 0 || count <= 0) return sizes;
|
|
346
|
+
const extra = del / count;
|
|
347
|
+
const r = del - extra * count;
|
|
348
|
+
const plus = r >= 0 ? Math.floor(r + 0.5) : Math.ceil(r - 0.5); // C ROUND
|
|
349
|
+
return sizes.map((w, i) => w + extra + (i < plus ? 1 : 0));
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/** Compute column X-offsets from layout widths. */
|
|
353
|
+
function buildColX(pos: Box, border: number, spacing: number, widths: number[]): number[] {
|
|
354
|
+
const colX: number[] = [];
|
|
355
|
+
let x = pos.ll.x + border + spacing;
|
|
356
|
+
for (let i = 0; i < widths.length; i++) { colX[i] = x; x += widths[i] + spacing; }
|
|
357
|
+
return colX;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/** Compute row Y-offsets from layout heights. */
|
|
361
|
+
function buildRowY(pos: Box, border: number, spacing: number, heights: number[]): number[] {
|
|
362
|
+
const rowY: number[] = [];
|
|
363
|
+
let y = pos.ur.y - border - spacing;
|
|
364
|
+
for (let i = 0; i < heights.length; i++) { rowY[i] = y; y -= heights[i] + spacing; }
|
|
365
|
+
return rowY;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/** Build table-level decoration fields from htmltbl_t. */
|
|
369
|
+
function tblDecoration(tbl: HtmlTable): Partial<PlacedHtml> {
|
|
370
|
+
return {
|
|
371
|
+
bgcolor: tbl.bgcolor,
|
|
372
|
+
color: tbl.color,
|
|
373
|
+
sides: tbl.sides,
|
|
374
|
+
href: tbl.href,
|
|
375
|
+
title: tbl.title,
|
|
376
|
+
target: tbl.target,
|
|
377
|
+
id: tbl.id,
|
|
378
|
+
style: tbl.style,
|
|
379
|
+
gradientangle: tbl.gradientangle,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/** Context for placeCells, grouping grid and font state. */
|
|
384
|
+
interface PlaceCellsCtx {
|
|
385
|
+
tbl: HtmlTable;
|
|
386
|
+
entries: ReturnType<typeof layoutHtmlTable>['entries'];
|
|
387
|
+
colX: number[];
|
|
388
|
+
rowY: number[];
|
|
389
|
+
spacing: number;
|
|
390
|
+
ncols: number;
|
|
391
|
+
nrows: number;
|
|
392
|
+
sides: number;
|
|
393
|
+
finfo: HtmlFontInfo;
|
|
394
|
+
measurer: TextMeasurer;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/** Cell boundary mask: outer sides it touches AND inherited `sides`. */
|
|
398
|
+
function cellSidesMask(
|
|
399
|
+
e: { col: number; row: number; colspan: number; rowspan: number },
|
|
400
|
+
ncols: number, nrows: number, sides: number,
|
|
401
|
+
): number {
|
|
402
|
+
if (sides === 0) return 0;
|
|
403
|
+
let mask = 0;
|
|
404
|
+
if (e.col === 0) mask |= LEFT;
|
|
405
|
+
if (e.row === 0) mask |= TOP;
|
|
406
|
+
if (e.col + e.colspan === ncols) mask |= RIGHT;
|
|
407
|
+
if (e.row + e.rowspan === nrows) mask |= BOTTOM;
|
|
408
|
+
return sides & mask;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Mark hruled cells: C processTbl sets bit r+1 for each row with
|
|
413
|
+
* ruled=true, then any cell whose bottom edge (row + rowspan) lands on
|
|
414
|
+
* a set bit becomes hruled. The bottom-boundary draw guard lives at
|
|
415
|
+
* emit time (htmltable.c:488), as in C.
|
|
416
|
+
* @see lib/common/htmltable.c:processTbl (bitarray, :1199-1224)
|
|
417
|
+
*/
|
|
418
|
+
function ruledBoundaries(tbl: HtmlTable): Set<number> {
|
|
419
|
+
const bits = new Set<number>();
|
|
420
|
+
tbl.rows.forEach((row, r) => { if (row.ruled === true) bits.add(r + 1); });
|
|
421
|
+
return bits;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/** Place all cells for a table, marking ruled cells per C processTbl. */
|
|
425
|
+
function placeCells(ctx: PlaceCellsCtx): PlacedCell[] {
|
|
426
|
+
const { tbl, entries, colX, rowY, spacing, ncols, nrows, sides, finfo, measurer } = ctx;
|
|
427
|
+
const boundaries = ruledBoundaries(tbl);
|
|
428
|
+
return entries.map((e) => {
|
|
429
|
+
const box: Box = {
|
|
430
|
+
ll: { x: colX[e.col], y: rowY[e.row + e.rowspan] + spacing },
|
|
431
|
+
ur: { x: colX[e.col + e.colspan] - spacing, y: rowY[e.row] },
|
|
432
|
+
};
|
|
433
|
+
const placed = placeCell({
|
|
434
|
+
cell: e.cell, tbl, box, finfo, measurer,
|
|
435
|
+
col: e.col, row: e.row, colspan: e.colspan, rowspan: e.rowspan,
|
|
436
|
+
sidesMask: cellSidesMask(e, ncols, nrows, sides),
|
|
437
|
+
});
|
|
438
|
+
if (boundaries.has(e.row + e.rowspan)) placed.hruled = true;
|
|
439
|
+
return placed;
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Position the table and all cells within `pos`. The top-level caller omits
|
|
445
|
+
* `pos` (the table is centered on its own dimen); a nested table is positioned
|
|
446
|
+
* into its parent cell's inset content box. @see pos_html_tbl
|
|
447
|
+
*/
|
|
448
|
+
export function posHtmlTable(
|
|
449
|
+
tbl: HtmlTable,
|
|
450
|
+
finfo: HtmlFontInfo,
|
|
451
|
+
measurer: TextMeasurer,
|
|
452
|
+
pos?: Box,
|
|
453
|
+
sides: number = HTML_ALL_SIDES,
|
|
454
|
+
): PlacedHtml {
|
|
455
|
+
const dim = tbl.dimen ?? { w: 0, h: 0 };
|
|
456
|
+
const box: Box = pos !== undefined
|
|
457
|
+
? { ll: { ...pos.ll }, ur: { ...pos.ur } } // clone: the align step below mutates
|
|
458
|
+
: {
|
|
459
|
+
ll: { x: -dim.w / 2, y: -dim.h / 2 },
|
|
460
|
+
ur: { x: dim.w / 2, y: dim.h / 2 },
|
|
461
|
+
};
|
|
462
|
+
const { entries, widths, heights, spacing, border } = layoutHtmlTable(tbl, measurer, {
|
|
463
|
+
fontsize: finfo.fontsize, fontname: finfo.fontname,
|
|
464
|
+
});
|
|
465
|
+
const ncols = widths.length > 0 ? Math.max(...entries.map(e => e.col + e.colspan)) : 0;
|
|
466
|
+
const nrows = heights.length > 0 ? Math.max(...entries.map(e => e.row + e.rowspan)) : 0;
|
|
467
|
+
// C pos_html_tbl:1557-1618 — when the assigned box is larger than the
|
|
468
|
+
// table's own size: a FIXEDSIZE table first aligns ITSELF within the box
|
|
469
|
+
// per its HALIGN/VALIGN (consuming delx/dely); any remaining extra space
|
|
470
|
+
// is then distributed evenly across the columns/rows.
|
|
471
|
+
let delx = Math.max(box.ur.x - box.ll.x - dim.w, 0);
|
|
472
|
+
let dely = Math.max(box.ur.y - box.ll.y - dim.h, 0);
|
|
473
|
+
if (tbl.fixedsize === true) {
|
|
474
|
+
if (delx > 0) {
|
|
475
|
+
if (tbl.align === 'left') box.ur.x = box.ll.x + dim.w;
|
|
476
|
+
else if (tbl.align === 'right') { box.ur.x += delx; box.ll.x += delx; }
|
|
477
|
+
else { box.ll.x += delx / 2; box.ur.x -= delx / 2; }
|
|
478
|
+
delx = 0;
|
|
479
|
+
}
|
|
480
|
+
if (dely > 0) {
|
|
481
|
+
if (tbl.valign === 'bottom') box.ur.y = box.ll.y + dim.h;
|
|
482
|
+
else if (tbl.valign === 'top') { box.ll.y += dely; box.ur.y = box.ll.y + dim.h; }
|
|
483
|
+
else { box.ll.y += dely / 2; box.ur.y -= dely / 2; }
|
|
484
|
+
dely = 0;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
const colX = buildColX(box, border, spacing, distributeExtra(widths, delx, ncols));
|
|
488
|
+
const rowY = buildRowY(box, border, spacing, distributeExtra(heights, dely, nrows));
|
|
489
|
+
const cells = placeCells({ tbl, entries, colX, rowY, spacing, ncols, nrows, sides, finfo, measurer });
|
|
490
|
+
return { box, border, cells, spacing, columnCount: ncols, rowCount: nrows, port: tbl.port, boundarySides: sides, ...tblDecoration(tbl) };
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/** Build a single-cell PlacedHtml for a plain text label. */
|
|
494
|
+
function posTextLabel(label: Extract<HtmlLabel, { kind: 'text' }>, finfo: HtmlFontInfo, measurer: TextMeasurer): PlacedHtml {
|
|
495
|
+
const dim = label.dimen ?? { w: 0, h: 0 };
|
|
496
|
+
const box: Box = {
|
|
497
|
+
ll: { x: -dim.w / 2, y: -dim.h / 2 },
|
|
498
|
+
ur: { x: dim.w / 2, y: dim.h / 2 },
|
|
499
|
+
};
|
|
500
|
+
const runs = buildLineRuns(label.texts, finfo, measurer);
|
|
501
|
+
return {
|
|
502
|
+
box, border: 0, columnCount: 1, rowCount: 1, spacing: 0,
|
|
503
|
+
cells: [{
|
|
504
|
+
box, border: 0, col: 0, row: 0, colspan: 1, rowspan: 1,
|
|
505
|
+
lines: placeTextRuns(runs, box, finfo, measurer),
|
|
506
|
+
}],
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** Position a sized HtmlLabel relative to its center. */
|
|
511
|
+
export function posHtmlLabel(
|
|
512
|
+
label: HtmlLabel,
|
|
513
|
+
finfo: HtmlFontInfo,
|
|
514
|
+
measurer: TextMeasurer,
|
|
515
|
+
): PlacedHtml {
|
|
516
|
+
if (label.kind === 'table') return posHtmlTable(label.table, finfo, measurer);
|
|
517
|
+
return posTextLabel(label, finfo, measurer);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Build a TextlabelT for an HTML label string: parse, size, position.
|
|
522
|
+
* Falls back to a plain-text label on parse failure (C reverts to the
|
|
523
|
+
* object name; we keep the markup text).
|
|
524
|
+
*
|
|
525
|
+
* The optional `imageSizer` on `finfo` resolves `<IMG SRC="..."/>` dims.
|
|
526
|
+
* Absent → C missing-image behavior (zero size + warning).
|
|
527
|
+
*
|
|
528
|
+
* @see lib/common/htmltable.c:make_html_label
|
|
529
|
+
*/
|
|
530
|
+
/**
|
|
531
|
+
* Propagate pen (border) color down the table tree. A table with no explicit
|
|
532
|
+
* COLOR inherits `parentColor`; each cell inherits the (possibly inherited)
|
|
533
|
+
* table color; each nested table inherits its enclosing cell's color. Mirrors
|
|
534
|
+
* C, which defaults the top table's pencolor to getPenColor(obj) then copies
|
|
535
|
+
* parent->child during processTbl.
|
|
536
|
+
* @see lib/common/htmltable.c:1911 (top table), :1406-1407 (cell), :1556-1557
|
|
537
|
+
*/
|
|
538
|
+
function inheritTablePenColor(tbl: HtmlTable, parentColor: string | undefined): void {
|
|
539
|
+
if (tbl.color === undefined) tbl.color = parentColor;
|
|
540
|
+
const tblColor = tbl.color;
|
|
541
|
+
for (const row of tbl.rows) {
|
|
542
|
+
for (const cell of row.cells) {
|
|
543
|
+
if (cell.color === undefined) cell.color = tblColor;
|
|
544
|
+
for (const item of cell.content) {
|
|
545
|
+
if (item.kind === 'table') inheritTablePenColor(item, cell.color);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
export function makeHtmlLabel(
|
|
552
|
+
content: string,
|
|
553
|
+
finfo: HtmlFontInfo & { imageSizer?: ImageSizer; pencolor?: string },
|
|
554
|
+
measurer: TextMeasurer,
|
|
555
|
+
): TextlabelT {
|
|
556
|
+
const { fontname, fontsize, fontcolor, imageSizer, pencolor } = finfo;
|
|
557
|
+
let lbl: HtmlLabel;
|
|
558
|
+
try {
|
|
559
|
+
lbl = parseHtmlLabel(content);
|
|
560
|
+
} catch {
|
|
561
|
+
// C aborts the HTML parse on a syntax error (YYABORT) and leaves the label
|
|
562
|
+
// EMPTY — it does not fall back to rendering the raw markup as plain text.
|
|
563
|
+
// @see lib/common/htmlparse.y (cleanup + YYABORT), htmllex.c htmlerror
|
|
564
|
+
return makeLabel('', fontname, fontsize, fontcolor, measurer);
|
|
565
|
+
}
|
|
566
|
+
// A top-level table with no explicit COLOR inherits the object's pen color,
|
|
567
|
+
// which then flows table->cell->nested-table.
|
|
568
|
+
// @see lib/common/htmltable.c:1911 (getPenColor), :1406/:1556 (inheritance)
|
|
569
|
+
if (lbl.kind === 'table') inheritTablePenColor(lbl.table, pencolor);
|
|
570
|
+
sizeHtmlLabel(lbl, measurer, {
|
|
571
|
+
fontsize, fontname, imageSizer,
|
|
572
|
+
});
|
|
573
|
+
const placed = posHtmlLabel(lbl, { fontname, fontsize, fontcolor }, measurer);
|
|
574
|
+
const dim = lbl.dimen ?? { w: 0, h: 0 };
|
|
575
|
+
// C replaces table-label text: "this may be used for the title and
|
|
576
|
+
// alt fields in image maps" — anchors inherit it as default tooltip.
|
|
577
|
+
// @see lib/common/htmltable.c:make_html_label (line 1935)
|
|
578
|
+
const text = lbl.kind === 'table' ? '<TABLE>' : content;
|
|
579
|
+
return htmlTextLabel(text, { fontname, fontsize, fontcolor }, placed, dim);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
/** Build the TextlabelT wrapper around a positioned HTML label. */
|
|
583
|
+
function htmlTextLabel(
|
|
584
|
+
text: string,
|
|
585
|
+
finfo: HtmlFontInfo,
|
|
586
|
+
placed: PlacedHtml,
|
|
587
|
+
dim: { w: number; h: number },
|
|
588
|
+
): TextlabelT {
|
|
589
|
+
return {
|
|
590
|
+
text,
|
|
591
|
+
fontname: finfo.fontname, fontcolor: finfo.fontcolor, charset: 0,
|
|
592
|
+
fontsize: finfo.fontsize,
|
|
593
|
+
dimen: { x: dim.w, y: dim.h },
|
|
594
|
+
space: { x: dim.w, y: dim.h },
|
|
595
|
+
pos: { x: 0, y: 0 },
|
|
596
|
+
u: { kind: 'html', html: placed },
|
|
597
|
+
valign: 'c'.charCodeAt(0),
|
|
598
|
+
set: false,
|
|
599
|
+
html: true,
|
|
600
|
+
};
|
|
601
|
+
}
|