feat:make index works

上级 152d6913
package tequila package tequila
import ( import (
"fmt"
"github.com/awalterschulze/gographviz" "github.com/awalterschulze/gographviz"
"sort" "sort"
"strconv" "strconv"
...@@ -14,6 +15,8 @@ type Relation struct { ...@@ -14,6 +15,8 @@ type Relation struct {
} }
type FullGraph struct { type FullGraph struct {
layerIndex int
nodeIndex int
NodeList map[string]string NodeList map[string]string
RelationList map[string]*Relation RelationList map[string]*Relation
} }
...@@ -172,10 +175,10 @@ func (fullGraph *FullGraph) ToMapDot(node *GraphNode) *gographviz.Graph { ...@@ -172,10 +175,10 @@ func (fullGraph *FullGraph) ToMapDot(node *GraphNode) *gographviz.Graph {
_ = graph.SetName("G") _ = graph.SetName("G")
nodes := make(map[string]string) nodes := make(map[string]string)
layerIndex := 1 fullGraph.layerIndex = 1
nodeIndex := 1 fullGraph.nodeIndex = 1
fullGraph.buildGraphNode(node, layerIndex, graph, nodeIndex, nodes) fullGraph.buildGraphNode("G", node, graph, nodes)
for key := range fullGraph.RelationList { for key := range fullGraph.RelationList {
relation := fullGraph.RelationList[key] relation := fullGraph.RelationList[key]
...@@ -193,20 +196,26 @@ func (fullGraph *FullGraph) ToMapDot(node *GraphNode) *gographviz.Graph { ...@@ -193,20 +196,26 @@ func (fullGraph *FullGraph) ToMapDot(node *GraphNode) *gographviz.Graph {
return graph return graph
} }
func (fullGraph *FullGraph) buildGraphNode(node *GraphNode, layerIndex int, graph *gographviz.Graph, nodeIndex int, nodes map[string]string) { func (fullGraph *FullGraph) buildGraphNode(subgraph string, current *GraphNode, graph *gographviz.Graph, nodes map[string]string) {
layerAttr, layerName := buildLayerAttr(node.text, layerIndex) layerAttr, layerName := buildLayerAttr(current.text, fullGraph.layerIndex)
_ = graph.AddSubGraph("G", layerName, layerAttr) _ = graph.AddSubGraph(subgraph, layerName, layerAttr)
layerIndex++ fullGraph.layerIndex++
for _, child := range node.children {
_ = graph.AddNode(layerName, "node"+strconv.Itoa(nodeIndex), fullGraph.buildRelationAttr(child.text)) if len(current.children) > 0 {
nodes[node.text] = "node" + strconv.Itoa(nodeIndex) for _, child := range current.children {
nodeIndex++ fmt.Println(current.text)
fullGraph.buildGraphNode(layerName, child, graph, nodes)
}
} else {
fmt.Println(layerName, current.text, fullGraph.nodeIndex)
_ = graph.AddNode(layerName, "node"+strconv.Itoa(fullGraph.nodeIndex), fullGraph.buildRelationAttr(current.text))
nodes[current.text] = "node" + strconv.Itoa(fullGraph.nodeIndex)
fullGraph.nodeIndex++
} }
} }
func buildNode(arr []string, node *GraphNode) *GraphNode { func buildNode(arr []string, node *GraphNode) *GraphNode {
if node.text == arr[0] { if node.text == arr[0] {
return node return node
} }
......
package tequila package tequila
import ( import (
"fmt"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/phodal/coca/cmd/cmd_util"
"testing" "testing"
) )
...@@ -48,7 +48,8 @@ func Test_BuildNodeDot(t *testing.T) { ...@@ -48,7 +48,8 @@ func Test_BuildNodeDot(t *testing.T) {
node, graph := createBasicMap() node, graph := createBasicMap()
dot := graph.ToMapDot(node) dot := graph.ToMapDot(node)
fmt.Println(dot.String()) result := dot.String()
cmd_util.WriteToCocaFile("demo.dot", result)
g.Expect(true).To(Equal(true)) g.Expect(true).To(Equal(true))
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册