Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
 private bool ParseDotCode(string dotCode)
 {
     try
     {
         _parsingResult = DotParser.parse(dotCode);
     }
     catch (Exception e)
     {
         ParsingErrors = e.Message;
         return(false);
     }
     return(true);
 }
Ejemplo n.º 4
0
 public static void Parse(string path, DiagramCanvas diagram) {
    var parser = new DotParser(path, diagram);
 }