1) make edge sets between the same node pair bend symmetrically in opposite directions and place their labels sensibly on the path, without z-clashing eachother.
2) adjust self loop draw logic to handle multiple self loops and place the label visually inside the loop.
3) add in the padding, border, margin idea and correctly compute the bounding box accounting for all visual elements (start edge, self loops, edges, nodes, labels).
4) experiment with layout strategies to produce always beautiful renderings of the regexes.