git.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Package renderer provides Git diagram rendering
  2. package renderer
  3. import (
  4. "fmt"
  5. "strings"
  6. "mermaid-go/pkg/ast"
  7. )
  8. // GitRenderer implements Git diagram rendering
  9. type GitRenderer struct{}
  10. // NewGitRenderer creates a new Git renderer
  11. func NewGitRenderer() *GitRenderer {
  12. return &GitRenderer{}
  13. }
  14. // Render renders a Git diagram to mermaid syntax
  15. func (r *GitRenderer) Render(diagram *ast.GitDiagram) (string, error) {
  16. var result strings.Builder
  17. // Start with gitGraph keyword
  18. result.WriteString("gitGraph\n")
  19. // Add title if present
  20. if diagram.Title != nil {
  21. result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
  22. }
  23. // Render commits
  24. for _, commit := range diagram.Commits {
  25. switch commit.Type {
  26. case "commit":
  27. result.WriteString(fmt.Sprintf(" commit %s\n", commit.Message))
  28. case "branch":
  29. result.WriteString(fmt.Sprintf(" branch %s\n", commit.Branch))
  30. case "checkout":
  31. result.WriteString(fmt.Sprintf(" checkout %s\n", commit.Branch))
  32. case "merge":
  33. result.WriteString(fmt.Sprintf(" merge %s\n", commit.Branch))
  34. default:
  35. result.WriteString(fmt.Sprintf(" commit %s\n", commit.Message))
  36. }
  37. }
  38. return result.String(), nil
  39. }