dot

package module
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2019 License: MIT Imports: 5 Imported by: 162

README

dot - little helper package in Go for the graphviz dot language

Build Status Go Report Card GoDoc

DOT language

package main

import (
	"fmt"	
	"github.com/emicklei/dot"
)

// go run main.go | dot -Tpng  > test.png && open test.png

func main() {
	g := dot.NewGraph(dot.Directed)
	n1 := g.Node("coding")
	n2 := g.Node("testing a little").Box()

	g.Edge(n1, n2)
	g.Edge(n2, n1, "back").Attr("color", "red")

	fmt.Println(g.String())
}

Output

digraph {
	node [label="coding"]; n1;
	node [label="testing a little",shape="box"]; n2;
	n1 -> n2;
	n2 -> n1 [color="red", label="back"];
}

Chaining edges

g.Node("A").Edge(g.Node("B")).Edge(g.Node("C"))

A -> B -> C

Subgraphs

s := g.Subgraph("cluster")
s.Attr("style","filled")

cluster example

di := dot.NewGraph(dot.Directed)
outside := di.Node("Outside")

// A
clusterA := di.Subgraph("Cluster A", dot.ClusterOption{})
insideOne := clusterA.Node("one")
insideTwo := clusterA.Node("two")

// B
clusterB := di.Subgraph("Cluster B", dot.ClusterOption{})
insideThree := clusterB.Node("three")
insideFour := clusterB.Node("four")

// edges
outside.Edge(insideFour).Edge(insideOne).Edge(insideTwo).Edge(insideThree).Edge(outside)

About dot attributes

https://graphviz.gitlab.io/_pages/doc/info/attrs.html

display your graph

go run main.go | dot -Tpng  > test.png && open test.png

(c) 2015-2018, http://ernestmicklei.com. MIT License

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Strict     = GraphTypeOption{"strict"}
	Undirected = GraphTypeOption{"graph"}
	Directed   = GraphTypeOption{"digraph"}
	Sub        = GraphTypeOption{"subgraph"}
)

Functions

This section is empty.

Types

type AttributesMap

type AttributesMap struct {
	// contains filtered or unexported fields
}

AttributesMap holds attribute=value pairs.

func (AttributesMap) Attr

func (a AttributesMap) Attr(label string, value interface{})

Attr sets the value for an attribute (unless empty).

func (AttributesMap) Value

func (a AttributesMap) Value(label string) interface{}

Value return the value added for this label.

type ClusterOption

type ClusterOption struct{}

func (ClusterOption) Apply

func (o ClusterOption) Apply(g *Graph)

type Edge

type Edge struct {
	AttributesMap
	// contains filtered or unexported fields
}

Edge represents a graph edge between two Nodes.

func (Edge) Attr

func (e Edge) Attr(key string, value interface{}) Edge

Attr sets key=value and returns the Egde.

func (Edge) Edge

func (e Edge) Edge(to Node, labels ...string) Edge

Edge returns a new Edge between the "to" node of this Edge and the argument Node.

func (Edge) EdgesTo

func (e Edge) EdgesTo(to Node) []Edge

EdgesTo returns all existing edges between the "to" Node of thie Edge and the argument Node.

func (Edge) Label

func (e Edge) Label(value interface{}) Edge

Label sets "label"=value and returns the Edge. Same as Attr("label",value)

type Graph

type Graph struct {
	AttributesMap
	// contains filtered or unexported fields
}

func NewGraph

func NewGraph(options ...GraphOption) *Graph

func (*Graph) AddToSameRank

func (g *Graph) AddToSameRank(group string, nodes ...Node)

AddToSameRank adds the given nodes to the specified rank group, forcing them to be rendered in the same row

func (*Graph) Edge

func (g *Graph) Edge(fromNode, toNode Node, labels ...string) Edge

Edge creates a new edge between two nodes. Nodes can be have multiple edges to the same other node (or itself). If one or more labels are given then the "label" attribute is set to the edge.

func (*Graph) FindEdges

func (g *Graph) FindEdges(fromNode, toNode Node) (found []Edge)

FindEdges finds all edges in the graph that go from the fromNode to the toNode. Otherwise, returns an empty slice.

func (*Graph) ID

func (g *Graph) ID(newID string) *Graph

ID sets the identifier of the graph.

func (Graph) IndentedWrite

func (g Graph) IndentedWrite(w *IndentWriter)

IndentedWrite write the graph to a writer using simple TAB indentation.

func (*Graph) Node

func (g *Graph) Node(id string) Node

Node returns the node created with this id or creates a new node if absent. This method can be used as both a constructor and accessor. not thread safe!

func (*Graph) Root

func (g *Graph) Root() *Graph

Root returns the top-level graph if this was a subgraph.

func (Graph) String

func (g Graph) String() string

String returns the source in dot notation.

func (*Graph) Subgraph

func (g *Graph) Subgraph(label string, options ...GraphOption) *Graph

Subgraph returns the Graph with the given label ; creates one if absent.

func (Graph) Write

func (g Graph) Write(w io.Writer)

type GraphOption

type GraphOption interface {
	Apply(*Graph)
}

type GraphTypeOption

type GraphTypeOption struct {
	Name string
}

func (GraphTypeOption) Apply

func (o GraphTypeOption) Apply(g *Graph)

type HTML

type HTML string

HTML renders the provided content as graphviz HTML. Use of this type is only valid for some attributes, like the 'label' attribute.

type IndentWriter

type IndentWriter struct {
	// contains filtered or unexported fields
}

func NewIndentWriter

func NewIndentWriter(w io.Writer) *IndentWriter

func (*IndentWriter) BackIndent

func (i *IndentWriter) BackIndent()

func (*IndentWriter) Indent

func (i *IndentWriter) Indent()

func (*IndentWriter) IndentWhile

func (i *IndentWriter) IndentWhile(block func())

func (*IndentWriter) NewLine

func (i *IndentWriter) NewLine()

func (*IndentWriter) NewLineIndentWhile

func (i *IndentWriter) NewLineIndentWhile(block func())

func (*IndentWriter) Write

func (i *IndentWriter) Write(data []byte) (n int, err error)

Write makes it an io.Writer

func (*IndentWriter) WriteString

func (i *IndentWriter) WriteString(s string) (n int, err error)

type Literal

type Literal string

Literal renders the provided value as is, without adding enclosing quotes, escaping newlines, quotations marks or any other characters. For example:

node.Attr("label", Literal(`"left-justified text\l"`))

allows you to left-justify the label (due to the \l at the end). The caller is responsible for enclosing the value in quotes and for proper escaping of special characters.

type Node

type Node struct {
	AttributesMap
	// contains filtered or unexported fields
}

Node represents a dot Node.

func (Node) Attr

func (n Node) Attr(label string, value interface{}) Node

Attr sets label=value and return the Node

func (Node) Box

func (n Node) Box() Node

Box sets the attribute "shape" to "box"

func (Node) Edge

func (n Node) Edge(toNode Node, labels ...string) Edge

Edge sets label=value and returns the Edge for chaining.

func (Node) EdgesTo

func (n Node) EdgesTo(toNode Node) []Edge

EdgesTo returns all existing edges between this Node and the argument Node.

func (Node) Label

func (n Node) Label(label string) Node

Label sets the attribute "label" to the given label

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL