timeline.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Package renderer provides Timeline rendering
  2. package renderer
  3. import (
  4. "fmt"
  5. "strings"
  6. "mermaid-go/pkg/ast"
  7. )
  8. // TimelineRenderer implements Timeline rendering
  9. type TimelineRenderer struct{}
  10. // NewTimelineRenderer creates a new Timeline renderer
  11. func NewTimelineRenderer() *TimelineRenderer {
  12. return &TimelineRenderer{}
  13. }
  14. // Render renders a Timeline to mermaid syntax
  15. func (r *TimelineRenderer) Render(diagram *ast.TimelineDiagram) (string, error) {
  16. var result strings.Builder
  17. // Start with timeline declaration
  18. result.WriteString("timeline\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 events
  24. for _, section := range diagram.Sections {
  25. // Add section if it has a meaningful name
  26. if section.Name != "" && section.Name != "Timeline" {
  27. result.WriteString(fmt.Sprintf(" section %s\n", section.Name))
  28. }
  29. // Render events
  30. for _, event := range section.Events {
  31. result.WriteString(fmt.Sprintf(" : %s\n", event.Name))
  32. }
  33. }
  34. return result.String(), nil
  35. }