/// <param name="dotSource"></param> /// <param name="createGraph">Graph constructor function</param> /// <param name="vertexFunc">Packing function (see VertexFunctions class)</param> /// <param name="edgeFunc">Packing function (see EdgeFunctions class)</param> internal static IMutableVertexAndEdgeSet <TVertex, TEdge> LoadDot <TVertex, TEdge>(string dotSource, Func <bool, IMutableVertexAndEdgeSet <TVertex, TEdge> > createGraph, Func <string, Attributes, TVertex> vertexFunc, Func <TVertex, TVertex, Attributes, TEdge> edgeFunc) where TEdge : IEdge <TVertex> { var graphData = DotParser.parse(dotSource); var graph = createGraph(!graphData.IsStrict); foreach (var node in graphData.Nodes) { graph.AddVertex(vertexFunc(node.Key, node.Value)); } foreach (var parallelEdges in graphData.Edges) { var vertices = parallelEdges.Key; var v1 = vertexFunc(vertices.Item1, graphData.Nodes[vertices.Item1]); var v2 = vertexFunc(vertices.Item2, graphData.Nodes[vertices.Item2]); foreach (var attr in parallelEdges.Value) { graph.AddEdge(edgeFunc(v1, v2, attr)); } } return(graph); }
/// <param name="dotSource"></param> /// <param name="createGraph">Graph constructor function</param> /// <param name="vertexFunc">Packing function (see VertexFactory class)</param> /// <param name="edgeFunc">Packing function (see EdgeFactory class)</param> internal static IMutableVertexAndEdgeSet <TVertex, TEdge> LoadDot <TVertex, TEdge>(string dotSource, Func <bool, IMutableVertexAndEdgeSet <TVertex, TEdge> > createGraph, Func <string, Attributes, TVertex> vertexFunc, Func <TVertex, TVertex, Attributes, TEdge> edgeFunc) where TEdge : IEdge <TVertex> { var graphData = DotParser.parse(dotSource); var graph = createGraph(!graphData.IsStrict); var vertices = graphData.Nodes.ToDictionary(v => v.Key, v => vertexFunc(v.Key, v.Value)); graph.AddVertexRange(vertices.Values); foreach (var parallelEdges in graphData.Edges) { var edgeVertices = parallelEdges.Key; foreach (var attr in parallelEdges.Value) { graph.AddEdge(edgeFunc(vertices[edgeVertices.Item1], vertices[edgeVertices.Item2], attr)); if (graph.IsDirected && !graphData.IsDirected) { graph.AddEdge(edgeFunc(vertices[edgeVertices.Item2], vertices[edgeVertices.Item1], attr)); } } } return(graph); }
private bool ParseDotCode(string dotCode) { try { _parsingResult = DotParser.parse(dotCode); } catch (Exception e) { ParsingErrors = e.Message; return(false); } return(true); }
public static void Parse(string path, DiagramCanvas diagram) { var parser = new DotParser(path, diagram); }