// Package renderer provides User Journey rendering package renderer import ( "fmt" "strings" "mermaid-go/pkg/ast" ) // JourneyRenderer implements User Journey rendering type JourneyRenderer struct{} // NewJourneyRenderer creates a new Journey renderer func NewJourneyRenderer() *JourneyRenderer { return &JourneyRenderer{} } // Render renders a User Journey to mermaid syntax func (r *JourneyRenderer) Render(diagram *ast.UserJourneyDiagram) (string, error) { var result strings.Builder // Start with journey declaration result.WriteString("journey\n") // Add title if present if diagram.Title != nil { result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title)) } // Render sections and tasks for _, section := range diagram.Sections { // Add section if it has a meaningful name if section.Name != "" && section.Name != "User Journey" { result.WriteString(fmt.Sprintf(" section %s\n", section.Name)) } // Render tasks for _, task := range section.Tasks { result.WriteString(fmt.Sprintf(" %s : ", task.Name)) // Add score if present if task.Score != nil { result.WriteString(fmt.Sprintf("%.0f", *task.Score)) } // Add people if present if len(task.People) > 0 { result.WriteString(" : ") result.WriteString(strings.Join(task.People, ", ")) } result.WriteString("\n") } } return result.String(), nil }