sankey.go 989 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Package renderer provides Sankey diagram rendering
  2. package renderer
  3. import (
  4. "fmt"
  5. "strings"
  6. "mermaid-go/pkg/ast"
  7. )
  8. // SankeyRenderer implements Sankey diagram rendering
  9. type SankeyRenderer struct{}
  10. // NewSankeyRenderer creates a new Sankey renderer
  11. func NewSankeyRenderer() *SankeyRenderer {
  12. return &SankeyRenderer{}
  13. }
  14. // Render renders a Sankey diagram to mermaid syntax
  15. func (r *SankeyRenderer) Render(diagram *ast.SankeyDiagram) (string, error) {
  16. var result strings.Builder
  17. // Start with sankey-beta keyword
  18. result.WriteString("sankey-beta\n")
  19. // Add title if present
  20. if diagram.Title != nil {
  21. result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
  22. }
  23. // Render nodes
  24. for _, node := range diagram.Nodes {
  25. result.WriteString(fmt.Sprintf(" %s\n", node.Label))
  26. }
  27. // Render links
  28. for _, link := range diagram.Links {
  29. result.WriteString(fmt.Sprintf(" %s --> %s : %d\n",
  30. link.Source, link.Target, link.Value))
  31. }
  32. return result.String(), nil
  33. }