Lately I’ve been trying to debug and make-sane Pydot’s parsing and quoting rules, when constructing and generating DOT code.
According to the documented grammar, node_id
values (which can contain port
values and compass_pt
directions), can appear both on the endpoints of an edge_stmt
, or in the start of a node_stmt
.
The edge_stmt
I totally get, but the node_stmt
implies that DOT code like this is valid and has a purpose:
digraph {
node2:port5:nw [label="Node2!", color="red"];
node1:port1 -> node2:port5:nw;
}
But… does it, actually? It seems functionally identical to this:
digraph {
node2 [label="Node2!", color="red"];
node1:port1 -> node2:port5:nw;
}
Obviously that’s a contrived example since the ports in question aren’t actually defined anywhere. But even assuming they are, do complex node_stmt
s like that have any purpose? Is there some context in which there’s a difference between these?
nodeM [label="foo", color="red"];
nodeM:portN:sw [label="foo", color="red"];
1 Like
It doesn’t have any meaning. It was a small mistake in the language design to allow this.
1 Like
Cool, thanks! That’s good to know, actually, because that means we’re probably pretty safe to assume that a user who writes something like this…
import pydot
G = pydot.Dot("Class schedule", "graph")
G.add_node(pydot.Node("01:Math", color="blue"))
G.add_node(pydot.Node("02:Chemistry", color="blue"))
G.add_node(pydot.Node("03:English", color="red"))
G.add_node(pydot.Node("04:Phys.Ed", color="green"))
G.add_node(pydot.Node("05:Lunch", color="yellow"))
G.add_node(pydot.Node("06:French", color="red"))
G.add_node(pydot.Node("07:Physics", color="blue"))
Probably want this output from G.to_string()
:
graph "Class schedule" {
"01:Math" [color=blue];
"02:Chemistry" [color=blue];
"03:English" [color=red];
"04:Phys.Ed" [color=green];
"05:Lunch" [color=yellow];
"06:French" [color=red];
"07:Physics" [color=blue];
}
(despite them not double-double-quoting all of the node names). And not a set of numbered nodes, each of which has a port named “Math”, “Chemistry”, “English”, etc…