Exemplo n.º 1
0
Arquivo: graph.go Projeto: jnb666/gogp
// Layout runs the dot program to layout the graph.
// If format is "" uses dot format, else specify an output renderer, e.g. "svg".
// The Graphviz dot program must be installed in your path.
func Layout(graph *gv.Graph, format string) ([]byte, error) {
	f, err := ioutil.TempFile("", "gogp")
	if err != nil {
		return nil, err
	}
	// write to tmpfile
	w := bufio.NewWriter(f)
	fmt.Fprint(w, graph.String())
	w.Flush()
	f.Close()
	file := f.Name()
	defer os.Remove(file)
	// process with dot
	args := []string{file}
	if format != "" {
		args = append(args, "-T"+format)
	}
	var outData, errData bytes.Buffer
	cmd := exec.Command("dot", args...)
	cmd.Stdout = &outData
	cmd.Stderr = &errData
	if err := cmd.Run(); err != nil {
		if errData.Len() > 0 {
			err = errors.New(errData.String())
		}
		return nil, err
	}
	return outData.Bytes(), nil
}