Kyle Judy; 4/30/2025
I've been using this excellent utility, graphviz, to construct directed
graphs for my upcoming classlist at Mines, and I gotta say for throwing
together a quick and dirty digraph there's really nothing like it. It comes to
a head when you try to use it for convenience, for example yesterday I was
working on updating it with new class choices. I wanted to adjust a few nodes
and change their colors and other styling options around. Here's where my
comfortableness with HTML+CSS comes to a head with graphviz' age.
This was a language designed before CSS was really a thing. Back then you had to style things in HTML by manually editing tags for nodes. For example, if you want a block of text to be centered, instead of:
p {
display: block;
margin-left: auto;
margin-right: auto;
}
you had to include align="center" in every <p> element you wanted
centered. This is where graphviz feels like HTML 1.0, you can't assign
classes to nodes and style based on classes. This means that for every node I
wanted to style, I had to explicitly state the node and then the styling
options. So, instead of:
{ CSCI210 CSCI220 CSCI341 CSCI403 } [fillcolor="grey"]
You need to specify fillcolor="grey" for each individual node. Not only
does this muddy the code, it just is a real pain in the ass to use. No wonder
GUI programs to take this over won out. So, if I were to contribute to the
graphviz project, I'd like this to change. For fun, here's what I'd envision
my extension to look like:
/* For nodes, you can set class="", which functions exactly like HTML classes. */
CSCI210 [class="planned"]
/* Then, later on in the digraph{}, you can specify a style section */
style {
planned {
fillcolor="lightgreen"
}
}
/* Extremely fancy CSS stuff not planned, no child node inheriting the styling
of the parent node (unless that's part of graphviz already, haven't really
delved that deep.) */
So, yeah, that's my idea.