journey.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Package renderer provides User Journey rendering
  2. package renderer
  3. import (
  4. "fmt"
  5. "strings"
  6. "mermaid-go/pkg/ast"
  7. )
  8. // JourneyRenderer implements User Journey rendering
  9. type JourneyRenderer struct{}
  10. // NewJourneyRenderer creates a new Journey renderer
  11. func NewJourneyRenderer() *JourneyRenderer {
  12. return &JourneyRenderer{}
  13. }
  14. // Render renders a User Journey to mermaid syntax
  15. func (r *JourneyRenderer) Render(diagram *ast.UserJourneyDiagram) (string, error) {
  16. var result strings.Builder
  17. // Start with journey declaration
  18. result.WriteString("journey\n")
  19. // Add title if present
  20. if diagram.Title != nil {
  21. result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
  22. }
  23. // Render sections and tasks
  24. for _, section := range diagram.Sections {
  25. // Add section if it has a meaningful name
  26. if section.Name != "" && section.Name != "User Journey" {
  27. result.WriteString(fmt.Sprintf(" section %s\n", section.Name))
  28. }
  29. // Render tasks
  30. for _, task := range section.Tasks {
  31. result.WriteString(fmt.Sprintf(" %s : ", task.Name))
  32. // Add score if present
  33. if task.Score != nil {
  34. result.WriteString(fmt.Sprintf("%.0f", *task.Score))
  35. }
  36. // Add people if present
  37. if len(task.People) > 0 {
  38. result.WriteString(" : ")
  39. result.WriteString(strings.Join(task.People, ", "))
  40. }
  41. result.WriteString("\n")
  42. }
  43. }
  44. return result.String(), nil
  45. }