Another try at fixing the bug involving the parser and edges involving subgraphs.
For example consider
digraph G { a -> b -> {c d} }
digraph G { {rank=same; X Y} a -> X -> Y}
digraph G { a -> b -> {rank=same; X -> Y [color=red]} [color=blue]; }
In the last example the parser has to keep the anonymous subgraph around
as part of the edgelist being constructed, but when [color=blue] is parsed
it is no longer the "current subgraph". There are Details. One idea is
that if this continues to be a source of errors, we could overhaul the
parser a bit more aggressively to make better use of the parser's own
stack and employ appropriate types for nodelist, subgraph, edgelist, attrlist
etc. rather than rely on the explicit stack gstack_t *S. Something to consider.