| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // Package renderer provides Git diagram rendering
- package renderer
- import (
- "fmt"
- "strings"
- "mermaid-go/pkg/ast"
- )
- // GitRenderer implements Git diagram rendering
- type GitRenderer struct{}
- // NewGitRenderer creates a new Git renderer
- func NewGitRenderer() *GitRenderer {
- return &GitRenderer{}
- }
- // Render renders a Git diagram to mermaid syntax
- func (r *GitRenderer) Render(diagram *ast.GitDiagram) (string, error) {
- var result strings.Builder
- // Start with gitGraph keyword
- result.WriteString("gitGraph\n")
- // Add title if present
- if diagram.Title != nil {
- result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
- }
- // Render commits
- for _, commit := range diagram.Commits {
- switch commit.Type {
- case "commit":
- result.WriteString(fmt.Sprintf(" commit %s\n", commit.Message))
- case "branch":
- result.WriteString(fmt.Sprintf(" branch %s\n", commit.Branch))
- case "checkout":
- result.WriteString(fmt.Sprintf(" checkout %s\n", commit.Branch))
- case "merge":
- result.WriteString(fmt.Sprintf(" merge %s\n", commit.Branch))
- default:
- result.WriteString(fmt.Sprintf(" commit %s\n", commit.Message))
- }
- }
- return result.String(), nil
- }
|