@knowvah/dot-engine 2.6.3 → 2.6.4
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/index.js +4 -1
- package/dist/index.js.map +2 -2
- package/dist/layout/dot/splines-flat-labeled.d.ts.map +1 -1
- package/dist/render.js +4 -1
- package/dist/render.js.map +2 -2
- package/package.json +1 -1
- package/src/layout/dot/__fixtures__/2796-flat-labeled-lost.dot +161 -0
- package/src/layout/dot/splines-flat-labeled.ts +3 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knowvah/dot-engine",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.4",
|
|
4
4
|
"description": "Faithful TypeScript port of Graphviz (dot, neato, fdp, sfdp, circo, twopi, osage, patchwork) — no C: no native binary, no WASM. Oracle-verified against the C implementation, runs in the browser.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphviz",
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// Reduced (ddmin) from graphviz tests/2796.dot: one labeled flat edge whose
|
|
2
|
+
// routesplines fails. Native 16.1.0 reports the failure once.
|
|
3
|
+
digraph "troublesome" {
|
|
4
|
+
rankdir=LR
|
|
5
|
+
I -> 36
|
|
6
|
+
subgraph cluster_0 {
|
|
7
|
+
}
|
|
8
|
+
subgraph cluster_6 {
|
|
9
|
+
57
|
|
10
|
+
12
|
|
11
|
+
}
|
|
12
|
+
subgraph cluster_10 {
|
|
13
|
+
26
|
|
14
|
+
}
|
|
15
|
+
subgraph cluster_14 {
|
|
16
|
+
}
|
|
17
|
+
subgraph cluster_17 {
|
|
18
|
+
}
|
|
19
|
+
subgraph cluster_18 {
|
|
20
|
+
}
|
|
21
|
+
subgraph cluster_21 {
|
|
22
|
+
55
|
|
23
|
+
}
|
|
24
|
+
subgraph cluster_23 {
|
|
25
|
+
}
|
|
26
|
+
subgraph cluster_24 {
|
|
27
|
+
}
|
|
28
|
+
subgraph cluster_33 {
|
|
29
|
+
39
|
|
30
|
+
4
|
|
31
|
+
1
|
|
32
|
+
}
|
|
33
|
+
subgraph cluster_35 {
|
|
34
|
+
}
|
|
35
|
+
subgraph cluster_37 {
|
|
36
|
+
}
|
|
37
|
+
subgraph cluster_38 {
|
|
38
|
+
}
|
|
39
|
+
subgraph cluster_39 {
|
|
40
|
+
}
|
|
41
|
+
subgraph cluster_40 {
|
|
42
|
+
46
|
|
43
|
+
}
|
|
44
|
+
subgraph cluster_41 {
|
|
45
|
+
}
|
|
46
|
+
subgraph cluster_42 {
|
|
47
|
+
}
|
|
48
|
+
1 -> 48 [label="p1"]
|
|
49
|
+
2 -> 48 [label="!p0 & !p1"]
|
|
50
|
+
3 -> 26 [label="p0 & p2"]
|
|
51
|
+
4 -> 1 [label="p0 & p1 & p2"]
|
|
52
|
+
4 -> 48 [label="!p1"]
|
|
53
|
+
12 -> 57 [label="p0 & p1"]
|
|
54
|
+
13 -> 28 [label="p0 & p1 & p2"]
|
|
55
|
+
15 -> 16 [label="!p0 & p1 & p2"]
|
|
56
|
+
16 -> 26 [label="p0 & p2"]
|
|
57
|
+
17 -> 3 [label="!p0 & !p2"]
|
|
58
|
+
17 -> 21 [label="p0 & !p2"]
|
|
59
|
+
20 -> 48 [label="!p0 & p1"]
|
|
60
|
+
20 -> 50 [label="p0 & !p1"]
|
|
61
|
+
21 -> 3 [label="!p0 & p1 & !p2"]
|
|
62
|
+
21 -> 12 [label="p0 & p1 & p2"]
|
|
63
|
+
21 -> 48 [label="!p0 & !p1"]
|
|
64
|
+
21 -> 57 [label="p0 & !p1"]
|
|
65
|
+
22 -> 48 [label="!p0"]
|
|
66
|
+
22 -> 52 [label="p0 & p2"]
|
|
67
|
+
23 -> 14 [label="p0 & p1 & p2"]
|
|
68
|
+
23 -> 21 [label="p0 & p1 & !p2"]
|
|
69
|
+
23 -> 30 [label="p0 & !p1 & !p2"]
|
|
70
|
+
23 -> 48 [label="(!p0 & !p1) | (!p0 & p2)"]
|
|
71
|
+
23 -> 52 [label="p0 & !p1 & p2"]
|
|
72
|
+
24 -> 3 [label="!p0 & p1 & !p2"]
|
|
73
|
+
24 -> 15 [label="p0 & p1 & !p2"]
|
|
74
|
+
24 -> 52 [label="p0 & !p1 & p2"]
|
|
75
|
+
25 -> 18 [label="!p0 & p1 & !p2"]
|
|
76
|
+
25 -> 34 [label="!p0 & p1 & p2"]
|
|
77
|
+
26 -> 48 [label="p1"]
|
|
78
|
+
27 -> 48 [label="!p0 & !p2"]
|
|
79
|
+
27 -> 57 [label="p0 & !p2"]
|
|
80
|
+
28 -> 29 [label="p0 & !p1 & !p2"]
|
|
81
|
+
28 -> 48 [label="!p0 | p1"]
|
|
82
|
+
29 -> 48 [label="!p0 | !p1"]
|
|
83
|
+
30 -> 48 [label="!p0"]
|
|
84
|
+
32 -> 30 [label="p0 & !p1 & !p2"]
|
|
85
|
+
32 -> 48 [label="!p0"]
|
|
86
|
+
32 -> 52 [label="p0 & p2"]
|
|
87
|
+
32 -> 55 [label="p0 & p1 & !p2"]
|
|
88
|
+
33 -> 48 [label="!p0"]
|
|
89
|
+
33 -> 52 [label="p0 & p2"]
|
|
90
|
+
33 -> 55 [label="p0 & !p2"]
|
|
91
|
+
34 -> 0 [label="p0 & !p2"]
|
|
92
|
+
34 -> 2 [label="p0 & p2"]
|
|
93
|
+
34 -> 48 [label="!p0"]
|
|
94
|
+
35 -> 9 [label="p0 & !p1 & !p2"]
|
|
95
|
+
35 -> 14 [label="p0 & !p1 & p2"]
|
|
96
|
+
35 -> 55 [label="p0 & p1 & !p2"]
|
|
97
|
+
36 -> 5 [label="!p0 & !p1 & !p2"]
|
|
98
|
+
36 -> 6 [label="p0 & !p1 & p2"]
|
|
99
|
+
36 -> 17 [label="p0 & !p1 & !p2"]
|
|
100
|
+
36 -> 37 [label="p1 & !p2"]
|
|
101
|
+
36 -> 38 [label="p1 & p2"]
|
|
102
|
+
36 -> 44 [label="!p0 & !p1 & p2"]
|
|
103
|
+
37 -> 10 [label="!p0 & !p1 & !p2"]
|
|
104
|
+
37 -> 23 [label="p0 & !p1 & !p2"]
|
|
105
|
+
38 -> 24 [label="p0 & !p1 & !p2"]
|
|
106
|
+
38 -> 35 [label="p0 & !p1 & p2"]
|
|
107
|
+
38 -> 37 [label="!p0 & p1 & !p2"]
|
|
108
|
+
38 -> 39 [label="p0 & p1 & p2"]
|
|
109
|
+
38 -> 44 [label="!p0 & !p1 & p2"]
|
|
110
|
+
38 -> 53 [label="p0 & p1 & !p2"]
|
|
111
|
+
39 -> 5 [label="!p0 & !p1 & !p2"]
|
|
112
|
+
39 -> 24 [label="p0 & !p1 & !p2"]
|
|
113
|
+
39 -> 35 [label="p0 & !p1 & p2"]
|
|
114
|
+
39 -> 43 [label="p0 & p1 & p2"]
|
|
115
|
+
39 -> 44 [label="!p0 & !p1 & p2"]
|
|
116
|
+
39 -> 48 [label="!p0 & p1"]
|
|
117
|
+
39 -> 54 [label="p0 & p1 & !p2"]
|
|
118
|
+
40 -> 10 [label="!p0 & !p1 & !p2"]
|
|
119
|
+
41 -> 5 [label="!p0 & !p1 & !p2"]
|
|
120
|
+
42 -> 5 [label="!p0 & !p1 & !p2"]
|
|
121
|
+
42 -> 44 [label="!p0 & !p1 & p2"]
|
|
122
|
+
42 -> 48 [label="p1"]
|
|
123
|
+
42 -> 51 [label="p0 & !p1 & p2"]
|
|
124
|
+
43 -> 32 [label="p0 & !p1 & !p2"]
|
|
125
|
+
43 -> 33 [label="p0 & !p1 & p2"]
|
|
126
|
+
43 -> 48 [label="!p0"]
|
|
127
|
+
43 -> 54 [label="p0 & p1 & !p2"]
|
|
128
|
+
44 -> 19 [label="p0 & p2"]
|
|
129
|
+
44 -> 20 [label="p0 & !p2"]
|
|
130
|
+
44 -> 48 [label="!p0"]
|
|
131
|
+
45 -> 28 [label="p0 & p2"]
|
|
132
|
+
45 -> 29 [label="p0 & !p2"]
|
|
133
|
+
45 -> 48 [label="!p0"]
|
|
134
|
+
46 -> 3 [label="!p0 & p1 & !p2"]
|
|
135
|
+
46 -> 48 [label="!p1 | (!p0 & p2)"]
|
|
136
|
+
46 -> 51 [label="p0 & p1 & p2"]
|
|
137
|
+
46 -> 56 [label="p0 & p1 & !p2"]
|
|
138
|
+
47 -> 3 [label="!p0 & p1 & !p2"]
|
|
139
|
+
47 -> 48 [label="!p1"]
|
|
140
|
+
47 -> 51 [label="p0 & p1 & p2"]
|
|
141
|
+
47 -> 56 [label="p0 & p1 & !p2"]
|
|
142
|
+
49 -> 40 [label="!p0 & p1 & !p2"]
|
|
143
|
+
49 -> 41 [label="!p0 & p1 & p2"]
|
|
144
|
+
49 -> 42 [label="p0 & p1 & p2"]
|
|
145
|
+
49 -> 48 [label="!p1"]
|
|
146
|
+
51 -> 4 [label="p0 & !p1 & !p2"]
|
|
147
|
+
51 -> 48 [label="p1 | (!p0 & p2)"]
|
|
148
|
+
52 -> 48 [label="!p0"]
|
|
149
|
+
52 -> 57 [label="p0 & p1"]
|
|
150
|
+
53 -> 22 [label="p0 & !p1 & !p2"]
|
|
151
|
+
53 -> 33 [label="p0 & !p1 & p2"]
|
|
152
|
+
53 -> 39 [label="p0 & p1 & p2"]
|
|
153
|
+
53 -> 40 [label="!p0 & p1 & !p2"]
|
|
154
|
+
53 -> 41 [label="!p0 & p1 & p2"]
|
|
155
|
+
53 -> 48 [label="!p0 & !p1"]
|
|
156
|
+
54 -> 22 [label="p0 & !p1 & !p2"]
|
|
157
|
+
54 -> 48 [label="!p0"]
|
|
158
|
+
55 -> 48 [label="!p0"]
|
|
159
|
+
55 -> 57 [label="p0 & !p1"]
|
|
160
|
+
56 -> 3 [label="!p0 & p1 & !p2"]
|
|
161
|
+
}
|
|
@@ -149,7 +149,9 @@ export function makeFlatLabeledEdge(g: Graph, e: Edge): boolean {
|
|
|
149
149
|
// Degenerate route (routesplines pn=0): label set, no spline installed — C's
|
|
150
150
|
// make_flat_labeled_edge returns the same way; emit's edge_in_box then decides
|
|
151
151
|
// whether the (untranslated) label overlaps the clip. Still HANDLED → true.
|
|
152
|
-
|
|
152
|
+
// C's dot_splines_ visits the edge once, so mark it lost: the routeDotEdges
|
|
153
|
+
// backstop must not route (and report the failure) a second time.
|
|
154
|
+
if (ps === null || ps.length === 0) { e.info.lost = true; return true; }
|
|
153
155
|
if (!tailIsLeft) ps.reverse();
|
|
154
156
|
clipAndInstall(e, e.head, ps, ps.length, { ...buildDotSinfo(), ignoreSwap: true });
|
|
155
157
|
return true;
|