示例#1
0
        public string ToString(string format, IFormatProvider formatProvider)
        {
            if (formatProvider == null)
            {
                formatProvider = new DOTFormatProvider();
            }
            var formatter = (ICustomFormatter)formatProvider.GetFormat(typeof(ICustomFormatter));

            return(formatter.Format(format, this, formatProvider));
        }
示例#2
0
        public string Format(string format, object arg, IFormatProvider formatProvider)
        {
            if (formatProvider == null)
            {
                formatProvider = new DOTFormatProvider();
            }
            if (arg is Vertex v)
            {
                switch (format.Replace("X", "").Replace("L", "").Replace("W", ""))
                {
                case "GV":
                    return("\"" + v.ID.ToString() + "\\n(" + v.Value.ToString() + ")\"");

                case "VG":
                    return("\"" + v.Value.ToString() + "\\n(" + v.ID.ToString() + ")\"");

                case "V":
                    return("\"" + v.Value.ToString() + "\"");

                case "G":
                default:
                    return(v.ID.ToString());
                }
            }
            else if (arg is Edge e)
            {
                string attr = "";
                switch (format.Replace("X", "").Replace("G", "").Replace("V", ""))
                {
                case "LW":
                    attr = " [label=\"" + e.Label + "\\n(" + e.Weight.ToString() + ")\"]";
                    break;

                case "WL":
                    attr = " [label=\"" + e.Weight.ToString() + "\\n(" + e.Label + ")\"]";
                    break;

                case "W":
                    attr = " [label=\"" + e.Weight.ToString() + "\"]";
                    break;

                case "L":
                    attr = " [label=\"" + e.Label + "\"]";
                    break;

                default:
                    attr = "";
                    break;
                }
                return(e.Tail.ToString(format, formatProvider) + Edge.ToDirectedDOTNotation(e.Directed) + e.Head.ToString(format, formatProvider) + attr);
            }
            else if (arg is Graph g)
            {
                StringBuilder sb = new StringBuilder();
                HashSet <int> labeledVertices = new HashSet <int>();
                sb.AppendLine((g.DirectedEdgeCount > 0 ? "di" : "") + "graph " + g.Name + " {");
                sb.AppendLine(" node [fontsize = \"12\"];");
                sb.AppendLine(" edge [fontsize = \"8\"];");
                foreach (var edge in g.Edges.Values)
                {
                    if (format.Contains("X"))
                    {
                        labeledVertices.Add(edge.Tail.ID);
                        labeledVertices.Add(edge.Head.ID);
                    }
                    sb.AppendLine(" " + edge.ToString(format, formatProvider) + ";");
                }
                foreach (var id in labeledVertices)
                {
                    sb.AppendLine(" " + id.ToString() + " [label=\"" + g.Vertices[id].Value.ToString() + "\"];");
                }
                sb.AppendLine("}");
                return(sb.ToString());
            }
            else
            {
                throw new ArgumentException("Unsupported argument type.", "arg");
            }
        }