annotate src/suffixLabels.ts @ 49:c16a331f42e5

rewrap; stylesheet
author drewp@bigasterisk.com
date Thu, 09 Jan 2020 00:05:32 -0800
parents 8b4dc9e87b56
children 26c55d5d5202
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
1 import { Term } from "n3";
11
1988ad250036 suffixLabels test runswith 'inv test'
drewp@localhost
parents: 3
diff changeset
2
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
3 type SuffixesNode = { usedBy?: string; children: Map<string, SuffixesNode> };
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
4 type DisplayNode = { label?: string; link?: string };
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
5 class SuffixLabels {
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
6 displayNodes: Map<string, DisplayNode>;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
7 usedSuffixes: SuffixesNode;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
8 constructor() {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
9 this.displayNodes = new Map();
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
10 this.usedSuffixes = { usedBy: undefined, children: new Map() };
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
11 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
12
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
13 planDisplayForNode(node: Term) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
14 const uri = node.value;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
15 this._planDisplayForUri(uri);
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
16 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
17
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
18 _planDisplayForUri(uri: string) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
19 if (this.displayNodes.has(uri)) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
20 return;
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
21 }
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
22
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
23 const segments = uri.split("/");
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
24 let curs = this.usedSuffixes;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
25 let label: string | undefined = undefined;
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
26
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
27 for (let i = segments.length - 1; i >= 0; i--) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
28 const seg = segments[i];
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
29 if (curs.usedBy && curs.usedBy != uri) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
30 this._prependClashingUri(curs);
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
31 }
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
32
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
33 if (!curs.children.has(seg)) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
34 const child: SuffixesNode = { usedBy: undefined, children: new Map() };
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
35 curs.children.set(seg, child);
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
36
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
37 if (label === undefined) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
38 label = SuffixLabels._tailSegments(uri, segments.length - i);
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
39 child.usedBy = uri;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
40 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
41 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
42 curs = curs.children.get(seg)!;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
43 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
44 this.displayNodes.set(uri, { label: label });
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
45 }
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
46
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
47 _prependClashingUri(curs: SuffixesNode) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
48 // Claim: When a clash is discovered, only 1 uri needs to
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
49 // change its length, and there will be only one child node to
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
50 // follow, and the clashing uri can be changed to prepend that
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
51 // one child (since we'll see it again if that one wasn't
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
52 // enough).
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
53 const clashNode: DisplayNode = this.displayNodes.get(curs.usedBy!)!;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
54 const nextLeftSeg = curs.children.entries().next().value;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
55 if (nextLeftSeg[1].usedBy) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
56 throw new Error("unexpected");
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
57 }
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
58
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
59 clashNode.label = nextLeftSeg[0] + "/" + clashNode.label;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
60 nextLeftSeg[1].usedBy = curs.usedBy;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
61 curs.usedBy = undefined;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
62 }
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
63
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
64 // a substring to show for this uri
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
65 getLabelForNode(node: string) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
66 return this.displayNodes.get(node)!.label;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
67 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
68
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
69 static _tailSegments(uri: string, n: number) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
70 let i = uri.length;
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
71 for (let rep = 0; rep < n; rep++) {
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
72 i = uri.lastIndexOf("/", i - 1);
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
73 }
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
74 return uri.substr(i + 1);
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
75 }
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
76 }
3
a7ba8627a7b6 still trying to make imports work. add other files too
drewp@bigasterisk.com
parents:
diff changeset
77
36
8b4dc9e87b56 reindent to 2-spaces with prettier
drewp@bigasterisk.com
parents: 35
diff changeset
78 export { SuffixLabels };