private void GenerateLines(List <Node> nodes) { for (int i = 0; i < nodes.Count; i++) { var node = nodes[i]; if (node is IfNode) { IfNode ifNode = node as IfNode; if (ifNode.TrueNodes.Any()) { ifNode.GetExitPoint("True").SetTarget(ifNode.TrueNodes.First(), null, null); } if (ifNode.FalseNodes.Any()) { ifNode.GetExitPoint("False").SetTarget(ifNode.FalseNodes.First(), null, null); } GenerateLines(ifNode.TrueNodes); GenerateLines(ifNode.FalseNodes); if (i < nodes.Count - 1) { ifNode.GetExitPoint("Exit").SetTarget(nodes[i + 1].GetFirst(), null, null); } } else if (node is WhileNode) { WhileNode whileNode = node as WhileNode; if (!whileNode.Repeat) { whileNode.GetExitPoint("Start").SetTarget(whileNode.children.First(), null, null); } GenerateLines(whileNode.children); whileNode.children.Last().GetExitPoint(whileNode.Repeat ? "Start" : "Exit").SetTarget(whileNode.GetFirst(), whileNode.Repeat ? null : whileNode, null); if (i < nodes.Count - 1) { if (!whileNode.Repeat) { whileNode.GetExitPoint("Exit").SetTarget(nodes[i + 1].GetFirst(), whileNode, null); } else { whileNode.children.Last().GetExitPoint("Exit").SetTarget(nodes[i + 1].GetFirst(), null, null); } } } else if (node is ForNode) { ForNode forNode = node as ForNode; forNode.GetExitPoint("Start").SetTarget(forNode.children.First(), null, null); GenerateLines(forNode.children); var last = forNode.children.Last(); last.GetExitPoint("Exit").SetTarget(forNode, forNode, last, "Loop"); if (i < nodes.Count - 1) { forNode.GetExitPoint("Exit").SetTarget(nodes[i + 1].GetFirst(), forNode, null); } } else if (node is FunctionNode) { FunctionNode fNode = node as FunctionNode; fNode.GetExitPoint("Start").SetTarget(fNode.children.First(), null, null); GenerateLines(fNode.children); } else /*if (node is CodeNode || node is BeginEndNode || node is Node)*/ { if (node is CodeNode) { var cNode = node as CodeNode; while (cNode.Text.EndsWith("\r\n")) { cNode.Text = cNode.Text.Substring(0, cNode.Text.Length - 2); } } if (i < nodes.Count - 1) { node.GetExitPoint("Exit").SetTarget(nodes[i + 1].GetFirst(), null, null); } } } }