@graphty/graph-io 0.3.42 → 0.3.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/approximations-3Q4TsdTh.js +40 -0
- package/dist/chunks/approximations-3Q4TsdTh.js.map +1 -0
- package/dist/chunks/block-JQiwViEt.js +2777 -0
- package/dist/chunks/block-JQiwViEt.js.map +1 -0
- package/dist/chunks/{choose-DvpbdRuz.js → choose-BemygfH8.js} +3 -2
- package/dist/chunks/{choose-DvpbdRuz.js.map → choose-BemygfH8.js.map} +1 -1
- package/dist/chunks/{constants-fT3E8JYY.js → constants-BFUR_CtU.js} +6 -2
- package/dist/chunks/constants-BFUR_CtU.js.map +1 -0
- package/dist/chunks/convert-BcQ8_jMo.js +59 -0
- package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
- package/dist/chunks/emit-DCwFLts5.js +3456 -0
- package/dist/chunks/emit-DCwFLts5.js.map +1 -0
- package/dist/chunks/{escape-B62ZGM_a.js → escape-B1rMftd9.js} +43 -20
- package/dist/chunks/escape-B1rMftd9.js.map +1 -0
- package/dist/chunks/{export-rKLeGQMo.js → export-D7IGzTG4.js} +196 -792
- package/dist/chunks/export-D7IGzTG4.js.map +1 -0
- package/dist/chunks/{exporter-BWwEuOPT.js → exporter-BtnqYuuj.js} +22 -12
- package/dist/chunks/exporter-BtnqYuuj.js.map +1 -0
- package/dist/chunks/{exporter-yLxKBvLE.js → exporter-ChPyhBOv.js} +4 -3
- package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter-ChPyhBOv.js.map} +1 -1
- package/dist/chunks/{exporter-8hLNemFk.js → exporter-KEPxYUXD.js} +133 -74
- package/dist/chunks/exporter-KEPxYUXD.js.map +1 -0
- package/dist/chunks/{exporter-CpRyHZ3H.js → exporter-quPUCBiC.js} +1807 -288
- package/dist/chunks/exporter-quPUCBiC.js.map +1 -0
- package/dist/chunks/format-GDmO6m6Q.js +676 -0
- package/dist/chunks/format-GDmO6m6Q.js.map +1 -0
- package/dist/chunks/generic-BL06jrJf.js +1347 -0
- package/dist/chunks/generic-BL06jrJf.js.map +1 -0
- package/dist/chunks/{importer-WrGRZb0N.js → importer-B7r2owVf.js} +449 -102
- package/dist/chunks/importer-B7r2owVf.js.map +1 -0
- package/dist/chunks/{importer-Ht7LNg8L.js → importer-BFmOP96W.js} +116 -296
- package/dist/chunks/importer-BFmOP96W.js.map +1 -0
- package/dist/chunks/{importer-BbNb7eNg.js → importer-C2nzGhdV.js} +1390 -129
- package/dist/chunks/importer-C2nzGhdV.js.map +1 -0
- package/dist/chunks/{importer-Dz7tI8Sa.js → importer-CbX2_rNF.js} +617 -115
- package/dist/chunks/importer-CbX2_rNF.js.map +1 -0
- package/dist/chunks/{importer-D794XUTe.js → importer-CdzeN6X4.js} +31 -8
- package/dist/chunks/importer-CdzeN6X4.js.map +1 -0
- package/dist/chunks/{importer-xZ-3suY1.js → importer-ChKNC_GN.js} +791 -135
- package/dist/chunks/importer-ChKNC_GN.js.map +1 -0
- package/dist/chunks/{importer-C98dpSH4.js → importer-dwoYpSqb.js} +141 -82
- package/dist/chunks/importer-dwoYpSqb.js.map +1 -0
- package/dist/chunks/index-B9fdNpTA.js +4310 -0
- package/dist/chunks/index-B9fdNpTA.js.map +1 -0
- package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-C4FwgnH5.js} +123 -32
- package/dist/chunks/json-elements-C4FwgnH5.js.map +1 -0
- package/dist/chunks/lexicon-B-knUi-l.js +508 -0
- package/dist/chunks/lexicon-B-knUi-l.js.map +1 -0
- package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-BSpbY5FL.js} +3 -2
- package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-BSpbY5FL.js.map} +1 -1
- package/dist/chunks/{records-Cu4bxYOm.js → records-Nwz_rbNt.js} +2 -2
- package/dist/chunks/{records-Cu4bxYOm.js.map → records-Nwz_rbNt.js.map} +1 -1
- package/dist/chunks/styles-Brt9JMfs.js +690 -0
- package/dist/chunks/styles-Brt9JMfs.js.map +1 -0
- package/dist/chunks/styles-_N-C8S-U.js +2102 -0
- package/dist/chunks/styles-_N-C8S-U.js.map +1 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js +842 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js.map +1 -0
- package/dist/chunks/{text-DHOJXnED.js → text-CgzMqHQb.js} +2 -2
- package/dist/chunks/{text-DHOJXnED.js.map → text-CgzMqHQb.js.map} +1 -1
- package/dist/chunks/units-XMZFIFe1.js +19 -0
- package/dist/chunks/units-XMZFIFe1.js.map +1 -0
- package/dist/csv.js +5 -4
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +1 -1
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +5 -2
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +295 -414
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +8 -3031
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +354 -240
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +4 -2
- package/dist/graphml.js.map +1 -1
- package/dist/json.js +1 -1
- package/dist/neo4j.js +4 -3
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +1 -1
- package/dist/pajek.js +4 -2
- package/dist/positions.d.ts +1 -0
- package/dist/positions.js +427 -0
- package/dist/positions.js.map +1 -0
- package/dist/src/common/codes.d.ts +6 -0
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +6 -0
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/escape.d.ts.map +1 -1
- package/dist/src/common/escape.js +4 -2
- package/dist/src/common/escape.js.map +1 -1
- package/dist/src/common/export.d.ts +10 -0
- package/dist/src/common/export.d.ts.map +1 -1
- package/dist/src/common/export.js +123 -100
- package/dist/src/common/export.js.map +1 -1
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +8 -1
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/json-elements.d.ts +12 -9
- package/dist/src/common/json-elements.d.ts.map +1 -1
- package/dist/src/common/json-elements.js +160 -37
- package/dist/src/common/json-elements.js.map +1 -1
- package/dist/src/common/notes.d.ts +42 -0
- package/dist/src/common/notes.d.ts.map +1 -0
- package/dist/src/common/notes.js +72 -0
- package/dist/src/common/notes.js.map +1 -0
- package/dist/src/common/report.d.ts +18 -0
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +36 -1
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/common/units.d.ts +24 -0
- package/dist/src/common/units.d.ts.map +1 -0
- package/dist/src/common/units.js +26 -0
- package/dist/src/common/units.js.map +1 -0
- package/dist/src/common/xml.d.ts +18 -0
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +42 -5
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/formats/cx/exporter.d.ts +6 -0
- package/dist/src/formats/cx/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx/exporter.js +71 -8
- package/dist/src/formats/cx/exporter.js.map +1 -1
- package/dist/src/formats/cx/importer.d.ts +5 -2
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +102 -72
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +102 -0
- package/dist/src/formats/cx/styles.d.ts.map +1 -0
- package/dist/src/formats/cx/styles.js +225 -0
- package/dist/src/formats/cx/styles.js.map +1 -0
- package/dist/src/formats/cx2/exporter.d.ts +5 -0
- package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx2/exporter.js +181 -71
- package/dist/src/formats/cx2/exporter.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts +4 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +19 -1
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts +18 -0
- package/dist/src/formats/cx2/styles.d.ts.map +1 -0
- package/dist/src/formats/cx2/styles.js +24 -0
- package/dist/src/formats/cx2/styles.js.map +1 -0
- package/dist/src/formats/cys/constants.d.ts +2 -0
- package/dist/src/formats/cys/constants.d.ts.map +1 -1
- package/dist/src/formats/cys/constants.js +2 -0
- package/dist/src/formats/cys/constants.js.map +1 -1
- package/dist/src/formats/cys/exporter.d.ts +6 -2
- package/dist/src/formats/cys/exporter.d.ts.map +1 -1
- package/dist/src/formats/cys/exporter.js +215 -53
- package/dist/src/formats/cys/exporter.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts +2 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +119 -6
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/session.d.ts +2 -0
- package/dist/src/formats/cys/session.d.ts.map +1 -1
- package/dist/src/formats/cys/session.js +5 -0
- package/dist/src/formats/cys/session.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +38 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -0
- package/dist/src/formats/cys/styles.js +213 -0
- package/dist/src/formats/cys/styles.js.map +1 -0
- package/dist/src/formats/cys/tables.d.ts +8 -3
- package/dist/src/formats/cys/tables.d.ts.map +1 -1
- package/dist/src/formats/cys/tables.js +88 -34
- package/dist/src/formats/cys/tables.js.map +1 -1
- package/dist/src/formats/dot/exporter.d.ts +2 -0
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +195 -81
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +100 -20
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +1 -0
- package/dist/src/formats/dot/index.d.ts.map +1 -1
- package/dist/src/formats/dot/index.js +1 -0
- package/dist/src/formats/dot/index.js.map +1 -1
- package/dist/src/formats/dot/positions.d.ts +14 -0
- package/dist/src/formats/dot/positions.d.ts.map +1 -0
- package/dist/src/formats/dot/positions.js +70 -0
- package/dist/src/formats/dot/positions.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +82 -0
- package/dist/src/formats/dot/styles.d.ts.map +1 -0
- package/dist/src/formats/dot/styles.js +1484 -0
- package/dist/src/formats/dot/styles.js.map +1 -0
- package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
- package/dist/src/formats/gexf/exporter.js +23 -7
- package/dist/src/formats/gexf/exporter.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +8 -1
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +251 -131
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/index.d.ts +8 -0
- package/dist/src/formats/gexf/index.d.ts.map +1 -1
- package/dist/src/formats/gexf/index.js +10 -2
- package/dist/src/formats/gexf/index.js.map +1 -1
- package/dist/src/formats/gexf/schema.d.ts +5 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +5 -0
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +74 -0
- package/dist/src/formats/gexf/styles.d.ts.map +1 -0
- package/dist/src/formats/gexf/styles.js +604 -0
- package/dist/src/formats/gexf/styles.js.map +1 -0
- package/dist/src/formats/gml/exporter.d.ts +1 -5
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +19 -8
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +4 -0
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +2 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +2 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +14 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -0
- package/dist/src/formats/gml/positions.js +46 -0
- package/dist/src/formats/gml/positions.js.map +1 -0
- package/dist/src/formats/gml/styles.d.ts +59 -0
- package/dist/src/formats/gml/styles.d.ts.map +1 -0
- package/dist/src/formats/gml/styles.js +1056 -0
- package/dist/src/formats/gml/styles.js.map +1 -0
- package/dist/src/formats/gml/syntax.d.ts +11 -0
- package/dist/src/formats/gml/syntax.d.ts.map +1 -1
- package/dist/src/formats/gml/syntax.js +151 -62
- package/dist/src/formats/gml/syntax.js.map +1 -1
- package/dist/src/formats/graphml/constants.d.ts +4 -0
- package/dist/src/formats/graphml/constants.d.ts.map +1 -1
- package/dist/src/formats/graphml/constants.js +5 -1
- package/dist/src/formats/graphml/constants.js.map +1 -1
- package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
- package/dist/src/formats/graphml/exporter.js +133 -65
- package/dist/src/formats/graphml/exporter.js.map +1 -1
- package/dist/src/formats/graphml/importer.d.ts +4 -1
- package/dist/src/formats/graphml/importer.d.ts.map +1 -1
- package/dist/src/formats/graphml/importer.js +100 -44
- package/dist/src/formats/graphml/importer.js.map +1 -1
- package/dist/src/formats/graphml/index.d.ts +1 -0
- package/dist/src/formats/graphml/index.d.ts.map +1 -1
- package/dist/src/formats/graphml/index.js +1 -0
- package/dist/src/formats/graphml/index.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-plain.js +187 -0
- package/dist/src/formats/graphml/styles-plain.js.map +1 -0
- package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yed.js +1086 -0
- package/dist/src/formats/graphml/styles-yed.js.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
- package/dist/src/formats/graphml/tree.d.ts.map +1 -1
- package/dist/src/formats/graphml/tree.js +34 -19
- package/dist/src/formats/graphml/tree.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +16 -2
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +83 -12
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts +5 -0
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +68 -25
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +22 -3
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +441 -265
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +16 -0
- package/dist/src/formats/json/positions.d.ts.map +1 -0
- package/dist/src/formats/json/positions.js +44 -0
- package/dist/src/formats/json/positions.js.map +1 -0
- package/dist/src/formats/json/styles.d.ts +102 -0
- package/dist/src/formats/json/styles.d.ts.map +1 -0
- package/dist/src/formats/json/styles.js +1753 -0
- package/dist/src/formats/json/styles.js.map +1 -0
- package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
- package/dist/src/formats/neo4j/exporter.js +2 -1
- package/dist/src/formats/neo4j/exporter.js.map +1 -1
- package/dist/src/formats/pajek/exporter.d.ts +2 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +142 -76
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +4 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +60 -6
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +2 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js +2 -0
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +50 -0
- package/dist/src/formats/pajek/styles.d.ts.map +1 -0
- package/dist/src/formats/pajek/styles.js +569 -0
- package/dist/src/formats/pajek/styles.js.map +1 -0
- package/dist/src/formats/pajek/syntax.d.ts +6 -0
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +6 -0
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
- package/dist/src/formats/xgmml/columns.js +34 -9
- package/dist/src/formats/xgmml/columns.js.map +1 -1
- package/dist/src/formats/xgmml/constants.d.ts +2 -0
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
- package/dist/src/formats/xgmml/constants.js +3 -1
- package/dist/src/formats/xgmml/constants.js.map +1 -1
- package/dist/src/formats/xgmml/document.d.ts +12 -8
- package/dist/src/formats/xgmml/document.d.ts.map +1 -1
- package/dist/src/formats/xgmml/document.js +56 -13
- package/dist/src/formats/xgmml/document.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +12 -6
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/exporter.d.ts +3 -1
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
- package/dist/src/formats/xgmml/exporter.js +22 -9
- package/dist/src/formats/xgmml/exporter.js.map +1 -1
- package/dist/src/formats/xgmml/importer.d.ts +2 -1
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
- package/dist/src/formats/xgmml/importer.js +31 -24
- package/dist/src/formats/xgmml/importer.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +104 -0
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
- package/dist/src/formats/xgmml/styles.js +310 -0
- package/dist/src/formats/xgmml/styles.js.map +1 -0
- package/dist/src/index.d.ts +9 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/codes.d.ts +31 -0
- package/dist/src/positions/codes.d.ts.map +1 -0
- package/dist/src/positions/codes.js +26 -0
- package/dist/src/positions/codes.js.map +1 -0
- package/dist/src/positions/convert.d.ts +58 -0
- package/dist/src/positions/convert.d.ts.map +1 -0
- package/dist/src/positions/convert.js +107 -0
- package/dist/src/positions/convert.js.map +1 -0
- package/dist/src/positions/extract.d.ts +27 -0
- package/dist/src/positions/extract.d.ts.map +1 -0
- package/dist/src/positions/extract.js +526 -0
- package/dist/src/positions/extract.js.map +1 -0
- package/dist/src/positions/index.d.ts +10 -0
- package/dist/src/positions/index.d.ts.map +1 -0
- package/dist/src/positions/index.js +9 -0
- package/dist/src/positions/index.js.map +1 -0
- package/dist/src/positions/types.d.ts +208 -0
- package/dist/src/positions/types.d.ts.map +1 -0
- package/dist/src/positions/types.js +10 -0
- package/dist/src/positions/types.js.map +1 -0
- package/dist/src/registry.d.ts +30 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +130 -9
- package/dist/src/registry.js.map +1 -1
- package/dist/src/styles/annotations.d.ts +132 -0
- package/dist/src/styles/annotations.d.ts.map +1 -0
- package/dist/src/styles/annotations.js +320 -0
- package/dist/src/styles/annotations.js.map +1 -0
- package/dist/src/styles/budget.d.ts +45 -0
- package/dist/src/styles/budget.d.ts.map +1 -0
- package/dist/src/styles/budget.js +58 -0
- package/dist/src/styles/budget.js.map +1 -0
- package/dist/src/styles/canon/bends.d.ts +32 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -0
- package/dist/src/styles/canon/bends.js +74 -0
- package/dist/src/styles/canon/bends.js.map +1 -0
- package/dist/src/styles/canon/color-tables.d.ts +22 -0
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
- package/dist/src/styles/canon/color-tables.js +369 -0
- package/dist/src/styles/canon/color-tables.js.map +1 -0
- package/dist/src/styles/canon/color.d.ts +66 -0
- package/dist/src/styles/canon/color.d.ts.map +1 -0
- package/dist/src/styles/canon/color.js +548 -0
- package/dist/src/styles/canon/color.js.map +1 -0
- package/dist/src/styles/canon/enums.d.ts +25 -0
- package/dist/src/styles/canon/enums.d.ts.map +1 -0
- package/dist/src/styles/canon/enums.js +187 -0
- package/dist/src/styles/canon/enums.js.map +1 -0
- package/dist/src/styles/canon/graphviz.d.ts +48 -0
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
- package/dist/src/styles/canon/graphviz.js +160 -0
- package/dist/src/styles/canon/graphviz.js.map +1 -0
- package/dist/src/styles/canon/index.d.ts +13 -0
- package/dist/src/styles/canon/index.d.ts.map +1 -0
- package/dist/src/styles/canon/index.js +13 -0
- package/dist/src/styles/canon/index.js.map +1 -0
- package/dist/src/styles/canon/number.d.ts +59 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -0
- package/dist/src/styles/canon/number.js +142 -0
- package/dist/src/styles/canon/number.js.map +1 -0
- package/dist/src/styles/canon/site.d.ts +51 -0
- package/dist/src/styles/canon/site.d.ts.map +1 -0
- package/dist/src/styles/canon/site.js +63 -0
- package/dist/src/styles/canon/site.js.map +1 -0
- package/dist/src/styles/canon/text.d.ts +61 -0
- package/dist/src/styles/canon/text.d.ts.map +1 -0
- package/dist/src/styles/canon/text.js +199 -0
- package/dist/src/styles/canon/text.js.map +1 -0
- package/dist/src/styles/codes.d.ts +95 -0
- package/dist/src/styles/codes.d.ts.map +1 -0
- package/dist/src/styles/codes.js +97 -0
- package/dist/src/styles/codes.js.map +1 -0
- package/dist/src/styles/cyjs/cascade.d.ts +134 -0
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
- package/dist/src/styles/cyjs/cascade.js +2252 -0
- package/dist/src/styles/cyjs/cascade.js.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.js +76 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
- package/dist/src/styles/cyjs/emit.d.ts +82 -0
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
- package/dist/src/styles/cyjs/emit.js +790 -0
- package/dist/src/styles/cyjs/emit.js.map +1 -0
- package/dist/src/styles/cyjs/index.d.ts +13 -0
- package/dist/src/styles/cyjs/index.d.ts.map +1 -0
- package/dist/src/styles/cyjs/index.js +13 -0
- package/dist/src/styles/cyjs/index.js.map +1 -0
- package/dist/src/styles/cyjs/live.d.ts +46 -0
- package/dist/src/styles/cyjs/live.d.ts.map +1 -0
- package/dist/src/styles/cyjs/live.js +108 -0
- package/dist/src/styles/cyjs/live.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +147 -0
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
- package/dist/src/styles/cyjs/mappers.js +744 -0
- package/dist/src/styles/cyjs/mappers.js.map +1 -0
- package/dist/src/styles/cyjs/selector.d.ts +113 -0
- package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
- package/dist/src/styles/cyjs/selector.js +611 -0
- package/dist/src/styles/cyjs/selector.js.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
- package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts +125 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/emit.js +1025 -0
- package/dist/src/styles/cytoscape/emit.js.map +1 -0
- package/dist/src/styles/cytoscape/index.d.ts +10 -0
- package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/index.js +10 -0
- package/dist/src/styles/cytoscape/index.js.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.js +603 -0
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
- package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/mappings.js +460 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -0
- package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/resolve.js +381 -0
- package/dist/src/styles/cytoscape/resolve.js.map +1 -0
- package/dist/src/styles/cytoscape/translate.d.ts +50 -0
- package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/translate.js +156 -0
- package/dist/src/styles/cytoscape/translate.js.map +1 -0
- package/dist/src/styles/defaults.d.ts +90 -0
- package/dist/src/styles/defaults.d.ts.map +1 -0
- package/dist/src/styles/defaults.js +414 -0
- package/dist/src/styles/defaults.js.map +1 -0
- package/dist/src/styles/index.d.ts +15 -0
- package/dist/src/styles/index.d.ts.map +1 -0
- package/dist/src/styles/index.js +14 -0
- package/dist/src/styles/index.js.map +1 -0
- package/dist/src/styles/internal.d.ts +17 -0
- package/dist/src/styles/internal.d.ts.map +1 -0
- package/dist/src/styles/internal.js +16 -0
- package/dist/src/styles/internal.js.map +1 -0
- package/dist/src/styles/io/approximations.d.ts +24 -0
- package/dist/src/styles/io/approximations.d.ts.map +1 -0
- package/dist/src/styles/io/approximations.js +51 -0
- package/dist/src/styles/io/approximations.js.map +1 -0
- package/dist/src/styles/io/block.d.ts +166 -0
- package/dist/src/styles/io/block.d.ts.map +1 -0
- package/dist/src/styles/io/block.js +930 -0
- package/dist/src/styles/io/block.js.map +1 -0
- package/dist/src/styles/io/generic.d.ts +88 -0
- package/dist/src/styles/io/generic.d.ts.map +1 -0
- package/dist/src/styles/io/generic.js +516 -0
- package/dist/src/styles/io/generic.js.map +1 -0
- package/dist/src/styles/io/index.d.ts +8 -0
- package/dist/src/styles/io/index.d.ts.map +1 -0
- package/dist/src/styles/io/index.js +7 -0
- package/dist/src/styles/io/index.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts +80 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -0
- package/dist/src/styles/io/writer.js +596 -0
- package/dist/src/styles/io/writer.js.map +1 -0
- package/dist/src/styles/notes.d.ts +47 -0
- package/dist/src/styles/notes.d.ts.map +1 -0
- package/dist/src/styles/notes.js +140 -0
- package/dist/src/styles/notes.js.map +1 -0
- package/dist/src/styles/plan/classes.d.ts +31 -0
- package/dist/src/styles/plan/classes.d.ts.map +1 -0
- package/dist/src/styles/plan/classes.js +139 -0
- package/dist/src/styles/plan/classes.js.map +1 -0
- package/dist/src/styles/plan/continuous.d.ts +32 -0
- package/dist/src/styles/plan/continuous.d.ts.map +1 -0
- package/dist/src/styles/plan/continuous.js +165 -0
- package/dist/src/styles/plan/continuous.js.map +1 -0
- package/dist/src/styles/plan/discrete.d.ts +39 -0
- package/dist/src/styles/plan/discrete.d.ts.map +1 -0
- package/dist/src/styles/plan/discrete.js +127 -0
- package/dist/src/styles/plan/discrete.js.map +1 -0
- package/dist/src/styles/plan/families.d.ts +31 -0
- package/dist/src/styles/plan/families.d.ts.map +1 -0
- package/dist/src/styles/plan/families.js +95 -0
- package/dist/src/styles/plan/families.js.map +1 -0
- package/dist/src/styles/plan/features.d.ts +58 -0
- package/dist/src/styles/plan/features.d.ts.map +1 -0
- package/dist/src/styles/plan/features.js +185 -0
- package/dist/src/styles/plan/features.js.map +1 -0
- package/dist/src/styles/plan/index.d.ts +7 -0
- package/dist/src/styles/plan/index.d.ts.map +1 -0
- package/dist/src/styles/plan/index.js +7 -0
- package/dist/src/styles/plan/index.js.map +1 -0
- package/dist/src/styles/plan/plan.d.ts +71 -0
- package/dist/src/styles/plan/plan.d.ts.map +1 -0
- package/dist/src/styles/plan/plan.js +893 -0
- package/dist/src/styles/plan/plan.js.map +1 -0
- package/dist/src/styles/plan/resolve.d.ts +137 -0
- package/dist/src/styles/plan/resolve.d.ts.map +1 -0
- package/dist/src/styles/plan/resolve.js +587 -0
- package/dist/src/styles/plan/resolve.js.map +1 -0
- package/dist/src/styles/types.d.ts +702 -0
- package/dist/src/styles/types.d.ts.map +1 -0
- package/dist/src/styles/types.js +10 -0
- package/dist/src/styles/types.js.map +1 -0
- package/dist/src/styles/vocabulary.d.ts +41 -0
- package/dist/src/styles/vocabulary.d.ts.map +1 -0
- package/dist/src/styles/vocabulary.js +140 -0
- package/dist/src/styles/vocabulary.js.map +1 -0
- package/dist/src/types.d.ts +64 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/styles.d.ts +1 -0
- package/dist/styles.js +322 -0
- package/dist/styles.js.map +1 -0
- package/dist/xgmml.js +5 -4
- package/dist/xgmml.js.map +1 -1
- package/package.json +13 -2
- package/src/common/codes.ts +7 -0
- package/src/common/escape.ts +5 -2
- package/src/common/export.ts +179 -140
- package/src/common/input.ts +8 -4
- package/src/common/json-elements.ts +169 -38
- package/src/common/notes.ts +94 -0
- package/src/common/report.ts +41 -1
- package/src/common/units.ts +42 -0
- package/src/common/xml.ts +45 -5
- package/src/formats/cx/exporter.ts +95 -11
- package/src/formats/cx/importer.ts +126 -90
- package/src/formats/cx/styles.ts +304 -0
- package/src/formats/cx2/exporter.ts +234 -77
- package/src/formats/cx2/importer.ts +19 -1
- package/src/formats/cx2/styles.ts +29 -0
- package/src/formats/cys/constants.ts +3 -0
- package/src/formats/cys/exporter.ts +246 -60
- package/src/formats/cys/importer.ts +125 -9
- package/src/formats/cys/session.ts +6 -0
- package/src/formats/cys/styles.ts +254 -0
- package/src/formats/cys/tables.ts +117 -48
- package/src/formats/dot/exporter.ts +262 -126
- package/src/formats/dot/importer.ts +111 -20
- package/src/formats/dot/index.ts +1 -0
- package/src/formats/dot/positions.ts +77 -0
- package/src/formats/dot/styles.ts +1741 -0
- package/src/formats/gexf/exporter.ts +30 -13
- package/src/formats/gexf/importer.ts +308 -158
- package/src/formats/gexf/index.ts +10 -0
- package/src/formats/gexf/schema.ts +5 -0
- package/src/formats/gexf/styles.ts +719 -0
- package/src/formats/gml/exporter.ts +33 -14
- package/src/formats/gml/importer.ts +4 -0
- package/src/formats/gml/index.ts +2 -1
- package/src/formats/gml/positions.ts +52 -0
- package/src/formats/gml/styles.ts +1248 -0
- package/src/formats/gml/syntax.ts +173 -62
- package/src/formats/graphml/constants.ts +5 -0
- package/src/formats/graphml/exporter.ts +163 -71
- package/src/formats/graphml/importer.ts +119 -45
- package/src/formats/graphml/index.ts +1 -0
- package/src/formats/graphml/styles-plain.ts +236 -0
- package/src/formats/graphml/styles-yed.ts +1221 -0
- package/src/formats/graphml/styles-yfiles3.ts +573 -0
- package/src/formats/graphml/tree.ts +36 -20
- package/src/formats/graphml/yfiles.ts +89 -13
- package/src/formats/json/exporter.ts +76 -26
- package/src/formats/json/importer.ts +543 -323
- package/src/formats/json/positions.ts +50 -0
- package/src/formats/json/styles.ts +2082 -0
- package/src/formats/neo4j/exporter.ts +2 -1
- package/src/formats/pajek/exporter.ts +195 -106
- package/src/formats/pajek/importer.ts +78 -9
- package/src/formats/pajek/index.ts +2 -0
- package/src/formats/pajek/styles.ts +685 -0
- package/src/formats/pajek/syntax.ts +7 -0
- package/src/formats/xgmml/columns.ts +39 -9
- package/src/formats/xgmml/constants.ts +3 -0
- package/src/formats/xgmml/document.ts +54 -12
- package/src/formats/xgmml/emit.ts +11 -6
- package/src/formats/xgmml/exporter.ts +32 -13
- package/src/formats/xgmml/importer.ts +43 -29
- package/src/formats/xgmml/styles.ts +400 -0
- package/src/index.ts +16 -0
- package/src/positions/codes.ts +32 -0
- package/src/positions/convert.ts +123 -0
- package/src/positions/extract.ts +619 -0
- package/src/positions/index.ts +23 -0
- package/src/positions/types.ts +221 -0
- package/src/registry.ts +179 -8
- package/src/styles/annotations.ts +478 -0
- package/src/styles/budget.ts +60 -0
- package/src/styles/canon/bends.ts +84 -0
- package/src/styles/canon/color-tables.ts +386 -0
- package/src/styles/canon/color.ts +624 -0
- package/src/styles/canon/enums.ts +211 -0
- package/src/styles/canon/graphviz.ts +189 -0
- package/src/styles/canon/index.ts +13 -0
- package/src/styles/canon/number.ts +152 -0
- package/src/styles/canon/site.ts +87 -0
- package/src/styles/canon/text.ts +221 -0
- package/src/styles/codes.ts +104 -0
- package/src/styles/cyjs/cascade.ts +2670 -0
- package/src/styles/cyjs/defaults-table.ts +82 -0
- package/src/styles/cyjs/emit.ts +951 -0
- package/src/styles/cyjs/index.ts +37 -0
- package/src/styles/cyjs/live.ts +147 -0
- package/src/styles/cyjs/mappers.ts +879 -0
- package/src/styles/cyjs/selector.ts +778 -0
- package/src/styles/cyjs/stylesheet-text.ts +214 -0
- package/src/styles/cytoscape/emit.ts +1264 -0
- package/src/styles/cytoscape/index.ts +40 -0
- package/src/styles/cytoscape/lexicon.ts +656 -0
- package/src/styles/cytoscape/mappings.ts +603 -0
- package/src/styles/cytoscape/resolve.ts +521 -0
- package/src/styles/cytoscape/translate.ts +237 -0
- package/src/styles/defaults.ts +504 -0
- package/src/styles/index.ts +57 -0
- package/src/styles/internal.ts +17 -0
- package/src/styles/io/approximations.ts +47 -0
- package/src/styles/io/block.ts +1138 -0
- package/src/styles/io/generic.ts +687 -0
- package/src/styles/io/index.ts +18 -0
- package/src/styles/io/writer.ts +745 -0
- package/src/styles/notes.ts +165 -0
- package/src/styles/plan/classes.ts +166 -0
- package/src/styles/plan/continuous.ts +218 -0
- package/src/styles/plan/discrete.ts +165 -0
- package/src/styles/plan/families.ts +115 -0
- package/src/styles/plan/features.ts +234 -0
- package/src/styles/plan/index.ts +7 -0
- package/src/styles/plan/plan.ts +1129 -0
- package/src/styles/plan/resolve.ts +685 -0
- package/src/styles/types.ts +814 -0
- package/src/styles/vocabulary.ts +172 -0
- package/src/types.ts +76 -1
- package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
- package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
- package/dist/chunks/export-rKLeGQMo.js.map +0 -1
- package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
- package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
- package/dist/chunks/exporter-CpRyHZ3H.js.map +0 -1
- package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
- package/dist/chunks/importer-C98dpSH4.js.map +0 -1
- package/dist/chunks/importer-D794XUTe.js.map +0 -1
- package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
- package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
- package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
- package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
- package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
|
@@ -106,6 +106,28 @@ interface RewrittenNumbers {
|
|
|
106
106
|
readonly reviveExact: (key: string, value: unknown) => unknown;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Every JSON string literal of a text, quotes included, in one left-to-right pass (a regex over
|
|
111
|
+
* untrusted text would scan again from every quote of an unterminated string). An unterminated
|
|
112
|
+
* literal at the end is left out.
|
|
113
|
+
* @param text - the document text
|
|
114
|
+
* @yields each literal
|
|
115
|
+
*/
|
|
116
|
+
function* stringLiterals(text: string): Generator<string> {
|
|
117
|
+
let i = text.indexOf('"');
|
|
118
|
+
while (i >= 0) {
|
|
119
|
+
let j = i + 1;
|
|
120
|
+
while (j < text.length && text[j] !== '"') {
|
|
121
|
+
j += text[j] === "\\" ? 2 : 1;
|
|
122
|
+
}
|
|
123
|
+
if (j >= text.length) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
yield text.slice(i, j + 1);
|
|
127
|
+
i = text.indexOf('"', j + 1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
109
131
|
/**
|
|
110
132
|
* The sentinel prefix of one rewrite: SENTINEL with a colon, or a numbered variant when the document
|
|
111
133
|
* already holds that one. A string can only decode to a NUL by escaping it (`\u0000`), so when the
|
|
@@ -118,7 +140,7 @@ function sentinelFor(text: string): string {
|
|
|
118
140
|
let haystack = text;
|
|
119
141
|
if (/\\u0000/i.test(text)) {
|
|
120
142
|
const decoded: string[] = [];
|
|
121
|
-
for (const
|
|
143
|
+
for (const literal of stringLiterals(text)) {
|
|
122
144
|
if (literal.includes("\\")) {
|
|
123
145
|
decoded.push(decodeString(literal));
|
|
124
146
|
}
|
|
@@ -427,6 +449,126 @@ function closingQuote(text: string, from: number): number {
|
|
|
427
449
|
return text.length;
|
|
428
450
|
}
|
|
429
451
|
|
|
452
|
+
/**
|
|
453
|
+
* The keys of one object of a valid JSON text in the order the text writes them (a repeated key at its first place),
|
|
454
|
+
* found by a path of keys and array indices from the root. `JSON.parse` gives an object's integer-like keys first, in
|
|
455
|
+
* numeric order, whatever order the text has; this gives the text's.
|
|
456
|
+
* @param text - a text JSON.parse accepted (non-standard number tokens included)
|
|
457
|
+
* @param path - the keys and array indices leading to the object (a repeated key leads to its last value, as
|
|
458
|
+
* JSON.parse reads it)
|
|
459
|
+
* @returns the keys, or null when the path does not lead to an object
|
|
460
|
+
* @category Plugin helpers
|
|
461
|
+
*/
|
|
462
|
+
export function keysInTextOrder(text: string, path: readonly (string | number)[]): string[] | null {
|
|
463
|
+
let at = skipJsonSpace(text, 0);
|
|
464
|
+
for (const step of path) {
|
|
465
|
+
let next = -1;
|
|
466
|
+
if (typeof step === "number" && text.codePointAt(at) === 91) {
|
|
467
|
+
let index = 0;
|
|
468
|
+
forEachJsonEntry(text, at, false, (_key, value) => {
|
|
469
|
+
if (index++ === step) {
|
|
470
|
+
next = value;
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
} else if (typeof step === "string" && text.codePointAt(at) === 123) {
|
|
474
|
+
forEachJsonEntry(text, at, true, (key, value) => {
|
|
475
|
+
if (key === step) {
|
|
476
|
+
next = value;
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
if (next < 0) {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
at = next;
|
|
484
|
+
}
|
|
485
|
+
if (text.codePointAt(at) !== 123) {
|
|
486
|
+
return null;
|
|
487
|
+
}
|
|
488
|
+
const keys = new Set<string>();
|
|
489
|
+
forEachJsonEntry(text, at, true, (key) => keys.add(key as string));
|
|
490
|
+
return [...keys];
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Call back with each member of an object (its key and the offset of its value) or each element of an array.
|
|
495
|
+
* @param text - the text
|
|
496
|
+
* @param open - the offset of the opening brace or bracket
|
|
497
|
+
* @param object - whether it is an object
|
|
498
|
+
* @param visit - called per member or element
|
|
499
|
+
*/
|
|
500
|
+
function forEachJsonEntry(
|
|
501
|
+
text: string,
|
|
502
|
+
open: number,
|
|
503
|
+
object: boolean,
|
|
504
|
+
visit: (key: string | null, value: number) => void,
|
|
505
|
+
): void {
|
|
506
|
+
let i = skipJsonSpace(text, open + 1);
|
|
507
|
+
const close = object ? 125 : 93;
|
|
508
|
+
while (i < text.length && text.codePointAt(i) !== close) {
|
|
509
|
+
let key: string | null = null;
|
|
510
|
+
if (object) {
|
|
511
|
+
const end = closingQuote(text, i + 1);
|
|
512
|
+
key = JSON.parse(text.slice(i, end + 1)) as string;
|
|
513
|
+
// past the colon
|
|
514
|
+
i = skipJsonSpace(text, skipJsonSpace(text, end + 1) + 1);
|
|
515
|
+
}
|
|
516
|
+
visit(key, i);
|
|
517
|
+
i = skipJsonSpace(text, skipJsonValue(text, i));
|
|
518
|
+
if (text.codePointAt(i) === 44) {
|
|
519
|
+
i = skipJsonSpace(text, i + 1);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* The offset after the JSON value that starts at an offset.
|
|
526
|
+
* @param text - the text
|
|
527
|
+
* @param at - the value's first character
|
|
528
|
+
* @returns the offset after it
|
|
529
|
+
*/
|
|
530
|
+
function skipJsonValue(text: string, at: number): number {
|
|
531
|
+
const c = text.codePointAt(at);
|
|
532
|
+
if (c === 34) {
|
|
533
|
+
return closingQuote(text, at + 1) + 1;
|
|
534
|
+
}
|
|
535
|
+
if (c !== 123 && c !== 91) {
|
|
536
|
+
let i = at;
|
|
537
|
+
while (i < text.length && !endsScalar(text.codePointAt(i) ?? 32)) {
|
|
538
|
+
i++;
|
|
539
|
+
}
|
|
540
|
+
return i;
|
|
541
|
+
}
|
|
542
|
+
let depth = 0;
|
|
543
|
+
let i = at;
|
|
544
|
+
while (i < text.length) {
|
|
545
|
+
const d = text.codePointAt(i);
|
|
546
|
+
if (d === 34) {
|
|
547
|
+
i = closingQuote(text, i + 1);
|
|
548
|
+
} else if (d === 123 || d === 91) {
|
|
549
|
+
depth++;
|
|
550
|
+
} else if ((d === 125 || d === 93) && --depth === 0) {
|
|
551
|
+
return i + 1;
|
|
552
|
+
}
|
|
553
|
+
i++;
|
|
554
|
+
}
|
|
555
|
+
return text.length;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* The offset of the first character at or after an offset that is not JSON whitespace.
|
|
560
|
+
* @param text - the text
|
|
561
|
+
* @param from - the offset
|
|
562
|
+
* @returns the offset
|
|
563
|
+
*/
|
|
564
|
+
function skipJsonSpace(text: string, from: number): number {
|
|
565
|
+
let i = from;
|
|
566
|
+
while (i < text.length && isSpace(text.codePointAt(i))) {
|
|
567
|
+
i++;
|
|
568
|
+
}
|
|
569
|
+
return i;
|
|
570
|
+
}
|
|
571
|
+
|
|
430
572
|
/**
|
|
431
573
|
* Whether the string that ends before an offset is an object key: a colon follows after whitespace.
|
|
432
574
|
* @param text - the text
|
|
@@ -634,7 +776,7 @@ function duplicateKey(text: string): string | null {
|
|
|
634
776
|
const start = i;
|
|
635
777
|
i = stringEnd(text, i + 1);
|
|
636
778
|
const keys = stack.at(-1) ?? null;
|
|
637
|
-
if (keys !== null && text[
|
|
779
|
+
if (keys !== null && text[skipJsonSpace(text, i + 1)] === ":") {
|
|
638
780
|
const key = JSON.parse(text.slice(start, i + 1)) as string;
|
|
639
781
|
if (keys.has(key)) {
|
|
640
782
|
return key;
|
|
@@ -661,20 +803,6 @@ function stringEnd(text: string, from: number): number {
|
|
|
661
803
|
return i;
|
|
662
804
|
}
|
|
663
805
|
|
|
664
|
-
/**
|
|
665
|
-
* The index of the first character at or after `from` that is not JSON whitespace.
|
|
666
|
-
* @param text - the text
|
|
667
|
-
* @param from - the first index
|
|
668
|
-
* @returns the index (text.length at the end)
|
|
669
|
-
*/
|
|
670
|
-
function skipSpace(text: string, from: number): number {
|
|
671
|
-
let i = from;
|
|
672
|
-
while (i < text.length && isSpace(text.codePointAt(i))) {
|
|
673
|
-
i++;
|
|
674
|
-
}
|
|
675
|
-
return i;
|
|
676
|
-
}
|
|
677
|
-
|
|
678
806
|
/** A key followed by its colon, for the cheap duplicate-key check. */
|
|
679
807
|
const KEY_COLON = /"\s*:/g;
|
|
680
808
|
|
|
@@ -857,6 +985,11 @@ class ChunkCursor {
|
|
|
857
985
|
/** The line number of buf's first character. */
|
|
858
986
|
private linesBefore = 1;
|
|
859
987
|
|
|
988
|
+
/** The last position line() counted to in buf, and the line breaks before it: line() counts on from there. */
|
|
989
|
+
private countedTo = 0;
|
|
990
|
+
|
|
991
|
+
private countedLines = 0;
|
|
992
|
+
|
|
860
993
|
private parts: string[] | null = null;
|
|
861
994
|
|
|
862
995
|
private captureStart = 0;
|
|
@@ -882,6 +1015,8 @@ class ChunkCursor {
|
|
|
882
1015
|
this.captureStart = 0;
|
|
883
1016
|
}
|
|
884
1017
|
this.linesBefore += countNewlines(this.buf, 0, this.buf.length);
|
|
1018
|
+
this.countedTo = 0;
|
|
1019
|
+
this.countedLines = 0;
|
|
885
1020
|
const endsWithCr = this.buf.endsWith("\r");
|
|
886
1021
|
for (;;) {
|
|
887
1022
|
const next = await this.iterator.next();
|
|
@@ -907,7 +1042,15 @@ class ChunkCursor {
|
|
|
907
1042
|
* @returns the line
|
|
908
1043
|
*/
|
|
909
1044
|
line(): number {
|
|
910
|
-
|
|
1045
|
+
// counted on from the last call, so reading every element of a one-chunk document stays linear
|
|
1046
|
+
const to = Math.min(this.pos, this.buf.length);
|
|
1047
|
+
if (to < this.countedTo) {
|
|
1048
|
+
this.countedTo = 0;
|
|
1049
|
+
this.countedLines = 0;
|
|
1050
|
+
}
|
|
1051
|
+
this.countedLines += countNewlines(this.buf, this.countedTo, to);
|
|
1052
|
+
this.countedTo = to;
|
|
1053
|
+
return this.linesBefore + this.countedLines;
|
|
911
1054
|
}
|
|
912
1055
|
|
|
913
1056
|
/**
|
|
@@ -1062,18 +1205,13 @@ class ChunkCursor {
|
|
|
1062
1205
|
* @returns the count
|
|
1063
1206
|
*/
|
|
1064
1207
|
function countNewlines(text: string, from: number, to: number): number {
|
|
1208
|
+
// one pass over the slice only: an indexOf() past `to` made each call cost the whole rest of the text
|
|
1065
1209
|
let count = 0;
|
|
1066
|
-
let i =
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
i = text.indexOf("\n", i + 1);
|
|
1070
|
-
}
|
|
1071
|
-
i = text.indexOf("\r", from);
|
|
1072
|
-
while (i >= 0 && i < to) {
|
|
1073
|
-
if (text[i + 1] !== "\n") {
|
|
1210
|
+
for (let i = from; i < to; i++) {
|
|
1211
|
+
const c = text.codePointAt(i);
|
|
1212
|
+
if (c === 10 || (c === 13 && text.codePointAt(i + 1) !== 10)) {
|
|
1074
1213
|
count++;
|
|
1075
1214
|
}
|
|
1076
|
-
i = text.indexOf("\r", i + 1);
|
|
1077
1215
|
}
|
|
1078
1216
|
return count;
|
|
1079
1217
|
}
|
|
@@ -1622,9 +1760,9 @@ export function inexactLiteral(text: string, key: string, keyDepth = 1): boolean
|
|
|
1622
1760
|
const start = i;
|
|
1623
1761
|
i = stringEnd(text, i + 1);
|
|
1624
1762
|
// the key itself (a string at depth 1 followed by a colon), not a value spelled like it
|
|
1625
|
-
const colon =
|
|
1763
|
+
const colon = skipJsonSpace(text, i + 1);
|
|
1626
1764
|
if (depth === keyDepth && text.startsWith(quoted, start) && text[colon] === ":") {
|
|
1627
|
-
return inexactNumberAt(text,
|
|
1765
|
+
return inexactNumberAt(text, skipJsonSpace(text, colon + 1));
|
|
1628
1766
|
}
|
|
1629
1767
|
}
|
|
1630
1768
|
i++;
|
|
@@ -1708,16 +1846,9 @@ export function headText(head: Uint8Array): string {
|
|
|
1708
1846
|
return new TextDecoder(encoding).decode(head).replace(/^\uFEFF/, "");
|
|
1709
1847
|
}
|
|
1710
1848
|
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
* @param y - the coordinate
|
|
1715
|
-
* @returns the flipped coordinate
|
|
1716
|
-
* @category Plugin helpers
|
|
1717
|
-
*/
|
|
1718
|
-
export function flipY(y: number): number {
|
|
1719
|
-
return y === 0 ? 0 : -y;
|
|
1720
|
-
}
|
|
1849
|
+
// Cytoscape's screen y (growing downward) as graph-io's y (growing upward), and back: the one
|
|
1850
|
+
// shared flip lives with the other position conversions.
|
|
1851
|
+
export { flipY } from "../positions/convert.js";
|
|
1721
1852
|
|
|
1722
1853
|
// ============================================================ stream structure shared by CX1 and CX2
|
|
1723
1854
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The note collector file positions use (and file styles, after their rebase): one note per code
|
|
3
|
+
* (and optional property), never one per element, with at most 8 distinct samples of 80
|
|
4
|
+
* characters, a total count and the element indexes the note covers.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** At most this many samples per note. */
|
|
8
|
+
const MAX_SAMPLES = 8;
|
|
9
|
+
/** A sample is cut to this many characters. */
|
|
10
|
+
const MAX_SAMPLE_LENGTH = 80;
|
|
11
|
+
|
|
12
|
+
/** One occurrence (or `count` occurrences) of a condition. */
|
|
13
|
+
interface NoteReport {
|
|
14
|
+
/** An example of the offending value. */
|
|
15
|
+
readonly sample?: unknown;
|
|
16
|
+
/** The element the report is about, by index. */
|
|
17
|
+
readonly element?: number;
|
|
18
|
+
/** How many occurrences the report stands for; defaults to 1. */
|
|
19
|
+
readonly count?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** A collected note, before a module shapes it into its own note type. */
|
|
23
|
+
interface CollectedNote<C extends string> {
|
|
24
|
+
readonly code: C;
|
|
25
|
+
readonly property: string | null;
|
|
26
|
+
readonly count: number;
|
|
27
|
+
readonly samples: readonly string[];
|
|
28
|
+
readonly elements: readonly number[] | { readonly count: number };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface Collecting<C extends string> {
|
|
32
|
+
readonly code: C;
|
|
33
|
+
readonly property: string | null;
|
|
34
|
+
count: number;
|
|
35
|
+
readonly samples: string[];
|
|
36
|
+
readonly elements: Set<number>;
|
|
37
|
+
unindexed: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Collects notes, aggregated per (code, property), in the order their conditions first occur. */
|
|
41
|
+
export class NoteCollector<C extends string> {
|
|
42
|
+
readonly #notes = new Map<string, Collecting<C>>();
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Record a condition.
|
|
46
|
+
* @param code - the condition
|
|
47
|
+
* @param report - a sample, the element index and a count
|
|
48
|
+
* @param property - what the note is about, or null
|
|
49
|
+
*/
|
|
50
|
+
add(code: C, report: NoteReport = {}, property: string | null = null): void {
|
|
51
|
+
const key = `${code}\u0000${property ?? ""}`;
|
|
52
|
+
let note = this.#notes.get(key);
|
|
53
|
+
if (note === undefined) {
|
|
54
|
+
note = { code, property, count: 0, samples: [], elements: new Set(), unindexed: false };
|
|
55
|
+
this.#notes.set(key, note);
|
|
56
|
+
}
|
|
57
|
+
note.count += report.count ?? 1;
|
|
58
|
+
if (report.element === undefined) {
|
|
59
|
+
note.unindexed = true;
|
|
60
|
+
} else {
|
|
61
|
+
note.elements.add(report.element);
|
|
62
|
+
}
|
|
63
|
+
if (report.sample !== undefined && note.samples.length < MAX_SAMPLES) {
|
|
64
|
+
const sample = sampleText(report.sample);
|
|
65
|
+
if (!note.samples.includes(sample)) {
|
|
66
|
+
note.samples.push(sample);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The collected notes.
|
|
73
|
+
* @returns one note per (code, property)
|
|
74
|
+
*/
|
|
75
|
+
list(): CollectedNote<C>[] {
|
|
76
|
+
return Array.from(this.#notes.values(), (n) => ({
|
|
77
|
+
code: n.code,
|
|
78
|
+
property: n.property,
|
|
79
|
+
count: n.count,
|
|
80
|
+
samples: [...n.samples],
|
|
81
|
+
elements: n.unindexed ? { count: n.count } : Array.from(n.elements).sort((a, b) => a - b),
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* A sample as at most 80 characters of text.
|
|
88
|
+
* @param value - the sample
|
|
89
|
+
* @returns the text
|
|
90
|
+
*/
|
|
91
|
+
function sampleText(value: unknown): string {
|
|
92
|
+
const text = typeof value === "string" ? value : (JSON.stringify(value) ?? String(value));
|
|
93
|
+
return text.length > MAX_SAMPLE_LENGTH ? `${text.slice(0, MAX_SAMPLE_LENGTH - 3)}...` : text;
|
|
94
|
+
}
|
package/src/common/report.ts
CHANGED
|
@@ -23,6 +23,23 @@ import { agree, plural } from "./plural.js";
|
|
|
23
23
|
*/
|
|
24
24
|
export const MAX_WARNINGS_PER_CODE = 1000;
|
|
25
25
|
|
|
26
|
+
/** What each finished report's import kept for its styles: per report object, so imports running at once never mix. */
|
|
27
|
+
const KEPT_FOR_STYLES = new WeakMap<ImportReport, unknown>();
|
|
28
|
+
|
|
29
|
+
/** The value of a builder that kept nothing. */
|
|
30
|
+
const NOTHING_KEPT: unique symbol = Symbol("nothing kept");
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* What the import that produced a report passed to `ImportReportBuilder.keepForStyles()`, or undefined when it kept
|
|
34
|
+
* nothing. graph-io passes it to the same importer's `styles()` as `context.kept`.
|
|
35
|
+
* @param report - a report an importer's `import()` returned
|
|
36
|
+
* @returns the kept value
|
|
37
|
+
* @category Writing a format
|
|
38
|
+
*/
|
|
39
|
+
export function keptForStyles(report: ImportReport): unknown {
|
|
40
|
+
return KEPT_FOR_STYLES.get(report);
|
|
41
|
+
}
|
|
42
|
+
|
|
26
43
|
/**
|
|
27
44
|
* Where an issue was found: the 1-based line and the element (id or attribute name) when known.
|
|
28
45
|
* @public
|
|
@@ -119,6 +136,8 @@ export class ImportReportBuilder {
|
|
|
119
136
|
|
|
120
137
|
private truncatedFlag = false;
|
|
121
138
|
|
|
139
|
+
private kept: unknown = NOTHING_KEPT;
|
|
140
|
+
|
|
122
141
|
private readonly startedAt: number;
|
|
123
142
|
|
|
124
143
|
/**
|
|
@@ -277,6 +296,19 @@ export class ImportReportBuilder {
|
|
|
277
296
|
throw err;
|
|
278
297
|
}
|
|
279
298
|
|
|
299
|
+
/**
|
|
300
|
+
* Keep style data that is not per element (a stylesheet, a groups object, a legend, the file's default styles)
|
|
301
|
+
* for this import's `styles()`: graph-io passes it back as `context.kept` when styles are requested. Kept per
|
|
302
|
+
* report, never on the importer object, so imports running at once each get their own. A later call replaces
|
|
303
|
+
* the value.
|
|
304
|
+
* @param value - anything the importer's `styles()` needs
|
|
305
|
+
* @returns this builder
|
|
306
|
+
*/
|
|
307
|
+
keepForStyles(value: unknown): this {
|
|
308
|
+
this.kept = value;
|
|
309
|
+
return this;
|
|
310
|
+
}
|
|
311
|
+
|
|
280
312
|
/**
|
|
281
313
|
* A builder that starts from everything this one recorded so far: issues, counts, loss notes,
|
|
282
314
|
* the warnOnce keys, the error and warning counts and the truncation flag. For an importer that
|
|
@@ -297,6 +329,7 @@ export class ImportReportBuilder {
|
|
|
297
329
|
copy.errors = this.errors;
|
|
298
330
|
copy.warnings = this.warnings;
|
|
299
331
|
copy.truncatedFlag = this.truncatedFlag;
|
|
332
|
+
copy.kept = this.kept;
|
|
300
333
|
return copy;
|
|
301
334
|
}
|
|
302
335
|
|
|
@@ -378,6 +411,9 @@ export class ImportReportBuilder {
|
|
|
378
411
|
this.counts.expandedMixed += counts.expandedMixed;
|
|
379
412
|
this.lossList.push(...report.lossy);
|
|
380
413
|
this.truncatedFlag ||= report.truncated;
|
|
414
|
+
if (this.kept === NOTHING_KEPT && KEPT_FOR_STYLES.has(report)) {
|
|
415
|
+
this.kept = KEPT_FOR_STYLES.get(report);
|
|
416
|
+
}
|
|
381
417
|
return this;
|
|
382
418
|
}
|
|
383
419
|
|
|
@@ -403,7 +439,7 @@ export class ImportReportBuilder {
|
|
|
403
439
|
);
|
|
404
440
|
}
|
|
405
441
|
}
|
|
406
|
-
|
|
442
|
+
const report: ImportReport = Object.freeze({
|
|
407
443
|
format: this.format,
|
|
408
444
|
counts: Object.freeze({ nodes, edges, skippedNodes, skippedEdges, expandedMixed }),
|
|
409
445
|
issues: Object.freeze([...this.issueList, ...suppressed]),
|
|
@@ -413,6 +449,10 @@ export class ImportReportBuilder {
|
|
|
413
449
|
lossy: Object.freeze([...this.lossList]),
|
|
414
450
|
durationMs: now() - this.startedAt,
|
|
415
451
|
});
|
|
452
|
+
if (this.kept !== NOTHING_KEPT) {
|
|
453
|
+
KEPT_FOR_STYLES.set(report, this.kept);
|
|
454
|
+
}
|
|
455
|
+
return report;
|
|
416
456
|
}
|
|
417
457
|
}
|
|
418
458
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The length units and tool names that file positions (and, after their rebase, file styles)
|
|
3
|
+
* share. Loads in Node and imports nothing.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The unit a file's lengths are in. "px": screen pixels or typographic points (1 pt counts as
|
|
8
|
+
* 1 px). "file": the file's own unit, with no known screen size (Pajek's unit square, NetworkX
|
|
9
|
+
* coordinates, Graphviz input inches).
|
|
10
|
+
* @category Positions
|
|
11
|
+
*/
|
|
12
|
+
export type LengthUnit = "px" | "file";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The tool that wrote a file, when the file says. An open union: a tool graph-io does not know is
|
|
16
|
+
* kept as its lowercase name.
|
|
17
|
+
* @category Positions
|
|
18
|
+
*/
|
|
19
|
+
export type GraphTool = "yed" | "cytoscape" | "gephi" | "graphviz" | "pajek" | "networkx" | "tulip" | (string & {}); // NOSONAR(S4335): the open union keeps the known names in editor completion
|
|
20
|
+
|
|
21
|
+
/** Creator texts that name a known tool, first match wins. */
|
|
22
|
+
const TOOLS: readonly (readonly [RegExp, GraphTool])[] = [
|
|
23
|
+
[/yfiles|yed/i, "yed"],
|
|
24
|
+
[/cytoscape/i, "cytoscape"],
|
|
25
|
+
[/gephi/i, "gephi"],
|
|
26
|
+
[/graphviz/i, "graphviz"],
|
|
27
|
+
[/pajek/i, "pajek"],
|
|
28
|
+
[/networkx/i, "networkx"],
|
|
29
|
+
[/tulip/i, "tulip"],
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The tool a file's creator text names ("yFiles", "Gephi 0.7", "NetworkX 3.1"), or null.
|
|
34
|
+
* @param creator - the creator text (`snapshot.meta.creator`)
|
|
35
|
+
* @returns the tool, or null when the text names none graph-io knows
|
|
36
|
+
*/
|
|
37
|
+
export function toolOf(creator: string | null | undefined): GraphTool | null {
|
|
38
|
+
if (creator === null || creator === undefined) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return TOOLS.find(([pattern]) => pattern.test(creator))?.[1] ?? null;
|
|
42
|
+
}
|
package/src/common/xml.ts
CHANGED
|
@@ -90,6 +90,29 @@ export class XmlSyntaxError extends Error {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
/**
|
|
94
|
+
* The most elements open at once that the XML tokenizer reads; a deeper document stops with an `XmlNestingError`.
|
|
95
|
+
* @category Plugin helpers
|
|
96
|
+
*/
|
|
97
|
+
export const MAX_XML_DEPTH = 100_000;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Elements are nested deeper than `MAX_XML_DEPTH`: an importer reports it as E_XML_NESTING rather than as a syntax
|
|
101
|
+
* error.
|
|
102
|
+
* @category Plugin helpers
|
|
103
|
+
*/
|
|
104
|
+
export class XmlNestingError extends XmlSyntaxError {
|
|
105
|
+
/**
|
|
106
|
+
* Create the error.
|
|
107
|
+
* @param name - the element that opened one level too many
|
|
108
|
+
* @param line - the 1-based line
|
|
109
|
+
*/
|
|
110
|
+
constructor(name: string, line: number) {
|
|
111
|
+
super(`<${name}> is nested more than ${String(MAX_XML_DEPTH)} elements deep`, line);
|
|
112
|
+
this.name = "XmlNestingError";
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
93
116
|
/**
|
|
94
117
|
* The input holds no markup at all (empty, whitespace only, a byte order mark only): an importer
|
|
95
118
|
* reports it as E_EMPTY_INPUT rather than as a syntax error.
|
|
@@ -350,17 +373,31 @@ export function isXmlName(text: string): boolean {
|
|
|
350
373
|
if (text.length === 0) {
|
|
351
374
|
return false;
|
|
352
375
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
376
|
+
// by index, with the ASCII tables for the common case as readName() does: a string iterator and the code point
|
|
377
|
+
// classes per character cost a second in a 5,000-node GraphML file, which checks every end tag
|
|
378
|
+
for (let i = 0; i < text.length;) {
|
|
379
|
+
const cp = text.codePointAt(i) ?? 0;
|
|
380
|
+
if (!isNameCodePoint(cp, i === 0)) {
|
|
357
381
|
return false;
|
|
358
382
|
}
|
|
359
|
-
|
|
383
|
+
i += cp > 0xffff ? 2 : 1;
|
|
360
384
|
}
|
|
361
385
|
return true;
|
|
362
386
|
}
|
|
363
387
|
|
|
388
|
+
/**
|
|
389
|
+
* Whether a code point may stand in an XML Name, at its start or after it.
|
|
390
|
+
* @param cp - the code point
|
|
391
|
+
* @param first - whether it starts the name
|
|
392
|
+
* @returns true for a NameStartChar (first) or a NameChar
|
|
393
|
+
*/
|
|
394
|
+
function isNameCodePoint(cp: number, first: boolean): boolean {
|
|
395
|
+
if (cp < 0x80) {
|
|
396
|
+
return (first ? ASCII_NAME_START[cp] : ASCII_NAME_CHAR[cp]) === 1;
|
|
397
|
+
}
|
|
398
|
+
return first ? isNameStart(cp) : isNameChar(cp);
|
|
399
|
+
}
|
|
400
|
+
|
|
364
401
|
/**
|
|
365
402
|
* Whether a code point is a legal XML 1.0 character.
|
|
366
403
|
* @param cp - the code point
|
|
@@ -1517,6 +1554,9 @@ export class XmlTokenizer {
|
|
|
1517
1554
|
}
|
|
1518
1555
|
}
|
|
1519
1556
|
}
|
|
1557
|
+
if (this.stack.length >= MAX_XML_DEPTH) {
|
|
1558
|
+
throw new XmlNestingError(name, this.line);
|
|
1559
|
+
}
|
|
1520
1560
|
this.stack.push(name);
|
|
1521
1561
|
this.handler.start(name, attrs, this.line, this.namespaceOf(name));
|
|
1522
1562
|
}
|