@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
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { GraphFormatError, INVALID_INDEX } from "@graphty/graph-format";
|
|
2
|
-
import { L as LOSS,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { L as LOSS, c as capabilities, r as resolveExportOptions, G as sanitizeIds, p as pairFolding, a as checkCapabilities, e as explicitWeights, a1 as canonicalId, R as RENAMED_CODE, g as resolveImportOptions, i as reportUnusedOptions, P as LineReader, h as throwIfAborted, k as graphChosen, j as reportSinkOptions, l as DirectionResolver, I as IdCoercer, u as uniqueColumnName, d as declareResolved, a3 as coerceIdText, o as isWeightField, s as parseWeightText } from "./export-D7IGzTG4.js";
|
|
3
|
+
import { g as isPajekLabel, j as quotePajekLabel } from "./escape-B1rMftd9.js";
|
|
4
|
+
import { p as plural, V as agree, _ as idText, ab as formatNumber, aO as formatDecimal, $ as formatF32, ad as formatInteger, P as PRECISION_CODE, k as DUPLICATE_ATTRIBUTE_CODE, S as SINK_OPTION_CODE, O as OPTION_IGNORED_CODE, R as ROLE_TAKEN_CODE, I as ID_MERGED_CODE, j as DUPLICATE_NODE_CODE, a8 as SYNTAX_CODE, a2 as AMBIGUOUS_GRAPH_NAME_CODE, a3 as GRAPH_NOT_FOUND_CODE, h as MULTIPLE_GRAPHS_CODE, r as UNKNOWN_ENCODING_CODE, s as ENCODING_FALLBACK_CODE, t as INVALID_ENCODING_CODE, u as INVALID_UTF8_CODE, x as ELEMENT_ISSUE, y as INPUT_ISSUE, Z as ImportReportBuilder } from "./format-GDmO6m6Q.js";
|
|
5
|
+
import { i as inferTextDtype, W as WIDENING_UNSUPPORTED_CODE, a as isNumericText, T as TextCellWriter } from "./text-CgzMqHQb.js";
|
|
5
6
|
import { j as joinText, e as encodeChunks } from "./writer-DxjgHwSe.js";
|
|
6
|
-
import { i as importChosenGraph } from "./choose-
|
|
7
|
+
import { i as importChosenGraph } from "./choose-BemygfH8.js";
|
|
8
|
+
import { x as writeStyleBlock, y as styleBlockLosses, j as StyleNotes, m as plainCell, p as parseStyleBlock, k as styleFingerprint, l as blockStyles, r as resolveStyles, h as canonText, f as canonEnum, b as canonNumber, c as canonColor, o as colorOpacity, D as DVIPS_COLORS } from "./block-JQiwViEt.js";
|
|
9
|
+
import { S as StyleApproximations } from "./approximations-3Q4TsdTh.js";
|
|
10
|
+
import { v as valueColumns } from "./styles-yed-DAfcIkf7.js";
|
|
7
11
|
const LABEL_COLUMN = "label";
|
|
8
12
|
const POSITION_COLUMN = "position";
|
|
9
13
|
const SHAPE_COLUMN = "shape";
|
|
@@ -13,7 +17,7 @@ const VALUE_COLUMN = "value";
|
|
|
13
17
|
const VALUE_FIELD = "value";
|
|
14
18
|
const PARTITION_COLUMN = "partition";
|
|
15
19
|
const VECTOR_COLUMN = "vector";
|
|
16
|
-
const SHAPES = /* @__PURE__ */ new Set([
|
|
20
|
+
const SHAPES$1 = /* @__PURE__ */ new Set([
|
|
17
21
|
"ellipse",
|
|
18
22
|
"box",
|
|
19
23
|
"diamond",
|
|
@@ -25,9 +29,10 @@ const SHAPES = /* @__PURE__ */ new Set([
|
|
|
25
29
|
"woman"
|
|
26
30
|
]);
|
|
27
31
|
function isShapeKeyword(token) {
|
|
28
|
-
return SHAPES.has(token.toLowerCase());
|
|
32
|
+
return SHAPES$1.has(token.toLowerCase());
|
|
29
33
|
}
|
|
30
34
|
const ORIGINAL_ID_KEY = "graphty_originalId";
|
|
35
|
+
const PAJEK_STYLE_COMMENT = "% graphty.styles ";
|
|
31
36
|
const SECTION_KINDS = /* @__PURE__ */ new Map([
|
|
32
37
|
["network", "network"],
|
|
33
38
|
["vertices", "vertices"],
|
|
@@ -321,6 +326,406 @@ function isParameterKey(text) {
|
|
|
321
326
|
}
|
|
322
327
|
return !/^[+-]?(\.\d|\d)/.test(text) && !/^[+-]?(?:nan|inf|infinity)$/i.test(text);
|
|
323
328
|
}
|
|
329
|
+
const PAJEK_STYLE_CAPABILITIES = Object.freeze({
|
|
330
|
+
node: Object.freeze([
|
|
331
|
+
"label",
|
|
332
|
+
"fill",
|
|
333
|
+
"fillOpacity",
|
|
334
|
+
"opacity",
|
|
335
|
+
"borderColor",
|
|
336
|
+
"borderWidth",
|
|
337
|
+
"shape",
|
|
338
|
+
"width",
|
|
339
|
+
"height",
|
|
340
|
+
"labelColor",
|
|
341
|
+
"labelSize"
|
|
342
|
+
]),
|
|
343
|
+
edge: Object.freeze(["color", "opacity", "width", "lineStyle", "sourceArrow", "targetArrow"]),
|
|
344
|
+
block: "native"
|
|
345
|
+
});
|
|
346
|
+
const VERTEX_SIZE = 5;
|
|
347
|
+
const NODE_KEYS = ["ic", "bc", "bw", "x_fact", "y_fact", "lc", "fos"];
|
|
348
|
+
const EDGE_KEYS = ["c", "w", "p"];
|
|
349
|
+
const DIRECTED_KEY = "directed";
|
|
350
|
+
const READ = {
|
|
351
|
+
node: [
|
|
352
|
+
"label",
|
|
353
|
+
"shape",
|
|
354
|
+
"fill",
|
|
355
|
+
"fillOpacity",
|
|
356
|
+
"borderColor",
|
|
357
|
+
"borderWidth",
|
|
358
|
+
"width",
|
|
359
|
+
"height",
|
|
360
|
+
"labelColor",
|
|
361
|
+
"labelSize"
|
|
362
|
+
],
|
|
363
|
+
edge: ["color", "opacity", "width", "lineStyle"]
|
|
364
|
+
};
|
|
365
|
+
function readColor(raw, property, opacity, put, at) {
|
|
366
|
+
if (raw === null) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
const c = canonColor(raw, "dvips", at(property));
|
|
370
|
+
if (c === null) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
put(property, c.color);
|
|
374
|
+
const alpha = colorOpacity(c, null, at(property), opacity !== null);
|
|
375
|
+
if (opacity !== null) {
|
|
376
|
+
put(opacity, alpha);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
function readNumber(raw, property, put, at) {
|
|
380
|
+
if (raw !== null) {
|
|
381
|
+
put(property, canonNumber(raw, at(property)));
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
function readVertex(get, put, at) {
|
|
385
|
+
const label = get(LABEL_COLUMN);
|
|
386
|
+
if (label !== null && label !== "") {
|
|
387
|
+
put("label", canonText(label, at("label")));
|
|
388
|
+
}
|
|
389
|
+
const shape = get(SHAPE_COLUMN);
|
|
390
|
+
if (shape !== null) {
|
|
391
|
+
put("shape", canonEnum("shape", shape, "dvips", at("shape")));
|
|
392
|
+
}
|
|
393
|
+
readColor(get("ic"), "fill", "fillOpacity", put, at);
|
|
394
|
+
readColor(get("bc"), "borderColor", null, put, at);
|
|
395
|
+
const bw = get("bw");
|
|
396
|
+
if (bw !== null) {
|
|
397
|
+
const width = canonNumber(bw, at("borderWidth"));
|
|
398
|
+
put("borderWidth", width === null ? null : width / VERTEX_SIZE);
|
|
399
|
+
}
|
|
400
|
+
readNumber(get("x_fact"), "width", put, at);
|
|
401
|
+
readNumber(get("y_fact"), "height", put, at);
|
|
402
|
+
readColor(get("lc"), "labelColor", null, put, at);
|
|
403
|
+
readNumber(get("fos"), "labelSize", put, at);
|
|
404
|
+
}
|
|
405
|
+
function readLine(get, put, at) {
|
|
406
|
+
readColor(get("c"), "color", "opacity", put, at);
|
|
407
|
+
readNumber(get("w"), "width", put, at);
|
|
408
|
+
const p = get("p");
|
|
409
|
+
if (p !== null) {
|
|
410
|
+
put("lineStyle", canonEnum("lineStyle", p, "dvips", at("lineStyle")));
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
function cells(table, i) {
|
|
414
|
+
return (key) => table.has(key) ? plainCell(table.value(key, i)) : null;
|
|
415
|
+
}
|
|
416
|
+
function directedEdges(snapshot) {
|
|
417
|
+
const out = new Array(snapshot.edgeCount).fill(snapshot.directed);
|
|
418
|
+
const col = snapshot.directed ? snapshot.edges.byRole("directed") : null;
|
|
419
|
+
if (col !== null) {
|
|
420
|
+
for (let e = 0; e < snapshot.edgeCount; e++) {
|
|
421
|
+
out[e] = plainCell(col.value(e)) !== false;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return out;
|
|
425
|
+
}
|
|
426
|
+
function styleColumns(table, keys) {
|
|
427
|
+
return keys.filter((k) => table.has(k));
|
|
428
|
+
}
|
|
429
|
+
function pajekStyles(snapshot, context) {
|
|
430
|
+
const notes = new StyleNotes();
|
|
431
|
+
const read = (target) => {
|
|
432
|
+
const table = target === "node" ? snapshot.nodes : snapshot.edges;
|
|
433
|
+
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
434
|
+
const out = valueColumns(n);
|
|
435
|
+
for (let i = 0; i < n; i++) {
|
|
436
|
+
context.budget.spend(target, 1);
|
|
437
|
+
const at = (property) => ({ notes, target, property, element: i, budget: context.budget });
|
|
438
|
+
(target === "node" ? readVertex : readLine)(
|
|
439
|
+
cells(table, i),
|
|
440
|
+
(property, value) => {
|
|
441
|
+
out.put(i, property, value);
|
|
442
|
+
},
|
|
443
|
+
at
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
return out.values;
|
|
447
|
+
};
|
|
448
|
+
const node = read("node");
|
|
449
|
+
const edge = read("edge");
|
|
450
|
+
const block = typeof context.kept === "string" ? context.kept : null;
|
|
451
|
+
if (block !== null) {
|
|
452
|
+
exactFromBlock(snapshot, block, { node, edge });
|
|
453
|
+
}
|
|
454
|
+
const rules = [];
|
|
455
|
+
const columns = /* @__PURE__ */ new Map();
|
|
456
|
+
const directed = directedEdges(snapshot);
|
|
457
|
+
if (directed.some(Boolean)) {
|
|
458
|
+
columns.set(
|
|
459
|
+
DIRECTED_KEY,
|
|
460
|
+
directed.map((d) => d ? true : null)
|
|
461
|
+
);
|
|
462
|
+
rules.push({
|
|
463
|
+
id: "edge.tool.arrow",
|
|
464
|
+
target: "edge",
|
|
465
|
+
role: "group",
|
|
466
|
+
origin: "tool",
|
|
467
|
+
where: { has: { style: DIRECTED_KEY } },
|
|
468
|
+
set: { targetArrow: "triangle" }
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
return {
|
|
472
|
+
canonical: true,
|
|
473
|
+
dialect: "dvips",
|
|
474
|
+
tool: "pajek",
|
|
475
|
+
units: "relative",
|
|
476
|
+
node: { values: node },
|
|
477
|
+
edge: { values: edge, rules, columns },
|
|
478
|
+
notes: notes.list(),
|
|
479
|
+
block,
|
|
480
|
+
readFrom: {
|
|
481
|
+
node: styleColumns(snapshot.nodes, [SHAPE_COLUMN, ...NODE_KEYS]),
|
|
482
|
+
edge: styleColumns(snapshot.edges, EDGE_KEYS)
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
const SHAPES = /* @__PURE__ */ new Map([
|
|
487
|
+
["ellipse", "ellipse"],
|
|
488
|
+
["rectangle", "box"],
|
|
489
|
+
["diamond", "diamond"],
|
|
490
|
+
["triangle", "triangle"],
|
|
491
|
+
["none", "empty"],
|
|
492
|
+
["other:cross", "cross"],
|
|
493
|
+
["other:house", "house"],
|
|
494
|
+
["other:man", "man"],
|
|
495
|
+
["other:woman", "woman"]
|
|
496
|
+
]);
|
|
497
|
+
const NEAREST_SHAPES = /* @__PURE__ */ new Map([
|
|
498
|
+
["round-rectangle", "box"],
|
|
499
|
+
["parallelogram", "box"],
|
|
500
|
+
["trapezoid", "box"],
|
|
501
|
+
["vee", "triangle"]
|
|
502
|
+
]);
|
|
503
|
+
const DVIPS_NAMES = new Map(
|
|
504
|
+
[...DVIPS_COLORS].reverse().map(([name, hex]) => [hex, name])
|
|
505
|
+
);
|
|
506
|
+
function pajekColorText(color) {
|
|
507
|
+
return DVIPS_NAMES.get(color) ?? `RGB${color.slice(1).toUpperCase()}`;
|
|
508
|
+
}
|
|
509
|
+
function opaque(get, properties, approximate) {
|
|
510
|
+
for (const property of properties) {
|
|
511
|
+
const v = get(property);
|
|
512
|
+
if (v !== null && v !== 1) {
|
|
513
|
+
approximate(property, v);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
function shapeKeyword(get, approximate) {
|
|
518
|
+
const shape = get("shape");
|
|
519
|
+
if (typeof shape !== "string") {
|
|
520
|
+
return "ellipse";
|
|
521
|
+
}
|
|
522
|
+
const keyword = SHAPES.get(shape);
|
|
523
|
+
if (keyword !== void 0) {
|
|
524
|
+
return keyword;
|
|
525
|
+
}
|
|
526
|
+
approximate("shape", shape);
|
|
527
|
+
return NEAREST_SHAPES.get(shape) ?? "ellipse";
|
|
528
|
+
}
|
|
529
|
+
function vertexParams(get, approximate) {
|
|
530
|
+
const out = /* @__PURE__ */ new Map();
|
|
531
|
+
opaque(get, ["fillOpacity", "opacity"], approximate);
|
|
532
|
+
const keyword = shapeKeyword(get, approximate);
|
|
533
|
+
if (keyword !== "ellipse") {
|
|
534
|
+
out.set(SHAPE_COLUMN, keyword);
|
|
535
|
+
}
|
|
536
|
+
const colors = [
|
|
537
|
+
["fill", "ic"],
|
|
538
|
+
["borderColor", "bc"],
|
|
539
|
+
["labelColor", "lc"]
|
|
540
|
+
];
|
|
541
|
+
const numbers = [
|
|
542
|
+
["width", "x_fact"],
|
|
543
|
+
["height", "y_fact"],
|
|
544
|
+
["labelSize", "fos"]
|
|
545
|
+
];
|
|
546
|
+
for (const [property, key] of colors) {
|
|
547
|
+
const v = get(property);
|
|
548
|
+
if (typeof v === "string" && !(property === "borderColor" && v === "#000000")) {
|
|
549
|
+
out.set(key, pajekColorText(v));
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
for (const [property, key] of numbers) {
|
|
553
|
+
const v = get(property);
|
|
554
|
+
if (typeof v === "number") {
|
|
555
|
+
out.set(key, v);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
const bw = get("borderWidth");
|
|
559
|
+
if (typeof bw === "number") {
|
|
560
|
+
const written = Number((bw * VERTEX_SIZE).toPrecision(15));
|
|
561
|
+
if (written === 1) {
|
|
562
|
+
out.delete("bw");
|
|
563
|
+
} else {
|
|
564
|
+
out.set("bw", written);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
return out;
|
|
568
|
+
}
|
|
569
|
+
function lineParams(get, directed, approximate) {
|
|
570
|
+
const out = /* @__PURE__ */ new Map();
|
|
571
|
+
opaque(get, ["opacity"], approximate);
|
|
572
|
+
const color = get("color");
|
|
573
|
+
if (typeof color === "string" && color !== "#000000") {
|
|
574
|
+
out.set("c", pajekColorText(color));
|
|
575
|
+
}
|
|
576
|
+
const width = get("width");
|
|
577
|
+
if (typeof width === "number") {
|
|
578
|
+
out.set("w", width);
|
|
579
|
+
}
|
|
580
|
+
const lineStyle = get("lineStyle");
|
|
581
|
+
if (typeof lineStyle === "string" && lineStyle !== "solid" && pajekDots(lineStyle, approximate)) {
|
|
582
|
+
out.set("p", "Dots");
|
|
583
|
+
}
|
|
584
|
+
const target = get("targetArrow");
|
|
585
|
+
if (target !== null && target !== (directed ? "triangle" : "none")) {
|
|
586
|
+
approximate("targetArrow", target);
|
|
587
|
+
}
|
|
588
|
+
const source = get("sourceArrow");
|
|
589
|
+
if (source !== null && source !== "none") {
|
|
590
|
+
approximate("sourceArrow", source);
|
|
591
|
+
}
|
|
592
|
+
return out;
|
|
593
|
+
}
|
|
594
|
+
function pajekDots(lineStyle, approximate) {
|
|
595
|
+
if (lineStyle === "dotted") {
|
|
596
|
+
return true;
|
|
597
|
+
}
|
|
598
|
+
approximate("lineStyle", lineStyle);
|
|
599
|
+
return lineStyle === "dashed" || lineStyle === "dash-dot" || lineStyle === "long-dash";
|
|
600
|
+
}
|
|
601
|
+
function getter(picture, target) {
|
|
602
|
+
const columns = /* @__PURE__ */ new Map();
|
|
603
|
+
for (const p of PAJEK_STYLE_CAPABILITIES[target]) {
|
|
604
|
+
columns.set(p, picture(target, p));
|
|
605
|
+
}
|
|
606
|
+
return (i) => (property) => columns.get(property)?.[i] ?? null;
|
|
607
|
+
}
|
|
608
|
+
function exactFromBlock(snapshot, text, read) {
|
|
609
|
+
const parsed = parseStyleBlock(text, styleFingerprint(snapshot));
|
|
610
|
+
const ex = parsed.ok ? blockStyles(parsed.block, snapshot, "pajek") : null;
|
|
611
|
+
if (ex === null) {
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
const notes = new StyleNotes();
|
|
615
|
+
const directed = directedEdges(snapshot);
|
|
616
|
+
for (const target of ["node", "edge"]) {
|
|
617
|
+
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
618
|
+
const get = getter((t, p) => resolveStyles(ex, t, p, snapshot), target);
|
|
619
|
+
const values = read[target];
|
|
620
|
+
for (let i = 0; i < n; i++) {
|
|
621
|
+
const want = get(i);
|
|
622
|
+
const back = writtenAndReadBack(target, want, directed[i], notes);
|
|
623
|
+
for (const property of READ[target]) {
|
|
624
|
+
const native = values[property]?.[i] ?? null;
|
|
625
|
+
const w = want(property);
|
|
626
|
+
if (w !== null && native !== w && native === (back.get(property) ?? null)) {
|
|
627
|
+
values[property] ??= new Array(n).fill(null);
|
|
628
|
+
values[property][i] = w;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
function writtenAndReadBack(target, want, directed, notes) {
|
|
635
|
+
const ignore = () => void 0;
|
|
636
|
+
const params = target === "node" ? vertexParams(want, ignore) : lineParams(want, directed, ignore);
|
|
637
|
+
const back = /* @__PURE__ */ new Map();
|
|
638
|
+
const label = target === "node" ? want("label") : null;
|
|
639
|
+
if (typeof label === "string") {
|
|
640
|
+
params.set(LABEL_COLUMN, pajekLabelText(label));
|
|
641
|
+
}
|
|
642
|
+
(target === "node" ? readVertex : readLine)(
|
|
643
|
+
(key) => params.get(key) ?? null,
|
|
644
|
+
(property, value) => {
|
|
645
|
+
if (value !== null) {
|
|
646
|
+
back.set(property, value);
|
|
647
|
+
}
|
|
648
|
+
},
|
|
649
|
+
(property) => ({ notes, target, property })
|
|
650
|
+
);
|
|
651
|
+
return back;
|
|
652
|
+
}
|
|
653
|
+
function pajekStyledExport(snapshot, input) {
|
|
654
|
+
if (input === void 0) {
|
|
655
|
+
return null;
|
|
656
|
+
}
|
|
657
|
+
const approximated = new StyleApproximations();
|
|
658
|
+
const out = snapshot.withColumns();
|
|
659
|
+
const directed = directedEdges(snapshot);
|
|
660
|
+
for (const target of ["node", "edge"]) {
|
|
661
|
+
const table = target === "node" ? out.nodes : out.edges;
|
|
662
|
+
const approximate = (property, value) => {
|
|
663
|
+
approximated.add(target, property, value);
|
|
664
|
+
};
|
|
665
|
+
const get = getter((t, p) => input.picture(t, p), target);
|
|
666
|
+
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
667
|
+
const params = (i) => target === "node" ? vertexParams(get(i), approximate) : lineParams(get(i), directed[i], approximate);
|
|
668
|
+
replaceParamColumns(
|
|
669
|
+
table,
|
|
670
|
+
target === "node" ? [SHAPE_COLUMN, ...NODE_KEYS] : EDGE_KEYS,
|
|
671
|
+
paramColumns(n, params)
|
|
672
|
+
);
|
|
673
|
+
}
|
|
674
|
+
out.nodes.set(
|
|
675
|
+
LABEL_COLUMN,
|
|
676
|
+
drawnLabels(input, snapshot.nodeCount, approximated),
|
|
677
|
+
{ dtype: "string", role: "label" },
|
|
678
|
+
{
|
|
679
|
+
replaceRole: true
|
|
680
|
+
}
|
|
681
|
+
);
|
|
682
|
+
const notes = approximated.notes("Pajek");
|
|
683
|
+
const block = writeStyleBlock(input.rules, { inlineColumns: true, snapshot });
|
|
684
|
+
notes.push(...styleBlockLosses(block, input.rules.styles.rules.length, "size"));
|
|
685
|
+
return { snapshot: out, comment: PAJEK_STYLE_COMMENT + block, notes };
|
|
686
|
+
}
|
|
687
|
+
function drawnLabels(input, n, approximated) {
|
|
688
|
+
const drawn = input.picture("node", "label");
|
|
689
|
+
const out = new Array(n).fill("");
|
|
690
|
+
for (let i = 0; i < n; i++) {
|
|
691
|
+
const v = drawn[i] ?? null;
|
|
692
|
+
if (typeof v === "string") {
|
|
693
|
+
out[i] = pajekLabelText(v);
|
|
694
|
+
if (out[i] !== v) {
|
|
695
|
+
approximated.add("node", "label", v);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
return out;
|
|
700
|
+
}
|
|
701
|
+
function pajekLabelText(label) {
|
|
702
|
+
return label.replaceAll(/\r\n|[\r\n]/g, " ").replaceAll('"', "'");
|
|
703
|
+
}
|
|
704
|
+
function replaceParamColumns(table, keys, columns) {
|
|
705
|
+
for (const key of keys) {
|
|
706
|
+
if (table.has(key)) {
|
|
707
|
+
table.remove(key);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
for (const [key, col] of columns) {
|
|
711
|
+
const numeric = col.every((v) => v === null || typeof v === "number");
|
|
712
|
+
table.set(key, col, { dtype: numeric ? "f64" : "string" });
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
function paramColumns(n, params) {
|
|
716
|
+
const columns = /* @__PURE__ */ new Map();
|
|
717
|
+
for (let i = 0; i < n; i++) {
|
|
718
|
+
for (const [key, value] of params(i)) {
|
|
719
|
+
let col = columns.get(key);
|
|
720
|
+
if (col === void 0) {
|
|
721
|
+
col = new Array(n).fill(null);
|
|
722
|
+
columns.set(key, col);
|
|
723
|
+
}
|
|
724
|
+
col[i] = value;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
return columns;
|
|
728
|
+
}
|
|
324
729
|
const PAJEK_LOSS = Object.freeze({
|
|
325
730
|
/**
|
|
326
731
|
* A label or text value holds a double quote or a line break, which Pajek cannot write; the save fails with
|
|
@@ -361,6 +766,8 @@ const PAJEK_LOSS = Object.freeze({
|
|
|
361
766
|
* reads back with that role.
|
|
362
767
|
*/
|
|
363
768
|
ROLE_ASSUMED: LOSS.ROLE_ASSUMED,
|
|
769
|
+
/** The label column, when a role-less column named `label` is read over it on import. */
|
|
770
|
+
COLUMN_DROPPED: LOSS.COLUMN_DROPPED,
|
|
364
771
|
/**
|
|
365
772
|
* With `sanitizeIds: "mangle"`: an original id that reads back as a different type, such as the text "7" as the
|
|
366
773
|
* number 7.
|
|
@@ -544,16 +951,18 @@ function labelNotes(snapshot, nodePlan, notes) {
|
|
|
544
951
|
plain.length - plain.nullCount
|
|
545
952
|
)
|
|
546
953
|
);
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
954
|
+
if (labels !== null && labels !== plain) {
|
|
955
|
+
notes.push(
|
|
956
|
+
note(
|
|
957
|
+
PAJEK_LOSS.COLUMN_DROPPED,
|
|
958
|
+
`node column "${labels.meta.name}" (the labels) reads back replaced by the parameter "${LABEL_COLUMN}"`,
|
|
959
|
+
labels.meta.name,
|
|
960
|
+
labels.length - labels.nullCount
|
|
961
|
+
)
|
|
962
|
+
);
|
|
555
963
|
}
|
|
556
964
|
}
|
|
965
|
+
const gained = carried === 0 ? 0 : unlabeled(snapshot.nodeCount, labels);
|
|
557
966
|
if (gained > 0) {
|
|
558
967
|
notes.push(
|
|
559
968
|
note(
|
|
@@ -565,9 +974,18 @@ function labelNotes(snapshot, nodePlan, notes) {
|
|
|
565
974
|
);
|
|
566
975
|
}
|
|
567
976
|
}
|
|
977
|
+
function unlabeled(nodeCount, labels) {
|
|
978
|
+
let count = 0;
|
|
979
|
+
for (let i = 0; i < nodeCount; i++) {
|
|
980
|
+
if (!labels?.isSet(i)) {
|
|
981
|
+
count++;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
return count;
|
|
985
|
+
}
|
|
568
986
|
function allShapeKeywords(column) {
|
|
569
987
|
for (let r = 0; r < column.length; r++) {
|
|
570
|
-
if (column.isSet(r) && !SHAPES.has(column.value(r))) {
|
|
988
|
+
if (column.isSet(r) && !SHAPES$1.has(column.value(r))) {
|
|
571
989
|
return false;
|
|
572
990
|
}
|
|
573
991
|
}
|
|
@@ -755,7 +1173,7 @@ function needsZ(column) {
|
|
|
755
1173
|
}
|
|
756
1174
|
return false;
|
|
757
1175
|
}
|
|
758
|
-
function* writeParts(snapshot, options) {
|
|
1176
|
+
function* writeParts(snapshot, options, comment = null) {
|
|
759
1177
|
const ids = sanitizeIds(snapshot, CAPABILITIES.idCharset, options.mangle ? "mangle" : "error");
|
|
760
1178
|
const nodePlan = withoutReservedKey(plan(snapshot.nodes, "node", null), options.mangle);
|
|
761
1179
|
const edgePlan = plan(snapshot.edges, "edge", null);
|
|
@@ -772,6 +1190,10 @@ function* writeParts(snapshot, options) {
|
|
|
772
1190
|
});
|
|
773
1191
|
}
|
|
774
1192
|
}
|
|
1193
|
+
if (comment !== null) {
|
|
1194
|
+
yield `${comment}
|
|
1195
|
+
`;
|
|
1196
|
+
}
|
|
775
1197
|
if (options.networkHeader) {
|
|
776
1198
|
yield options.name === null ? "*Network\n" : `*Network ${options.name}
|
|
777
1199
|
`;
|
|
@@ -868,7 +1290,7 @@ function* writeVertices(snapshot, ids, nodePlan, mangle) {
|
|
|
868
1290
|
}
|
|
869
1291
|
if (shape?.isSet(i)) {
|
|
870
1292
|
const keyword = cellText(shape, i);
|
|
871
|
-
if (SHAPES.has(keyword)) {
|
|
1293
|
+
if (SHAPES$1.has(keyword)) {
|
|
872
1294
|
parts.push(keyword);
|
|
873
1295
|
} else {
|
|
874
1296
|
parts.push(`${SHAPE_COLUMN} ${quotePajekLabel(keyword)}`);
|
|
@@ -1007,96 +1429,20 @@ const pajekExporter = Object.freeze({
|
|
|
1007
1429
|
format: "pajek",
|
|
1008
1430
|
options: Object.freeze(["name", "networkHeader"]),
|
|
1009
1431
|
capabilities: CAPABILITIES,
|
|
1432
|
+
styles: Object.freeze({ capabilities: PAJEK_STYLE_CAPABILITIES }),
|
|
1010
1433
|
/**
|
|
1011
|
-
* Pre-flight: the generic capability gaps plus the Pajek-specific ones
|
|
1434
|
+
* Pre-flight: the generic capability gaps plus the Pajek-specific ones; with styles, also the values written as
|
|
1435
|
+
* the nearest ones Pajek has.
|
|
1012
1436
|
* @param snapshot - the snapshot
|
|
1013
1437
|
* @param options - export options
|
|
1014
1438
|
* @returns the loss notes, empty when the export is exact
|
|
1015
1439
|
*/
|
|
1016
1440
|
check(snapshot, options) {
|
|
1017
|
-
const
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
const planned = plan(snapshot.nodes, "node", notes);
|
|
1021
|
-
const nodePlan = withoutReservedKey(planned, mangle);
|
|
1022
|
-
const edgePlan = plan(snapshot.edges, "edge", notes);
|
|
1023
|
-
const ids = sanitizeIds(snapshot, CAPABILITIES.idCharset, mangle ? "mangle" : "error");
|
|
1024
|
-
checkIdTexts(snapshot.nodeCount, ids, mangle, notes);
|
|
1025
|
-
if (nodePlan.length !== planned.length) {
|
|
1026
|
-
const reserved = planned.find((p) => p.slot === "param" && p.column.meta.name === ORIGINAL_ID_KEY);
|
|
1027
|
-
if (reserved !== void 0) {
|
|
1028
|
-
notes.push(
|
|
1029
|
-
note(
|
|
1030
|
-
PAJEK_LOSS.KEY_DROPPED,
|
|
1031
|
-
`node column "${ORIGINAL_ID_KEY}" is the parameter the exporter writes the original ids under (sanitizeIds "mangle"); it is not written`,
|
|
1032
|
-
ORIGINAL_ID_KEY,
|
|
1033
|
-
reserved.column.length - reserved.column.nullCount
|
|
1034
|
-
)
|
|
1035
|
-
);
|
|
1036
|
-
}
|
|
1037
|
-
}
|
|
1038
|
-
const owned = /* @__PURE__ */ new Set();
|
|
1039
|
-
for (const { column, slot } of [...nodePlan, ...edgePlan]) {
|
|
1040
|
-
if (slot === "shape" || slot === "relation" || slot === "param" && column.meta.domain === "node" && column.meta.name === SHAPE_COLUMN) {
|
|
1041
|
-
owned.add(`${column.meta.domain}:${column.meta.name}`);
|
|
1042
|
-
}
|
|
1043
|
-
}
|
|
1044
|
-
for (const table of [snapshot.nodes, snapshot.edges]) {
|
|
1045
|
-
for (const column of table) {
|
|
1046
|
-
if (column.meta.role === "spells") {
|
|
1047
|
-
owned.add(`${column.meta.domain}:${column.meta.name}`);
|
|
1048
|
-
}
|
|
1049
|
-
}
|
|
1050
|
-
}
|
|
1051
|
-
for (const n of checkCapabilities(snapshot, CAPABILITIES, resolved, {
|
|
1052
|
-
roles: SLOT_ROLES,
|
|
1053
|
-
roleNames: ROLE_NAMES,
|
|
1054
|
-
// the label slot is a vertex slot; an edge label is a parameter under its own name
|
|
1055
|
-
edgeRoleNames: {}
|
|
1056
|
-
})) {
|
|
1057
|
-
if (n.column !== null && (n.code === LOSS.LIST || n.code === LOSS.DTYPE)) {
|
|
1058
|
-
const domain = n.message.startsWith("node column") ? "node" : "edge";
|
|
1059
|
-
if (owned.has(`${domain}:${n.column}`)) {
|
|
1060
|
-
continue;
|
|
1061
|
-
}
|
|
1062
|
-
}
|
|
1063
|
-
notes.push(n);
|
|
1064
|
-
}
|
|
1065
|
-
labelNotes(snapshot, nodePlan, notes);
|
|
1066
|
-
for (const column of snapshot.edges) {
|
|
1067
|
-
if (column.meta.role === "label") {
|
|
1068
|
-
notes.push(
|
|
1069
|
-
note(
|
|
1070
|
-
LOSS.ROLE,
|
|
1071
|
-
`edge column "${column.meta.name}" (label) is written as a plain parameter; Pajek labels vertices only and the role is lost`,
|
|
1072
|
-
column.meta.name,
|
|
1073
|
-
column.length - column.nullCount
|
|
1074
|
-
)
|
|
1075
|
-
);
|
|
1076
|
-
}
|
|
1077
|
-
}
|
|
1078
|
-
checkCells(nodePlan, "node", notes);
|
|
1079
|
-
checkCells(edgePlan, "edge", notes);
|
|
1080
|
-
const folding = pairFolding(snapshot, { foldMutual: true });
|
|
1081
|
-
if (folding.mutualCount > 0) {
|
|
1082
|
-
notes.push(
|
|
1083
|
-
note(
|
|
1084
|
-
PAJEK_LOSS.MUTUAL_AS_UNDIRECTED,
|
|
1085
|
-
`${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as undirected edges; the mutual mark is lost`,
|
|
1086
|
-
snapshot.edges.byRole("mutual")?.meta.name ?? null,
|
|
1087
|
-
folding.mutualCount
|
|
1088
|
-
)
|
|
1089
|
-
);
|
|
1090
|
-
}
|
|
1091
|
-
if (Number.isNaN(firstModeOf(snapshot))) {
|
|
1092
|
-
notes.push(
|
|
1093
|
-
note(
|
|
1094
|
-
PAJEK_LOSS.FIRST_MODE_DROPPED,
|
|
1095
|
-
"meta.extra.pajek.firstMode is not a count within 0..nodeCount; the two-mode header is not written"
|
|
1096
|
-
)
|
|
1097
|
-
);
|
|
1441
|
+
const styled = pajekStyledExport(snapshot, options?.styles);
|
|
1442
|
+
if (styled === null) {
|
|
1443
|
+
return checkPlain(snapshot, options);
|
|
1098
1444
|
}
|
|
1099
|
-
return notes;
|
|
1445
|
+
return Object.freeze([...checkPlain(styled.snapshot, withOriginalIds(options)), ...styled.notes]);
|
|
1100
1446
|
},
|
|
1101
1447
|
/**
|
|
1102
1448
|
* Write the snapshot as UTF-8 chunks.
|
|
@@ -1105,8 +1451,7 @@ const pajekExporter = Object.freeze({
|
|
|
1105
1451
|
* @returns the chunks
|
|
1106
1452
|
*/
|
|
1107
1453
|
export(snapshot, options) {
|
|
1108
|
-
|
|
1109
|
-
return encodeChunks(writeParts(snapshot, resolved));
|
|
1454
|
+
return encodeChunks(styledParts(snapshot, options));
|
|
1110
1455
|
},
|
|
1111
1456
|
/**
|
|
1112
1457
|
* Write the snapshot as one string.
|
|
@@ -1115,10 +1460,106 @@ const pajekExporter = Object.freeze({
|
|
|
1115
1460
|
* @returns the document
|
|
1116
1461
|
*/
|
|
1117
1462
|
exportToString(snapshot, options) {
|
|
1118
|
-
|
|
1119
|
-
return joinText(writeParts(snapshot, resolved));
|
|
1463
|
+
return joinText(styledParts(snapshot, options));
|
|
1120
1464
|
}
|
|
1121
1465
|
});
|
|
1466
|
+
function styledParts(snapshot, options) {
|
|
1467
|
+
const styled = pajekStyledExport(snapshot, options?.styles);
|
|
1468
|
+
if (styled === null) {
|
|
1469
|
+
return writeParts(snapshot, resolvePajekOptions(snapshot, options));
|
|
1470
|
+
}
|
|
1471
|
+
return writeParts(styled.snapshot, resolvePajekOptions(styled.snapshot, withOriginalIds(options)), styled.comment);
|
|
1472
|
+
}
|
|
1473
|
+
function withOriginalIds(options) {
|
|
1474
|
+
return options?.sanitizeIds === void 0 ? { ...options, sanitizeIds: "mangle" } : options;
|
|
1475
|
+
}
|
|
1476
|
+
function ownedColumns(snapshot, planned) {
|
|
1477
|
+
const owned = /* @__PURE__ */ new Set();
|
|
1478
|
+
const key = (column) => `${column.meta.domain}:${column.meta.name}`;
|
|
1479
|
+
for (const { column, slot } of planned) {
|
|
1480
|
+
const shapeParam = slot === "param" && column.meta.domain === "node" && column.meta.name === SHAPE_COLUMN;
|
|
1481
|
+
if (slot === "shape" || slot === "relation" || shapeParam) {
|
|
1482
|
+
owned.add(key(column));
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
for (const column of [...snapshot.nodes, ...snapshot.edges]) {
|
|
1486
|
+
if (column.meta.role === "spells") {
|
|
1487
|
+
owned.add(key(column));
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
return owned;
|
|
1491
|
+
}
|
|
1492
|
+
function capabilityNotes(snapshot, resolved, owned) {
|
|
1493
|
+
const notes = checkCapabilities(snapshot, CAPABILITIES, resolved, {
|
|
1494
|
+
roles: SLOT_ROLES,
|
|
1495
|
+
roleNames: ROLE_NAMES,
|
|
1496
|
+
// the label slot is a vertex slot; an edge label is a parameter under its own name
|
|
1497
|
+
edgeRoleNames: {}
|
|
1498
|
+
});
|
|
1499
|
+
return notes.filter((n) => {
|
|
1500
|
+
if (n.column === null || n.code !== LOSS.LIST && n.code !== LOSS.DTYPE) {
|
|
1501
|
+
return true;
|
|
1502
|
+
}
|
|
1503
|
+
const domain = n.message.startsWith("node column") ? "node" : "edge";
|
|
1504
|
+
return !owned.has(`${domain}:${n.column}`);
|
|
1505
|
+
});
|
|
1506
|
+
}
|
|
1507
|
+
function checkPlain(snapshot, options) {
|
|
1508
|
+
const resolved = resolveExportOptions(options);
|
|
1509
|
+
const { mangle } = resolvePajekOptions(snapshot, options);
|
|
1510
|
+
const notes = [];
|
|
1511
|
+
const planned = plan(snapshot.nodes, "node", notes);
|
|
1512
|
+
const nodePlan = withoutReservedKey(planned, mangle);
|
|
1513
|
+
const edgePlan = plan(snapshot.edges, "edge", notes);
|
|
1514
|
+
const ids = sanitizeIds(snapshot, CAPABILITIES.idCharset, mangle ? "mangle" : "error");
|
|
1515
|
+
checkIdTexts(snapshot.nodeCount, ids, mangle, notes);
|
|
1516
|
+
const reserved = nodePlan.length === planned.length ? void 0 : planned.find((p) => p.slot === "param" && p.column.meta.name === ORIGINAL_ID_KEY);
|
|
1517
|
+
if (reserved !== void 0) {
|
|
1518
|
+
notes.push(
|
|
1519
|
+
note(
|
|
1520
|
+
PAJEK_LOSS.KEY_DROPPED,
|
|
1521
|
+
`node column "${ORIGINAL_ID_KEY}" is the parameter the exporter writes the original ids under (sanitizeIds "mangle"); it is not written`,
|
|
1522
|
+
ORIGINAL_ID_KEY,
|
|
1523
|
+
reserved.column.length - reserved.column.nullCount
|
|
1524
|
+
)
|
|
1525
|
+
);
|
|
1526
|
+
}
|
|
1527
|
+
const owned = ownedColumns(snapshot, [...nodePlan, ...edgePlan]);
|
|
1528
|
+
notes.push(...capabilityNotes(snapshot, resolved, owned));
|
|
1529
|
+
labelNotes(snapshot, nodePlan, notes);
|
|
1530
|
+
for (const column of [...snapshot.edges].filter((c) => c.meta.role === "label")) {
|
|
1531
|
+
notes.push(
|
|
1532
|
+
note(
|
|
1533
|
+
LOSS.ROLE,
|
|
1534
|
+
`edge column "${column.meta.name}" (label) is written as a plain parameter; Pajek labels vertices only and the role is lost`,
|
|
1535
|
+
column.meta.name,
|
|
1536
|
+
column.length - column.nullCount
|
|
1537
|
+
)
|
|
1538
|
+
);
|
|
1539
|
+
}
|
|
1540
|
+
checkCells(nodePlan, "node", notes);
|
|
1541
|
+
checkCells(edgePlan, "edge", notes);
|
|
1542
|
+
const folding = pairFolding(snapshot, { foldMutual: true });
|
|
1543
|
+
if (folding.mutualCount > 0) {
|
|
1544
|
+
notes.push(
|
|
1545
|
+
note(
|
|
1546
|
+
PAJEK_LOSS.MUTUAL_AS_UNDIRECTED,
|
|
1547
|
+
`${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as undirected edges; the mutual mark is lost`,
|
|
1548
|
+
snapshot.edges.byRole("mutual")?.meta.name ?? null,
|
|
1549
|
+
folding.mutualCount
|
|
1550
|
+
)
|
|
1551
|
+
);
|
|
1552
|
+
}
|
|
1553
|
+
if (Number.isNaN(firstModeOf(snapshot))) {
|
|
1554
|
+
notes.push(
|
|
1555
|
+
note(
|
|
1556
|
+
PAJEK_LOSS.FIRST_MODE_DROPPED,
|
|
1557
|
+
"meta.extra.pajek.firstMode is not a count within 0..nodeCount; the two-mode header is not written"
|
|
1558
|
+
)
|
|
1559
|
+
);
|
|
1560
|
+
}
|
|
1561
|
+
return notes;
|
|
1562
|
+
}
|
|
1122
1563
|
const PAJEK_ISSUE = Object.freeze({
|
|
1123
1564
|
...INPUT_ISSUE,
|
|
1124
1565
|
...ELEMENT_ISSUE,
|
|
@@ -1230,7 +1671,11 @@ const PAJEK_ISSUE = Object.freeze({
|
|
|
1230
1671
|
/** A negative vertex number in an adjacency list, read as its absolute value. */
|
|
1231
1672
|
NEGATIVE_LIST_ENTRY: "W_PAJEK_NEGATIVE_LIST_ENTRY",
|
|
1232
1673
|
/** An integer beyond 2^53 was stored as the nearest 64-bit float; pass `long: "string"` to keep every digit. */
|
|
1233
|
-
PRECISION: PRECISION_CODE
|
|
1674
|
+
PRECISION: PRECISION_CODE,
|
|
1675
|
+
/** A number alone at the end of a row, after its parameters (Pajek writes a trailing `0`); it is ignored. */
|
|
1676
|
+
TRAILING_VALUE: "W_PAJEK_TRAILING_VALUE",
|
|
1677
|
+
/** A line whose value is `NaN`; the line is kept without a value. */
|
|
1678
|
+
NAN_VALUE: "W_PAJEK_NAN_VALUE"
|
|
1234
1679
|
});
|
|
1235
1680
|
const USED_OPTIONS = /* @__PURE__ */ new Set([
|
|
1236
1681
|
"ids",
|
|
@@ -1252,6 +1697,7 @@ const ABORT_CHECK_INTERVAL = 64;
|
|
|
1252
1697
|
const FIRST_VERTEX_VALUES = /* @__PURE__ */ new Set([0, 1, "auto"]);
|
|
1253
1698
|
const NUMERAL = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
|
|
1254
1699
|
const NON_FINITE_WORD = /^[+-]?(?:nan|inf|infinity)$/i;
|
|
1700
|
+
const NAN_WORD = /^[+-]?nan$/i;
|
|
1255
1701
|
const LABEL_DECL = {
|
|
1256
1702
|
name: LABEL_COLUMN,
|
|
1257
1703
|
dtype: "string",
|
|
@@ -1290,7 +1736,9 @@ function positionDecl(sourceDims) {
|
|
|
1290
1736
|
nullable: true,
|
|
1291
1737
|
role: "position",
|
|
1292
1738
|
origin: { format: "pajek", id: "coordinates" },
|
|
1293
|
-
|
|
1739
|
+
// Pajek draws y downward (USAir97.net has Deadhorse, Alaska at y 0.10 and Miami at 0.53),
|
|
1740
|
+
// centers depth on 0.5, and NetworkX writes "0.0 0.0" for a node with no position
|
|
1741
|
+
extra: { sourceDims, units: "file", yAxis: "down", zOrigin: 0.5, zeroUnplaced: true }
|
|
1294
1742
|
};
|
|
1295
1743
|
}
|
|
1296
1744
|
class LineError extends Error {
|
|
@@ -1356,6 +1804,7 @@ class PajekParser {
|
|
|
1356
1804
|
this.nodeParams = /* @__PURE__ */ new Map();
|
|
1357
1805
|
this.ended = false;
|
|
1358
1806
|
this.edgeParams = /* @__PURE__ */ new Map();
|
|
1807
|
+
this.styleBlockKept = false;
|
|
1359
1808
|
this.sink = sink;
|
|
1360
1809
|
this.report = report;
|
|
1361
1810
|
this.options = options;
|
|
@@ -1363,6 +1812,21 @@ class PajekParser {
|
|
|
1363
1812
|
this.resolver = new DirectionResolver(sink, report, options.onMixedDirection);
|
|
1364
1813
|
this.coercer = new IdCoercer(options.ids);
|
|
1365
1814
|
}
|
|
1815
|
+
/**
|
|
1816
|
+
* Keep the first `% graphty.styles <json>` comment for the style reader (a file graphty wrote carries its styles
|
|
1817
|
+
* there; Pajek skips comment lines).
|
|
1818
|
+
* @param text - a comment or blank line
|
|
1819
|
+
*/
|
|
1820
|
+
comment(text) {
|
|
1821
|
+
if (this.styleBlockKept) {
|
|
1822
|
+
return;
|
|
1823
|
+
}
|
|
1824
|
+
const trimmed = text.trimStart();
|
|
1825
|
+
if (trimmed.startsWith(PAJEK_STYLE_COMMENT)) {
|
|
1826
|
+
this.styleBlockKept = true;
|
|
1827
|
+
this.report.keepForStyles(trimmed.slice(PAJEK_STYLE_COMMENT.length));
|
|
1828
|
+
}
|
|
1829
|
+
}
|
|
1366
1830
|
/**
|
|
1367
1831
|
* Handle one line; every problem of the line is recorded as an issue and the line skipped.
|
|
1368
1832
|
* @param text - the line without its terminator
|
|
@@ -1371,6 +1835,7 @@ class PajekParser {
|
|
|
1371
1835
|
*/
|
|
1372
1836
|
line(text, line) {
|
|
1373
1837
|
if (isCommentOrBlank(text)) {
|
|
1838
|
+
this.comment(text);
|
|
1374
1839
|
return false;
|
|
1375
1840
|
}
|
|
1376
1841
|
const afterObjectHeader = this.objectHeader;
|
|
@@ -1879,6 +2344,7 @@ class PajekParser {
|
|
|
1879
2344
|
i++;
|
|
1880
2345
|
}
|
|
1881
2346
|
const extras = this.extras(tokens, i, "node", line);
|
|
2347
|
+
shape = extras.shape ?? shape;
|
|
1882
2348
|
const restored = this.restoredId(extras);
|
|
1883
2349
|
this.createNodes();
|
|
1884
2350
|
const repeated = this.seen[pos] !== 0;
|
|
@@ -2115,6 +2581,14 @@ class PajekParser {
|
|
|
2115
2581
|
if (i < tokens.length && isNumericText(tokens[i])) {
|
|
2116
2582
|
valueText = tokens[i];
|
|
2117
2583
|
i++;
|
|
2584
|
+
} else if (i < tokens.length && NAN_WORD.test(tokens[i])) {
|
|
2585
|
+
this.report.warnOnce(
|
|
2586
|
+
"validation-error",
|
|
2587
|
+
PAJEK_ISSUE.NAN_VALUE,
|
|
2588
|
+
`a line value ${JSON.stringify(tokens[i])} is not a number; the line is kept without a value`,
|
|
2589
|
+
{ line }
|
|
2590
|
+
);
|
|
2591
|
+
i++;
|
|
2118
2592
|
}
|
|
2119
2593
|
const extras = this.extras(tokens, i, "edge", line);
|
|
2120
2594
|
const { weightFrom } = this.options;
|
|
@@ -2380,7 +2854,7 @@ class PajekParser {
|
|
|
2380
2854
|
* @returns the parsed extras
|
|
2381
2855
|
*/
|
|
2382
2856
|
extras(tokens, start, domain, line) {
|
|
2383
|
-
const extras = { keys: [], values: [], spells: null };
|
|
2857
|
+
const extras = { keys: [], values: [], spells: null, shape: null };
|
|
2384
2858
|
const seen = /* @__PURE__ */ new Set();
|
|
2385
2859
|
for (let i = start; i < tokens.length; ) {
|
|
2386
2860
|
const token = tokens[i];
|
|
@@ -2389,13 +2863,14 @@ class PajekParser {
|
|
|
2389
2863
|
i++;
|
|
2390
2864
|
continue;
|
|
2391
2865
|
}
|
|
2866
|
+
if (domain === "node" && isShapeKeyword(token)) {
|
|
2867
|
+
extras.shape = token.toLowerCase();
|
|
2868
|
+
i++;
|
|
2869
|
+
continue;
|
|
2870
|
+
}
|
|
2392
2871
|
if (i + 1 >= tokens.length) {
|
|
2393
|
-
this.
|
|
2394
|
-
|
|
2395
|
-
"parse-error",
|
|
2396
|
-
domain === "node" ? PAJEK_ISSUE.VERTEX_LINE : PAJEK_ISSUE.LINE,
|
|
2397
|
-
`parameter "${token}" has no value`
|
|
2398
|
-
);
|
|
2872
|
+
this.loneLastToken(token, domain, line);
|
|
2873
|
+
break;
|
|
2399
2874
|
}
|
|
2400
2875
|
if (seen.has(token)) {
|
|
2401
2876
|
this.report.warning(
|
|
@@ -2412,6 +2887,30 @@ class PajekParser {
|
|
|
2412
2887
|
}
|
|
2413
2888
|
return extras;
|
|
2414
2889
|
}
|
|
2890
|
+
/**
|
|
2891
|
+
* A token alone at the end of a row, with no value after it: a number is ignored (reported once);
|
|
2892
|
+
* anything else is a parameter without its value, which skips the row.
|
|
2893
|
+
* @param token - the token
|
|
2894
|
+
* @param domain - what is skipped when the row is malformed
|
|
2895
|
+
* @param line - the line number
|
|
2896
|
+
*/
|
|
2897
|
+
loneLastToken(token, domain, line) {
|
|
2898
|
+
if (isNumericText(token)) {
|
|
2899
|
+
this.report.warnOnce(
|
|
2900
|
+
"validation-error",
|
|
2901
|
+
PAJEK_ISSUE.TRAILING_VALUE,
|
|
2902
|
+
`the number ${JSON.stringify(token)} alone at the end of a row is not a parameter; it is ignored`,
|
|
2903
|
+
{ line }
|
|
2904
|
+
);
|
|
2905
|
+
return;
|
|
2906
|
+
}
|
|
2907
|
+
this.skip(domain);
|
|
2908
|
+
throw new LineError(
|
|
2909
|
+
"parse-error",
|
|
2910
|
+
domain === "node" ? PAJEK_ISSUE.VERTEX_LINE : PAJEK_ISSUE.LINE,
|
|
2911
|
+
`parameter "${token}" has no value`
|
|
2912
|
+
);
|
|
2913
|
+
}
|
|
2415
2914
|
/**
|
|
2416
2915
|
* The spells of a row's interval token; a malformed one skips the row.
|
|
2417
2916
|
* @param token - the token, starting with "["
|
|
@@ -2516,6 +3015,7 @@ const pajekImporter = Object.freeze({
|
|
|
2516
3015
|
options: Object.freeze(["firstVertex"]),
|
|
2517
3016
|
extensions: Object.freeze([".net", ".paj"]),
|
|
2518
3017
|
mimeTypes: Object.freeze(["text/x-pajek", "text/plain"]),
|
|
3018
|
+
styles: pajekStyles,
|
|
2519
3019
|
/**
|
|
2520
3020
|
* Confidence that the input is a Pajek network: it starts with `*Vertices` (or `*Network`),
|
|
2521
3021
|
* after any `%` comment lines.
|
|
@@ -2671,7 +3171,9 @@ class NetworkCounter {
|
|
|
2671
3171
|
export {
|
|
2672
3172
|
PAJEK_ISSUE as P,
|
|
2673
3173
|
PAJEK_LOSS as a,
|
|
2674
|
-
|
|
3174
|
+
PAJEK_STYLE_CAPABILITIES as b,
|
|
3175
|
+
PAJEK_STYLE_COMMENT as c,
|
|
3176
|
+
pajekImporter as d,
|
|
2675
3177
|
pajekExporter as p
|
|
2676
3178
|
};
|
|
2677
|
-
//# sourceMappingURL=importer-
|
|
3179
|
+
//# sourceMappingURL=importer-CbX2_rNF.js.map
|