CFGLib.Parsers.Graphs.Graph.ToDot C# (CSharp) Method

ToDot() private method

private ToDot ( ) : string
return string
		internal string ToDot() {
			var retval = "";

			var highestRank = 0;
			var rankDict = new Dictionary<int, List<INode>>();

			foreach (var node in Nodes) {
				if (node.Rank > highestRank) {
					highestRank = node.Rank;
				}
				List<INode> list;
				if (!rankDict.TryGetValue(node.Rank, out list)) {
					list = new List<INode>();
					rankDict[node.Rank] = list;
				}
				list.Add(node);
			}

			retval += "digraph G {\n";

			//retval += "splines = true;\n";
			//retval += "sep = \"+25,25\";\n";
			//retval += "overlap=scalexy\n";
			retval += "nodesep=0.6;\n";
			retval += "ranksep = \"0.6 equally\"\n";

			//retval += "rankdir=\"LR\"\n";
			retval += string.Join("->", Enumerable.Range(0, highestRank + 1).Select((i) => string.Format("x{0}", i))) + "[style=invis]\n";
			retval += string.Join("\n", Enumerable.Range(0, highestRank + 1).Select((i) => string.Format("x{0} [style=invis]", i))) + "\n";
			retval += "x00 [style=invis]\n";

			// retval += string.Format("{{rank = source; \"{0}\" x0}}\n", _root.Name);
			retval += string.Format("{{rank = source; x00}}\n");
			retval += string.Format("x00 -> \"{0}\"\n", _root.Name);

			foreach (var pair in rankDict) {
				var rank = pair.Key;
				var list = pair.Value;
				var nodeNames = string.Join(" ", list.Select((n) => "\"" + n.Name + "\""));
				retval += string.Format("{{rank = same; {0} x{1}}}\n", nodeNames, rank);
			}

			// retval += Key();

			// retval += "graph [ordering=out];\n";
			var nodes = Nodes.ToList();
			nodes.Sort((a, b) => {
				if (a.StartPosition < b.StartPosition) {
					return -1;
				} else if (a.StartPosition > b.StartPosition) {
					return 1;
				} else if (a.EndPosition < b.EndPosition) {
					return -1;
				} else if (a.EndPosition > b.EndPosition) {
					return 1;
				} else {
					return 0;
				}
			});
			foreach (var node in nodes) {
				retval += string.Format("\"{0}\" [{4} shape={2} style=filled fillcolor={3} label=\"{1}\" {5}];\n", node.Name, node.Label, node.Shape, node.Color, node.Ordering, node.Other);
			}
			foreach (var edge in Edges) {
				retval += string.Format("\"{0}\" -> \"{1}\" [label=\"{2}\"]\n", edge.Left.Name, edge.Right.Name, edge.Label?.ToStringNoWeight());
			}
			retval += "}\n";
			return retval;
		}