code: func dotEdge(rpt *Report, from, to int, e *edgeInfo) string {
  	w := rpt.formatValue(e.weight)
  	attr := fmt.Sprintf(`label=" %s"`, w)
  	if rpt.total > 0 {
  		if weight := 1 + int(e.weight*100/rpt.total); weight > 1 {
  			attr = fmt.Sprintf(`%s weight=%d`, attr, weight)
  		}
  		if width := 1 + int(e.weight*5/rpt.total); width > 1 {
  			attr = fmt.Sprintf(`%s penwidth=%d`, attr, width)
  		}
  	}
  	arrow := "->"
  	if e.residual {
  		arrow = "..."
  	}
  	tooltip := fmt.Sprintf(`"%s %s %s (%s)"`,
  		e.src.info.prettyName(), arrow, e.dest.info.prettyName(), w)
  	attr = fmt.Sprintf(`%s tooltip=%s labeltooltip=%s`,
  		attr, tooltip, tooltip)
  
  	if e.residual {
  		attr = attr + ` style="dotted"`
  	}
  
  	if len(e.src.tags) > 0 {
  		// Separate children further if source has tags.
  		attr = attr + " minlen=2"
  	}
  	return fmt.Sprintf("N%d -> N%d [%s]", from, to, attr)
  }
docs: // dotEdge generates a graph edge in DOT format.