protected void AddEdges(DotGraphWriter g, NodeIndex index)
        {
            Node nd = nodeOf[index];

            if (nd == null)
            {
                return;
            }
            foreach (EdgeIndex edge in dg.EdgesInto(index))
            {
                NodeIndex sourceIndex = dg.SourceOf(edge);
                Node      nd2         = nodeOf[sourceIndex];
                if (nd2 == null)
                {
                    continue;
                }
                GVEdgeStyle style = GetEdgeStyle(edge);
                Edge        e;
                if ((style & GVEdgeStyle.Back) > 0)
                {
                    e                   = g.AddEdge(nd.ID, nd2.ID);
                    e.Color             = Color.Red;
                    e.ArrowheadAtSource = ArrowheadStyle.Normal;
                    e.ArrowheadAtTarget = ArrowheadStyle.None;
                    if ((style & GVEdgeStyle.Blue) > 0)
                    {
                        e.Color = Color.Purple;
                    }
                }
                else
                {
                    e = g.AddEdge(nd2.ID, nd.ID);
                    if ((style & GVEdgeStyle.Blue) > 0)
                    {
                        e.Color = Color.Blue;
                    }
                    if ((style & GVEdgeStyle.Dimmed) > 0)
                    {
                        e.Color = Color.LightGray;
                    }
                }
                if (edgeName != null)
                {
                    e.Label = edgeName(edge);
                }
                if ((style & GVEdgeStyle.Bold) > 0)
                {
                    e.Width = 2;
                }
                if ((style & GVEdgeStyle.Dashed) > 0)
                {
                    e.Style = DOTEdgeStyle.Dashed;
                }
            }
        }
        protected GVEdgeStyle GetEdgeStyle(EdgeIndex index)
        {
            GVEdgeStyle style = GVEdgeStyle.Black;

            if (edgeStyles != null)
            {
                foreach (var esp in edgeStyles)
                {
                    if (esp.Predicate(index))
                    {
                        style |= esp.Style;
                    }
                }
            }
            return(style);
        }