| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // 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
- }
|