@graphty/graph-io 0.3.43 → 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-RVtXVetw.js → exporter-quPUCBiC.js} +1805 -287
- 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 +292 -412
- 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 +20 -5
- 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 +439 -264
- 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 +27 -11
- 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 +541 -322
- 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-RVtXVetw.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
|
@@ -61,6 +61,7 @@ import {
|
|
|
61
61
|
xmlDeclaredEncoding,
|
|
62
62
|
XmlEmptyInputError,
|
|
63
63
|
type XmlHandler,
|
|
64
|
+
XmlNestingError,
|
|
64
65
|
XmlSyntaxError,
|
|
65
66
|
} from "../../common/xml.js";
|
|
66
67
|
import { type CommonImportOptions, type GraphImporter, type ImportInput, type ImportReport } from "../../types.js";
|
|
@@ -85,8 +86,37 @@ import {
|
|
|
85
86
|
TARGET_PORT_COLUMN,
|
|
86
87
|
XSI_NAMESPACE,
|
|
87
88
|
} from "./constants.js";
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
89
|
+
import { graphmlStyles } from "./styles-plain.js";
|
|
90
|
+
import { writeXmlTree, XmlTreeBuilder } from "./tree.js";
|
|
91
|
+
import { graphicsDecl, graphicsValues, yfilesPositions } from "./yfiles.js";
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Whether an XML attribute is not data and passes silently: a namespace declaration, an `xml:` or
|
|
95
|
+
* `xsi:` attribute, or a namespace URI where one is allowed.
|
|
96
|
+
* @param kind - the element name
|
|
97
|
+
* @param name - the attribute's name
|
|
98
|
+
* @returns true when it is never reported
|
|
99
|
+
*/
|
|
100
|
+
function isPassedAttribute(kind: string, name: string): boolean {
|
|
101
|
+
return name === "xmlns" || /^(xmlns|xml|xsi):/.test(name) || isAttributeUri(kind, name);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The warning for an attribute the importer does not read.
|
|
106
|
+
* @param kind - the element name
|
|
107
|
+
* @param name - the attribute's name
|
|
108
|
+
* @param hint - whether it is a `parse.*` hint
|
|
109
|
+
* @returns the message
|
|
110
|
+
*/
|
|
111
|
+
function unreadAttributeMessage(kind: string, name: string, hint: boolean): string {
|
|
112
|
+
if (hint) {
|
|
113
|
+
return `the <${kind}> parse hint ${name} is ignored`;
|
|
114
|
+
}
|
|
115
|
+
if (SCHEMA_ATTRIBUTES.has(name)) {
|
|
116
|
+
return `the <${kind}> attribute ${name} is not kept`;
|
|
117
|
+
}
|
|
118
|
+
return `the <${kind}> attribute ${name} is not a GraphML attribute; it is not kept`;
|
|
119
|
+
}
|
|
90
120
|
|
|
91
121
|
/** The XML attributes the importer reads on each element; any other is reported (once per element and name). */
|
|
92
122
|
const GRAPH_ATTRIBUTES: ReadonlySet<string> = new Set(["id", "edgedefault", "parse.nodes", "parse.edges"]);
|
|
@@ -106,6 +136,30 @@ const ENDPOINT_ATTRIBUTES: ReadonlySet<string> = new Set(["node", "type"]);
|
|
|
106
136
|
const PORT_ATTRIBUTES: ReadonlySet<string> = new Set(["name"]);
|
|
107
137
|
const NO_ATTRIBUTES: ReadonlySet<string> = new Set();
|
|
108
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Whether a `<key>` attribute is yFiles 3's `attr.uri` (in whatever prefix the file binds to yWorks' namespace).
|
|
141
|
+
* @param kind - the element name
|
|
142
|
+
* @param name - the attribute name as written
|
|
143
|
+
* @returns true for `<prefix>:attr.uri` on a key
|
|
144
|
+
*/
|
|
145
|
+
function isAttributeUri(kind: string, name: string): boolean {
|
|
146
|
+
return kind === "key" && name.endsWith(":attr.uri");
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The `<prefix>:attr.uri` of a key, or null.
|
|
151
|
+
* @param attrs - the key's attributes
|
|
152
|
+
* @returns the URI
|
|
153
|
+
*/
|
|
154
|
+
function attributeUri(attrs: ReadonlyMap<string, string>): string | null {
|
|
155
|
+
for (const [name, value] of attrs) {
|
|
156
|
+
if (isAttributeUri("key", name) && value.length > 0) {
|
|
157
|
+
return value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
|
|
109
163
|
/** Attributes the GraphML schema defines that the importer does not keep: reported as not kept, not as foreign. */
|
|
110
164
|
const SCHEMA_ATTRIBUTES: ReadonlySet<string> = new Set(["id", "port", "parse.order", "parse.nodeids", "parse.edgeids"]);
|
|
111
165
|
|
|
@@ -133,7 +187,10 @@ export interface GraphmlImportOptions extends CommonImportOptions {
|
|
|
133
187
|
* `yfiles.borderWidth`, `yfiles.label` and `yfiles.shape` for nodes, and the line color, width
|
|
134
188
|
* and arrows for edges. The report's `lossy` list then holds W_GRAPHML_YFILES_JSON, because the
|
|
135
189
|
* XML comes back with the same structure but not byte for byte. "skip" leaves the graphics out,
|
|
136
|
-
* with a W_GRAPHML_YFILES_SKIPPED warning per key.
|
|
190
|
+
* with a W_GRAPHML_YFILES_SKIPPED warning per key. The `yfiles.*` columns are deprecated and
|
|
191
|
+
* kept as they are, not fixed: read a file's styles with `styles: true` instead. In the next
|
|
192
|
+
* major version they leave the import result, together with the rule that a target arrow makes
|
|
193
|
+
* an edge directed and the label role of `yfiles.label`.
|
|
137
194
|
* @defaultValue "json"
|
|
138
195
|
*/
|
|
139
196
|
yfiles?: "json" | "skip" | undefined;
|
|
@@ -1127,31 +1184,40 @@ class GraphmlReader implements XmlHandler {
|
|
|
1127
1184
|
line: number,
|
|
1128
1185
|
): void {
|
|
1129
1186
|
for (const name of attrs.keys()) {
|
|
1130
|
-
if (known.has(name)
|
|
1131
|
-
|
|
1132
|
-
}
|
|
1133
|
-
const hint = name.startsWith("parse.");
|
|
1134
|
-
const code = hint ? GRAPHML_ISSUE.PARSE_HINT_IGNORED : GRAPHML_ISSUE.UNKNOWN_XML_ATTRIBUTE;
|
|
1135
|
-
let names = this.unknownNames.get(kind);
|
|
1136
|
-
if (names === undefined) {
|
|
1137
|
-
names = new Set();
|
|
1138
|
-
this.unknownNames.set(kind, names);
|
|
1139
|
-
}
|
|
1140
|
-
if (names.has(name)) {
|
|
1141
|
-
continue;
|
|
1142
|
-
}
|
|
1143
|
-
if (names.size >= MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
|
|
1144
|
-
this.unknownOverflow.set(kind, (this.unknownOverflow.get(kind) ?? 0) + 1);
|
|
1145
|
-
}
|
|
1146
|
-
names.add(name);
|
|
1147
|
-
if (names.size > MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
|
|
1148
|
-
continue;
|
|
1187
|
+
if (!known.has(name) && !isPassedAttribute(kind, name)) {
|
|
1188
|
+
this.reportUnreadAttribute(kind, name, line);
|
|
1149
1189
|
}
|
|
1150
|
-
const message = unreadAttributeMessage(kind, name, hint);
|
|
1151
|
-
this.report.warning("unsupported", code, message, { line, element: name });
|
|
1152
1190
|
}
|
|
1153
1191
|
}
|
|
1154
1192
|
|
|
1193
|
+
/**
|
|
1194
|
+
* Report one attribute reportUnreadAttributes() found, unless its name was reported for this
|
|
1195
|
+
* element kind already or the kind is past MAX_UNKNOWN_ATTRIBUTE_NAMES names (then it is counted).
|
|
1196
|
+
* @param kind - the element name
|
|
1197
|
+
* @param name - the attribute's name
|
|
1198
|
+
* @param line - the line
|
|
1199
|
+
*/
|
|
1200
|
+
private reportUnreadAttribute(kind: string, name: string, line: number): void {
|
|
1201
|
+
const hint = name.startsWith("parse.");
|
|
1202
|
+
let names = this.unknownNames.get(kind);
|
|
1203
|
+
if (names === undefined) {
|
|
1204
|
+
names = new Set();
|
|
1205
|
+
this.unknownNames.set(kind, names);
|
|
1206
|
+
}
|
|
1207
|
+
if (names.has(name)) {
|
|
1208
|
+
return;
|
|
1209
|
+
}
|
|
1210
|
+
if (names.size >= MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
|
|
1211
|
+
this.unknownOverflow.set(kind, (this.unknownOverflow.get(kind) ?? 0) + 1);
|
|
1212
|
+
}
|
|
1213
|
+
names.add(name);
|
|
1214
|
+
if (names.size > MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
|
|
1215
|
+
return;
|
|
1216
|
+
}
|
|
1217
|
+
const code = hint ? GRAPHML_ISSUE.PARSE_HINT_IGNORED : GRAPHML_ISSUE.UNKNOWN_XML_ATTRIBUTE;
|
|
1218
|
+
this.report.warning("unsupported", code, unreadAttributeMessage(kind, name, hint), { line, element: name });
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1155
1221
|
/**
|
|
1156
1222
|
* Open a `<graph>`: the top-level one sets the sink's direction (rule 1 of design section
|
|
1157
1223
|
* 8.4); a nested one records its container as the parent of its nodes.
|
|
@@ -1314,6 +1380,10 @@ class GraphmlReader implements XmlHandler {
|
|
|
1314
1380
|
case "all":
|
|
1315
1381
|
domains = ["graph", "node", "edge"];
|
|
1316
1382
|
break;
|
|
1383
|
+
case "graphml":
|
|
1384
|
+
// data on the <graphml> root (yEd's resources, yFiles 3's shared data) is read as graph data
|
|
1385
|
+
domains = ["graph"];
|
|
1386
|
+
break;
|
|
1317
1387
|
case "graph":
|
|
1318
1388
|
case "node":
|
|
1319
1389
|
case "edge":
|
|
@@ -1339,12 +1409,14 @@ class GraphmlReader implements XmlHandler {
|
|
|
1339
1409
|
);
|
|
1340
1410
|
domains = [];
|
|
1341
1411
|
}
|
|
1412
|
+
// `name` / `type` without the `attr.` prefix are written by some tools; the spec's spelling wins
|
|
1413
|
+
const attrType = attrs.get("attr.type") ?? attrs.get("type") ?? null;
|
|
1342
1414
|
this.pendingKey = {
|
|
1343
1415
|
id,
|
|
1344
|
-
// `name` / `type` without the `attr.` prefix are written by some tools; the spec's spelling wins
|
|
1345
1416
|
attrName: attrs.get("attr.name") ?? attrs.get("name") ?? null,
|
|
1346
|
-
attrType
|
|
1347
|
-
|
|
1417
|
+
attrType,
|
|
1418
|
+
// yFiles 3 declares its untyped keys with `y:attr.uri` instead of `yfiles.type`: their data is nested XML
|
|
1419
|
+
yfilesType: attrs.get("yfiles.type") ?? (attrType === null ? attributeUri(attrs) : null),
|
|
1348
1420
|
domains,
|
|
1349
1421
|
line,
|
|
1350
1422
|
desc: "",
|
|
@@ -1878,6 +1950,19 @@ class GraphmlReader implements XmlHandler {
|
|
|
1878
1950
|
}
|
|
1879
1951
|
return value;
|
|
1880
1952
|
}
|
|
1953
|
+
if (typeof value !== "string" && target.spec.declared === "") {
|
|
1954
|
+
// an untyped key states no type the elements contradict: keep them as their XML text
|
|
1955
|
+
this.report.warnOnce(
|
|
1956
|
+
"validation-error",
|
|
1957
|
+
GRAPHML_ISSUE.DATA_STRUCTURED,
|
|
1958
|
+
`<data> of the untyped attribute "${target.name}" holds elements; they are kept as XML text`,
|
|
1959
|
+
{ line: where.line, element: target.name },
|
|
1960
|
+
`${GRAPHML_ISSUE.DATA_STRUCTURED}:${target.name}`,
|
|
1961
|
+
);
|
|
1962
|
+
const parts: string[] = [];
|
|
1963
|
+
writeXmlTree(value, "", parts);
|
|
1964
|
+
return parts.join("").trim();
|
|
1965
|
+
}
|
|
1881
1966
|
if (typeof value !== "string") {
|
|
1882
1967
|
this.report.error(
|
|
1883
1968
|
"validation-error",
|
|
@@ -2668,7 +2753,11 @@ async function importGraphml(
|
|
|
2668
2753
|
report.fail(GRAPHML_ISSUE.EMPTY_INPUT, "the input is empty (no markup at all)", { line: err.line });
|
|
2669
2754
|
}
|
|
2670
2755
|
if (err instanceof XmlSyntaxError) {
|
|
2671
|
-
report.fail(
|
|
2756
|
+
report.fail(
|
|
2757
|
+
err instanceof XmlNestingError ? GRAPHML_ISSUE.XML_NESTING : GRAPHML_ISSUE.XML_SYNTAX,
|
|
2758
|
+
err.message,
|
|
2759
|
+
{ line: err.line },
|
|
2760
|
+
);
|
|
2672
2761
|
}
|
|
2673
2762
|
throw err;
|
|
2674
2763
|
}
|
|
@@ -2687,6 +2776,8 @@ export const graphmlImporter: GraphImporter<GraphmlImportOptions> = Object.freez
|
|
|
2687
2776
|
extensions: EXTENSIONS,
|
|
2688
2777
|
mimeTypes: MIME_TYPES,
|
|
2689
2778
|
sniff: sniffGraphml,
|
|
2779
|
+
styles: graphmlStyles,
|
|
2780
|
+
positions: yfilesPositions,
|
|
2690
2781
|
import: importGraphml,
|
|
2691
2782
|
});
|
|
2692
2783
|
|
|
@@ -2719,20 +2810,3 @@ function unknownElementMessage(name: string): string {
|
|
|
2719
2810
|
? `element <${name}> is not allowed at this place in a GraphML file and was skipped`
|
|
2720
2811
|
: `element <${name}> is not GraphML and was skipped`;
|
|
2721
2812
|
}
|
|
2722
|
-
|
|
2723
|
-
/**
|
|
2724
|
-
* The warning text for an attribute the importer does not keep.
|
|
2725
|
-
* @param kind - the element name
|
|
2726
|
-
* @param name - the attribute name
|
|
2727
|
-
* @param hint - whether the attribute is a `parse.*` hint
|
|
2728
|
-
* @returns the message
|
|
2729
|
-
*/
|
|
2730
|
-
function unreadAttributeMessage(kind: string, name: string, hint: boolean): string {
|
|
2731
|
-
if (hint) {
|
|
2732
|
-
return `the <${kind}> parse hint ${name} is ignored`;
|
|
2733
|
-
}
|
|
2734
|
-
if (SCHEMA_ATTRIBUTES.has(name)) {
|
|
2735
|
-
return `the <${kind}> attribute ${name} is not kept`;
|
|
2736
|
-
}
|
|
2737
|
-
return `the <${kind}> attribute ${name} is not a GraphML attribute; it is not kept`;
|
|
2738
|
-
}
|
|
@@ -7,3 +7,4 @@
|
|
|
7
7
|
export { GRAPHML_ISSUE, GRAPHML_LOSS } from "./constants.js";
|
|
8
8
|
export { graphmlExporter, type GraphmlExportOptions } from "./exporter.js";
|
|
9
9
|
export { graphmlImporter, type GraphmlImportOptions } from "./importer.js";
|
|
10
|
+
export { GRAPHML_STYLE_CAPABILITIES } from "./styles-yed.js";
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphML styles: which program wrote the file, and its styles read the way that program draws them. yEd and
|
|
3
|
+
* yFiles 3 keep their graphics in nested XML (styles-yed.ts, styles-yfiles3.ts); Gephi writes plain `r`, `g`, `b`
|
|
4
|
+
* and `size` keys; Cytoscape's GraphML export writes no visual properties at all and is recognized by its `SUID`
|
|
5
|
+
* and `shared name` keys. A GraphML file from any other writer has no styles: a key named like a style (`color`)
|
|
6
|
+
* stays data, and no program's defaults are added.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { GraphSnapshot } from "@graphty/graph-format";
|
|
10
|
+
|
|
11
|
+
import { canonColor } from "../../styles/canon/color.js";
|
|
12
|
+
import { canonNumber } from "../../styles/canon/number.js";
|
|
13
|
+
import { canonText } from "../../styles/canon/text.js";
|
|
14
|
+
import { blockStyles, parseStyleBlock, STYLE_BLOCK_NAME } from "../../styles/io/block.js";
|
|
15
|
+
import { StyleNotes } from "../../styles/notes.js";
|
|
16
|
+
import { styleFingerprint } from "../../styles/plan/features.js";
|
|
17
|
+
import { plainCell, resolveStyles } from "../../styles/plan/resolve.js";
|
|
18
|
+
import type { ImporterStyles, StyleReadContext, StyleTarget, StyleValue } from "../../styles/types.js";
|
|
19
|
+
import { gephiRules } from "../gexf/styles.js";
|
|
20
|
+
import {
|
|
21
|
+
exactFromBlock,
|
|
22
|
+
readYedStyles,
|
|
23
|
+
type ValueColumns,
|
|
24
|
+
valueColumns,
|
|
25
|
+
type YedRead,
|
|
26
|
+
yfilesColumns,
|
|
27
|
+
} from "./styles-yed.js";
|
|
28
|
+
import { readYfiles3Styles } from "./styles-yfiles3.js";
|
|
29
|
+
|
|
30
|
+
/** Gephi's color and size keys. */
|
|
31
|
+
const GEPHI_COLUMNS: readonly string[] = ["r", "g", "b", "size"];
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Whether a table has Gephi's `r`, `g` and `b` columns.
|
|
35
|
+
* @param table - the node or edge table
|
|
36
|
+
* @returns true when all three are there
|
|
37
|
+
*/
|
|
38
|
+
function hasRgb(table: GraphSnapshot["nodes"]): boolean {
|
|
39
|
+
return table.has("r") && table.has("g") && table.has("b");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Gephi's styles: `r`, `g`, `b` as the fill of a node and the color of an edge, `size` as a node's width and
|
|
44
|
+
* height, and `label` as the label.
|
|
45
|
+
* @param snapshot - the graph
|
|
46
|
+
* @param notes - where problems are noted
|
|
47
|
+
* @param context - the work budget
|
|
48
|
+
* @returns the values
|
|
49
|
+
*/
|
|
50
|
+
function readGephi(
|
|
51
|
+
snapshot: GraphSnapshot,
|
|
52
|
+
notes: StyleNotes,
|
|
53
|
+
context: StyleReadContext,
|
|
54
|
+
): { node: ValueColumns; edge: ValueColumns } {
|
|
55
|
+
const read = (target: StyleTarget): ValueColumns => {
|
|
56
|
+
const table = target === "node" ? snapshot.nodes : snapshot.edges;
|
|
57
|
+
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
58
|
+
const out = valueColumns(n);
|
|
59
|
+
const has = { rgb: hasRgb(table), size: target === "node" && table.has("size"), label: table.has("label") };
|
|
60
|
+
for (let i = 0; i < n; i++) {
|
|
61
|
+
context.budget.spend(target, 1);
|
|
62
|
+
const at = (property: string): Parameters<typeof canonNumber>[1] => ({
|
|
63
|
+
notes,
|
|
64
|
+
target,
|
|
65
|
+
property,
|
|
66
|
+
element: i,
|
|
67
|
+
budget: context.budget,
|
|
68
|
+
});
|
|
69
|
+
readGephiRow(
|
|
70
|
+
table,
|
|
71
|
+
target,
|
|
72
|
+
i,
|
|
73
|
+
has,
|
|
74
|
+
(property, value) => {
|
|
75
|
+
out.put(i, property, value);
|
|
76
|
+
},
|
|
77
|
+
at,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
return out.values;
|
|
81
|
+
};
|
|
82
|
+
return { node: read("node"), edge: read("edge") };
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Reads one Gephi element.
|
|
87
|
+
* @param table - the node or edge table
|
|
88
|
+
* @param target - nodes or edges
|
|
89
|
+
* @param i - the element
|
|
90
|
+
* @param has - which of Gephi's columns the table has
|
|
91
|
+
* @param has.rgb - the `r`, `g` and `b` columns
|
|
92
|
+
* @param has.size - a node `size` column
|
|
93
|
+
* @param has.label - a `label` column
|
|
94
|
+
* @param put - receives the values
|
|
95
|
+
* @param at - the sites
|
|
96
|
+
*/
|
|
97
|
+
function readGephiRow(
|
|
98
|
+
table: GraphSnapshot["nodes"],
|
|
99
|
+
target: StyleTarget,
|
|
100
|
+
i: number,
|
|
101
|
+
has: { readonly rgb: boolean; readonly size: boolean; readonly label: boolean },
|
|
102
|
+
put: (property: string, value: StyleValue | null) => void,
|
|
103
|
+
at: (property: string) => Parameters<typeof canonNumber>[1],
|
|
104
|
+
): void {
|
|
105
|
+
if (has.rgb) {
|
|
106
|
+
const [r, g, b] = ["r", "g", "b"].map((c) => plainCell(table.value(c, i)));
|
|
107
|
+
if (r !== null && g !== null && b !== null) {
|
|
108
|
+
const property = target === "node" ? "fill" : "color";
|
|
109
|
+
put(property, canonColor({ r, g, b }, "gephi", at(property))?.color ?? null);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (has.size) {
|
|
113
|
+
const v = canonNumber(plainCell(table.value("size", i)), at("width"));
|
|
114
|
+
put("width", v);
|
|
115
|
+
put("height", v);
|
|
116
|
+
}
|
|
117
|
+
if (has.label) {
|
|
118
|
+
put("label", canonText(plainCell(table.value("label", i)), at("label")));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* For a file graphty wrote: the yEd values that are only what the writer writes for the `graphty.styles` block's own
|
|
124
|
+
* values read as the block's values (see exactFromBlock()). A block that does not parse or describes another graph
|
|
125
|
+
* changes nothing; graph-io then ignores it with a note.
|
|
126
|
+
* @param snapshot - the graph
|
|
127
|
+
* @param yed - the values read from the yEd graphics, changed in place
|
|
128
|
+
*/
|
|
129
|
+
function exactFromGraphtyBlock(snapshot: GraphSnapshot, yed: YedRead): void {
|
|
130
|
+
const text = snapshot.graph.has(STYLE_BLOCK_NAME) ? plainCell(snapshot.graph.value(STYLE_BLOCK_NAME, 0)) : null;
|
|
131
|
+
if (typeof text !== "string") {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const parsed = parseStyleBlock(text, styleFingerprint(snapshot));
|
|
135
|
+
const ex = parsed.ok ? blockStyles(parsed.block, snapshot, "graphml") : null;
|
|
136
|
+
if (ex === null) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
exactFromBlock(
|
|
140
|
+
yed,
|
|
141
|
+
(target, property) => resolveStyles(ex, target, property as never, snapshot),
|
|
142
|
+
{ node: snapshot.nodeCount, edge: snapshot.edgeCount },
|
|
143
|
+
new StyleNotes(),
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* The styles of a GraphML file, read the way the program that wrote it draws them, with that program's defaults
|
|
149
|
+
* beneath: yEd's and yFiles 3's nested graphics, Gephi's `r`, `g`, `b` and `size` keys, or, for Cytoscape's export,
|
|
150
|
+
* Cytoscape's default style with each node labeled by its `name`. A file from any other writer has none.
|
|
151
|
+
* @param snapshot - the graph the import built
|
|
152
|
+
* @param context - the work budget
|
|
153
|
+
* @returns the styles, or null when no writer with styles is recognized
|
|
154
|
+
*/
|
|
155
|
+
export function graphmlStyles(snapshot: GraphSnapshot, context: StyleReadContext): ImporterStyles | null {
|
|
156
|
+
const notes = new StyleNotes();
|
|
157
|
+
const readFrom = { node: yfilesColumns(snapshot.nodes), edge: yfilesColumns(snapshot.edges) };
|
|
158
|
+
const yfiles3 = readYfiles3Styles(snapshot, notes, context.budget);
|
|
159
|
+
if (yfiles3 !== null) {
|
|
160
|
+
return {
|
|
161
|
+
canonical: true,
|
|
162
|
+
dialect: "yfiles3",
|
|
163
|
+
tool: "yfiles3",
|
|
164
|
+
units: "px",
|
|
165
|
+
node: { values: yfiles3.node },
|
|
166
|
+
edge: { values: yfiles3.edge },
|
|
167
|
+
notes: notes.list(),
|
|
168
|
+
readFrom,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const yed = readYedStyles(snapshot, notes, context.budget);
|
|
172
|
+
if (yed !== null) {
|
|
173
|
+
exactFromGraphtyBlock(snapshot, yed);
|
|
174
|
+
return {
|
|
175
|
+
canonical: true,
|
|
176
|
+
dialect: "yed",
|
|
177
|
+
tool: "yed",
|
|
178
|
+
units: "px",
|
|
179
|
+
node: { values: yed.node },
|
|
180
|
+
edge: { values: yed.edge },
|
|
181
|
+
notes: notes.list(),
|
|
182
|
+
opacityInColor: true,
|
|
183
|
+
readFrom,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (hasRgb(snapshot.nodes)) {
|
|
187
|
+
const gephi = readGephi(snapshot, notes, context);
|
|
188
|
+
const { rules, columns } = gephiRules(
|
|
189
|
+
snapshot,
|
|
190
|
+
gephi.node.fill,
|
|
191
|
+
gephi.edge.color,
|
|
192
|
+
context.budget,
|
|
193
|
+
gephi.edge.width,
|
|
194
|
+
);
|
|
195
|
+
const used = (table: GraphSnapshot["nodes"]): string[] => GEPHI_COLUMNS.filter((c) => table.has(c));
|
|
196
|
+
return {
|
|
197
|
+
canonical: true,
|
|
198
|
+
dialect: "gephi",
|
|
199
|
+
tool: "gephi",
|
|
200
|
+
units: "relative",
|
|
201
|
+
node: { values: gephi.node },
|
|
202
|
+
edge: { values: gephi.edge, rules, columns },
|
|
203
|
+
notes: notes.list(),
|
|
204
|
+
readFrom: { node: used(snapshot.nodes), edge: used(snapshot.edges) },
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
if (snapshot.nodes.has("SUID") && snapshot.nodes.has("shared name")) {
|
|
208
|
+
// Cytoscape writes no visual properties into GraphML; its default style labels each node with its name
|
|
209
|
+
const label = valueColumns(snapshot.nodeCount);
|
|
210
|
+
if (snapshot.nodes.has("name")) {
|
|
211
|
+
for (let i = 0; i < snapshot.nodeCount; i++) {
|
|
212
|
+
label.put(
|
|
213
|
+
i,
|
|
214
|
+
"label",
|
|
215
|
+
canonText(plainCell(snapshot.nodes.value("name", i)), {
|
|
216
|
+
notes,
|
|
217
|
+
target: "node",
|
|
218
|
+
property: "label",
|
|
219
|
+
element: i,
|
|
220
|
+
budget: context.budget,
|
|
221
|
+
}),
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
canonical: true,
|
|
227
|
+
dialect: "cytoscape",
|
|
228
|
+
tool: "cytoscape",
|
|
229
|
+
units: "px",
|
|
230
|
+
node: { values: label.values },
|
|
231
|
+
edge: { values: {} },
|
|
232
|
+
notes: notes.list(),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
}
|