@graphty/graph-io 0.3.25 → 0.3.27
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/README.md +49 -414
- package/dist/chunks/children-CL3Cy0ez.js.map +1 -1
- package/dist/chunks/choose-DrXtu_96.js +56 -0
- package/dist/chunks/choose-DrXtu_96.js.map +1 -0
- package/dist/chunks/constants-ikG85dT8.js +231 -0
- package/dist/chunks/constants-ikG85dT8.js.map +1 -0
- package/dist/chunks/{escape-B-tkk_Cl.js → escape-D1HPTUrP.js} +390 -99
- package/dist/chunks/escape-D1HPTUrP.js.map +1 -0
- package/dist/chunks/export-CHd4tQE2.js +4333 -0
- package/dist/chunks/export-CHd4tQE2.js.map +1 -0
- package/dist/chunks/{importer-eUREhBGj.js → exporter-D23CKNqF.js} +4969 -3201
- package/dist/chunks/exporter-D23CKNqF.js.map +1 -0
- package/dist/chunks/{exporter-DIeGJXAZ.js → exporter-DfWTgrti.js} +23 -21
- package/dist/chunks/exporter-DfWTgrti.js.map +1 -0
- package/dist/chunks/exporter-DhtW6FxK.js +3465 -0
- package/dist/chunks/exporter-DhtW6FxK.js.map +1 -0
- package/dist/chunks/{exporter-BGrsWamJ.js → exporter-IHv4nkCm.js} +38 -229
- package/dist/chunks/exporter-IHv4nkCm.js.map +1 -0
- package/dist/chunks/{importer-BWY2FFc5.js → importer-B1wmPQjr.js} +255 -77
- package/dist/chunks/importer-B1wmPQjr.js.map +1 -0
- package/dist/chunks/{importer-D_e7e7LX.js → importer-B2W_58pz.js} +399 -146
- package/dist/chunks/importer-B2W_58pz.js.map +1 -0
- package/dist/chunks/importer-BSALvkui.js +2811 -0
- package/dist/chunks/importer-BSALvkui.js.map +1 -0
- package/dist/chunks/{importer-vi3bSdtw.js → importer-BVRE--Un.js} +510 -77
- package/dist/chunks/importer-BVRE--Un.js.map +1 -0
- package/dist/chunks/{importer-DET1tg6s.js → importer-CIAzt-wo.js} +1689 -312
- package/dist/chunks/importer-CIAzt-wo.js.map +1 -0
- package/dist/chunks/{importer-DIrbbnAf.js → importer-DpEW5zeG.js} +585 -226
- package/dist/chunks/importer-DpEW5zeG.js.map +1 -0
- package/dist/chunks/{importer-zGLo8Dg_.js → importer-z_FL4VMb.js} +488 -161
- package/dist/chunks/importer-z_FL4VMb.js.map +1 -0
- package/dist/chunks/json-elements-BAmNBZok.js +1225 -0
- package/dist/chunks/json-elements-BAmNBZok.js.map +1 -0
- package/dist/chunks/ontology-export-Bab4eUA8.js +357 -0
- package/dist/chunks/ontology-export-Bab4eUA8.js.map +1 -0
- package/dist/chunks/{records-dbRkxwaq.js → records-CdlvL4RO.js} +298 -114
- package/dist/chunks/records-CdlvL4RO.js.map +1 -0
- package/dist/chunks/{text-Dr0Ifpag.js → text-DzXjAiTl.js} +29 -11
- package/dist/chunks/text-DzXjAiTl.js.map +1 -0
- package/dist/chunks/{writer-C7flM-Ih.js → writer-DxjgHwSe.js} +19 -1
- package/dist/chunks/writer-DxjgHwSe.js.map +1 -0
- package/dist/csv.js +952 -262
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +6 -3
- package/dist/cx2.js +2 -2
- package/dist/cys.js +6 -3
- package/dist/dot.js +1 -1
- package/dist/gexf.js +554 -122
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +344 -87
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +1105 -213
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +3 -2
- package/dist/graphml.js.map +1 -1
- package/dist/json.js +3 -2
- package/dist/neo4j.js +565 -158
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +6 -3
- package/dist/pajek.js +1 -1
- package/dist/src/children.d.ts +18 -6
- package/dist/src/children.d.ts.map +1 -1
- package/dist/src/children.js +6 -3
- package/dist/src/children.js.map +1 -1
- package/dist/src/common/attributes.d.ts +29 -11
- package/dist/src/common/attributes.d.ts.map +1 -1
- package/dist/src/common/attributes.js +25 -7
- package/dist/src/common/attributes.js.map +1 -1
- package/dist/src/common/cell-budget.d.ts +9 -2
- package/dist/src/common/cell-budget.d.ts.map +1 -1
- package/dist/src/common/cell-budget.js +11 -3
- package/dist/src/common/cell-budget.js.map +1 -1
- package/dist/src/common/choose.d.ts +19 -0
- package/dist/src/common/choose.d.ts.map +1 -0
- package/dist/src/common/choose.js +72 -0
- package/dist/src/common/choose.js.map +1 -0
- package/dist/src/common/codes.d.ts +456 -66
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +458 -66
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/compare.d.ts +81 -0
- package/dist/src/common/compare.d.ts.map +1 -0
- package/dist/src/common/compare.js +394 -0
- package/dist/src/common/compare.js.map +1 -0
- package/dist/src/common/cx-export.d.ts +123 -0
- package/dist/src/common/cx-export.d.ts.map +1 -0
- package/dist/src/common/cx-export.js +334 -0
- package/dist/src/common/cx-export.js.map +1 -0
- package/dist/src/common/declared-types.d.ts +22 -2
- package/dist/src/common/declared-types.d.ts.map +1 -1
- package/dist/src/common/declared-types.js +21 -3
- package/dist/src/common/declared-types.js.map +1 -1
- package/dist/src/common/direction.d.ts +74 -50
- package/dist/src/common/direction.d.ts.map +1 -1
- package/dist/src/common/direction.js +47 -27
- package/dist/src/common/direction.js.map +1 -1
- package/dist/src/common/escape.d.ts +21 -9
- package/dist/src/common/escape.d.ts.map +1 -1
- package/dist/src/common/escape.js +39 -22
- package/dist/src/common/escape.js.map +1 -1
- package/dist/src/common/export.d.ts +144 -32
- package/dist/src/common/export.d.ts.map +1 -1
- package/dist/src/common/export.js +216 -42
- package/dist/src/common/export.js.map +1 -1
- package/dist/src/common/format.d.ts +23 -1
- package/dist/src/common/format.d.ts.map +1 -1
- package/dist/src/common/format.js +26 -1
- package/dist/src/common/format.js.map +1 -1
- package/dist/src/common/ids.d.ts +9 -2
- package/dist/src/common/ids.d.ts.map +1 -1
- package/dist/src/common/ids.js +6 -2
- package/dist/src/common/ids.js.map +1 -1
- package/dist/src/common/input.d.ts +122 -28
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +890 -124
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/json-elements.d.ts +144 -20
- package/dist/src/common/json-elements.d.ts.map +1 -1
- package/dist/src/common/json-elements.js +869 -189
- package/dist/src/common/json-elements.js.map +1 -1
- package/dist/src/common/line-format.d.ts +90 -0
- package/dist/src/common/line-format.d.ts.map +1 -0
- package/dist/src/common/line-format.js +185 -0
- package/dist/src/common/line-format.js.map +1 -0
- package/dist/src/common/lists.d.ts +6 -1
- package/dist/src/common/lists.d.ts.map +1 -1
- package/dist/src/common/lists.js +3 -1
- package/dist/src/common/lists.js.map +1 -1
- package/dist/src/common/ontology-export.d.ts +167 -0
- package/dist/src/common/ontology-export.d.ts.map +1 -0
- package/dist/src/common/ontology-export.js +359 -0
- package/dist/src/common/ontology-export.js.map +1 -0
- package/dist/src/common/ontology.d.ts +25 -3
- package/dist/src/common/ontology.d.ts.map +1 -1
- package/dist/src/common/ontology.js +30 -9
- package/dist/src/common/ontology.js.map +1 -1
- package/dist/src/common/options.d.ts +62 -12
- package/dist/src/common/options.d.ts.map +1 -1
- package/dist/src/common/options.js +89 -11
- package/dist/src/common/options.js.map +1 -1
- package/dist/src/common/plural.d.ts +31 -0
- package/dist/src/common/plural.d.ts.map +1 -0
- package/dist/src/common/plural.js +46 -0
- package/dist/src/common/plural.js.map +1 -0
- package/dist/src/common/report.d.ts +72 -14
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +146 -22
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/common/temporal.d.ts +22 -5
- package/dist/src/common/temporal.d.ts.map +1 -1
- package/dist/src/common/temporal.js +13 -2
- package/dist/src/common/temporal.js.map +1 -1
- package/dist/src/common/text.d.ts +39 -23
- package/dist/src/common/text.d.ts.map +1 -1
- package/dist/src/common/text.js +51 -21
- package/dist/src/common/text.js.map +1 -1
- package/dist/src/common/weights.d.ts +37 -4
- package/dist/src/common/weights.d.ts.map +1 -1
- package/dist/src/common/weights.js +61 -2
- package/dist/src/common/weights.js.map +1 -1
- package/dist/src/common/writer.d.ts +19 -3
- package/dist/src/common/writer.d.ts.map +1 -1
- package/dist/src/common/writer.js +30 -2
- package/dist/src/common/writer.js.map +1 -1
- package/dist/src/common/xml.d.ts +125 -9
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +402 -85
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/common/zip.d.ts +44 -4
- package/dist/src/common/zip.d.ts.map +1 -1
- package/dist/src/common/zip.js +134 -5
- package/dist/src/common/zip.js.map +1 -1
- package/dist/src/formats/csv/exporter.d.ts +80 -24
- package/dist/src/formats/csv/exporter.d.ts.map +1 -1
- package/dist/src/formats/csv/exporter.js +146 -33
- package/dist/src/formats/csv/exporter.js.map +1 -1
- package/dist/src/formats/csv/header.d.ts +38 -9
- package/dist/src/formats/csv/header.d.ts.map +1 -1
- package/dist/src/formats/csv/header.js +46 -10
- package/dist/src/formats/csv/header.js.map +1 -1
- package/dist/src/formats/csv/importer.d.ts +187 -37
- package/dist/src/formats/csv/importer.d.ts.map +1 -1
- package/dist/src/formats/csv/importer.js +835 -204
- package/dist/src/formats/csv/importer.js.map +1 -1
- package/dist/src/formats/csv/index.d.ts +100 -19
- package/dist/src/formats/csv/index.d.ts.map +1 -1
- package/dist/src/formats/csv/index.js +94 -21
- package/dist/src/formats/csv/index.js.map +1 -1
- package/dist/src/formats/csv/records.d.ts +95 -10
- package/dist/src/formats/csv/records.d.ts.map +1 -1
- package/dist/src/formats/csv/records.js +333 -122
- package/dist/src/formats/csv/records.js.map +1 -1
- package/dist/src/formats/csv/values.d.ts +1 -0
- package/dist/src/formats/csv/values.d.ts.map +1 -1
- package/dist/src/formats/csv/values.js +1 -0
- package/dist/src/formats/csv/values.js.map +1 -1
- package/dist/src/formats/cx/exporter.d.ts +102 -0
- package/dist/src/formats/cx/exporter.d.ts.map +1 -0
- package/dist/src/formats/cx/exporter.js +1217 -0
- package/dist/src/formats/cx/exporter.js.map +1 -0
- package/dist/src/formats/cx/importer.d.ts +79 -32
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +682 -287
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/index.d.ts +4 -3
- package/dist/src/formats/cx/index.d.ts.map +1 -1
- package/dist/src/formats/cx/index.js +4 -3
- package/dist/src/formats/cx/index.js.map +1 -1
- package/dist/src/formats/cx2/exporter.d.ts +29 -11
- package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx2/exporter.js +39 -268
- package/dist/src/formats/cx2/exporter.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts +78 -28
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +227 -80
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/index.d.ts +2 -1
- package/dist/src/formats/cx2/index.d.ts.map +1 -1
- package/dist/src/formats/cx2/index.js +2 -1
- package/dist/src/formats/cx2/index.js.map +1 -1
- package/dist/src/formats/cys/constants.d.ts +66 -17
- package/dist/src/formats/cys/constants.d.ts.map +1 -1
- package/dist/src/formats/cys/constants.js +59 -18
- package/dist/src/formats/cys/constants.js.map +1 -1
- package/dist/src/formats/cys/exporter.d.ts +118 -0
- package/dist/src/formats/cys/exporter.d.ts.map +1 -0
- package/dist/src/formats/cys/exporter.js +1072 -0
- package/dist/src/formats/cys/exporter.js.map +1 -0
- package/dist/src/formats/cys/importer.d.ts +22 -8
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +510 -149
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/index.d.ts +4 -2
- package/dist/src/formats/cys/index.d.ts.map +1 -1
- package/dist/src/formats/cys/index.js +4 -2
- package/dist/src/formats/cys/index.js.map +1 -1
- package/dist/src/formats/cys/session.d.ts +46 -7
- package/dist/src/formats/cys/session.d.ts.map +1 -1
- package/dist/src/formats/cys/session.js +101 -27
- package/dist/src/formats/cys/session.js.map +1 -1
- package/dist/src/formats/cys/tables.d.ts +9 -2
- package/dist/src/formats/cys/tables.d.ts.map +1 -1
- package/dist/src/formats/cys/tables.js +29 -7
- package/dist/src/formats/cys/tables.js.map +1 -1
- package/dist/src/formats/dot/exporter.d.ts +42 -14
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +56 -29
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts +91 -29
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +190 -39
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +2 -1
- package/dist/src/formats/dot/index.d.ts.map +1 -1
- package/dist/src/formats/dot/index.js +2 -1
- package/dist/src/formats/dot/index.js.map +1 -1
- package/dist/src/formats/dot/names.d.ts +44 -11
- package/dist/src/formats/dot/names.d.ts.map +1 -1
- package/dist/src/formats/dot/names.js +44 -11
- package/dist/src/formats/dot/names.js.map +1 -1
- package/dist/src/formats/dot/tokenizer.d.ts +9 -2
- package/dist/src/formats/dot/tokenizer.d.ts.map +1 -1
- package/dist/src/formats/dot/tokenizer.js +20 -5
- package/dist/src/formats/dot/tokenizer.js.map +1 -1
- package/dist/src/formats/gexf/exporter.d.ts +46 -15
- package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
- package/dist/src/formats/gexf/exporter.js +45 -15
- package/dist/src/formats/gexf/exporter.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +87 -23
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +471 -90
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/index.d.ts +84 -21
- package/dist/src/formats/gexf/index.d.ts.map +1 -1
- package/dist/src/formats/gexf/index.js +80 -23
- package/dist/src/formats/gexf/index.js.map +1 -1
- package/dist/src/formats/gexf/schema.d.ts +67 -15
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +59 -13
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gml/exporter.d.ts +69 -21
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +74 -29
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts +116 -25
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +290 -61
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +87 -24
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +79 -26
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/syntax.d.ts +67 -18
- package/dist/src/formats/gml/syntax.d.ts.map +1 -1
- package/dist/src/formats/gml/syntax.js +110 -28
- package/dist/src/formats/gml/syntax.js.map +1 -1
- package/dist/src/formats/graphml/constants.d.ts +174 -44
- package/dist/src/formats/graphml/constants.d.ts.map +1 -1
- package/dist/src/formats/graphml/constants.js +165 -44
- package/dist/src/formats/graphml/constants.js.map +1 -1
- package/dist/src/formats/graphml/exporter.d.ts +17 -9
- package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
- package/dist/src/formats/graphml/exporter.js +33 -12
- package/dist/src/formats/graphml/exporter.js.map +1 -1
- package/dist/src/formats/graphml/importer.d.ts +19 -7
- package/dist/src/formats/graphml/importer.d.ts.map +1 -1
- package/dist/src/formats/graphml/importer.js +466 -39
- package/dist/src/formats/graphml/importer.js.map +1 -1
- package/dist/src/formats/graphml/index.d.ts +2 -1
- package/dist/src/formats/graphml/index.d.ts.map +1 -1
- package/dist/src/formats/graphml/index.js +2 -1
- package/dist/src/formats/graphml/index.js.map +1 -1
- package/dist/src/formats/graphml/tree.d.ts +6 -2
- package/dist/src/formats/graphml/tree.d.ts.map +1 -1
- package/dist/src/formats/graphml/tree.js +6 -2
- package/dist/src/formats/graphml/tree.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +8 -3
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +36 -15
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/dialect.d.ts +88 -24
- package/dist/src/formats/json/dialect.d.ts.map +1 -1
- package/dist/src/formats/json/dialect.js +109 -19
- package/dist/src/formats/json/dialect.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts +134 -22
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +135 -54
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +173 -52
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +899 -220
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/index.d.ts +3 -2
- package/dist/src/formats/json/index.d.ts.map +1 -1
- package/dist/src/formats/json/index.js +3 -2
- package/dist/src/formats/json/index.js.map +1 -1
- package/dist/src/formats/json/obographs-export.d.ts +68 -0
- package/dist/src/formats/json/obographs-export.d.ts.map +1 -0
- package/dist/src/formats/json/obographs-export.js +941 -0
- package/dist/src/formats/json/obographs-export.js.map +1 -0
- package/dist/src/formats/json/obographs.d.ts +26 -0
- package/dist/src/formats/json/obographs.d.ts.map +1 -1
- package/dist/src/formats/json/obographs.js +297 -80
- package/dist/src/formats/json/obographs.js.map +1 -1
- package/dist/src/formats/neo4j/exporter.d.ts +109 -21
- package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
- package/dist/src/formats/neo4j/exporter.js +239 -86
- package/dist/src/formats/neo4j/exporter.js.map +1 -1
- package/dist/src/formats/neo4j/header.d.ts +17 -4
- package/dist/src/formats/neo4j/header.d.ts.map +1 -1
- package/dist/src/formats/neo4j/header.js +36 -4
- package/dist/src/formats/neo4j/header.js.map +1 -1
- package/dist/src/formats/neo4j/importer.d.ts +107 -27
- package/dist/src/formats/neo4j/importer.d.ts.map +1 -1
- package/dist/src/formats/neo4j/importer.js +415 -63
- package/dist/src/formats/neo4j/importer.js.map +1 -1
- package/dist/src/formats/neo4j/index.d.ts +73 -23
- package/dist/src/formats/neo4j/index.d.ts.map +1 -1
- package/dist/src/formats/neo4j/index.js +65 -25
- package/dist/src/formats/neo4j/index.js.map +1 -1
- package/dist/src/formats/obo/exporter.d.ts +150 -0
- package/dist/src/formats/obo/exporter.d.ts.map +1 -0
- package/dist/src/formats/obo/exporter.js +1736 -0
- package/dist/src/formats/obo/exporter.js.map +1 -0
- package/dist/src/formats/obo/importer.d.ts +95 -19
- package/dist/src/formats/obo/importer.d.ts.map +1 -1
- package/dist/src/formats/obo/importer.js +475 -104
- package/dist/src/formats/obo/importer.js.map +1 -1
- package/dist/src/formats/obo/index.d.ts +6 -3
- package/dist/src/formats/obo/index.d.ts.map +1 -1
- package/dist/src/formats/obo/index.js +6 -3
- package/dist/src/formats/obo/index.js.map +1 -1
- package/dist/src/formats/obo/syntax.d.ts +108 -4
- package/dist/src/formats/obo/syntax.d.ts.map +1 -1
- package/dist/src/formats/obo/syntax.js +211 -34
- package/dist/src/formats/obo/syntax.js.map +1 -1
- package/dist/src/formats/pajek/exporter.d.ts +54 -16
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +67 -35
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +84 -22
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +303 -83
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +2 -1
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js +2 -1
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/syntax.d.ts +77 -14
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +186 -54
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts +1 -0
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
- package/dist/src/formats/xgmml/columns.js +4 -0
- package/dist/src/formats/xgmml/columns.js.map +1 -1
- package/dist/src/formats/xgmml/constants.d.ts +186 -56
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
- package/dist/src/formats/xgmml/constants.js +181 -57
- package/dist/src/formats/xgmml/constants.js.map +1 -1
- package/dist/src/formats/xgmml/document.d.ts +65 -11
- package/dist/src/formats/xgmml/document.d.ts.map +1 -1
- package/dist/src/formats/xgmml/document.js +157 -28
- package/dist/src/formats/xgmml/document.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts +61 -3
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +129 -26
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/exporter.d.ts +13 -6
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
- package/dist/src/formats/xgmml/exporter.js +21 -22
- package/dist/src/formats/xgmml/exporter.js.map +1 -1
- package/dist/src/formats/xgmml/importer.d.ts +33 -12
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
- package/dist/src/formats/xgmml/importer.js +35 -72
- package/dist/src/formats/xgmml/importer.js.map +1 -1
- package/dist/src/formats/xgmml/index.d.ts +1 -0
- package/dist/src/formats/xgmml/index.d.ts.map +1 -1
- package/dist/src/formats/xgmml/index.js +1 -0
- package/dist/src/formats/xgmml/index.js.map +1 -1
- package/dist/src/formats/xgmml/values.d.ts +8 -1
- package/dist/src/formats/xgmml/values.d.ts.map +1 -1
- package/dist/src/formats/xgmml/values.js +8 -3
- package/dist/src/formats/xgmml/values.js.map +1 -1
- package/dist/src/index.d.ts +23 -18
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +28 -16
- package/dist/src/index.js.map +1 -1
- package/dist/src/registry.d.ts +478 -92
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +807 -88
- package/dist/src/registry.js.map +1 -1
- package/dist/src/sniff.d.ts +61 -19
- package/dist/src/sniff.d.ts.map +1 -1
- package/dist/src/sniff.js +121 -29
- package/dist/src/sniff.js.map +1 -1
- package/dist/src/types.d.ts +362 -112
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +28 -7
- package/dist/src/types.js.map +1 -1
- package/dist/xgmml.js +2 -2
- package/docs/samples/README.md +25 -0
- package/docs/samples/got-edges.csv +353 -0
- package/docs/samples/got-network.graphml +1384 -0
- package/docs/samples/got-nodes.csv +108 -0
- package/docs/samples/got.cx +930 -0
- package/docs/samples/got.cx2 +465 -0
- package/docs/samples/got.gexf +471 -0
- package/docs/samples/got.gml +2650 -0
- package/docs/samples/got.json +2546 -0
- package/docs/samples/got.net +461 -0
- package/docs/samples/movies-nodes.csv +9 -0
- package/docs/samples/movies-rels.csv +8 -0
- package/docs/samples/networks.cys +0 -0
- package/docs/samples/proteins.xgmml +9 -0
- package/docs/samples/teams.gv +24 -0
- package/docs/samples/vehicles.obo +25 -0
- package/package.json +9 -4
- package/src/children.ts +18 -6
- package/src/common/attributes.ts +29 -11
- package/src/common/cell-budget.ts +11 -3
- package/src/common/choose.ts +89 -0
- package/src/common/codes.ts +490 -66
- package/src/common/compare.ts +472 -0
- package/src/common/cx-export.ts +432 -0
- package/src/common/declared-types.ts +40 -6
- package/src/common/direction.ts +78 -51
- package/src/common/escape.ts +39 -22
- package/src/common/export.ts +284 -47
- package/src/common/format.ts +30 -1
- package/src/common/ids.ts +14 -3
- package/src/common/input.ts +1057 -134
- package/src/common/json-elements.ts +1035 -199
- package/src/common/line-format.ts +249 -0
- package/src/common/lists.ts +7 -2
- package/src/common/ontology-export.ts +461 -0
- package/src/common/ontology.ts +31 -9
- package/src/common/options.ts +110 -15
- package/src/common/plural.ts +49 -0
- package/src/common/report.ts +168 -25
- package/src/common/temporal.ts +22 -5
- package/src/common/text.ts +62 -23
- package/src/common/weights.ts +74 -4
- package/src/common/writer.ts +37 -3
- package/src/common/xml.ts +479 -90
- package/src/common/zip.ts +169 -7
- package/src/formats/csv/exporter.ts +202 -47
- package/src/formats/csv/header.ts +50 -11
- package/src/formats/csv/importer.ts +1133 -245
- package/src/formats/csv/index.ts +106 -19
- package/src/formats/csv/records.ts +396 -122
- package/src/formats/csv/values.ts +1 -0
- package/src/formats/cx/exporter.ts +1483 -0
- package/src/formats/cx/importer.ts +890 -302
- package/src/formats/cx/index.ts +4 -3
- package/src/formats/cx2/exporter.ts +62 -339
- package/src/formats/cx2/importer.ts +318 -87
- package/src/formats/cx2/index.ts +2 -1
- package/src/formats/cys/constants.ts +62 -17
- package/src/formats/cys/exporter.ts +1368 -0
- package/src/formats/cys/importer.ts +659 -157
- package/src/formats/cys/index.ts +4 -2
- package/src/formats/cys/session.ts +142 -34
- package/src/formats/cys/tables.ts +47 -9
- package/src/formats/dot/exporter.ts +83 -37
- package/src/formats/dot/importer.ts +248 -54
- package/src/formats/dot/index.ts +2 -1
- package/src/formats/dot/names.ts +44 -11
- package/src/formats/dot/tokenizer.ts +25 -6
- package/src/formats/gexf/exporter.ts +57 -18
- package/src/formats/gexf/importer.ts +636 -105
- package/src/formats/gexf/index.ts +90 -21
- package/src/formats/gexf/schema.ts +67 -15
- package/src/formats/gml/exporter.ts +90 -36
- package/src/formats/gml/importer.ts +388 -67
- package/src/formats/gml/index.ts +85 -24
- package/src/formats/gml/syntax.ts +113 -28
- package/src/formats/graphml/constants.ts +178 -44
- package/src/formats/graphml/exporter.ts +52 -18
- package/src/formats/graphml/importer.ts +640 -60
- package/src/formats/graphml/index.ts +2 -1
- package/src/formats/graphml/tree.ts +6 -2
- package/src/formats/graphml/yfiles.ts +37 -15
- package/src/formats/json/dialect.ts +128 -29
- package/src/formats/json/exporter.ts +205 -68
- package/src/formats/json/importer.ts +1163 -253
- package/src/formats/json/index.ts +3 -1
- package/src/formats/json/obographs-export.ts +1197 -0
- package/src/formats/json/obographs.ts +353 -92
- package/src/formats/neo4j/exporter.ts +321 -102
- package/src/formats/neo4j/header.ts +44 -6
- package/src/formats/neo4j/importer.ts +512 -73
- package/src/formats/neo4j/index.ts +75 -23
- package/src/formats/obo/exporter.ts +2210 -0
- package/src/formats/obo/importer.ts +622 -109
- package/src/formats/obo/index.ts +6 -3
- package/src/formats/obo/syntax.ts +232 -37
- package/src/formats/pajek/exporter.ts +90 -42
- package/src/formats/pajek/importer.ts +407 -93
- package/src/formats/pajek/index.ts +2 -1
- package/src/formats/pajek/syntax.ts +216 -55
- package/src/formats/xgmml/columns.ts +10 -0
- package/src/formats/xgmml/constants.ts +183 -56
- package/src/formats/xgmml/document.ts +212 -34
- package/src/formats/xgmml/emit.ts +175 -34
- package/src/formats/xgmml/exporter.ts +36 -28
- package/src/formats/xgmml/importer.ts +64 -86
- package/src/formats/xgmml/index.ts +1 -0
- package/src/formats/xgmml/values.ts +12 -4
- package/src/index.ts +81 -11
- package/src/registry.ts +1121 -135
- package/src/sniff.ts +163 -32
- package/src/types.ts +385 -114
- package/dist/chunks/escape-B-tkk_Cl.js.map +0 -1
- package/dist/chunks/export-Bh60Dv-n.js +0 -582
- package/dist/chunks/export-Bh60Dv-n.js.map +0 -1
- package/dist/chunks/exporter-BGrsWamJ.js.map +0 -1
- package/dist/chunks/exporter-DIeGJXAZ.js.map +0 -1
- package/dist/chunks/importer-BWY2FFc5.js.map +0 -1
- package/dist/chunks/importer-DD-xv9_Y.js +0 -1471
- package/dist/chunks/importer-DD-xv9_Y.js.map +0 -1
- package/dist/chunks/importer-DET1tg6s.js.map +0 -1
- package/dist/chunks/importer-DEcKhsmQ.js +0 -1614
- package/dist/chunks/importer-DEcKhsmQ.js.map +0 -1
- package/dist/chunks/importer-DIrbbnAf.js.map +0 -1
- package/dist/chunks/importer-D_e7e7LX.js.map +0 -1
- package/dist/chunks/importer-eUREhBGj.js.map +0 -1
- package/dist/chunks/importer-vi3bSdtw.js.map +0 -1
- package/dist/chunks/importer-zGLo8Dg_.js.map +0 -1
- package/dist/chunks/json-elements-DDS8N2Dd.js +0 -779
- package/dist/chunks/json-elements-DDS8N2Dd.js.map +0 -1
- package/dist/chunks/ontology-BnrJ4I98.js +0 -113
- package/dist/chunks/ontology-BnrJ4I98.js.map +0 -1
- package/dist/chunks/records-dbRkxwaq.js.map +0 -1
- package/dist/chunks/report-B1z4WT9e.js +0 -2372
- package/dist/chunks/report-B1z4WT9e.js.map +0 -1
- package/dist/chunks/text-Dr0Ifpag.js.map +0 -1
- package/dist/chunks/weights-Dzba96G3.js +0 -176
- package/dist/chunks/weights-Dzba96G3.js.map +0 -1
- package/dist/chunks/writer-C7flM-Ih.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `@graphty/graph-io/pajek` subpath
|
|
2
|
+
* The `@graphty/graph-io/pajek` subpath: the Pajek NET importer and exporter
|
|
3
3
|
* with their option types and issue / loss codes.
|
|
4
|
+
* @module @graphty/graph-io/pajek
|
|
4
5
|
*/
|
|
5
6
|
|
|
6
7
|
export { PAJEK_LOSS, pajekExporter, type PajekExportOptions } from "./exporter.js";
|
|
@@ -8,36 +8,64 @@
|
|
|
8
8
|
* `&#dddd;` character references of labels, and the column names both sides agree on.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* The node column holding the vertex label (role label).
|
|
13
|
+
* @category Plugin helpers
|
|
14
|
+
*/
|
|
12
15
|
export const LABEL_COLUMN = "label";
|
|
13
16
|
|
|
14
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* The node column holding the vertex coordinates (role position, f32 x 3, units "file").
|
|
19
|
+
* @category Plugin helpers
|
|
20
|
+
*/
|
|
15
21
|
export const POSITION_COLUMN = "position";
|
|
16
22
|
|
|
17
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* The node column holding the vertex shape keyword (dict, no role: Pajek has its own keyword set).
|
|
25
|
+
* @category Plugin helpers
|
|
26
|
+
*/
|
|
18
27
|
export const SHAPE_COLUMN = "shape";
|
|
19
28
|
|
|
20
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* The edge column holding the relation name of a `*Arcs :k "name"` section (dict).
|
|
31
|
+
* @category Plugin helpers
|
|
32
|
+
*/
|
|
21
33
|
export const RELATION_COLUMN = "relation";
|
|
22
34
|
|
|
23
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* The node or edge column holding Pajek time intervals (list of f64 pairs, role spells).
|
|
37
|
+
* @category Plugin helpers
|
|
38
|
+
*/
|
|
24
39
|
export const SPELLS_COLUMN = "spells";
|
|
25
40
|
|
|
26
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* The edge column holding the line value when `weightFrom` names another field or null.
|
|
43
|
+
* @category Plugin helpers
|
|
44
|
+
*/
|
|
27
45
|
export const VALUE_COLUMN = "value";
|
|
28
46
|
|
|
29
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* The `weightFrom` default: Pajek's third column is the line value (design section 8.4).
|
|
49
|
+
* @category Plugin helpers
|
|
50
|
+
*/
|
|
30
51
|
export const VALUE_FIELD = "value";
|
|
31
52
|
|
|
32
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* The node column holding the values of a `*Partition` object (i32).
|
|
55
|
+
* @category Plugin helpers
|
|
56
|
+
*/
|
|
33
57
|
export const PARTITION_COLUMN = "partition";
|
|
34
58
|
|
|
35
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* The node column holding the values of a `*Vector` object (f64).
|
|
61
|
+
* @category Plugin helpers
|
|
62
|
+
*/
|
|
36
63
|
export const VECTOR_COLUMN = "vector";
|
|
37
64
|
|
|
38
65
|
/**
|
|
39
66
|
* The vertex shape keywords of the Pajek manual, lower-cased; a file may write them in any case
|
|
40
67
|
* (use isShapeKeyword()).
|
|
68
|
+
* @category Plugin helpers
|
|
41
69
|
*/
|
|
42
70
|
export const SHAPES: ReadonlySet<string> = new Set([
|
|
43
71
|
"ellipse",
|
|
@@ -55,6 +83,7 @@ export const SHAPES: ReadonlySet<string> = new Set([
|
|
|
55
83
|
* Whether a token is a vertex shape keyword, in any case (`Ellipse`, `BOX`).
|
|
56
84
|
* @param token - the token
|
|
57
85
|
* @returns true for a shape keyword
|
|
86
|
+
* @category Plugin helpers
|
|
58
87
|
*/
|
|
59
88
|
export function isShapeKeyword(token: string): boolean {
|
|
60
89
|
return SHAPES.has(token.toLowerCase());
|
|
@@ -77,10 +106,14 @@ type SectionKind =
|
|
|
77
106
|
* The parameter key the exporter writes a node's original id under when `sanitizeIds: "mangle"`
|
|
78
107
|
* renumbers it (design section 8.5: the exporter names the attribute, `restoreMangledIds` reads
|
|
79
108
|
* it back); a user column of that name is reserved under "mangle".
|
|
109
|
+
* @category Plugin helpers
|
|
80
110
|
*/
|
|
81
111
|
export const ORIGINAL_ID_KEY = "graphty_originalId";
|
|
82
112
|
|
|
83
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* A parsed section header line.
|
|
115
|
+
* @category Plugin helpers
|
|
116
|
+
*/
|
|
84
117
|
export interface SectionHeader {
|
|
85
118
|
/** The section kind. */
|
|
86
119
|
readonly kind: SectionKind;
|
|
@@ -114,60 +147,156 @@ const INTEGER_TEXT = /^[+-]?[0-9]+$/;
|
|
|
114
147
|
const TIME_POINT =
|
|
115
148
|
/^(\*|[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?)(?:-(\*|[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?))?$/;
|
|
116
149
|
|
|
150
|
+
/**
|
|
151
|
+
* What tokenize() noticed in a line beyond its tokens, for the importer to report.
|
|
152
|
+
* @category Plugin helpers
|
|
153
|
+
*/
|
|
154
|
+
export interface TokenNotes {
|
|
155
|
+
/** A double quote in the middle of a token (`ab"c d"e`, a CSV-style doubled `""`): removed, the parts joined. */
|
|
156
|
+
oddQuote: boolean;
|
|
157
|
+
}
|
|
158
|
+
|
|
117
159
|
/**
|
|
118
160
|
* Split one line into tokens: runs of non-whitespace, with double quotes grouping whitespace
|
|
119
161
|
* into one token and removed from it (the shlex rule NetworkX applies; Pajek has no escapes, so a
|
|
120
162
|
* quote never appears inside a token). An empty quoted string `""` is one empty token. A token
|
|
121
163
|
* that starts with `[` runs to the next `]` whatever whitespace it holds (when no other `[` comes
|
|
122
|
-
* first), so a time set written `[ 1, 3 ]` is one token.
|
|
164
|
+
* first), so a time set written `[ 1, 3 ]` is one token. A `%` mid-line is data (`2 %b` is a
|
|
165
|
+
* label): Pajek's comments are whole lines, which the caller skips before tokenizing.
|
|
123
166
|
* @param line - the line without its terminator
|
|
167
|
+
* @param notes - when given, set to what the line held beyond its tokens
|
|
124
168
|
* @returns the tokens, or null when a quote is not closed before the end of the line
|
|
169
|
+
* @category Plugin helpers
|
|
125
170
|
*/
|
|
126
|
-
export function tokenize(line: string): string[] | null {
|
|
127
|
-
const tokens
|
|
128
|
-
let
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
171
|
+
export function tokenize(line: string, notes?: TokenNotes): string[] | null {
|
|
172
|
+
const tokens = new LineTokens(line, notes);
|
|
173
|
+
let i = 0;
|
|
174
|
+
while (i < line.length) {
|
|
175
|
+
i = tokens.step(i);
|
|
176
|
+
}
|
|
177
|
+
return tokens.finish();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** The state of tokenize() along one line. */
|
|
181
|
+
class LineTokens {
|
|
182
|
+
private readonly tokens: string[] = [];
|
|
183
|
+
|
|
184
|
+
private current = "";
|
|
185
|
+
|
|
186
|
+
private started = false;
|
|
187
|
+
|
|
188
|
+
private quoted = false;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Start a line.
|
|
192
|
+
* @param line - the line
|
|
193
|
+
* @param notes - set to what the line holds beyond its tokens, when given
|
|
194
|
+
*/
|
|
195
|
+
constructor(
|
|
196
|
+
private readonly line: string,
|
|
197
|
+
private readonly notes: TokenNotes | undefined,
|
|
198
|
+
) {}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Read the character at `i`.
|
|
202
|
+
* @param i - its index
|
|
203
|
+
* @returns the index of the next character to read
|
|
204
|
+
*/
|
|
205
|
+
step(i: number): number {
|
|
206
|
+
const c = this.line.codePointAt(i);
|
|
133
207
|
if (c === 34) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
continue;
|
|
208
|
+
this.quote(i);
|
|
209
|
+
return i + 1;
|
|
137
210
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
i = close;
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
211
|
+
const close = !this.quoted && !this.started && c === 91 ? this.intervalEnd(i) : -1;
|
|
212
|
+
if (close > 0) {
|
|
213
|
+
this.current += this.line.slice(i, close + 1);
|
|
214
|
+
this.started = true;
|
|
215
|
+
return close + 1;
|
|
146
216
|
}
|
|
147
|
-
if (!quoted && (c
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
current = "";
|
|
151
|
-
started = false;
|
|
152
|
-
}
|
|
153
|
-
continue;
|
|
217
|
+
if (!this.quoted && isBlank(c)) {
|
|
218
|
+
this.endToken();
|
|
219
|
+
return i + 1;
|
|
154
220
|
}
|
|
155
|
-
current += line[i];
|
|
156
|
-
started = true;
|
|
221
|
+
this.current += this.line[i];
|
|
222
|
+
this.started = true;
|
|
223
|
+
return i + 1;
|
|
157
224
|
}
|
|
158
|
-
|
|
159
|
-
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The tokens of the line.
|
|
228
|
+
* @returns them, or null when a quote is not closed
|
|
229
|
+
*/
|
|
230
|
+
finish(): string[] | null {
|
|
231
|
+
if (this.quoted) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
this.endToken();
|
|
235
|
+
return this.tokens;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Open or close a quote. One that opens inside a token, or closes with more of the token after
|
|
240
|
+
* it, is noted.
|
|
241
|
+
* @param i - the quote's index
|
|
242
|
+
*/
|
|
243
|
+
private quote(i: number): void {
|
|
244
|
+
const next = this.line.codePointAt(i + 1);
|
|
245
|
+
const joined = this.quoted ? i + 1 < this.line.length && !isBlank(next) : this.started;
|
|
246
|
+
if (joined && this.notes !== undefined) {
|
|
247
|
+
this.notes.oddQuote = true;
|
|
248
|
+
}
|
|
249
|
+
this.quoted = !this.quoted;
|
|
250
|
+
this.started = true;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Where a `[` that starts a token is closed, when no other `[` comes first.
|
|
255
|
+
* @param i - the index of the `[`
|
|
256
|
+
* @returns the index of its `]`, or -1
|
|
257
|
+
*/
|
|
258
|
+
private intervalEnd(i: number): number {
|
|
259
|
+
const close = this.line.indexOf("]", i);
|
|
260
|
+
return close > i && this.line.lastIndexOf("[", close) === i ? close : -1;
|
|
160
261
|
}
|
|
161
|
-
|
|
162
|
-
|
|
262
|
+
|
|
263
|
+
/** End the token being read, if any. */
|
|
264
|
+
private endToken(): void {
|
|
265
|
+
if (this.started) {
|
|
266
|
+
this.tokens.push(this.current);
|
|
267
|
+
this.current = "";
|
|
268
|
+
this.started = false;
|
|
269
|
+
}
|
|
163
270
|
}
|
|
164
|
-
return tokens;
|
|
165
271
|
}
|
|
166
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Whether a character code is the whitespace that separates tokens.
|
|
275
|
+
* @param c - the char code
|
|
276
|
+
* @returns true for space, tab, CR, form feed or vertical tab
|
|
277
|
+
*/
|
|
278
|
+
function isBlank(c: number | undefined): boolean {
|
|
279
|
+
return c === 32 || c === 9 || c === 13 || c === 12 || c === 11;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Whether an unsupported section keyword is a project-file object (`*Permutation`, `*Cluster`,
|
|
284
|
+
* `*Hierarchy`), whose next line is its own `*Vertices N`, never the network's.
|
|
285
|
+
* @param keyword - the keyword as written
|
|
286
|
+
* @returns true for a project object
|
|
287
|
+
* @category Plugin helpers
|
|
288
|
+
*/
|
|
289
|
+
export function isProjectObject(keyword: string): boolean {
|
|
290
|
+
return PROJECT_OBJECTS.has(keyword.toLowerCase());
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const PROJECT_OBJECTS: ReadonlySet<string> = new Set(["permutation", "cluster", "hierarchy"]);
|
|
294
|
+
|
|
167
295
|
/**
|
|
168
296
|
* Whether a line is a Pajek comment (`%` first) or blank.
|
|
169
297
|
* @param line - the line
|
|
170
298
|
* @returns true when the importer skips it
|
|
299
|
+
* @category Plugin helpers
|
|
171
300
|
*/
|
|
172
301
|
export function isCommentOrBlank(line: string): boolean {
|
|
173
302
|
for (let i = 0; i < line.length; i++) {
|
|
@@ -184,6 +313,7 @@ export function isCommentOrBlank(line: string): boolean {
|
|
|
184
313
|
* Whether a line starts a section (`*` first, after optional whitespace).
|
|
185
314
|
* @param line - the line
|
|
186
315
|
* @returns true for a header line
|
|
316
|
+
* @category Plugin helpers
|
|
187
317
|
*/
|
|
188
318
|
export function isSectionLine(line: string): boolean {
|
|
189
319
|
for (let i = 0; i < line.length; i++) {
|
|
@@ -202,6 +332,7 @@ export function isSectionLine(line: string): boolean {
|
|
|
202
332
|
* lands in `extra` so the importer can report it instead of dropping it.
|
|
203
333
|
* @param line - a line isSectionLine() accepted
|
|
204
334
|
* @returns the header, or null when the line has no keyword or a quote is unbalanced
|
|
335
|
+
* @category Plugin helpers
|
|
205
336
|
*/
|
|
206
337
|
export function parseSectionHeader(line: string): SectionHeader | null {
|
|
207
338
|
const tokens = tokenize(line.trimStart().slice(1));
|
|
@@ -267,6 +398,7 @@ export function parseSectionHeader(line: string): SectionHeader | null {
|
|
|
267
398
|
* Whether a token is a Pajek integer (a vertex number, a count), without sign.
|
|
268
399
|
* @param token - the token
|
|
269
400
|
* @returns true for one or more ASCII digits
|
|
401
|
+
* @category Plugin helpers
|
|
270
402
|
*/
|
|
271
403
|
export function isVertexNumber(token: string): boolean {
|
|
272
404
|
if (token.length === 0) {
|
|
@@ -285,6 +417,7 @@ export function isVertexNumber(token: string): boolean {
|
|
|
285
417
|
* Whether a token is a time interval list `[...]`.
|
|
286
418
|
* @param token - the token
|
|
287
419
|
* @returns true when it starts with `[` and ends with `]`
|
|
420
|
+
* @category Plugin helpers
|
|
288
421
|
*/
|
|
289
422
|
export function isIntervalToken(token: string): boolean {
|
|
290
423
|
return token.length >= 2 && token.startsWith("[") && token.endsWith("]");
|
|
@@ -296,6 +429,7 @@ export function isIntervalToken(token: string): boolean {
|
|
|
296
429
|
* around the parts are ignored and an empty `[]` is no spell at all.
|
|
297
430
|
* @param token - a token isIntervalToken() accepted
|
|
298
431
|
* @returns the spells as [start, end] pairs (empty for `[]`)
|
|
432
|
+
* @category Plugin helpers
|
|
299
433
|
*/
|
|
300
434
|
export function parseIntervals(token: string): [number, number][] {
|
|
301
435
|
const body = token.slice(1, -1);
|
|
@@ -304,12 +438,15 @@ export function parseIntervals(token: string): [number, number][] {
|
|
|
304
438
|
}
|
|
305
439
|
const spells: [number, number][] = [];
|
|
306
440
|
for (const part of body.split(",")) {
|
|
307
|
-
const match = TIME_POINT.exec(part.
|
|
441
|
+
const match = TIME_POINT.exec(part.replaceAll(/\s+/g, ""));
|
|
308
442
|
if (match === null) {
|
|
309
443
|
throw new Error(`malformed time interval ${token}: "${part}" is not a-b, a-* or a`);
|
|
310
444
|
}
|
|
311
|
-
const
|
|
312
|
-
|
|
445
|
+
const [, startText, endText] = match;
|
|
446
|
+
if (startText === "*" && endText === undefined) {
|
|
447
|
+
throw new Error(`malformed time interval ${token}: "*" alone is not a time point`);
|
|
448
|
+
}
|
|
449
|
+
const start = startText === "*" ? -Infinity : Number(startText);
|
|
313
450
|
let end: number;
|
|
314
451
|
if (endText === undefined) {
|
|
315
452
|
end = start;
|
|
@@ -318,29 +455,43 @@ export function parseIntervals(token: string): [number, number][] {
|
|
|
318
455
|
} else {
|
|
319
456
|
end = Number(endText);
|
|
320
457
|
}
|
|
458
|
+
// only `*` means an open end: a numeral beyond the f64 range is not a time
|
|
459
|
+
if (
|
|
460
|
+
(startText !== "*" && !Number.isFinite(start)) ||
|
|
461
|
+
(endText !== undefined && endText !== "*" && !Number.isFinite(end))
|
|
462
|
+
) {
|
|
463
|
+
throw new Error(`malformed time interval ${token}: "${part}" is beyond the number range`);
|
|
464
|
+
}
|
|
321
465
|
if (start > end) {
|
|
322
|
-
throw new Error(`malformed time interval ${token}: ${
|
|
466
|
+
throw new Error(`malformed time interval ${token}: ${startText} is after ${endText ?? ""}`);
|
|
323
467
|
}
|
|
324
468
|
spells.push([start, end]);
|
|
325
469
|
}
|
|
326
470
|
return spells;
|
|
327
471
|
}
|
|
328
472
|
|
|
329
|
-
|
|
473
|
+
// any length, so a reference beyond U+10FFFF is seen (and kept as written with a warning)
|
|
474
|
+
const CHARACTER_REFERENCE = /&#(?:[xX]([\da-fA-F]+)|(\d+));/g;
|
|
330
475
|
|
|
331
476
|
/**
|
|
332
477
|
* Decode the `&#dddd;` and `&#xhhhh;` character references of a label, as Pajek does; a reference
|
|
333
|
-
* outside the Unicode range is left as written
|
|
478
|
+
* outside the Unicode range is left as written and handed to `onUnknown`.
|
|
334
479
|
* @param text - the label as written
|
|
480
|
+
* @param onUnknown - called with each reference left as written, when given
|
|
335
481
|
* @returns the decoded label
|
|
482
|
+
* @category Plugin helpers
|
|
336
483
|
*/
|
|
337
|
-
export function decodeCharacterReferences(text: string): string {
|
|
484
|
+
export function decodeCharacterReferences(text: string, onUnknown?: (reference: string) => void): string {
|
|
338
485
|
if (!text.includes("&#")) {
|
|
339
486
|
return text;
|
|
340
487
|
}
|
|
341
|
-
return text.
|
|
488
|
+
return text.replaceAll(CHARACTER_REFERENCE, (whole, hex: string | undefined, dec: string | undefined) => {
|
|
342
489
|
const code = hex === undefined ? Number(dec) : Number.parseInt(hex, 16);
|
|
343
|
-
|
|
490
|
+
if (code <= 0x10ffff) {
|
|
491
|
+
return String.fromCodePoint(code);
|
|
492
|
+
}
|
|
493
|
+
onUnknown?.(whole);
|
|
494
|
+
return whole;
|
|
344
495
|
});
|
|
345
496
|
}
|
|
346
497
|
|
|
@@ -349,18 +500,20 @@ export function decodeCharacterReferences(text: string): string {
|
|
|
349
500
|
* `&#...;` run is written as `&`, the inverse of decodeCharacterReferences().
|
|
350
501
|
* @param text - the label text
|
|
351
502
|
* @returns the text to write
|
|
503
|
+
* @category Plugin helpers
|
|
352
504
|
*/
|
|
353
505
|
export function encodeCharacterReferences(text: string): string {
|
|
354
506
|
if (!text.includes("&#")) {
|
|
355
507
|
return text;
|
|
356
508
|
}
|
|
357
|
-
return text.
|
|
509
|
+
return text.replaceAll(CHARACTER_REFERENCE, (whole) => `&${whole.slice(1)}`);
|
|
358
510
|
}
|
|
359
511
|
|
|
360
512
|
/**
|
|
361
513
|
* Write spells as a Pajek time interval token, the inverse of parseIntervals().
|
|
362
514
|
* @param spells - [start, end] pairs
|
|
363
515
|
* @returns the token, e.g. `[1-5,7-*]`
|
|
516
|
+
* @category Plugin helpers
|
|
364
517
|
*/
|
|
365
518
|
export function formatIntervals(spells: readonly (readonly [number, number])[]): string {
|
|
366
519
|
const parts: string[] = [];
|
|
@@ -381,13 +534,21 @@ export function formatIntervals(spells: readonly (readonly [number, number])[]):
|
|
|
381
534
|
* coordinate, at the third position of a line row the value) and not a shape keyword.
|
|
382
535
|
* @param text - the candidate key (a column name)
|
|
383
536
|
* @returns true when the importer reads it back as a key
|
|
537
|
+
* @category Plugin helpers
|
|
384
538
|
*/
|
|
385
539
|
export function isParameterKey(text: string): boolean {
|
|
386
|
-
if (
|
|
540
|
+
if (
|
|
541
|
+
text.length === 0 ||
|
|
542
|
+
/[\s"]/.test(text) ||
|
|
543
|
+
text.startsWith("[") ||
|
|
544
|
+
text.startsWith("*") ||
|
|
545
|
+
text.startsWith("%")
|
|
546
|
+
) {
|
|
387
547
|
return false;
|
|
388
548
|
}
|
|
389
549
|
if (isShapeKeyword(text)) {
|
|
390
550
|
return false;
|
|
391
551
|
}
|
|
392
|
-
|
|
552
|
+
// a number, or a non-finite spelling, at that place reads as a coordinate or the line value
|
|
553
|
+
return !/^[+-]?(\.\d|\d)/.test(text) && !/^[+-]?(?:nan|inf|infinity)$/i.test(text);
|
|
393
554
|
}
|
|
@@ -76,6 +76,7 @@ const DTYPES: Readonly<Record<ScalarKind, ScalarDtype>> = {
|
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* Collects the attribute values of one table, then declares and writes the columns.
|
|
79
|
+
* @category Plugin helpers
|
|
79
80
|
*/
|
|
80
81
|
export class ColumnSet {
|
|
81
82
|
private readonly domain: Domain;
|
|
@@ -326,6 +327,15 @@ export class ColumnSet {
|
|
|
326
327
|
return jsonCell(names.size > 1 ? recordOf(att) : children.map(jsonOfAtt));
|
|
327
328
|
}
|
|
328
329
|
let itemKind = elementKind(att.elementType);
|
|
330
|
+
if (itemKind === null && att.elementType !== null && att.elementType.trim().length > 0) {
|
|
331
|
+
this.report.warnOnce(
|
|
332
|
+
"unsupported",
|
|
333
|
+
XGMML_ISSUE.UNKNOWN_ATTR_TYPE,
|
|
334
|
+
`list element type "${att.elementType}" of "${name}" is not a Cytoscape type; the items are read by their own types`,
|
|
335
|
+
at,
|
|
336
|
+
`${XGMML_ISSUE.UNKNOWN_ATTR_TYPE}:${this.domain}:${name}:items`,
|
|
337
|
+
);
|
|
338
|
+
}
|
|
329
339
|
if (itemKind === null) {
|
|
330
340
|
const kinds = new Set<ScalarKind>();
|
|
331
341
|
for (const child of children) {
|