private IList <NodePort> HandleSubgraph(DotGrammarParser.SubgraphContext context) { var nodeList = new List <NodePort>(); if (context == null) { return(nodeList); } var id = context.id() == null ? string.Format(CultureInfo.InvariantCulture, ModelHelper.NewSubGraphFormat, ParsedGraph.GetSubGraphs().Count() + 1) : context.id().GetText(); var graphAttrs = GetGraphAttributes(context.stmt_list().stmt()); var nodeAttrs = GetNodeAttributes(context.stmt_list().stmt()); var edgeAttrs = GetEdgeAttributes(context.stmt_list().stmt()); CurrentSubGraph = CurrentSubGraph.CreateSubGraph(id, graphAttrs, nodeAttrs, edgeAttrs); foreach (var stmtContext in context.stmt_list().stmt()) { nodeList.AddRange(HandleNode(stmtContext.node_stmt())); nodeList.AddRange(HandleEdgeLine(stmtContext.edge_stmt())); nodeList.AddRange(HandleSubgraph(stmtContext.subgraph())); HandleExitSubgraph(stmtContext.subgraph()); } return(nodeList); }
private void HandleExitSubgraph(DotGrammarParser.SubgraphContext context) { if (context == null) { return; } CurrentSubGraph = CurrentSubGraph.Parent; }