private static void CreateNodes(XNamespace ns, XElement nodes, DgmlNode dgmlNode) { XElement node; if (dgmlNode.Category == "SyntaxToken") { node = new XElement(ns + "Node", new XAttribute("Id", dgmlNode.Id), new XAttribute("Category", dgmlNode.Category), new XAttribute("Label", dgmlNode.Label)); } else { node = new XElement(ns + "Node", new XAttribute("Id", dgmlNode.Id), new XAttribute("Category", dgmlNode.Category), new XAttribute("Label", dgmlNode.Kind)); } nodes.Add(node); foreach (var childNode in dgmlNode.Childs) { CreateNodes(ns, nodes, childNode); } }
private static void CreateLinks(XNamespace ns, XElement links, DgmlNode dgmlNode) { foreach (var childNode in dgmlNode.Childs) { var link = new XElement(ns + "Link", new XAttribute("Source", dgmlNode.Id), new XAttribute("Target", childNode.Id)); links.Add(link); CreateLinks(ns, links, childNode); } }
private static void WriteAndOpenDgml(DgmlNode dgmlNodes) { var fileName = @"..\..\syntax.dgml"; var document = new XDocument(); XNamespace ns = "http://schemas.microsoft.com/vs/2009/dgml"; var nodes = new XElement(ns + "Nodes"); var links = new XElement(ns + "Links"); var styles = new XElement(ns + "Styles"); CreateNodes(ns, nodes, dgmlNodes); CreateLinks(ns, links, dgmlNodes); CreateStyles(ns, styles); document.Add(new XElement(ns + "DirectedGraph", nodes, links, styles)); document.Save(fileName); }
private static DgmlNode ProcessNode(SyntaxNode node, int indent = 0) { var dgmlNode = DgmlNode.Create(node); PrintNode(dgmlNode, indent); foreach (var childNodeOrToken in node.ChildNodesAndTokens()) { if (childNodeOrToken.IsNode) { dgmlNode.AddChild(ProcessNode((SyntaxNode)childNodeOrToken, indent + 1)); } else if (childNodeOrToken.IsToken) { dgmlNode.AddChild(ProcessToken((SyntaxToken)childNodeOrToken, indent + 1)); } } return(dgmlNode); }
private static void PrintNode(DgmlNode dgmlNode, int indent) { Console.WriteLine(string.Join("", Enumerable.Repeat(" ", indent)) + dgmlNode); }
public void AddChild(DgmlNode childNode) { this.childNodes.Add(childNode); }