@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
|
@@ -13,14 +13,15 @@
|
|
|
13
13
|
* shows), in a label column named `name`, and ids an exporter mangled are restored from the node
|
|
14
14
|
* table's `graphty:originalId` (restoreMangledIds). 2.x: one full XGMML file per network, with
|
|
15
15
|
* selection and hidden state from `cysession.xml`. Everything is resolved by the XGMML emitter, so
|
|
16
|
-
* both readers share every column rule.
|
|
16
|
+
* both readers share every column rule. Asked for styles, the importer reads the style the imported view names
|
|
17
|
+
* from `session_vizmap.xml` (styles.ts), kept for it through the report; otherwise W_STYLES_NOT_IMPORTED.
|
|
17
18
|
*/
|
|
18
19
|
|
|
19
20
|
import { GraphFormatError, type GraphSink, INVALID_INDEX } from "@graphty/graph-format";
|
|
20
21
|
|
|
21
22
|
import { declareResolved } from "../../common/attributes.js";
|
|
22
23
|
import { IdCoercer } from "../../common/ids.js";
|
|
23
|
-
import { decodeEntryName, throwIfAborted } from "../../common/input.js";
|
|
24
|
+
import { decodeEntryName, readText, throwIfAborted } from "../../common/input.js";
|
|
24
25
|
import {
|
|
25
26
|
chooseGraph,
|
|
26
27
|
graphChosen,
|
|
@@ -33,6 +34,7 @@ import {
|
|
|
33
34
|
import { agree, elementCount, plural } from "../../common/plural.js";
|
|
34
35
|
import { ImportReportBuilder } from "../../common/report.js";
|
|
35
36
|
import { startsLikeZip } from "../../common/zip.js";
|
|
37
|
+
import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
|
|
36
38
|
import {
|
|
37
39
|
type CommonImportOptions,
|
|
38
40
|
type GraphChoiceOptions,
|
|
@@ -88,6 +90,7 @@ import {
|
|
|
88
90
|
urlDecode,
|
|
89
91
|
type XmlNode,
|
|
90
92
|
} from "./session.js";
|
|
93
|
+
import { readSessionStyles, type SessionStyleSource } from "./styles.js";
|
|
91
94
|
import { cellAtt, type CyTable, readCyTable, type VirtualColumn, virtualColumnsOf } from "./tables.js";
|
|
92
95
|
|
|
93
96
|
/**
|
|
@@ -469,8 +472,9 @@ function registeredGraphs(parsed: Parsed): GraphRec[] {
|
|
|
469
472
|
* @param choice - the subnetwork
|
|
470
473
|
* @param sink - the sink
|
|
471
474
|
* @param parsed - its network file, parsed for this import (its records are filled in)
|
|
475
|
+
* @returns the style its view names, or null
|
|
472
476
|
*/
|
|
473
|
-
async function import3(prepared: Prepared, choice: Choice3, sink: GraphSink, parsed: Parsed): Promise<
|
|
477
|
+
async function import3(prepared: Prepared, choice: Choice3, sink: GraphSink, parsed: Parsed): Promise<string | null> {
|
|
474
478
|
const { graph } = choice;
|
|
475
479
|
const members = membersOf(parsed.doc, graph);
|
|
476
480
|
const nodes = byId(members.nodes);
|
|
@@ -478,7 +482,7 @@ async function import3(prepared: Prepared, choice: Choice3, sink: GraphSink, par
|
|
|
478
482
|
// the records are shared by every network of the file: what this import adds is undone after
|
|
479
483
|
const restore = saveRecords(graph, nodes, edges);
|
|
480
484
|
try {
|
|
481
|
-
await fill3(prepared, choice, sink, parsed, nodes, edges);
|
|
485
|
+
return await fill3(prepared, choice, sink, parsed, nodes, edges);
|
|
482
486
|
} finally {
|
|
483
487
|
restore();
|
|
484
488
|
}
|
|
@@ -530,6 +534,7 @@ function saveRecords(
|
|
|
530
534
|
* @param parsed - its network file
|
|
531
535
|
* @param nodes - its node records by id
|
|
532
536
|
* @param edges - its edge records by id
|
|
537
|
+
* @returns the style its view names, or null
|
|
533
538
|
*/
|
|
534
539
|
async function fill3(
|
|
535
540
|
prepared: Prepared,
|
|
@@ -538,7 +543,7 @@ async function fill3(
|
|
|
538
543
|
parsed: Parsed,
|
|
539
544
|
nodes: ReadonlyMap<string, NodeRec>,
|
|
540
545
|
edges: ReadonlyMap<string, EdgeRec>,
|
|
541
|
-
): Promise<
|
|
546
|
+
): Promise<string | null> {
|
|
542
547
|
const { report, inner } = prepared;
|
|
543
548
|
const { doc, dialect } = parsed;
|
|
544
549
|
const { graph } = choice;
|
|
@@ -553,6 +558,12 @@ async function fill3(
|
|
|
553
558
|
}
|
|
554
559
|
const restoredIds = inner.restoreMangledIds ? restoreIds(members.nodes) : new Map<string, string>();
|
|
555
560
|
const { visualStyle, extraViews, extraIds } = await readViews(prepared, choice, nodes, edges);
|
|
561
|
+
const block =
|
|
562
|
+
prepared.session.layout.block === null ? null : await entryText(prepared, prepared.session.layout.block);
|
|
563
|
+
if (block !== null) {
|
|
564
|
+
// the graphty.styles block of a session graphty wrote: a graph attribute, as in every other format
|
|
565
|
+
graph.atts.push(textAtt(STYLE_BLOCK_NAME, block));
|
|
566
|
+
}
|
|
556
567
|
const cyMeta = sessionMeta(prepared, {
|
|
557
568
|
collection: doc.root.label ?? choice.network.title,
|
|
558
569
|
network: choice.graphId,
|
|
@@ -586,6 +597,7 @@ async function fill3(
|
|
|
586
597
|
}
|
|
587
598
|
reportRootOnly(parsed, report, choice.network.name);
|
|
588
599
|
writeViewPositions(sink, extraViews, extraIds, report, prepared.inner, restoredIds);
|
|
600
|
+
return visualStyle;
|
|
589
601
|
}
|
|
590
602
|
|
|
591
603
|
/**
|
|
@@ -749,7 +761,8 @@ function rowAtts(
|
|
|
749
761
|
const line = table.lines.get(key) ?? 0;
|
|
750
762
|
const out: AttRec[] = [];
|
|
751
763
|
for (let i = 1; i < table.columns.length && i < cells.length; i++) {
|
|
752
|
-
|
|
764
|
+
const quoted = table.quotedEmpty?.get(key)?.has(i) === true;
|
|
765
|
+
pushAtt(out, cellAtt(table.columns[i], cells[i], line, namespace, hidden, quoted));
|
|
753
766
|
}
|
|
754
767
|
return out;
|
|
755
768
|
}
|
|
@@ -1305,8 +1318,9 @@ function sessionRecord(report: ImportReportBuilder, entry: string, message: stri
|
|
|
1305
1318
|
* @param prepared - the prepared import
|
|
1306
1319
|
* @param choice - the network
|
|
1307
1320
|
* @param sink - the sink
|
|
1321
|
+
* @returns the style the network uses, or null
|
|
1308
1322
|
*/
|
|
1309
|
-
async function import2(prepared: Prepared, choice: Choice2, sink: GraphSink): Promise<
|
|
1323
|
+
async function import2(prepared: Prepared, choice: Choice2, sink: GraphSink): Promise<string | null> {
|
|
1310
1324
|
const { report, inner, session } = prepared;
|
|
1311
1325
|
const { doc, dialect } = await parseEntry(session, choice.file, report, inner);
|
|
1312
1326
|
let unmatched = 0;
|
|
@@ -1343,6 +1357,7 @@ async function import2(prepared: Prepared, choice: Choice2, sink: GraphSink): Pr
|
|
|
1343
1357
|
};
|
|
1344
1358
|
const settings: XgmmlSettings = { labelAliases: true, cytoscapeEscapes: true, zAs: prepared.zAs };
|
|
1345
1359
|
new XgmmlEmitter(doc, dialect, sink, report, inner, settings, extras).emit(null);
|
|
1360
|
+
return cyMeta.visualStyle;
|
|
1346
1361
|
}
|
|
1347
1362
|
|
|
1348
1363
|
/**
|
|
@@ -1466,16 +1481,116 @@ function sessionMeta(
|
|
|
1466
1481
|
*/
|
|
1467
1482
|
async function importChoice(prepared: Prepared, index: number, sink: GraphSink): Promise<ImportReport> {
|
|
1468
1483
|
const choice = prepared.choices[index];
|
|
1484
|
+
let visualStyle: string | null;
|
|
1469
1485
|
if (choice.era === "3") {
|
|
1470
1486
|
const parsed = prepared.docs.get(choice.network.name) as Parsed;
|
|
1471
|
-
await import3(prepared, choice, sink, parsed);
|
|
1487
|
+
visualStyle = await import3(prepared, choice, sink, parsed);
|
|
1472
1488
|
} else {
|
|
1473
|
-
await import2(prepared, choice, sink);
|
|
1489
|
+
visualStyle = await import2(prepared, choice, sink);
|
|
1474
1490
|
}
|
|
1491
|
+
await keepStyleSource(prepared, index, visualStyle);
|
|
1475
1492
|
throwIfAborted(prepared.common.signal);
|
|
1476
1493
|
return prepared.report.finish();
|
|
1477
1494
|
}
|
|
1478
1495
|
|
|
1496
|
+
/**
|
|
1497
|
+
* Keep what the session's style reader needs (`styles()` gets it back as `context.kept`): the parsed
|
|
1498
|
+
* `session_vizmap.xml` of a 3.x session, the style the imported view names, and which network was imported.
|
|
1499
|
+
* Reading the styles never fails the import: a damaged entry is kept as the reason it cannot be read.
|
|
1500
|
+
* @param prepared - the prepared import
|
|
1501
|
+
* @param index - the network imported
|
|
1502
|
+
* @param visualStyle - the style its view names, or null
|
|
1503
|
+
*/
|
|
1504
|
+
async function keepStyleSource(prepared: Prepared, index: number, visualStyle: string | null): Promise<void> {
|
|
1505
|
+
const { layout } = prepared.session;
|
|
1506
|
+
const entry = layout.styles.find((e) => e.path.endsWith("session_vizmap.xml"));
|
|
1507
|
+
let vizmap: XmlNode | null = null;
|
|
1508
|
+
let problem: string | null = null;
|
|
1509
|
+
if (layout.era === "3" && entry !== undefined) {
|
|
1510
|
+
const bytes = await entryBytes(prepared, entry);
|
|
1511
|
+
const tree =
|
|
1512
|
+
typeof bytes === "string"
|
|
1513
|
+
? bytes
|
|
1514
|
+
: await parseXmlTree(bytes, entry.name, new ImportReportBuilder(FORMAT, 0), prepared.inner);
|
|
1515
|
+
if (typeof tree === "string") {
|
|
1516
|
+
problem = tree;
|
|
1517
|
+
} else {
|
|
1518
|
+
vizmap = tree;
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
const source: SessionStyleSource = {
|
|
1522
|
+
era: layout.era,
|
|
1523
|
+
vizmap,
|
|
1524
|
+
problem,
|
|
1525
|
+
visualStyle,
|
|
1526
|
+
network: { index, name: prepared.choices[index].name },
|
|
1527
|
+
};
|
|
1528
|
+
prepared.report.keepForStyles(source);
|
|
1529
|
+
}
|
|
1530
|
+
|
|
1531
|
+
/**
|
|
1532
|
+
* An entry's bytes for the styles, read outside the import's report: a damaged entry is the reason, never a failure.
|
|
1533
|
+
* @param prepared - the prepared import
|
|
1534
|
+
* @param entry - the entry
|
|
1535
|
+
* @returns the bytes, or why they cannot be read
|
|
1536
|
+
*/
|
|
1537
|
+
async function entryBytes(prepared: Prepared, entry: SessionEntry): Promise<Uint8Array | string> {
|
|
1538
|
+
try {
|
|
1539
|
+
return await prepared.session.read(entry, new ImportReportBuilder(FORMAT, 0));
|
|
1540
|
+
} catch (err) {
|
|
1541
|
+
if (err instanceof ImportError) {
|
|
1542
|
+
return err.message;
|
|
1543
|
+
}
|
|
1544
|
+
throw err;
|
|
1545
|
+
}
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1548
|
+
/**
|
|
1549
|
+
* An entry's text for the styles, or null when it cannot be read.
|
|
1550
|
+
* @param prepared - the prepared import
|
|
1551
|
+
* @param entry - the entry
|
|
1552
|
+
* @returns the text, or null
|
|
1553
|
+
*/
|
|
1554
|
+
async function entryText(prepared: Prepared, entry: SessionEntry): Promise<string | null> {
|
|
1555
|
+
const bytes = await entryBytes(prepared, entry);
|
|
1556
|
+
if (typeof bytes === "string") {
|
|
1557
|
+
return null;
|
|
1558
|
+
}
|
|
1559
|
+
try {
|
|
1560
|
+
return await readText(bytes, new ImportReportBuilder(FORMAT, 0), { signal: prepared.common.signal });
|
|
1561
|
+
} catch (err) {
|
|
1562
|
+
if (err instanceof ImportError) {
|
|
1563
|
+
return null;
|
|
1564
|
+
}
|
|
1565
|
+
throw err;
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
/**
|
|
1570
|
+
* A text att of the network.
|
|
1571
|
+
* @param name - its name
|
|
1572
|
+
* @param value - its text
|
|
1573
|
+
* @returns the att
|
|
1574
|
+
*/
|
|
1575
|
+
function textAtt(name: string, value: string): AttRec {
|
|
1576
|
+
return {
|
|
1577
|
+
name,
|
|
1578
|
+
type: "string",
|
|
1579
|
+
cyType: "String",
|
|
1580
|
+
elementType: null,
|
|
1581
|
+
value,
|
|
1582
|
+
hidden: false,
|
|
1583
|
+
equation: false,
|
|
1584
|
+
children: [],
|
|
1585
|
+
extra: {},
|
|
1586
|
+
xml: null,
|
|
1587
|
+
hasGraph: false,
|
|
1588
|
+
text: "",
|
|
1589
|
+
line: 0,
|
|
1590
|
+
namespace: null,
|
|
1591
|
+
};
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1479
1594
|
/**
|
|
1480
1595
|
* Import one network of a session.
|
|
1481
1596
|
* @param input - the session bytes
|
|
@@ -1599,4 +1714,5 @@ export const cysImporter: GraphImporter<CysImportOptions> = Object.freeze({
|
|
|
1599
1714
|
import: importCys,
|
|
1600
1715
|
importAll: importAllCys,
|
|
1601
1716
|
listGraphs: listCysGraphs,
|
|
1717
|
+
styles: readSessionStyles,
|
|
1602
1718
|
});
|
|
@@ -12,6 +12,7 @@ import { plural } from "../../common/plural.js";
|
|
|
12
12
|
import { ImportReportBuilder } from "../../common/report.js";
|
|
13
13
|
import { tokenizeXml, xmlDeclaredEncoding, XmlSyntaxError } from "../../common/xml.js";
|
|
14
14
|
import { readZipDirectory, readZipEntry, type ZipEntry, ZipError } from "../../common/zip.js";
|
|
15
|
+
import { STYLE_BLOCK_NAME } from "../../styles/io/block.js";
|
|
15
16
|
import { ImportError, type ImportInput } from "../../types.js";
|
|
16
17
|
import { CYS_ISSUE, FORMAT, MAX_RATIO } from "./constants.js";
|
|
17
18
|
|
|
@@ -83,6 +84,8 @@ interface SessionLayout {
|
|
|
83
84
|
readonly files: ReadonlyMap<string, SessionEntry>;
|
|
84
85
|
/** The style entries (`session_vizmap.xml`, `session_vizmap.props`). */
|
|
85
86
|
readonly styles: readonly SessionEntry[];
|
|
87
|
+
/** 3.x: the `graphty.styles` entry a session graphty wrote holds, if present. */
|
|
88
|
+
readonly block: SessionEntry | null;
|
|
86
89
|
/** Every entry the importer does not read. */
|
|
87
90
|
readonly skipped: readonly string[];
|
|
88
91
|
}
|
|
@@ -321,6 +324,7 @@ function layoutOf(zipEntries: readonly ZipEntry[], report: ImportReportBuilder):
|
|
|
321
324
|
cysession: null as SessionEntry | null,
|
|
322
325
|
files: new Map<string, SessionEntry>(),
|
|
323
326
|
styles: [] as SessionEntry[],
|
|
327
|
+
block: null as SessionEntry | null,
|
|
324
328
|
skipped: [] as string[],
|
|
325
329
|
};
|
|
326
330
|
for (const [name, zip] of byName) {
|
|
@@ -379,6 +383,8 @@ function classify3(entry: SessionEntry, layout: Mutable): void {
|
|
|
379
383
|
layout.networkList = entry;
|
|
380
384
|
} else if (/(^|\/)session_vizmap\.(xml|props)$/.test(path)) {
|
|
381
385
|
layout.styles.push(entry);
|
|
386
|
+
} else if (path === STYLE_BLOCK_NAME) {
|
|
387
|
+
layout.block = entry;
|
|
382
388
|
} else {
|
|
383
389
|
layout.skipped.push(entry.name);
|
|
384
390
|
}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The styles of a Cytoscape session. A 3.x session keeps its named visual styles in `session_vizmap.xml` and each
|
|
3
|
+
* view names the one it uses (`cy:visualStyle`); the view's elements carry only their bypasses
|
|
4
|
+
* (`lockedVisualProperties`). The import reads the style the imported network's view names, resolved the way
|
|
5
|
+
* Cytoscape draws it (bypass over mapping over default), with Cytoscape's renderer fallbacks for what the style
|
|
6
|
+
* leaves unset. A 2.x session's network files carry every element's resolved values, read like XGMML, and its
|
|
7
|
+
* hidden elements come back invisible. The writer emits the graph's styles as a named style, bypasses and columns.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { GraphSnapshot } from "@graphty/graph-format";
|
|
11
|
+
|
|
12
|
+
import { STYLE_ISSUE } from "../../styles/codes.js";
|
|
13
|
+
import {
|
|
14
|
+
type CytoscapeMapping,
|
|
15
|
+
type CytoscapeStyle,
|
|
16
|
+
emptyCytoscapeStyle,
|
|
17
|
+
typedKey,
|
|
18
|
+
} from "../../styles/cytoscape/mappings.js";
|
|
19
|
+
import { cytoscapeBackground, type CytoscapeElements, resolveCytoscape } from "../../styles/cytoscape/resolve.js";
|
|
20
|
+
import { cytoscapeRules } from "../../styles/cytoscape/translate.js";
|
|
21
|
+
import { StyleNotes } from "../../styles/notes.js";
|
|
22
|
+
import { dataCell } from "../../styles/plan/resolve.js";
|
|
23
|
+
import type { ImporterStyles, ReaderOutput, StyleReadContext, StyleTarget } from "../../styles/types.js";
|
|
24
|
+
import { exactFromBlock, graphicsBypasses, hiddenToVisible, nonEmpty, readXgmmlStyles } from "../xgmml/styles.js";
|
|
25
|
+
import { HIDDEN_COLUMN } from "./constants.js";
|
|
26
|
+
import type { XmlNode } from "./session.js";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* What a session import keeps for its styles (through `report.keepForStyles()`): the era, the parsed
|
|
30
|
+
* `session_vizmap.xml`, the style the imported network's view names, and which network was imported.
|
|
31
|
+
*/
|
|
32
|
+
export interface SessionStyleSource {
|
|
33
|
+
/** "3" for a 3.x session, "2" for a 2.x one. */
|
|
34
|
+
readonly era: "2" | "3";
|
|
35
|
+
/** The root element of `session_vizmap.xml`, or null when the session has none or it cannot be read. */
|
|
36
|
+
readonly vizmap: XmlNode | null;
|
|
37
|
+
/** Why `session_vizmap.xml` could not be read, or null. */
|
|
38
|
+
readonly problem: string | null;
|
|
39
|
+
/** The style the imported view names, or null. */
|
|
40
|
+
readonly visualStyle: string | null;
|
|
41
|
+
/** The network the import read: its index among the session's networks, and its name. */
|
|
42
|
+
readonly network: { readonly index: number; readonly name: string | null };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The styles of an imported session network.
|
|
47
|
+
* @param snapshot - the network
|
|
48
|
+
* @param context - what the import kept, the budget and the cancel signal
|
|
49
|
+
* @returns the styles
|
|
50
|
+
*/
|
|
51
|
+
export function readSessionStyles(snapshot: GraphSnapshot, context: StyleReadContext): ImporterStyles {
|
|
52
|
+
const kept = context.kept as SessionStyleSource | undefined;
|
|
53
|
+
if (kept?.era === "2") {
|
|
54
|
+
return readXgmmlStyles(snapshot, context, { tool: "cytoscape-fallbacks", hiddenColumn: HIDDEN_COLUMN });
|
|
55
|
+
}
|
|
56
|
+
const notes = new StyleNotes();
|
|
57
|
+
const style = sessionStyle(kept, notes);
|
|
58
|
+
const out: Record<StyleTarget, ReaderOutput> = { node: { values: {} }, edge: { values: {} } };
|
|
59
|
+
for (const target of ["node", "edge"] as const) {
|
|
60
|
+
context.signal?.throwIfAborted();
|
|
61
|
+
out[target] = sessionTargetStyles(snapshot, target, style, { notes, budget: context.budget });
|
|
62
|
+
}
|
|
63
|
+
const background = cytoscapeBackground(style, notes);
|
|
64
|
+
return {
|
|
65
|
+
canonical: true,
|
|
66
|
+
dialect: "cytoscape",
|
|
67
|
+
tool: "cytoscape-fallbacks",
|
|
68
|
+
units: "px",
|
|
69
|
+
node: out.node,
|
|
70
|
+
edge: out.edge,
|
|
71
|
+
graph: background === null ? {} : { background },
|
|
72
|
+
notes: notes.list(),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The Cytoscape style of a session: its vizmap's, or an empty one with a note saying why there is none.
|
|
78
|
+
* @param kept - what the import kept
|
|
79
|
+
* @param notes - where problems are noted
|
|
80
|
+
* @returns the style
|
|
81
|
+
*/
|
|
82
|
+
function sessionStyle(kept: SessionStyleSource | undefined, notes: StyleNotes): CytoscapeStyle {
|
|
83
|
+
if (kept?.vizmap === null || kept?.vizmap === undefined) {
|
|
84
|
+
const problem = kept?.problem ?? null;
|
|
85
|
+
notes.add(problem === null ? STYLE_ISSUE.NO_VIZMAP : STYLE_ISSUE.UNREADABLE, null, "session_vizmap.xml", {
|
|
86
|
+
sample: problem ?? "absent",
|
|
87
|
+
});
|
|
88
|
+
return emptyCytoscapeStyle();
|
|
89
|
+
}
|
|
90
|
+
return cytoscapeStyleFromVizmap(kept.vizmap, kept.visualStyle, notes);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The styles of a session's nodes or edges.
|
|
95
|
+
* @param snapshot - the network
|
|
96
|
+
* @param target - nodes or edges
|
|
97
|
+
* @param style - the session's style
|
|
98
|
+
* @param work - where problems are noted, and the work budget
|
|
99
|
+
* @param work.notes - where problems are noted
|
|
100
|
+
* @param work.budget - the work budget
|
|
101
|
+
* @returns the reader output for the target
|
|
102
|
+
*/
|
|
103
|
+
function sessionTargetStyles(
|
|
104
|
+
snapshot: GraphSnapshot,
|
|
105
|
+
target: StyleTarget,
|
|
106
|
+
style: CytoscapeStyle,
|
|
107
|
+
work: { readonly notes: StyleNotes; readonly budget: StyleReadContext["budget"] },
|
|
108
|
+
): ReaderOutput {
|
|
109
|
+
const { notes } = work;
|
|
110
|
+
const table = target === "node" ? snapshot.nodes : snapshot.edges;
|
|
111
|
+
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
112
|
+
for (const m of style[target].mappings.values()) {
|
|
113
|
+
if (!table.has(m.column)) {
|
|
114
|
+
notes.add(STYLE_ISSUE.MAPPING_COLUMN_MISSING, target, m.column, { sample: m.kind });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const elements: CytoscapeElements = {
|
|
118
|
+
count: n,
|
|
119
|
+
value: (column, i) => (table.has(column) ? dataCell(table, column, i) : null),
|
|
120
|
+
bypasses: graphicsBypasses(table, target, n, notes),
|
|
121
|
+
};
|
|
122
|
+
const values = resolveCytoscape(target, style, elements, work);
|
|
123
|
+
hiddenToVisible(table, HIDDEN_COLUMN, n, values);
|
|
124
|
+
// a session graphty wrote: a value its style writes as the nearest Cytoscape value is the block's
|
|
125
|
+
exactFromBlock(snapshot, target, values);
|
|
126
|
+
const { rules, columns } = cytoscapeRules(target, style, elements, work);
|
|
127
|
+
return { values: nonEmpty(values), rules, columns };
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* One named style of a `session_vizmap.xml` as a Cytoscape style: the one named `name`, else the first with a
|
|
132
|
+
* `W_STYLE_VIEW_STYLE_MISSING` note; the other styles are noted as `W_STYLE_OTHER_STYLES`.
|
|
133
|
+
* @param root - the `<vizmap>` element
|
|
134
|
+
* @param name - the style the view names, or null
|
|
135
|
+
* @param notes - where problems are noted
|
|
136
|
+
* @returns the style
|
|
137
|
+
*/
|
|
138
|
+
function cytoscapeStyleFromVizmap(root: XmlNode, name: string | null, notes: StyleNotes): CytoscapeStyle {
|
|
139
|
+
const style = emptyCytoscapeStyle();
|
|
140
|
+
const styles = root.children.filter((c) => c.name === "visualStyle");
|
|
141
|
+
let chosen = styles.find((s) => s.attrs.get("name") === name);
|
|
142
|
+
if (chosen === undefined) {
|
|
143
|
+
chosen = styles.at(0);
|
|
144
|
+
if (chosen === undefined) {
|
|
145
|
+
notes.add(STYLE_ISSUE.NO_VIZMAP, null, "visualStyle", { sample: "no visualStyle" });
|
|
146
|
+
return style;
|
|
147
|
+
}
|
|
148
|
+
notes.add(STYLE_ISSUE.VIEW_STYLE_MISSING, null, "visualStyle", { sample: String(name) });
|
|
149
|
+
}
|
|
150
|
+
if (styles.length > 1) {
|
|
151
|
+
notes.add(STYLE_ISSUE.OTHER_STYLES, null, "visualStyle", {
|
|
152
|
+
sample: `${styles.length - 1} unused`,
|
|
153
|
+
count: styles.length - 1,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
for (const kind of ["network", "node", "edge"] as const) {
|
|
157
|
+
const section = chosen.children.find((c) => c.name === kind);
|
|
158
|
+
for (const child of section?.children ?? []) {
|
|
159
|
+
readVizmapEntry(style, kind, child);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return style;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* One dependency or visual property of a vizmap style section, into the style.
|
|
167
|
+
* @param style - the style being read
|
|
168
|
+
* @param kind - the section
|
|
169
|
+
* @param child - the entry
|
|
170
|
+
*/
|
|
171
|
+
function readVizmapEntry(style: CytoscapeStyle, kind: "network" | "node" | "edge", child: XmlNode): void {
|
|
172
|
+
const childName = child.attrs.get("name");
|
|
173
|
+
if (childName === undefined) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (child.name === "dependency" && kind !== "network") {
|
|
177
|
+
style[kind].dependencies.set(childName, child.attrs.get("value")?.trim().toLowerCase() === "true");
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (child.name !== "visualProperty") {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const d = child.attrs.get("default");
|
|
184
|
+
if (d !== undefined) {
|
|
185
|
+
style[kind].defaults.set(childName, d);
|
|
186
|
+
}
|
|
187
|
+
if (kind !== "network") {
|
|
188
|
+
const mapping = vizmapMapping(child);
|
|
189
|
+
if (mapping !== null) {
|
|
190
|
+
style[kind].mappings.set(childName, mapping);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* The mapping of one `<visualProperty>`: a passthrough, discrete or continuous mapping element.
|
|
197
|
+
* @param vp - the element
|
|
198
|
+
* @returns the mapping, or null
|
|
199
|
+
*/
|
|
200
|
+
function vizmapMapping(vp: XmlNode): CytoscapeMapping | null {
|
|
201
|
+
for (const m of vp.children) {
|
|
202
|
+
const column = m.attrs.get("attributeName");
|
|
203
|
+
if (column === undefined) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const type = m.attrs.get("attributeType") ?? null;
|
|
207
|
+
if (m.name === "passthroughMapping") {
|
|
208
|
+
return { kind: "passthrough", column, type };
|
|
209
|
+
}
|
|
210
|
+
if (m.name === "discreteMapping") {
|
|
211
|
+
return { kind: "discrete", column, type, table: discreteTable(m, type) };
|
|
212
|
+
}
|
|
213
|
+
if (m.name === "continuousMapping") {
|
|
214
|
+
return { kind: "continuous", column, type, points: continuousPoints(m) };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* The entries of a `<discreteMapping>`.
|
|
222
|
+
* @param m - the element
|
|
223
|
+
* @param type - the attribute type its keys are read as
|
|
224
|
+
* @returns the key and value of each entry
|
|
225
|
+
*/
|
|
226
|
+
function discreteTable(m: XmlNode, type: string | null): [string | number | boolean, unknown][] {
|
|
227
|
+
const table: [string | number | boolean, unknown][] = [];
|
|
228
|
+
for (const e of m.children) {
|
|
229
|
+
const key = typedKey(e.attrs.get("attributeValue"), type);
|
|
230
|
+
const value = e.attrs.get("value");
|
|
231
|
+
if (e.name === "discreteMappingEntry" && key !== null && value !== undefined) {
|
|
232
|
+
table.push([key, value]);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return table;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* The points of a `<continuousMapping>`.
|
|
240
|
+
* @param m - the element
|
|
241
|
+
* @returns the points with a finite position
|
|
242
|
+
*/
|
|
243
|
+
function continuousPoints(
|
|
244
|
+
m: XmlNode,
|
|
245
|
+
): { at: number; below: string | undefined; value: string | undefined; above: string | undefined }[] {
|
|
246
|
+
return m.children
|
|
247
|
+
.filter((p) => p.name === "continuousMappingPoint" && Number.isFinite(Number(p.attrs.get("attrValue"))))
|
|
248
|
+
.map((p) => ({
|
|
249
|
+
at: Number(p.attrs.get("attrValue")),
|
|
250
|
+
below: p.attrs.get("lesserValue"),
|
|
251
|
+
value: p.attrs.get("equalValue"),
|
|
252
|
+
above: p.attrs.get("greaterValue"),
|
|
253
|
+
}));
|
|
254
|
+
}
|