Skip to content

Commit d252fde

Browse files
More fixes
1 parent e83ebfe commit d252fde

File tree

15 files changed

+224
-447
lines changed

15 files changed

+224
-447
lines changed

gap/dot.gi

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,7 +1285,7 @@ function(graph)
12851285
end);
12861286

12871287
InstallMethod(GV_StringifyNodeEdgeAttrs,
1288-
"for a record",
1288+
"for a GV_Map",
12891289
[IsGV_Map],
12901290
function(attrs)
12911291
local result, keys, key, val, n, i, tmp;
@@ -1304,12 +1304,13 @@ function(attrs)
13041304
if "label" = key and StartsWith(tmp, "<<") and EndsWith(tmp, ">>") then
13051305
val := StringFormatted("{}", val);
13061306
else
1307-
if ' ' in key then
1308-
key := StringFormatted("\"{}\"", key);
1309-
fi;
1310-
if ' ' in val then
1311-
val := StringFormatted("\"{}\"", val);
1312-
fi;
1307+
if ' ' in key then
1308+
key := StringFormatted("\"{}\"", key);
1309+
fi;
1310+
if ' ' in val or '>' in val or '^' in val or '#' in val then
1311+
# TODO avoid code duplication here, and below
1312+
val := StringFormatted("\"{}\"", val);
1313+
fi;
13131314
fi;
13141315

13151316
Append(result,
@@ -1329,7 +1330,7 @@ function(attrs)
13291330
if ' ' in key then
13301331
key := StringFormatted("\"{}\"", key);
13311332
fi;
1332-
if ' ' in val or '>' in val then
1333+
if ' ' in val or '>' in val or '^' in val or '#' in val then
13331334
# TODO what are the allowed things in the value?
13341335
val := StringFormatted("\"{}\"", val);
13351336
fi;

tst/examples/angles.tst

Lines changed: 74 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,80 @@ gap> GraphvizSetAttr(cluster2, "label",
6666
<graphviz digraph cluster_2 with 9 nodes and 0 edges>
6767
gap> GraphvizAddEdge(g, "n5", "n14");
6868
<graphviz edge (n5, n14)>
69-
gap> AsString(g);
70-
"//dot\ndigraph G {\n\tbgcolor=blue \nsubgraph cluster_1 {\n\tfontcolor=white \
71-
node[shape=circle, style=filled,fillcolor=\"white:black\", gradientangle=360, \
72-
label=\"n9:n360\",fontcolor=black] label=\"Linear Angle Variations (white to b\
73-
lack gradient)\" \n\tn9\n\tn8 [gradientangle=315, label=\"n8:315\"]\n\tn7 [gra\
74-
dientangle=270, label=\"n7:270\"]\n\tn6 [gradientangle=225, label=\"n6:225\"]\
75-
\n\tn5 [gradientangle=180, label=\"n5:180\"]\n\tn4 [gradientangle=135, label=\
76-
\"n4:135\"]\n\tn3 [gradientangle=90, label=\"n3:90\"]\n\tn2 [gradientangle=45,\
77-
label=\"n2:45\"]\n\tn1 [gradientangle=0, label=\"n1:0\"]\n}\nsubgraph cluster\
78-
_2 {\n\tfontcolor=white node[shape=circle, style=radial,fillcolor=\"white:blac\
79-
k\", gradientangle=360,label=\"n9:n360\", fontcolor=black] label=\"Radial Angl\
80-
e Variations (white to black gradient)\" \n\tn18\n\tn17 [gradientangle=315, la\
81-
bel=\"n17:315\"]\n\tn16 [gradientangle=270, label=\"n16:270\"]\n\tn15 [gradien\
82-
tangle=225, label=\"n15:225\"]\n\tn14 [gradientangle=180, label=\"n14:180\"]\n\
83-
\tn13 [gradientangle=135, label=\"n13:135\"]\n\tn12 [gradientangle=90, label=\
84-
\"n12:90\"]\n\tn11 [gradientangle=45, label=\"n11:45\"]\n\tn10 [gradientangle=\
85-
0, label=\"n10:0\"]\n}\n\tn5 -> n14\n}\n"
69+
70+
#@if CompareVersionNumbers(GAPInfo.Version, "4.12.0")
71+
gap> Print(AsString(g));
72+
//dot
73+
digraph G {
74+
bgcolor=blue
75+
subgraph cluster_1 {
76+
fontcolor=white node[shape=circle, style=filled,fillcolor="white:black", grad\
77+
ientangle=360, label="n9:n360",fontcolor=black] label="Linear Angle Variations\
78+
(white to black gradient)"
79+
n9
80+
n8 [gradientangle=315, label="n8:315"]
81+
n7 [gradientangle=270, label="n7:270"]
82+
n6 [gradientangle=225, label="n6:225"]
83+
n5 [gradientangle=180, label="n5:180"]
84+
n4 [gradientangle=135, label="n4:135"]
85+
n3 [gradientangle=90, label="n3:90"]
86+
n2 [gradientangle=45, label="n2:45"]
87+
n1 [gradientangle=0, label="n1:0"]
88+
}
89+
subgraph cluster_2 {
90+
fontcolor=white node[shape=circle, style=radial,fillcolor="white:black", grad\
91+
ientangle=360,label="n9:n360", fontcolor=black] label="Radial Angle Variations\
92+
(white to black gradient)"
93+
n18
94+
n17 [gradientangle=315, label="n17:315"]
95+
n16 [gradientangle=270, label="n16:270"]
96+
n15 [gradientangle=225, label="n15:225"]
97+
n14 [gradientangle=180, label="n14:180"]
98+
n13 [gradientangle=135, label="n13:135"]
99+
n12 [gradientangle=90, label="n12:90"]
100+
n11 [gradientangle=45, label="n11:45"]
101+
n10 [gradientangle=0, label="n10:0"]
102+
}
103+
n5 -> n14
104+
}
105+
#@else
106+
gap> Print(AsString(g));
107+
//dot
108+
digraph G {
109+
bgcolor=blue
110+
subgraph cluster_1 {
111+
fontcolor=white node[shape=circle, style=filled,fillcolor="white:black", grad\
112+
ientangle=360, la\
113+
bel="n9:n360",fontcolor=black] label="Linear Angle Variations (white to black \
114+
gradient)"
115+
n9
116+
n8 [gradientangle=315, label="n8:315"]
117+
n7 [gradientangle=270, label="n7:270"]
118+
n6 [gradientangle=225, label="n6:225"]
119+
n5 [gradientangle=180, label="n5:180"]
120+
n4 [gradientangle=135, label="n4:135"]
121+
n3 [gradientangle=90, label="n3:90"]
122+
n2 [gradientangle=45, label="n2:45"]
123+
n1 [gradientangle=0, label="n1:0"]
124+
}
125+
subgraph cluster_2 {
126+
fontcolor=white node[shape=circle, style=radial,fillcolor="white:black", grad\
127+
ientangle=360,lab\
128+
el="n9:n360", fontcolor=black] label="Radial Angle Variations (white to black \
129+
gradient)"
130+
n18
131+
n17 [gradientangle=315, label="n17:315"]
132+
n16 [gradientangle=270, label="n16:270"]
133+
n15 [gradientangle=225, label="n15:225"]
134+
n14 [gradientangle=180, label="n14:180"]
135+
n13 [gradientangle=135, label="n13:135"]
136+
n12 [gradientangle=90, label="n12:90"]
137+
n11 [gradientangle=45, label="n11:45"]
138+
n10 [gradientangle=0, label="n10:0"]
139+
}
140+
n5 -> n14
141+
}
142+
#@fi
86143

87144
#
88145
gap> STOP_TEST("graphviz package: angles.tst");

tst/examples/btree.tst

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -55,44 +55,19 @@ gap> GraphvizAddEdge(s, "node4:f2", "node6:f1");
5555
<graphviz edge (node4:f2, node6:f1)>
5656
gap> GraphvizAddEdge(s, "node4:f0", "node5:f1");
5757
<graphviz edge (node4:f0, node5:f1)>
58-
gap> Print(AsString(s));
59-
//dot
60-
digraph g {
61-
node [shape=record, height=.1]
62-
node0 [label="<f0> |<f1> G|<f2>"]
63-
node1 [label="<f0> |<f1> E|<f2>"]
64-
node2 [label="<f0> |<f1> B|<f2>"]
65-
node3 [label="<f0> |<f1> F|<f2>"]
66-
node4 [label="<f0> |<f1> R|<f2>"]
67-
node5 [label="<f0> |<f1> H|<f2>"]
68-
node6 [label="<f0> |<f1> Y|<f2>"]
69-
node7 [label="<f0> |<f1> A|<f2>"]
70-
node8 [label="<f0> |<f1> C|<f2>"]
71-
node0:f2
72-
node4:f1
73-
node0:f2 -> node4:f1
74-
node0:f0
75-
node1:f1
76-
node0:f0 -> node1:f1
77-
node1:f0
78-
node2:f1
79-
node1:f0 -> node2:f1
80-
node1:f2
81-
node3:f1
82-
node1:f2 -> node3:f1
83-
node2:f2
84-
node8:f1
85-
node2:f2 -> node8:f1
86-
node2:f0
87-
node7:f1
88-
node2:f0 -> node7:f1
89-
node4:f2
90-
node6:f1
91-
node4:f2 -> node6:f1
92-
node4:f0
93-
node5:f1
94-
node4:f0 -> node5:f1
95-
}
58+
gap> AsString(s) =
59+
> "//dot\ndigraph g {\n\tnode [shape=record, height=.1] \n\tnode0 [label=\"<f0> \
60+
> |<f1> G|<f2>\"]\n\tnode1 [label=\"<f0> |<f1> E|<f2>\"]\n\tnode2 [label=\"<f0> \
61+
> |<f1> B|<f2>\"]\n\tnode3 [label=\"<f0> |<f1> F|<f2>\"]\n\tnode4 [label=\"<f0> \
62+
> |<f1> R|<f2>\"]\n\tnode5 [label=\"<f0> |<f1> H|<f2>\"]\n\tnode6 [label=\"<f0> \
63+
> |<f1> Y|<f2>\"]\n\tnode7 [label=\"<f0> |<f1> A|<f2>\"]\n\tnode8 [label=\"<f0> \
64+
> |<f1> C|<f2>\"]\n\tnode0:f2\n\tnode4:f1\n\tnode0:f2 -> node4:f1\n\tnode0:f0\n\
65+
> \tnode1:f1\n\tnode0:f0 -> node1:f1\n\tnode1:f0\n\tnode2:f1\n\tnode1:f0 -> node\
66+
> 2:f1\n\tnode1:f2\n\tnode3:f1\n\tnode1:f2 -> node3:f1\n\tnode2:f2\n\tnode8:f1\n\
67+
> \tnode2:f2 -> node8:f1\n\tnode2:f0\n\tnode7:f1\n\tnode2:f0 -> node7:f1\n\tnode\
68+
> 4:f2\n\tnode6:f1\n\tnode4:f2 -> node6:f1\n\tnode4:f0\n\tnode5:f1\n\tnode4:f0 -\
69+
> > node5:f1\n}\n";
70+
true
9671

9772
#
9873
gap> STOP_TEST("graphviz package: btree.tst");

tst/examples/cluster.tst

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -74,40 +74,14 @@ gap> GraphvizSetAttr(graph["end"], "shape", "Msquare");
7474
<graphviz node end>
7575

7676
#
77-
gap> Print(AsString(graph));
78-
//dot
79-
digraph G {
80-
subgraph cluster_0 {
81-
color="lightgrey" style="filled" node [color="white", style="filled"] label="\
82-
process #1"
83-
a0
84-
a1
85-
a0 -> a1
86-
a2
87-
a1 -> a2
88-
a3
89-
a2 -> a3
90-
}
91-
subgraph cluster_1 {
92-
color="blue" node [style="filled"] label="process #2"
93-
b0
94-
b1
95-
b0 -> b1
96-
b2
97-
b1 -> b2
98-
b3
99-
b2 -> b3
100-
}
101-
start [shape=Mdiamond]
102-
start -> a0
103-
start -> b0
104-
a1 -> b3
105-
b2 -> a3
106-
a3 -> a0
107-
end [shape=Msquare]
108-
a3 -> end
109-
b3 -> end
110-
}
77+
gap> AsString(graph);
78+
"//dot\ndigraph G {\nsubgraph cluster_0 {\n\tcolor=\"lightgrey\" style=\"fille\
79+
d\" node [color=\"white\", style=\"filled\"] label=\"process #1\" \n\ta0\n\ta1\
80+
\n\ta0 -> a1\n\ta2\n\ta1 -> a2\n\ta3\n\ta2 -> a3\n}\nsubgraph cluster_1 {\n\tc\
81+
olor=\"blue\" node [style=\"filled\"] label=\"process #2\" \n\tb0\n\tb1\n\tb0 \
82+
-> b1\n\tb2\n\tb1 -> b2\n\tb3\n\tb2 -> b3\n}\n\tstart [shape=Mdiamond]\n\tstar\
83+
t -> a0\n\tstart -> b0\n\ta1 -> b3\n\tb2 -> a3\n\ta3 -> a0\n\tend [shape=Msqua\
84+
re]\n\ta3 -> end\n\tb3 -> end\n}\n"
11185

11286
#
11387
gap> STOP_TEST("graphviz package: cluster.tst");

tst/examples/cluster_edge.tst

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -53,34 +53,11 @@ gap> GraphvizSetAttr(e, "ltail", "cluster0");
5353
<graphviz edge (c, e)>
5454
gap> GraphvizAddEdge(g, "d", "h");
5555
<graphviz edge (d, h)>
56-
gap> Print(AsString(g));
57-
//dot
58-
digraph G {
59-
compound=true
60-
subgraph cluster0 {
61-
a
62-
b
63-
a -> b
64-
c
65-
a -> c
66-
d
67-
b -> d
68-
c -> d
69-
}
70-
subgraph cluster1 {
71-
e
72-
g
73-
e -> g
74-
f
75-
e -> f
76-
}
77-
b -> f [lhead=cluster1]
78-
d -> e
79-
c -> g [lhead=cluster1, ltail=cluster0]
80-
c -> e [ltail=cluster0]
81-
h
82-
d -> h
83-
}
56+
gap> AsString(g);
57+
"//dot\ndigraph G {\n\tcompound=true \nsubgraph cluster0 {\n\ta\n\tb\n\ta -> b\
58+
\n\tc\n\ta -> c\n\td\n\tb -> d\n\tc -> d\n}\nsubgraph cluster1 {\n\te\n\tg\n\t\
59+
e -> g\n\tf\n\te -> f\n}\n\tb -> f [lhead=cluster1]\n\td -> e\n\tc -> g [lhead\
60+
=cluster1, ltail=cluster0]\n\tc -> e [ltail=cluster0]\n\th\n\td -> h\n}\n"
8461

8562
#
8663
gap> STOP_TEST("graphviz package: cluster_edge.tst");

tst/examples/colors.tst

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,15 @@ gap> GraphvizSetAttr(node, "fillcolor", "deeppink");
5454
<graphviz node name: deeppink>
5555

5656
#
57-
gap> Print(AsString(g));
57+
gap> AsString(g);
5858
#I invalid node name RGB: #40e0d0 using "RGB: #40e0d0" instead
5959
#I invalid node name RGBA: #ff000042 using "RGBA: #ff000042" instead
6060
#I invalid node name HSV: 0.051 0.718 0.627 using "HSV: 0.051 0.718 0.627" instead
6161
#I invalid node name name: deeppink using "name: deeppink" instead
62-
//dot
63-
graph {
64-
"RGB: #40e0d0" [fillcolor="#40e0d0", style=filled]
65-
"RGBA: #ff000042" [fillcolor="#ff000042", style=filled]
66-
"HSV: 0.051 0.718 0.627" [fillcolor="0.051 0.718 0.627", style=filled]
67-
"name: deeppink" [fillcolor=deeppink, style=filled]
68-
}
62+
"//dot\ngraph {\n\t\"RGB: #40e0d0\" [fillcolor=\"\"#40e0d0\"\", style=filled]\
63+
\n\t\"RGBA: #ff000042\" [fillcolor=\"\"#ff000042\"\", style=filled]\n\t\"HSV: \
64+
0.051 0.718 0.627\" [fillcolor=\"0.051 0.718 0.627\", style=filled]\n\t\"name:\
65+
deeppink\" [fillcolor=deeppink, style=filled]\n}\n"
6966

7067
#
7168
gap> STOP_TEST("graphviz package: colors.tst");

tst/examples/er.tst

Lines changed: 18 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
gap> START_TEST("graphviz package: examples/er.tst");
1616
gap> LoadPackage("graphviz");
1717
true
18+
19+
#
1820
gap> e := GraphvizGraph("ER");
1921
<graphviz graph ER with 0 nodes and 0 edges>
2022
gap> GraphvizSetAttr(e, "engine=\"neato\"");
@@ -102,7 +104,7 @@ gap> GraphvizSetAttr(e, "fontsize=\"20\"");
102104
<graphviz graph ER with 0 nodes and 12 edges>
103105

104106
#
105-
gap> Print(AsString(e));
107+
gap> AsString(e);
106108
#I invalid node name C-I using "C-I" instead
107109
#I invalid node name S-C using "S-C" instead
108110
#I invalid node name S-I using "S-I" instead
@@ -112,50 +114,21 @@ gap> Print(AsString(e));
112114
#I invalid node name S-I using "S-I" instead
113115
#I invalid node name S-C using "S-C" instead
114116
#I invalid node name S-C using "S-C" instead
115-
//dot
116-
graph ER {
117-
engine="neato" label="Entity Relation Diagram
118-
drawn by NEATO" fontsize="20"
119-
// context_start context
120-
node[shape="box"]
121-
course
122-
institute
123-
student
124-
engine="neato" label="Entity Relation Diagram
125-
drawn by NEATO" fontsize="20"
126-
127-
// context1 context
128-
node [shape="ellipse"]
129-
name0 [label=name]
130-
name1 [label=name]
131-
name2 [label=name]
132-
code
133-
grade
134-
number
135-
engine="neato" label="Entity Relation Diagram
136-
drawn by NEATO" fontsize="20"
137-
138-
// context2 context
139-
node [shape="diamond", style="filled", color="lightgrey"]
140-
"C-I"
141-
"S-C"
142-
"S-I"
143-
engine="neato" label="Entity Relation Diagram
144-
drawn by NEATO" fontsize="20"
145-
146-
name0 -- course
147-
code -- course
148-
"C-I" -- course [label=n, len=1.00]
149-
institute -- "C-I" [label=1, len=1.00]
150-
name1 -- institute
151-
"S-I" -- institute [label=1, len=1.00]
152-
student -- "S-I" [label=n, len=1.00]
153-
grade -- student
154-
name2 -- student
155-
number -- student
156-
"S-C" -- student [label=m, len=1.00]
157-
course -- "S-C" [label=n, len=1.00]
158-
}
117+
"//dot\ngraph ER {\n\tengine=\"neato\" label=\"Entity Relation Diagram\ndrawn \
118+
by NEATO\" fontsize=\"20\" \n// context_start context \n\tnode[shape=\"box\"] \
119+
\n\tcourse\n\tinstitute\n\tstudent\n\tengine=\"neato\" label=\"Entity Relation\
120+
Diagram\ndrawn by NEATO\" fontsize=\"20\" \n\n// context1 context \n\tnode [s\
121+
hape=\"ellipse\"] \n\tname0 [label=name]\n\tname1 [label=name]\n\tname2 [label\
122+
=name]\n\tcode\n\tgrade\n\tnumber\n\tengine=\"neato\" label=\"Entity Relation \
123+
Diagram\ndrawn by NEATO\" fontsize=\"20\" \n\n// context2 context \n\tnode [sh\
124+
ape=\"diamond\", style=\"filled\", color=\"lightgrey\"] \n\t\"C-I\"\n\t\"S-C\"\
125+
\n\t\"S-I\"\n\tengine=\"neato\" label=\"Entity Relation Diagram\ndrawn by NEAT\
126+
O\" fontsize=\"20\" \n\n\tname0 -- course\n\tcode -- course\n\t\"C-I\" -- cour\
127+
se [label=n, len=1.00]\n\tinstitute -- \"C-I\" [label=1, len=1.00]\n\tname1 --\
128+
institute\n\t\"S-I\" -- institute [label=1, len=1.00]\n\tstudent -- \"S-I\" [\
129+
label=n, len=1.00]\n\tgrade -- student\n\tname2 -- student\n\tnumber -- studen\
130+
t\n\t\"S-C\" -- student [label=m, len=1.00]\n\tcourse -- \"S-C\" [label=n, len\
131+
=1.00]\n}\n"
159132

160133
#
161134
gap> STOP_TEST("graphviz package: er.tst");

0 commit comments

Comments
 (0)