@graphty/graph-io 0.3.42 → 0.3.44
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/dist/chunks/approximations-3Q4TsdTh.js +40 -0
- package/dist/chunks/approximations-3Q4TsdTh.js.map +1 -0
- package/dist/chunks/block-JQiwViEt.js +2777 -0
- package/dist/chunks/block-JQiwViEt.js.map +1 -0
- package/dist/chunks/{choose-DvpbdRuz.js → choose-BemygfH8.js} +3 -2
- package/dist/chunks/{choose-DvpbdRuz.js.map → choose-BemygfH8.js.map} +1 -1
- package/dist/chunks/{constants-fT3E8JYY.js → constants-BFUR_CtU.js} +6 -2
- package/dist/chunks/constants-BFUR_CtU.js.map +1 -0
- package/dist/chunks/convert-BcQ8_jMo.js +59 -0
- package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
- package/dist/chunks/emit-DCwFLts5.js +3456 -0
- package/dist/chunks/emit-DCwFLts5.js.map +1 -0
- package/dist/chunks/{escape-B62ZGM_a.js → escape-B1rMftd9.js} +43 -20
- package/dist/chunks/escape-B1rMftd9.js.map +1 -0
- package/dist/chunks/{export-rKLeGQMo.js → export-D7IGzTG4.js} +196 -792
- package/dist/chunks/export-D7IGzTG4.js.map +1 -0
- package/dist/chunks/{exporter-BWwEuOPT.js → exporter-BtnqYuuj.js} +22 -12
- package/dist/chunks/exporter-BtnqYuuj.js.map +1 -0
- package/dist/chunks/{exporter-yLxKBvLE.js → exporter-ChPyhBOv.js} +4 -3
- package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter-ChPyhBOv.js.map} +1 -1
- package/dist/chunks/{exporter-8hLNemFk.js → exporter-KEPxYUXD.js} +133 -74
- package/dist/chunks/exporter-KEPxYUXD.js.map +1 -0
- package/dist/chunks/{exporter-CpRyHZ3H.js → exporter-quPUCBiC.js} +1807 -288
- package/dist/chunks/exporter-quPUCBiC.js.map +1 -0
- package/dist/chunks/format-GDmO6m6Q.js +676 -0
- package/dist/chunks/format-GDmO6m6Q.js.map +1 -0
- package/dist/chunks/generic-BL06jrJf.js +1347 -0
- package/dist/chunks/generic-BL06jrJf.js.map +1 -0
- package/dist/chunks/{importer-WrGRZb0N.js → importer-B7r2owVf.js} +449 -102
- package/dist/chunks/importer-B7r2owVf.js.map +1 -0
- package/dist/chunks/{importer-Ht7LNg8L.js → importer-BFmOP96W.js} +116 -296
- package/dist/chunks/importer-BFmOP96W.js.map +1 -0
- package/dist/chunks/{importer-BbNb7eNg.js → importer-C2nzGhdV.js} +1390 -129
- package/dist/chunks/importer-C2nzGhdV.js.map +1 -0
- package/dist/chunks/{importer-Dz7tI8Sa.js → importer-CbX2_rNF.js} +617 -115
- package/dist/chunks/importer-CbX2_rNF.js.map +1 -0
- package/dist/chunks/{importer-D794XUTe.js → importer-CdzeN6X4.js} +31 -8
- package/dist/chunks/importer-CdzeN6X4.js.map +1 -0
- package/dist/chunks/{importer-xZ-3suY1.js → importer-ChKNC_GN.js} +791 -135
- package/dist/chunks/importer-ChKNC_GN.js.map +1 -0
- package/dist/chunks/{importer-C98dpSH4.js → importer-dwoYpSqb.js} +141 -82
- package/dist/chunks/importer-dwoYpSqb.js.map +1 -0
- package/dist/chunks/index-B9fdNpTA.js +4310 -0
- package/dist/chunks/index-B9fdNpTA.js.map +1 -0
- package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-C4FwgnH5.js} +123 -32
- package/dist/chunks/json-elements-C4FwgnH5.js.map +1 -0
- package/dist/chunks/lexicon-B-knUi-l.js +508 -0
- package/dist/chunks/lexicon-B-knUi-l.js.map +1 -0
- package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-BSpbY5FL.js} +3 -2
- package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-BSpbY5FL.js.map} +1 -1
- package/dist/chunks/{records-Cu4bxYOm.js → records-Nwz_rbNt.js} +2 -2
- package/dist/chunks/{records-Cu4bxYOm.js.map → records-Nwz_rbNt.js.map} +1 -1
- package/dist/chunks/styles-Brt9JMfs.js +690 -0
- package/dist/chunks/styles-Brt9JMfs.js.map +1 -0
- package/dist/chunks/styles-_N-C8S-U.js +2102 -0
- package/dist/chunks/styles-_N-C8S-U.js.map +1 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js +842 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js.map +1 -0
- package/dist/chunks/{text-DHOJXnED.js → text-CgzMqHQb.js} +2 -2
- package/dist/chunks/{text-DHOJXnED.js.map → text-CgzMqHQb.js.map} +1 -1
- package/dist/chunks/units-XMZFIFe1.js +19 -0
- package/dist/chunks/units-XMZFIFe1.js.map +1 -0
- package/dist/csv.js +5 -4
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +1 -1
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +5 -2
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +295 -414
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +8 -3031
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +354 -240
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +4 -2
- package/dist/graphml.js.map +1 -1
- package/dist/json.js +1 -1
- package/dist/neo4j.js +4 -3
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +1 -1
- package/dist/pajek.js +4 -2
- package/dist/positions.d.ts +1 -0
- package/dist/positions.js +427 -0
- package/dist/positions.js.map +1 -0
- package/dist/src/common/codes.d.ts +6 -0
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +6 -0
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/escape.d.ts.map +1 -1
- package/dist/src/common/escape.js +4 -2
- package/dist/src/common/escape.js.map +1 -1
- package/dist/src/common/export.d.ts +10 -0
- package/dist/src/common/export.d.ts.map +1 -1
- package/dist/src/common/export.js +123 -100
- package/dist/src/common/export.js.map +1 -1
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +8 -1
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/json-elements.d.ts +12 -9
- package/dist/src/common/json-elements.d.ts.map +1 -1
- package/dist/src/common/json-elements.js +160 -37
- package/dist/src/common/json-elements.js.map +1 -1
- package/dist/src/common/notes.d.ts +42 -0
- package/dist/src/common/notes.d.ts.map +1 -0
- package/dist/src/common/notes.js +72 -0
- package/dist/src/common/notes.js.map +1 -0
- package/dist/src/common/report.d.ts +18 -0
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +36 -1
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/common/units.d.ts +24 -0
- package/dist/src/common/units.d.ts.map +1 -0
- package/dist/src/common/units.js +26 -0
- package/dist/src/common/units.js.map +1 -0
- package/dist/src/common/xml.d.ts +18 -0
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +42 -5
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/formats/cx/exporter.d.ts +6 -0
- package/dist/src/formats/cx/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx/exporter.js +71 -8
- package/dist/src/formats/cx/exporter.js.map +1 -1
- package/dist/src/formats/cx/importer.d.ts +5 -2
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +102 -72
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +102 -0
- package/dist/src/formats/cx/styles.d.ts.map +1 -0
- package/dist/src/formats/cx/styles.js +225 -0
- package/dist/src/formats/cx/styles.js.map +1 -0
- package/dist/src/formats/cx2/exporter.d.ts +5 -0
- package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx2/exporter.js +181 -71
- package/dist/src/formats/cx2/exporter.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts +4 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +19 -1
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts +18 -0
- package/dist/src/formats/cx2/styles.d.ts.map +1 -0
- package/dist/src/formats/cx2/styles.js +24 -0
- package/dist/src/formats/cx2/styles.js.map +1 -0
- package/dist/src/formats/cys/constants.d.ts +2 -0
- package/dist/src/formats/cys/constants.d.ts.map +1 -1
- package/dist/src/formats/cys/constants.js +2 -0
- package/dist/src/formats/cys/constants.js.map +1 -1
- package/dist/src/formats/cys/exporter.d.ts +6 -2
- package/dist/src/formats/cys/exporter.d.ts.map +1 -1
- package/dist/src/formats/cys/exporter.js +215 -53
- package/dist/src/formats/cys/exporter.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts +2 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +119 -6
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/session.d.ts +2 -0
- package/dist/src/formats/cys/session.d.ts.map +1 -1
- package/dist/src/formats/cys/session.js +5 -0
- package/dist/src/formats/cys/session.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +38 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -0
- package/dist/src/formats/cys/styles.js +213 -0
- package/dist/src/formats/cys/styles.js.map +1 -0
- package/dist/src/formats/cys/tables.d.ts +8 -3
- package/dist/src/formats/cys/tables.d.ts.map +1 -1
- package/dist/src/formats/cys/tables.js +88 -34
- package/dist/src/formats/cys/tables.js.map +1 -1
- package/dist/src/formats/dot/exporter.d.ts +2 -0
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +195 -81
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +100 -20
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +1 -0
- package/dist/src/formats/dot/index.d.ts.map +1 -1
- package/dist/src/formats/dot/index.js +1 -0
- package/dist/src/formats/dot/index.js.map +1 -1
- package/dist/src/formats/dot/positions.d.ts +14 -0
- package/dist/src/formats/dot/positions.d.ts.map +1 -0
- package/dist/src/formats/dot/positions.js +70 -0
- package/dist/src/formats/dot/positions.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +82 -0
- package/dist/src/formats/dot/styles.d.ts.map +1 -0
- package/dist/src/formats/dot/styles.js +1484 -0
- package/dist/src/formats/dot/styles.js.map +1 -0
- package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
- package/dist/src/formats/gexf/exporter.js +23 -7
- package/dist/src/formats/gexf/exporter.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +8 -1
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +251 -131
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/index.d.ts +8 -0
- package/dist/src/formats/gexf/index.d.ts.map +1 -1
- package/dist/src/formats/gexf/index.js +10 -2
- package/dist/src/formats/gexf/index.js.map +1 -1
- package/dist/src/formats/gexf/schema.d.ts +5 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +5 -0
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +74 -0
- package/dist/src/formats/gexf/styles.d.ts.map +1 -0
- package/dist/src/formats/gexf/styles.js +604 -0
- package/dist/src/formats/gexf/styles.js.map +1 -0
- package/dist/src/formats/gml/exporter.d.ts +1 -5
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +19 -8
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +4 -0
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +2 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +2 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +14 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -0
- package/dist/src/formats/gml/positions.js +46 -0
- package/dist/src/formats/gml/positions.js.map +1 -0
- package/dist/src/formats/gml/styles.d.ts +59 -0
- package/dist/src/formats/gml/styles.d.ts.map +1 -0
- package/dist/src/formats/gml/styles.js +1056 -0
- package/dist/src/formats/gml/styles.js.map +1 -0
- package/dist/src/formats/gml/syntax.d.ts +11 -0
- package/dist/src/formats/gml/syntax.d.ts.map +1 -1
- package/dist/src/formats/gml/syntax.js +151 -62
- package/dist/src/formats/gml/syntax.js.map +1 -1
- package/dist/src/formats/graphml/constants.d.ts +4 -0
- package/dist/src/formats/graphml/constants.d.ts.map +1 -1
- package/dist/src/formats/graphml/constants.js +5 -1
- package/dist/src/formats/graphml/constants.js.map +1 -1
- package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
- package/dist/src/formats/graphml/exporter.js +133 -65
- package/dist/src/formats/graphml/exporter.js.map +1 -1
- package/dist/src/formats/graphml/importer.d.ts +4 -1
- package/dist/src/formats/graphml/importer.d.ts.map +1 -1
- package/dist/src/formats/graphml/importer.js +100 -44
- package/dist/src/formats/graphml/importer.js.map +1 -1
- package/dist/src/formats/graphml/index.d.ts +1 -0
- package/dist/src/formats/graphml/index.d.ts.map +1 -1
- package/dist/src/formats/graphml/index.js +1 -0
- package/dist/src/formats/graphml/index.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-plain.js +187 -0
- package/dist/src/formats/graphml/styles-plain.js.map +1 -0
- package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yed.js +1086 -0
- package/dist/src/formats/graphml/styles-yed.js.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
- package/dist/src/formats/graphml/tree.d.ts.map +1 -1
- package/dist/src/formats/graphml/tree.js +34 -19
- package/dist/src/formats/graphml/tree.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +16 -2
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +83 -12
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts +5 -0
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +68 -25
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +22 -3
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +441 -265
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +16 -0
- package/dist/src/formats/json/positions.d.ts.map +1 -0
- package/dist/src/formats/json/positions.js +44 -0
- package/dist/src/formats/json/positions.js.map +1 -0
- package/dist/src/formats/json/styles.d.ts +102 -0
- package/dist/src/formats/json/styles.d.ts.map +1 -0
- package/dist/src/formats/json/styles.js +1753 -0
- package/dist/src/formats/json/styles.js.map +1 -0
- package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
- package/dist/src/formats/neo4j/exporter.js +2 -1
- package/dist/src/formats/neo4j/exporter.js.map +1 -1
- package/dist/src/formats/pajek/exporter.d.ts +2 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +142 -76
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +4 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +60 -6
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +2 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js +2 -0
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +50 -0
- package/dist/src/formats/pajek/styles.d.ts.map +1 -0
- package/dist/src/formats/pajek/styles.js +569 -0
- package/dist/src/formats/pajek/styles.js.map +1 -0
- package/dist/src/formats/pajek/syntax.d.ts +6 -0
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +6 -0
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
- package/dist/src/formats/xgmml/columns.js +34 -9
- package/dist/src/formats/xgmml/columns.js.map +1 -1
- package/dist/src/formats/xgmml/constants.d.ts +2 -0
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
- package/dist/src/formats/xgmml/constants.js +3 -1
- package/dist/src/formats/xgmml/constants.js.map +1 -1
- package/dist/src/formats/xgmml/document.d.ts +12 -8
- package/dist/src/formats/xgmml/document.d.ts.map +1 -1
- package/dist/src/formats/xgmml/document.js +56 -13
- package/dist/src/formats/xgmml/document.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +12 -6
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/exporter.d.ts +3 -1
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
- package/dist/src/formats/xgmml/exporter.js +22 -9
- package/dist/src/formats/xgmml/exporter.js.map +1 -1
- package/dist/src/formats/xgmml/importer.d.ts +2 -1
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
- package/dist/src/formats/xgmml/importer.js +31 -24
- package/dist/src/formats/xgmml/importer.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +104 -0
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
- package/dist/src/formats/xgmml/styles.js +310 -0
- package/dist/src/formats/xgmml/styles.js.map +1 -0
- package/dist/src/index.d.ts +9 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/codes.d.ts +31 -0
- package/dist/src/positions/codes.d.ts.map +1 -0
- package/dist/src/positions/codes.js +26 -0
- package/dist/src/positions/codes.js.map +1 -0
- package/dist/src/positions/convert.d.ts +58 -0
- package/dist/src/positions/convert.d.ts.map +1 -0
- package/dist/src/positions/convert.js +107 -0
- package/dist/src/positions/convert.js.map +1 -0
- package/dist/src/positions/extract.d.ts +27 -0
- package/dist/src/positions/extract.d.ts.map +1 -0
- package/dist/src/positions/extract.js +526 -0
- package/dist/src/positions/extract.js.map +1 -0
- package/dist/src/positions/index.d.ts +10 -0
- package/dist/src/positions/index.d.ts.map +1 -0
- package/dist/src/positions/index.js +9 -0
- package/dist/src/positions/index.js.map +1 -0
- package/dist/src/positions/types.d.ts +208 -0
- package/dist/src/positions/types.d.ts.map +1 -0
- package/dist/src/positions/types.js +10 -0
- package/dist/src/positions/types.js.map +1 -0
- package/dist/src/registry.d.ts +30 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +130 -9
- package/dist/src/registry.js.map +1 -1
- package/dist/src/styles/annotations.d.ts +132 -0
- package/dist/src/styles/annotations.d.ts.map +1 -0
- package/dist/src/styles/annotations.js +320 -0
- package/dist/src/styles/annotations.js.map +1 -0
- package/dist/src/styles/budget.d.ts +45 -0
- package/dist/src/styles/budget.d.ts.map +1 -0
- package/dist/src/styles/budget.js +58 -0
- package/dist/src/styles/budget.js.map +1 -0
- package/dist/src/styles/canon/bends.d.ts +32 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -0
- package/dist/src/styles/canon/bends.js +74 -0
- package/dist/src/styles/canon/bends.js.map +1 -0
- package/dist/src/styles/canon/color-tables.d.ts +22 -0
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
- package/dist/src/styles/canon/color-tables.js +369 -0
- package/dist/src/styles/canon/color-tables.js.map +1 -0
- package/dist/src/styles/canon/color.d.ts +66 -0
- package/dist/src/styles/canon/color.d.ts.map +1 -0
- package/dist/src/styles/canon/color.js +548 -0
- package/dist/src/styles/canon/color.js.map +1 -0
- package/dist/src/styles/canon/enums.d.ts +25 -0
- package/dist/src/styles/canon/enums.d.ts.map +1 -0
- package/dist/src/styles/canon/enums.js +187 -0
- package/dist/src/styles/canon/enums.js.map +1 -0
- package/dist/src/styles/canon/graphviz.d.ts +48 -0
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
- package/dist/src/styles/canon/graphviz.js +160 -0
- package/dist/src/styles/canon/graphviz.js.map +1 -0
- package/dist/src/styles/canon/index.d.ts +13 -0
- package/dist/src/styles/canon/index.d.ts.map +1 -0
- package/dist/src/styles/canon/index.js +13 -0
- package/dist/src/styles/canon/index.js.map +1 -0
- package/dist/src/styles/canon/number.d.ts +59 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -0
- package/dist/src/styles/canon/number.js +142 -0
- package/dist/src/styles/canon/number.js.map +1 -0
- package/dist/src/styles/canon/site.d.ts +51 -0
- package/dist/src/styles/canon/site.d.ts.map +1 -0
- package/dist/src/styles/canon/site.js +63 -0
- package/dist/src/styles/canon/site.js.map +1 -0
- package/dist/src/styles/canon/text.d.ts +61 -0
- package/dist/src/styles/canon/text.d.ts.map +1 -0
- package/dist/src/styles/canon/text.js +199 -0
- package/dist/src/styles/canon/text.js.map +1 -0
- package/dist/src/styles/codes.d.ts +95 -0
- package/dist/src/styles/codes.d.ts.map +1 -0
- package/dist/src/styles/codes.js +97 -0
- package/dist/src/styles/codes.js.map +1 -0
- package/dist/src/styles/cyjs/cascade.d.ts +134 -0
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
- package/dist/src/styles/cyjs/cascade.js +2252 -0
- package/dist/src/styles/cyjs/cascade.js.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.js +76 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
- package/dist/src/styles/cyjs/emit.d.ts +82 -0
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
- package/dist/src/styles/cyjs/emit.js +790 -0
- package/dist/src/styles/cyjs/emit.js.map +1 -0
- package/dist/src/styles/cyjs/index.d.ts +13 -0
- package/dist/src/styles/cyjs/index.d.ts.map +1 -0
- package/dist/src/styles/cyjs/index.js +13 -0
- package/dist/src/styles/cyjs/index.js.map +1 -0
- package/dist/src/styles/cyjs/live.d.ts +46 -0
- package/dist/src/styles/cyjs/live.d.ts.map +1 -0
- package/dist/src/styles/cyjs/live.js +108 -0
- package/dist/src/styles/cyjs/live.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +147 -0
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
- package/dist/src/styles/cyjs/mappers.js +744 -0
- package/dist/src/styles/cyjs/mappers.js.map +1 -0
- package/dist/src/styles/cyjs/selector.d.ts +113 -0
- package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
- package/dist/src/styles/cyjs/selector.js +611 -0
- package/dist/src/styles/cyjs/selector.js.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
- package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts +125 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/emit.js +1025 -0
- package/dist/src/styles/cytoscape/emit.js.map +1 -0
- package/dist/src/styles/cytoscape/index.d.ts +10 -0
- package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/index.js +10 -0
- package/dist/src/styles/cytoscape/index.js.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.js +603 -0
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
- package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/mappings.js +460 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -0
- package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/resolve.js +381 -0
- package/dist/src/styles/cytoscape/resolve.js.map +1 -0
- package/dist/src/styles/cytoscape/translate.d.ts +50 -0
- package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/translate.js +156 -0
- package/dist/src/styles/cytoscape/translate.js.map +1 -0
- package/dist/src/styles/defaults.d.ts +90 -0
- package/dist/src/styles/defaults.d.ts.map +1 -0
- package/dist/src/styles/defaults.js +414 -0
- package/dist/src/styles/defaults.js.map +1 -0
- package/dist/src/styles/index.d.ts +15 -0
- package/dist/src/styles/index.d.ts.map +1 -0
- package/dist/src/styles/index.js +14 -0
- package/dist/src/styles/index.js.map +1 -0
- package/dist/src/styles/internal.d.ts +17 -0
- package/dist/src/styles/internal.d.ts.map +1 -0
- package/dist/src/styles/internal.js +16 -0
- package/dist/src/styles/internal.js.map +1 -0
- package/dist/src/styles/io/approximations.d.ts +24 -0
- package/dist/src/styles/io/approximations.d.ts.map +1 -0
- package/dist/src/styles/io/approximations.js +51 -0
- package/dist/src/styles/io/approximations.js.map +1 -0
- package/dist/src/styles/io/block.d.ts +166 -0
- package/dist/src/styles/io/block.d.ts.map +1 -0
- package/dist/src/styles/io/block.js +930 -0
- package/dist/src/styles/io/block.js.map +1 -0
- package/dist/src/styles/io/generic.d.ts +88 -0
- package/dist/src/styles/io/generic.d.ts.map +1 -0
- package/dist/src/styles/io/generic.js +516 -0
- package/dist/src/styles/io/generic.js.map +1 -0
- package/dist/src/styles/io/index.d.ts +8 -0
- package/dist/src/styles/io/index.d.ts.map +1 -0
- package/dist/src/styles/io/index.js +7 -0
- package/dist/src/styles/io/index.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts +80 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -0
- package/dist/src/styles/io/writer.js +596 -0
- package/dist/src/styles/io/writer.js.map +1 -0
- package/dist/src/styles/notes.d.ts +47 -0
- package/dist/src/styles/notes.d.ts.map +1 -0
- package/dist/src/styles/notes.js +140 -0
- package/dist/src/styles/notes.js.map +1 -0
- package/dist/src/styles/plan/classes.d.ts +31 -0
- package/dist/src/styles/plan/classes.d.ts.map +1 -0
- package/dist/src/styles/plan/classes.js +139 -0
- package/dist/src/styles/plan/classes.js.map +1 -0
- package/dist/src/styles/plan/continuous.d.ts +32 -0
- package/dist/src/styles/plan/continuous.d.ts.map +1 -0
- package/dist/src/styles/plan/continuous.js +165 -0
- package/dist/src/styles/plan/continuous.js.map +1 -0
- package/dist/src/styles/plan/discrete.d.ts +39 -0
- package/dist/src/styles/plan/discrete.d.ts.map +1 -0
- package/dist/src/styles/plan/discrete.js +127 -0
- package/dist/src/styles/plan/discrete.js.map +1 -0
- package/dist/src/styles/plan/families.d.ts +31 -0
- package/dist/src/styles/plan/families.d.ts.map +1 -0
- package/dist/src/styles/plan/families.js +95 -0
- package/dist/src/styles/plan/families.js.map +1 -0
- package/dist/src/styles/plan/features.d.ts +58 -0
- package/dist/src/styles/plan/features.d.ts.map +1 -0
- package/dist/src/styles/plan/features.js +185 -0
- package/dist/src/styles/plan/features.js.map +1 -0
- package/dist/src/styles/plan/index.d.ts +7 -0
- package/dist/src/styles/plan/index.d.ts.map +1 -0
- package/dist/src/styles/plan/index.js +7 -0
- package/dist/src/styles/plan/index.js.map +1 -0
- package/dist/src/styles/plan/plan.d.ts +71 -0
- package/dist/src/styles/plan/plan.d.ts.map +1 -0
- package/dist/src/styles/plan/plan.js +893 -0
- package/dist/src/styles/plan/plan.js.map +1 -0
- package/dist/src/styles/plan/resolve.d.ts +137 -0
- package/dist/src/styles/plan/resolve.d.ts.map +1 -0
- package/dist/src/styles/plan/resolve.js +587 -0
- package/dist/src/styles/plan/resolve.js.map +1 -0
- package/dist/src/styles/types.d.ts +702 -0
- package/dist/src/styles/types.d.ts.map +1 -0
- package/dist/src/styles/types.js +10 -0
- package/dist/src/styles/types.js.map +1 -0
- package/dist/src/styles/vocabulary.d.ts +41 -0
- package/dist/src/styles/vocabulary.d.ts.map +1 -0
- package/dist/src/styles/vocabulary.js +140 -0
- package/dist/src/styles/vocabulary.js.map +1 -0
- package/dist/src/types.d.ts +64 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/styles.d.ts +1 -0
- package/dist/styles.js +322 -0
- package/dist/styles.js.map +1 -0
- package/dist/xgmml.js +5 -4
- package/dist/xgmml.js.map +1 -1
- package/package.json +13 -2
- package/src/common/codes.ts +7 -0
- package/src/common/escape.ts +5 -2
- package/src/common/export.ts +179 -140
- package/src/common/input.ts +8 -4
- package/src/common/json-elements.ts +169 -38
- package/src/common/notes.ts +94 -0
- package/src/common/report.ts +41 -1
- package/src/common/units.ts +42 -0
- package/src/common/xml.ts +45 -5
- package/src/formats/cx/exporter.ts +95 -11
- package/src/formats/cx/importer.ts +126 -90
- package/src/formats/cx/styles.ts +304 -0
- package/src/formats/cx2/exporter.ts +234 -77
- package/src/formats/cx2/importer.ts +19 -1
- package/src/formats/cx2/styles.ts +29 -0
- package/src/formats/cys/constants.ts +3 -0
- package/src/formats/cys/exporter.ts +246 -60
- package/src/formats/cys/importer.ts +125 -9
- package/src/formats/cys/session.ts +6 -0
- package/src/formats/cys/styles.ts +254 -0
- package/src/formats/cys/tables.ts +117 -48
- package/src/formats/dot/exporter.ts +262 -126
- package/src/formats/dot/importer.ts +111 -20
- package/src/formats/dot/index.ts +1 -0
- package/src/formats/dot/positions.ts +77 -0
- package/src/formats/dot/styles.ts +1741 -0
- package/src/formats/gexf/exporter.ts +30 -13
- package/src/formats/gexf/importer.ts +308 -158
- package/src/formats/gexf/index.ts +10 -0
- package/src/formats/gexf/schema.ts +5 -0
- package/src/formats/gexf/styles.ts +719 -0
- package/src/formats/gml/exporter.ts +33 -14
- package/src/formats/gml/importer.ts +4 -0
- package/src/formats/gml/index.ts +2 -1
- package/src/formats/gml/positions.ts +52 -0
- package/src/formats/gml/styles.ts +1248 -0
- package/src/formats/gml/syntax.ts +173 -62
- package/src/formats/graphml/constants.ts +5 -0
- package/src/formats/graphml/exporter.ts +163 -71
- package/src/formats/graphml/importer.ts +119 -45
- package/src/formats/graphml/index.ts +1 -0
- package/src/formats/graphml/styles-plain.ts +236 -0
- package/src/formats/graphml/styles-yed.ts +1221 -0
- package/src/formats/graphml/styles-yfiles3.ts +573 -0
- package/src/formats/graphml/tree.ts +36 -20
- package/src/formats/graphml/yfiles.ts +89 -13
- package/src/formats/json/exporter.ts +76 -26
- package/src/formats/json/importer.ts +543 -323
- package/src/formats/json/positions.ts +50 -0
- package/src/formats/json/styles.ts +2082 -0
- package/src/formats/neo4j/exporter.ts +2 -1
- package/src/formats/pajek/exporter.ts +195 -106
- package/src/formats/pajek/importer.ts +78 -9
- package/src/formats/pajek/index.ts +2 -0
- package/src/formats/pajek/styles.ts +685 -0
- package/src/formats/pajek/syntax.ts +7 -0
- package/src/formats/xgmml/columns.ts +39 -9
- package/src/formats/xgmml/constants.ts +3 -0
- package/src/formats/xgmml/document.ts +54 -12
- package/src/formats/xgmml/emit.ts +11 -6
- package/src/formats/xgmml/exporter.ts +32 -13
- package/src/formats/xgmml/importer.ts +43 -29
- package/src/formats/xgmml/styles.ts +400 -0
- package/src/index.ts +16 -0
- package/src/positions/codes.ts +32 -0
- package/src/positions/convert.ts +123 -0
- package/src/positions/extract.ts +619 -0
- package/src/positions/index.ts +23 -0
- package/src/positions/types.ts +221 -0
- package/src/registry.ts +179 -8
- package/src/styles/annotations.ts +478 -0
- package/src/styles/budget.ts +60 -0
- package/src/styles/canon/bends.ts +84 -0
- package/src/styles/canon/color-tables.ts +386 -0
- package/src/styles/canon/color.ts +624 -0
- package/src/styles/canon/enums.ts +211 -0
- package/src/styles/canon/graphviz.ts +189 -0
- package/src/styles/canon/index.ts +13 -0
- package/src/styles/canon/number.ts +152 -0
- package/src/styles/canon/site.ts +87 -0
- package/src/styles/canon/text.ts +221 -0
- package/src/styles/codes.ts +104 -0
- package/src/styles/cyjs/cascade.ts +2670 -0
- package/src/styles/cyjs/defaults-table.ts +82 -0
- package/src/styles/cyjs/emit.ts +951 -0
- package/src/styles/cyjs/index.ts +37 -0
- package/src/styles/cyjs/live.ts +147 -0
- package/src/styles/cyjs/mappers.ts +879 -0
- package/src/styles/cyjs/selector.ts +778 -0
- package/src/styles/cyjs/stylesheet-text.ts +214 -0
- package/src/styles/cytoscape/emit.ts +1264 -0
- package/src/styles/cytoscape/index.ts +40 -0
- package/src/styles/cytoscape/lexicon.ts +656 -0
- package/src/styles/cytoscape/mappings.ts +603 -0
- package/src/styles/cytoscape/resolve.ts +521 -0
- package/src/styles/cytoscape/translate.ts +237 -0
- package/src/styles/defaults.ts +504 -0
- package/src/styles/index.ts +57 -0
- package/src/styles/internal.ts +17 -0
- package/src/styles/io/approximations.ts +47 -0
- package/src/styles/io/block.ts +1138 -0
- package/src/styles/io/generic.ts +687 -0
- package/src/styles/io/index.ts +18 -0
- package/src/styles/io/writer.ts +745 -0
- package/src/styles/notes.ts +165 -0
- package/src/styles/plan/classes.ts +166 -0
- package/src/styles/plan/continuous.ts +218 -0
- package/src/styles/plan/discrete.ts +165 -0
- package/src/styles/plan/families.ts +115 -0
- package/src/styles/plan/features.ts +234 -0
- package/src/styles/plan/index.ts +7 -0
- package/src/styles/plan/plan.ts +1129 -0
- package/src/styles/plan/resolve.ts +685 -0
- package/src/styles/types.ts +814 -0
- package/src/styles/vocabulary.ts +172 -0
- package/src/types.ts +76 -1
- package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
- package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
- package/dist/chunks/export-rKLeGQMo.js.map +0 -1
- package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
- package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
- package/dist/chunks/exporter-CpRyHZ3H.js.map +0 -1
- package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
- package/dist/chunks/importer-C98dpSH4.js.map +0 -1
- package/dist/chunks/importer-D794XUTe.js.map +0 -1
- package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
- package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
- package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
- package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
- package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical enumeration values: each dialect's spellings matched against an alias table without regard to case,
|
|
3
|
+
* spaces or underscores. An unknown value of an open enumeration (shapes, border and line styles, arrows) is kept as
|
|
4
|
+
* `other:<raw>` and noted; an unknown value of a closed one (weights, positions) gives no value and is noted.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { STYLE_ISSUE } from "../codes.js";
|
|
8
|
+
import type { StyleDialect } from "../types.js";
|
|
9
|
+
import { type CanonSite, noteAt, scalarText } from "./site.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The enumerations a style value can belong to.
|
|
13
|
+
* @category Styles
|
|
14
|
+
*/
|
|
15
|
+
export type StyleEnumKind = "shape" | "borderStyle" | "lineStyle" | "arrow" | "weight" | "position";
|
|
16
|
+
|
|
17
|
+
type Aliases = Readonly<Record<string, readonly string[]>>;
|
|
18
|
+
|
|
19
|
+
const SHAPES: Aliases = {
|
|
20
|
+
ellipse: [
|
|
21
|
+
"ellipse",
|
|
22
|
+
"oval",
|
|
23
|
+
"circle",
|
|
24
|
+
"disc",
|
|
25
|
+
"disk",
|
|
26
|
+
"point",
|
|
27
|
+
"doublecircle",
|
|
28
|
+
"mcircle",
|
|
29
|
+
"dot",
|
|
30
|
+
"sphere",
|
|
31
|
+
"circular",
|
|
32
|
+
],
|
|
33
|
+
rectangle: [
|
|
34
|
+
"rectangle",
|
|
35
|
+
"rect",
|
|
36
|
+
"box",
|
|
37
|
+
"square",
|
|
38
|
+
"plaintext",
|
|
39
|
+
"plain",
|
|
40
|
+
"record",
|
|
41
|
+
"msquare",
|
|
42
|
+
"box3d",
|
|
43
|
+
"rectangle3d",
|
|
44
|
+
"component",
|
|
45
|
+
"tab",
|
|
46
|
+
"folder",
|
|
47
|
+
"note",
|
|
48
|
+
"underline",
|
|
49
|
+
],
|
|
50
|
+
"round-rectangle": [
|
|
51
|
+
"round-rectangle",
|
|
52
|
+
"roundrectangle",
|
|
53
|
+
"roundrect",
|
|
54
|
+
"rounded",
|
|
55
|
+
"roundedrectangle",
|
|
56
|
+
"round-rect",
|
|
57
|
+
"mrecord",
|
|
58
|
+
"cut-rectangle",
|
|
59
|
+
"round-tag",
|
|
60
|
+
"bottom-round-rectangle",
|
|
61
|
+
],
|
|
62
|
+
triangle: ["triangle", "invtriangle", "round-triangle", "tag"],
|
|
63
|
+
diamond: ["diamond", "rhombus", "mdiamond", "round-diamond"],
|
|
64
|
+
pentagon: ["pentagon", "round-pentagon"],
|
|
65
|
+
hexagon: ["hexagon", "hexagon2", "round-hexagon", "concave-hexagon", "septagon", "heptagon", "round-heptagon"],
|
|
66
|
+
octagon: ["octagon", "doubleoctagon", "tripleoctagon", "round-octagon", "octagon2"],
|
|
67
|
+
parallelogram: ["parallelogram", "parallelogram2", "rhomboid", "fat-arrow", "fatarrow"],
|
|
68
|
+
trapezoid: ["trapezoid", "trapezoid2", "invtrapezoid", "trapezium", "round-trapezoid"],
|
|
69
|
+
star: ["star", "star5", "star6", "star8", "polygon"],
|
|
70
|
+
vee: ["vee", "v"],
|
|
71
|
+
none: ["none", "empty", "invis"],
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const BORDER_STYLES: Aliases = {
|
|
75
|
+
solid: ["solid", "line"],
|
|
76
|
+
dashed: ["dashed", "dash", "equal-dash"],
|
|
77
|
+
dotted: ["dotted", "dot", "dots"],
|
|
78
|
+
"dash-dot": ["dash-dot", "dashdot", "dashed-dotted"],
|
|
79
|
+
double: ["double", "parallel-lines"],
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const LINE_STYLES: Aliases = {
|
|
83
|
+
solid: ["solid", "line", "continuous", "separate-arrow"],
|
|
84
|
+
dashed: ["dashed", "dash", "dashed-line", "equal-dash"],
|
|
85
|
+
dotted: ["dotted", "dot", "dots", "dotted-line"],
|
|
86
|
+
"dash-dot": ["dash-dot", "dashdot", "dashed-dotted", "dash-dot-dot"],
|
|
87
|
+
"long-dash": ["long-dash", "longdash"],
|
|
88
|
+
double: ["double", "parallel", "parallel-lines"],
|
|
89
|
+
zigzag: ["zigzag"],
|
|
90
|
+
sinewave: ["sinewave", "sine-wave"],
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const ARROWS: Aliases = {
|
|
94
|
+
none: ["none", "no-arrow", "noarrow", "0"],
|
|
95
|
+
triangle: [
|
|
96
|
+
"triangle",
|
|
97
|
+
"normal",
|
|
98
|
+
"delta",
|
|
99
|
+
"standard",
|
|
100
|
+
"arrow",
|
|
101
|
+
"triangle-backcurve",
|
|
102
|
+
"white-delta-inverted",
|
|
103
|
+
"simple",
|
|
104
|
+
"short",
|
|
105
|
+
"plain",
|
|
106
|
+
"convex",
|
|
107
|
+
"a",
|
|
108
|
+
],
|
|
109
|
+
"triangle-open": ["triangle-open", "onormal", "empty", "white-delta", "transparent-circle-inverted", "open-delta"],
|
|
110
|
+
vee: ["vee", "open", "chevron", "concave", "triangle-cross", "b"],
|
|
111
|
+
tee: ["tee", "t", "t-shape", "half-bottom", "half-top", "bar"],
|
|
112
|
+
diamond: ["diamond", "white-diamond-inverted"],
|
|
113
|
+
"diamond-open": ["diamond-open", "odiamond", "white-diamond", "ediamond", "open-diamond"],
|
|
114
|
+
circle: ["circle", "dot", "transparent-circle", "white-circle-inverted"],
|
|
115
|
+
"circle-open": ["circle-open", "odot", "white-circle", "open-circle"],
|
|
116
|
+
square: ["square", "box", "skewed-dash"],
|
|
117
|
+
// An X-shaped "cross" (yEd, yFiles) is not a crow's foot: it stays other:cross.
|
|
118
|
+
crow: ["crow", "crows-foot", "crows-foot-many"],
|
|
119
|
+
half: ["half", "half-top-arrow", "half-open", "lnormal", "rnormal", "halfopen"],
|
|
120
|
+
inverted: ["inverted", "inv", "inverted-triangle", "inv-triangle"],
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const WEIGHTS: Aliases = {
|
|
124
|
+
normal: ["normal", "regular", "plain", "lighter", "100", "200", "300", "400", "500"],
|
|
125
|
+
bold: ["bold", "bolder", "600", "700", "800", "900"],
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const POSITIONS: Aliases = {
|
|
129
|
+
center: ["center", "centre", "middle", "c"],
|
|
130
|
+
top: ["top", "north", "t"],
|
|
131
|
+
bottom: ["bottom", "south", "b"],
|
|
132
|
+
left: ["left", "west", "l"],
|
|
133
|
+
right: ["right", "east", "r"],
|
|
134
|
+
"top-left": ["top-left", "north-west", "northwest"],
|
|
135
|
+
"top-right": ["top-right", "north-east", "northeast"],
|
|
136
|
+
"bottom-left": ["bottom-left", "south-west", "southwest"],
|
|
137
|
+
"bottom-right": ["bottom-right", "south-east", "southeast"],
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/** vis-network draws these spellings differently from the common reading. */
|
|
141
|
+
const VIS: Partial<Record<StyleEnumKind, Aliases>> = {
|
|
142
|
+
shape: {
|
|
143
|
+
"round-rectangle": ["box"],
|
|
144
|
+
ellipse: ["dot"],
|
|
145
|
+
triangle: ["triangledown"],
|
|
146
|
+
none: ["text"],
|
|
147
|
+
},
|
|
148
|
+
arrow: { inverted: ["inv-triangle"], square: ["box"] },
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/** Per-dialect overrides; a dialect not listed reads the common table alone. */
|
|
152
|
+
const OVERRIDES: ReadonlyMap<string, Partial<Record<StyleEnumKind, Aliases>>> = new Map([["vis", VIS]]);
|
|
153
|
+
|
|
154
|
+
const OPEN: ReadonlySet<StyleEnumKind> = new Set<StyleEnumKind>(["shape", "borderStyle", "lineStyle", "arrow"]);
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Builds an alias lookup.
|
|
158
|
+
* @param aliases - canonical value to spellings
|
|
159
|
+
* @returns spelling to canonical value
|
|
160
|
+
*/
|
|
161
|
+
function lookup(aliases: Aliases): ReadonlyMap<string, string> {
|
|
162
|
+
const map = new Map<string, string>();
|
|
163
|
+
for (const [value, spellings] of Object.entries(aliases)) {
|
|
164
|
+
for (const spelling of spellings) {
|
|
165
|
+
map.set(spelling, value);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return map;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const COMMON: ReadonlyMap<StyleEnumKind, ReadonlyMap<string, string>> = new Map([
|
|
172
|
+
["shape", lookup(SHAPES)],
|
|
173
|
+
["borderStyle", lookup(BORDER_STYLES)],
|
|
174
|
+
["lineStyle", lookup(LINE_STYLES)],
|
|
175
|
+
["arrow", lookup(ARROWS)],
|
|
176
|
+
["weight", lookup(WEIGHTS)],
|
|
177
|
+
["position", lookup(POSITIONS)],
|
|
178
|
+
]);
|
|
179
|
+
|
|
180
|
+
const DIALECT: ReadonlyMap<string, ReadonlyMap<StyleEnumKind, ReadonlyMap<string, string>>> = new Map(
|
|
181
|
+
Array.from(OVERRIDES, ([dialect, kinds]) => [
|
|
182
|
+
dialect,
|
|
183
|
+
new Map(Object.entries(kinds).map(([kind, aliases]) => [kind as StyleEnumKind, lookup(aliases)])),
|
|
184
|
+
]),
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* A canonical enumeration value: the dialect's spelling matched without regard to case, with spaces and underscores
|
|
189
|
+
* read as hyphens (Cytoscape's `ROUND_RECTANGLE` is `round-rectangle`). An unknown value is `other:<raw>` for an
|
|
190
|
+
* open enumeration and null for a closed one, noted as `W_STYLE_UNKNOWN_VALUE` either way.
|
|
191
|
+
* @param kind - the enumeration
|
|
192
|
+
* @param raw - the file's value
|
|
193
|
+
* @param dialect - the file's dialect
|
|
194
|
+
* @param site - where it was read
|
|
195
|
+
* @returns the canonical value, or null
|
|
196
|
+
* @category Styles
|
|
197
|
+
*/
|
|
198
|
+
export function canonEnum(kind: StyleEnumKind, raw: unknown, dialect: StyleDialect, site: CanonSite): string | null {
|
|
199
|
+
const text = scalarText(raw, site);
|
|
200
|
+
if (text === null) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
const trimmed = text.trim();
|
|
204
|
+
const key = trimmed.toLowerCase().replaceAll(/[\s_]+/g, "-");
|
|
205
|
+
const value = DIALECT.get(dialect)?.get(kind)?.get(key) ?? COMMON.get(kind)?.get(key);
|
|
206
|
+
if (value !== undefined) {
|
|
207
|
+
return value;
|
|
208
|
+
}
|
|
209
|
+
noteAt(site, STYLE_ISSUE.UNKNOWN_VALUE, trimmed);
|
|
210
|
+
return OPEN.has(kind) ? `other:${trimmed}` : null;
|
|
211
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graphviz's own color resolution, measured against `dot` 2.43 with `-Txdot`:
|
|
3
|
+
*
|
|
4
|
+
* - Leading blanks are skipped and trailing ones are not (`"red "` is unknown); names match without regard to case
|
|
5
|
+
* and keep their inner spaces (`Light Grey` is unknown).
|
|
6
|
+
* - `#rrggbb` and `#rrggbbaa` only, with anything after the digits ignored; there is no 3-digit form.
|
|
7
|
+
* - Three numbers starting with a digit or a point (`.5 .5 .5`, `0.5,0.5,0.5`) are hue, saturation and value, each
|
|
8
|
+
* clamped to 0..1 and truncated to a byte; a fourth number and anything after it are ignored. A leading sign makes
|
|
9
|
+
* the value a name, so `-0.5 0.5 0.5` is unknown.
|
|
10
|
+
* - `/scheme/name` names a scheme for one value and `//name` means the object's scheme; scheme names ignore case. A
|
|
11
|
+
* scheme other than `x11` is searched INSTEAD of X11: `colorscheme=blues9` makes `red` unknown, and an unknown
|
|
12
|
+
* scheme knows no names at all.
|
|
13
|
+
* - `transparent`, `none` and `invis` are `#fffffe` with alpha 0, whatever the scheme.
|
|
14
|
+
* - An unknown color is drawn BLACK.
|
|
15
|
+
* - A color list (`red:blue`, `red;0.3:blue`): an outline or a font color draws the text before the first `:` as one
|
|
16
|
+
* color, so `red:blue` is red and `red;0.3:blue` is black (`red;0.3` is not a color). A fill draws a gradient and
|
|
17
|
+
* an edge draws one line per color; both start with the first entry's color, its `;fraction` dropped. A value
|
|
18
|
+
* with a `;` and no `:` is not a list: it is one unknown color, drawn black.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { BREWER_SCHEMES, CSS_COLORS, X11_COLORS } from "./color-tables.js";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* How Graphviz draws a color value, which decides how a color list is read.
|
|
25
|
+
* @category Styles
|
|
26
|
+
*/
|
|
27
|
+
export type GraphvizColorUse = "line" | "fill" | "edge";
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* A resolved Graphviz color, with how it was read.
|
|
31
|
+
* @category Styles
|
|
32
|
+
*/
|
|
33
|
+
export interface GraphvizColor {
|
|
34
|
+
/** `#rrggbb`. */
|
|
35
|
+
readonly hex: string;
|
|
36
|
+
/** 0..1. */
|
|
37
|
+
readonly alpha: number;
|
|
38
|
+
/** The value did not resolve, so Graphviz draws black. */
|
|
39
|
+
readonly unknown: boolean;
|
|
40
|
+
/** The value is a list read as its first color: a gradient for a fill, parallel lines for an edge. */
|
|
41
|
+
readonly list: "gradient" | "lines" | null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const TRANSPARENT = new Set(["transparent", "none", "invis"]);
|
|
45
|
+
const HSV_PART = /^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* A byte as two hex digits.
|
|
49
|
+
* @param v - 0..255
|
|
50
|
+
* @returns two lowercase hex digits
|
|
51
|
+
*/
|
|
52
|
+
function hex2(v: number): string {
|
|
53
|
+
return v.toString(16).padStart(2, "0");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Graphviz's HSV to RGB, channels truncated to bytes.
|
|
58
|
+
* @param h - hue 0..1
|
|
59
|
+
* @param s - saturation 0..1
|
|
60
|
+
* @param v - value 0..1
|
|
61
|
+
* @returns `#rrggbb`
|
|
62
|
+
*/
|
|
63
|
+
function hsvHex(h: number, s: number, v: number): string {
|
|
64
|
+
const i = Math.floor(h * 6);
|
|
65
|
+
const f = h * 6 - i;
|
|
66
|
+
const p = v * (1 - s);
|
|
67
|
+
const q = v * (1 - f * s);
|
|
68
|
+
const t = v * (1 - (1 - f) * s);
|
|
69
|
+
const rgb = [
|
|
70
|
+
[v, t, p],
|
|
71
|
+
[q, v, p],
|
|
72
|
+
[p, v, t],
|
|
73
|
+
[p, q, v],
|
|
74
|
+
[t, p, v],
|
|
75
|
+
[v, p, q],
|
|
76
|
+
][i % 6];
|
|
77
|
+
return `#${rgb.map((c) => hex2(Math.trunc(c * 255))).join("")}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Resolves one Graphviz color (no list), or null when Graphviz does not know it.
|
|
82
|
+
* @param text - the color, leading blanks already skipped
|
|
83
|
+
* @param scheme - the object's color scheme, lowercase, `x11` when unset
|
|
84
|
+
* @returns hex and alpha, or null
|
|
85
|
+
*/
|
|
86
|
+
function resolveOne(text: string, scheme: string): { hex: string; alpha: number } | null {
|
|
87
|
+
if (text.startsWith("#")) {
|
|
88
|
+
const m = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{1,2})?/.exec(text);
|
|
89
|
+
if (m === null) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
hex: `#${m[1]}${m[2]}${m[3]}`.toLowerCase(),
|
|
94
|
+
alpha: m[4] === undefined ? 1 : Number.parseInt(m[4], 16) / 255,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const hsv = /^[.\d]/.test(text) ? hsvColor(text) : null;
|
|
98
|
+
if (hsv !== null) {
|
|
99
|
+
return { hex: hsv, alpha: 1 };
|
|
100
|
+
}
|
|
101
|
+
const named = schemedName(text.toLowerCase(), scheme);
|
|
102
|
+
if (named === null) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
if (TRANSPARENT.has(named.name)) {
|
|
106
|
+
return { hex: "#fffffe", alpha: 0 };
|
|
107
|
+
}
|
|
108
|
+
const hex = schemeColor(named.name, named.scheme);
|
|
109
|
+
return hex === undefined ? null : { hex, alpha: 1 };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* An HSV color: three numbers 0..1 separated by blanks or commas, clamped.
|
|
114
|
+
* @param text - the color
|
|
115
|
+
* @returns `#rrggbb`, or null when it is not one
|
|
116
|
+
*/
|
|
117
|
+
function hsvColor(text: string): string | null {
|
|
118
|
+
const parts = text.split(/[ ,]+/);
|
|
119
|
+
if (parts.length < 3 || !parts.slice(0, 3).every((p) => HSV_PART.test(p))) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const [h, s, v] = parts.slice(0, 3).map((p) => Math.min(1, Math.max(0, Number(p))));
|
|
123
|
+
return hsvHex(h, s, v);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* A color name and the scheme it is looked up in: `/scheme/name` names its own scheme, `//name` the object's.
|
|
128
|
+
* @param name - the name, lowercase
|
|
129
|
+
* @param scheme - the object's color scheme
|
|
130
|
+
* @returns the name and scheme, or null for a malformed `/scheme/name`
|
|
131
|
+
*/
|
|
132
|
+
function schemedName(name: string, scheme: string): { name: string; scheme: string } | null {
|
|
133
|
+
if (!name.startsWith("/")) {
|
|
134
|
+
return { name, scheme };
|
|
135
|
+
}
|
|
136
|
+
const slash = name.indexOf("/", 1);
|
|
137
|
+
if (slash < 0) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const prefix = name.slice(1, slash);
|
|
141
|
+
return { name: name.slice(slash + 1), scheme: prefix === "" ? scheme : prefix };
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* A color in a scheme: X11's or SVG's names, or a Brewer scheme's colors by their 1-based index.
|
|
146
|
+
* @param name - the name or index
|
|
147
|
+
* @param scheme - the scheme
|
|
148
|
+
* @returns `#rrggbb`, or undefined when the scheme has no such color
|
|
149
|
+
*/
|
|
150
|
+
function schemeColor(name: string, scheme: string): string | undefined {
|
|
151
|
+
if (scheme === "x11") {
|
|
152
|
+
return X11_COLORS.get(name);
|
|
153
|
+
}
|
|
154
|
+
if (scheme === "svg") {
|
|
155
|
+
return CSS_COLORS.get(name);
|
|
156
|
+
}
|
|
157
|
+
const colors = BREWER_SCHEMES.get(scheme);
|
|
158
|
+
const index = /^\d{1,3}$/.test(name) ? Number(name) : 0;
|
|
159
|
+
return colors !== undefined && index >= 1 ? colors[index - 1] : undefined;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Resolves a Graphviz color value the way Graphviz draws it for a use; an unknown color is black.
|
|
164
|
+
* @param raw - the value, at most 256 characters
|
|
165
|
+
* @param scheme - the object's `colorscheme`, or null
|
|
166
|
+
* @param use - an outline or font color (`line`), a fill, or an edge's line color
|
|
167
|
+
* @returns the color and how it was read
|
|
168
|
+
* @category Styles
|
|
169
|
+
*/
|
|
170
|
+
export function graphvizColor(raw: string, scheme: string | null, use: GraphvizColorUse): GraphvizColor {
|
|
171
|
+
let text = raw.replace(/^[ \t\r\n]+/, "");
|
|
172
|
+
let list: GraphvizColor["list"] = null;
|
|
173
|
+
const colon = text.indexOf(":");
|
|
174
|
+
if (colon >= 0) {
|
|
175
|
+
text = text.slice(0, colon);
|
|
176
|
+
if (use !== "line") {
|
|
177
|
+
const semi = text.indexOf(";");
|
|
178
|
+
if (semi >= 0) {
|
|
179
|
+
text = text.slice(0, semi);
|
|
180
|
+
}
|
|
181
|
+
list = use === "fill" ? "gradient" : "lines";
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const sc = scheme === null || scheme.trim() === "" ? "x11" : scheme.toLowerCase();
|
|
185
|
+
const resolved = text === "" ? null : resolveOne(text, sc);
|
|
186
|
+
return resolved === null
|
|
187
|
+
? { hex: "#000000", alpha: 1, unknown: true, list }
|
|
188
|
+
: { hex: resolved.hex, alpha: resolved.alpha, unknown: false, list };
|
|
189
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical style values: every reader turns a file's raw value into one spelling per property before anything
|
|
3
|
+
* compares values. Colors are `#rrggbb` with the alpha moved to an opacity, numbers have 6 significant digits,
|
|
4
|
+
* enumerations come from the neutral vocabulary, and text is what the tool draws.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from "./bends.js";
|
|
8
|
+
export * from "./color.js";
|
|
9
|
+
export * from "./enums.js";
|
|
10
|
+
export { type GraphvizColor, graphvizColor, type GraphvizColorUse } from "./graphviz.js";
|
|
11
|
+
export * from "./number.js";
|
|
12
|
+
export { type CanonSite, MAX_STYLE_VALUE_LENGTH } from "./site.js";
|
|
13
|
+
export * from "./text.js";
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical numbers, lengths, opacities and booleans: 6 significant digits, never negative, never NaN or Infinity.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { STYLE_ISSUE } from "../codes.js";
|
|
6
|
+
import type { StyleDialect } from "../types.js";
|
|
7
|
+
import { type CanonSite, noteAt, scalarText, spendAt } from "./site.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The largest length or factor a file may give; a larger one is noted as `W_STYLE_BAD_VALUE` and gives no value.
|
|
11
|
+
* @category Styles
|
|
12
|
+
*/
|
|
13
|
+
export const MAX_STYLE_NUMBER = 1e6;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Points per inch: DOT gives node sizes in inches, and a canonical length is in points (pixels at 72 dpi).
|
|
17
|
+
* @category Styles
|
|
18
|
+
*/
|
|
19
|
+
export const DOT_POINTS_PER_INCH = 72;
|
|
20
|
+
|
|
21
|
+
/** One way to read a decimal number, so a long run of digits fails or passes in one pass. */
|
|
22
|
+
const DECIMAL = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A number at 6 significant digits, with `-0` as `0`.
|
|
26
|
+
* @param value - a finite number
|
|
27
|
+
* @returns the canonical number
|
|
28
|
+
* @category Styles
|
|
29
|
+
*/
|
|
30
|
+
export function num6(value: number): number {
|
|
31
|
+
return Number(value.toPrecision(6)) + 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A finite number from a number or a decimal string, or null with a note.
|
|
36
|
+
* @param raw - the file's value
|
|
37
|
+
* @param site - where it was read
|
|
38
|
+
* @returns the number, or null
|
|
39
|
+
*/
|
|
40
|
+
function finite(raw: unknown, site: CanonSite): number | null {
|
|
41
|
+
if (typeof raw === "boolean") {
|
|
42
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, raw);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const text = scalarText(raw, site);
|
|
46
|
+
if (text === null) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const trimmed = text.trim();
|
|
50
|
+
let value = Number.NaN;
|
|
51
|
+
if (typeof raw === "number") {
|
|
52
|
+
value = raw;
|
|
53
|
+
} else if (DECIMAL.test(trimmed)) {
|
|
54
|
+
value = Number(trimmed);
|
|
55
|
+
}
|
|
56
|
+
if (!Number.isFinite(value)) {
|
|
57
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, text);
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A length or factor: a finite number at least 0 and at most `MAX_STYLE_NUMBER` after multiplying by `factor`, at 6
|
|
65
|
+
* significant digits. Anything else is null with a `W_STYLE_BAD_VALUE` note.
|
|
66
|
+
* @param raw - the file's value: a number or a decimal string
|
|
67
|
+
* @param site - where it was read
|
|
68
|
+
* @param factor - multiplies the value first (`DOT_POINTS_PER_INCH` for DOT sizes); defaults to 1
|
|
69
|
+
* @returns the canonical number, or null
|
|
70
|
+
* @category Styles
|
|
71
|
+
*/
|
|
72
|
+
export function canonNumber(raw: unknown, site: CanonSite, factor = 1): number | null {
|
|
73
|
+
const value = finite(raw, site);
|
|
74
|
+
if (value === null) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const scaled = value * factor;
|
|
78
|
+
if (!(scaled >= 0 && scaled <= MAX_STYLE_NUMBER)) {
|
|
79
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, typeof raw === "string" ? raw : String(raw));
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return num6(scaled);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* An opacity from 0 to 1. Cytoscape desktop states opacities from 0 to 255 and is divided by 255; every other
|
|
87
|
+
* dialect states 0 to 1. A value outside the dialect's range is null with a `W_STYLE_BAD_VALUE` note.
|
|
88
|
+
* @param raw - the file's value
|
|
89
|
+
* @param dialect - the file's dialect
|
|
90
|
+
* @param site - where it was read
|
|
91
|
+
* @returns the canonical opacity, or null
|
|
92
|
+
* @category Styles
|
|
93
|
+
*/
|
|
94
|
+
export function canonOpacity(raw: unknown, dialect: StyleDialect, site: CanonSite): number | null {
|
|
95
|
+
const value = finite(raw, site);
|
|
96
|
+
if (value === null) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const top = dialect === "cytoscape" ? 255 : 1;
|
|
100
|
+
if (!(value >= 0 && value <= top)) {
|
|
101
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, typeof raw === "string" ? raw : String(raw));
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return num6(value / top);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Boolean spellings, lowercase. */
|
|
108
|
+
const BOOLEANS: ReadonlyMap<string, boolean> = new Map([
|
|
109
|
+
["true", true],
|
|
110
|
+
["yes", true],
|
|
111
|
+
["on", true],
|
|
112
|
+
["1", true],
|
|
113
|
+
["false", false],
|
|
114
|
+
["no", false],
|
|
115
|
+
["off", false],
|
|
116
|
+
["0", false],
|
|
117
|
+
]);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* A boolean from `true`/`false`, `yes`/`no`, `on`/`off` or `1`/`0` in any case; anything else is null with a note.
|
|
121
|
+
* @param raw - the file's value
|
|
122
|
+
* @param site - where it was read
|
|
123
|
+
* @returns the boolean, or null
|
|
124
|
+
* @category Styles
|
|
125
|
+
*/
|
|
126
|
+
export function canonBoolean(raw: unknown, site: CanonSite): boolean | null {
|
|
127
|
+
if (typeof raw === "boolean") {
|
|
128
|
+
spendAt(site, 1);
|
|
129
|
+
return raw;
|
|
130
|
+
}
|
|
131
|
+
const text = scalarText(raw, site);
|
|
132
|
+
if (text === null) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const value = BOOLEANS.get(text.trim().toLowerCase());
|
|
136
|
+
if (value === undefined) {
|
|
137
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, text);
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return value;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* The unit of a dialect's lengths: GEXF and Pajek give size factors relative to their tool's normal size, every
|
|
145
|
+
* other dialect gives pixels (after DOT's inches are converted).
|
|
146
|
+
* @param dialect - the file's dialect
|
|
147
|
+
* @returns `"relative"` or `"px"`
|
|
148
|
+
* @category Styles
|
|
149
|
+
*/
|
|
150
|
+
export function styleLengthUnit(dialect: StyleDialect): "px" | "relative" {
|
|
151
|
+
return dialect === "gexf" || dialect === "dvips" ? "relative" : "px";
|
|
152
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a raw value came from, so a canonicalizer can note a problem against the right target, property and element
|
|
3
|
+
* and spend the work it costs from the extraction's one budget.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { STYLE_ISSUE } from "../codes.js";
|
|
7
|
+
import type { StyleNotes } from "../notes.js";
|
|
8
|
+
import type { StyleNoteCode, StyleTarget, StyleWorkBudget } from "../types.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A number, color, enumeration or mapper expression longer than this many characters is not parsed: it is noted as
|
|
12
|
+
* `W_STYLE_VALUE_TOO_LONG` and gives no value. Text is copied whatever its length.
|
|
13
|
+
* @category Styles
|
|
14
|
+
*/
|
|
15
|
+
export const MAX_STYLE_VALUE_LENGTH = 256;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Where a raw value is read: the notes it reports to, the target and property it is for, the element it belongs to
|
|
19
|
+
* and the budget its work is spent from.
|
|
20
|
+
* @category Styles
|
|
21
|
+
*/
|
|
22
|
+
export interface CanonSite {
|
|
23
|
+
/** Where problems are noted. */
|
|
24
|
+
readonly notes: StyleNotes;
|
|
25
|
+
/** Nodes, edges or the graph. */
|
|
26
|
+
readonly target: StyleTarget | "graph";
|
|
27
|
+
/** The neutral property the value is for. */
|
|
28
|
+
readonly property: string;
|
|
29
|
+
/** The element the value belongs to, by index; absent for a rule's value. */
|
|
30
|
+
readonly element?: number;
|
|
31
|
+
/** The work budget; each value spends one operation plus one per character it reads. */
|
|
32
|
+
readonly budget?: StyleWorkBudget;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Notes a problem with a value at its site.
|
|
37
|
+
* @param site - where the value was read
|
|
38
|
+
* @param code - the condition
|
|
39
|
+
* @param sample - the offending value
|
|
40
|
+
*/
|
|
41
|
+
export function noteAt(site: CanonSite, code: StyleNoteCode, sample: unknown): void {
|
|
42
|
+
site.notes.add(code, site.target, site.property, { sample, element: site.element });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Spends operations from the site's budget; graph values count as node work.
|
|
47
|
+
* @param site - where the value was read
|
|
48
|
+
* @param operations - the work
|
|
49
|
+
*/
|
|
50
|
+
export function spendAt(site: CanonSite, operations: number): void {
|
|
51
|
+
site.budget?.spend(site.target === "graph" ? "node" : site.target, operations);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The text of a raw scalar, untrimmed, after the length limit: null for an absent value (no note), and null with a
|
|
56
|
+
* note for a value that is empty, too long, not finite or not a scalar. Spends at most 257 operations.
|
|
57
|
+
* @param raw - the file's value
|
|
58
|
+
* @param site - where it was read
|
|
59
|
+
* @returns the value's text, or null
|
|
60
|
+
*/
|
|
61
|
+
export function scalarText(raw: unknown, site: CanonSite): string | null {
|
|
62
|
+
spendAt(site, 1);
|
|
63
|
+
if (raw === null || raw === undefined) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
if (typeof raw === "number") {
|
|
67
|
+
if (Number.isFinite(raw)) {
|
|
68
|
+
return String(raw);
|
|
69
|
+
}
|
|
70
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, String(raw));
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
if (typeof raw !== "string") {
|
|
74
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, typeof raw);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (raw.length > MAX_STYLE_VALUE_LENGTH) {
|
|
78
|
+
noteAt(site, STYLE_ISSUE.VALUE_TOO_LONG, `${raw.length} characters`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
spendAt(site, raw.length);
|
|
82
|
+
if (raw.trim() === "") {
|
|
83
|
+
noteAt(site, STYLE_ISSUE.BAD_VALUE, raw);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return raw;
|
|
87
|
+
}
|