Skip to content

Commit 0a40ca6

Browse files
author
Anton Eriksson
committed
fix(js): Pass parseLinks to main parse function and correctly detect multilayer tree files
1 parent 1e775b0 commit 0a40ca6

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

interfaces/js/src/parser.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export function readFile(file: File) {
3232
});
3333
}
3434

35-
export function parse(file: string | string[], type?: Extension) {
35+
export function parse(file: string | string[], type?: Extension, parseLinks = false) {
3636
if (typeof file === "string") {
3737
file = file.split("\n");
3838
}
@@ -51,9 +51,9 @@ export function parse(file: string | string[], type?: Extension) {
5151
}
5252
} else if ((type && type === "tree") || nodeHeader.includes("path")) {
5353
if (nodeHeader[nodeHeader.length - 2] === "name") {
54-
return parseTree(file, nodeHeader);
55-
} else if (nodeHeader[nodeHeader.length - 2] === "state_id") {
56-
return parseTree<TreeStateNode>(file, nodeHeader);
54+
return parseTree(file, nodeHeader, parseLinks);
55+
} else if (nodeHeader[nodeHeader.length - 2] === "state_id" || nodeHeader[nodeHeader.length - 1] === "layer_id") {
56+
return parseTree<TreeStateNode>(file, nodeHeader, parseLinks);
5757
}
5858
}
5959

@@ -98,12 +98,14 @@ export function parseClu<NodeType extends CluNode>(
9898

9999
const header = parseHeader(file);
100100
if (!header) {
101+
console.warn("No header");
101102
return null;
102103
}
103104

104105
if (!nodeHeader) {
105106
nodeHeader = parseNodeHeader(file) ?? [];
106107
if (nodeHeader.length === 0) {
108+
console.warn("No node header");
107109
return null;
108110
}
109111
}
@@ -164,12 +166,14 @@ export function parseTree<NodeType extends TreeNode>(
164166

165167
const header = parseHeader(file);
166168
if (!header) {
169+
console.warn("No header");
167170
return null;
168171
}
169172

170173
if (!nodeHeader) {
171174
nodeHeader = parseNodeHeader(file) ?? [];
172175
if (nodeHeader.length === 0) {
176+
console.warn("No node header");
173177
return null;
174178
}
175179
}
@@ -210,6 +214,7 @@ export function parseTree<NodeType extends TreeNode>(
210214
node[key] = Number(match[j]);
211215
break;
212216
default:
217+
console.warn(`Unknown field ${field}`);
213218
break;
214219
}
215220
}
@@ -232,7 +237,7 @@ export function parseTree<NodeType extends TreeNode>(
232237

233238
for (const [_, line] of linkSection(file, lineNo)) {
234239
if (line.startsWith("*Links")) {
235-
const [moduleId, ...rest] = line.split(" ");
240+
const [_, moduleId, ...rest] = line.split(" ");
236241

237242
const path = moduleId === "root" ? [0] : moduleId.split(":").map(Number);
238243
const [enterFlow, exitFlow, numEdges, numChildren] = rest.map(Number);
@@ -299,7 +304,6 @@ function* linkSection(lines: string[], start: number = 0) {
299304
}
300305

301306
yield [i, line] as [number, string];
302-
continue;
303307
}
304308
}
305309

@@ -422,7 +426,7 @@ export function parseHeader(file: string | string[]): Header | null {
422426
const bipartiteStartId = line.match(/^# bipartite start id (\d+)/)?.[1];
423427
if (bipartiteStartId) {
424428
result.bipartiteStartId = Number(bipartiteStartId);
425-
continue;
429+
//continue;
426430
}
427431
}
428432

0 commit comments

Comments
 (0)