Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

49 Zeilen
1.1 KiB

  1. // Copyright 2013 The Go Authors. All rights reserved.
  2. //
  3. // Use of this source code is governed by a BSD-style
  4. // license that can be found in the LICENSE file or at
  5. // https://developers.google.com/open-source/licenses/bsd.
  6. package main
  7. import (
  8. "bytes"
  9. "errors"
  10. "fmt"
  11. "os/exec"
  12. "strings"
  13. "github.com/golang/gddo/database"
  14. "github.com/golang/gddo/doc"
  15. )
  16. func renderGraph(pdoc *doc.Package, pkgs []database.Package, edges [][2]int) ([]byte, error) {
  17. var in, out bytes.Buffer
  18. fmt.Fprintf(&in, "digraph %s { \n", pdoc.Name)
  19. for i, pkg := range pkgs {
  20. fmt.Fprintf(&in, " n%d [label=\"%s\", URL=\"/%s\", tooltip=\"%s\"];\n",
  21. i, pkg.Path, pkg.Path,
  22. strings.Replace(pkg.Synopsis, `"`, `\"`, -1))
  23. }
  24. for _, edge := range edges {
  25. fmt.Fprintf(&in, " n%d -> n%d;\n", edge[0], edge[1])
  26. }
  27. in.WriteString("}")
  28. cmd := exec.Command("dot", "-Tsvg")
  29. cmd.Stdin = &in
  30. cmd.Stdout = &out
  31. if err := cmd.Run(); err != nil {
  32. return nil, err
  33. }
  34. p := out.Bytes()
  35. i := bytes.Index(p, []byte("<svg"))
  36. if i < 0 {
  37. return nil, errors.New("<svg not found")
  38. }
  39. p = p[i:]
  40. return p, nil
  41. }