xychart.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Package renderer provides XY Chart rendering
  2. package renderer
  3. import (
  4. "fmt"
  5. "strings"
  6. "mermaid-go/pkg/ast"
  7. )
  8. // XYChartRenderer implements XY Chart rendering
  9. type XYChartRenderer struct{}
  10. // NewXYChartRenderer creates a new XY Chart renderer
  11. func NewXYChartRenderer() *XYChartRenderer {
  12. return &XYChartRenderer{}
  13. }
  14. // Render renders an XY Chart to mermaid syntax
  15. func (r *XYChartRenderer) Render(diagram *ast.XYChartDiagram) (string, error) {
  16. var result strings.Builder
  17. // Start with xychart-beta keyword
  18. result.WriteString("xychart-beta\n")
  19. // Add title if present
  20. if diagram.Title != nil {
  21. result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
  22. }
  23. // Render X-axis
  24. if diagram.XAxis != nil && diagram.XAxis.Title != nil {
  25. result.WriteString(fmt.Sprintf(" x-axis %s\n", *diagram.XAxis.Title))
  26. }
  27. // Render Y-axis
  28. if diagram.YAxis != nil && diagram.YAxis.Title != nil {
  29. result.WriteString(fmt.Sprintf(" y-axis %s\n", *diagram.YAxis.Title))
  30. }
  31. // Render series
  32. for _, series := range diagram.Series {
  33. result.WriteString(fmt.Sprintf(" %s : ", series.Label))
  34. for i, point := range series.Data {
  35. if i > 0 {
  36. result.WriteString(", ")
  37. }
  38. result.WriteString(fmt.Sprintf("%.2f", point))
  39. }
  40. result.WriteString("\n")
  41. }
  42. return result.String(), nil
  43. }