| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Package renderer provides XY Chart rendering
- package renderer
- import (
- "fmt"
- "strings"
- "mermaid-go/pkg/ast"
- )
- // XYChartRenderer implements XY Chart rendering
- type XYChartRenderer struct{}
- // NewXYChartRenderer creates a new XY Chart renderer
- func NewXYChartRenderer() *XYChartRenderer {
- return &XYChartRenderer{}
- }
- // Render renders an XY Chart to mermaid syntax
- func (r *XYChartRenderer) Render(diagram *ast.XYChartDiagram) (string, error) {
- var result strings.Builder
- // Start with xychart-beta keyword
- result.WriteString("xychart-beta\n")
- // Add title if present
- if diagram.Title != nil {
- result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
- }
- // Render X-axis
- if diagram.XAxis != nil && diagram.XAxis.Title != nil {
- result.WriteString(fmt.Sprintf(" x-axis %s\n", *diagram.XAxis.Title))
- }
- // Render Y-axis
- if diagram.YAxis != nil && diagram.YAxis.Title != nil {
- result.WriteString(fmt.Sprintf(" y-axis %s\n", *diagram.YAxis.Title))
- }
- // Render series
- for _, series := range diagram.Series {
- result.WriteString(fmt.Sprintf(" %s : ", series.Label))
- for i, point := range series.Data {
- if i > 0 {
- result.WriteString(", ")
- }
- result.WriteString(fmt.Sprintf("%.2f", point))
- }
- result.WriteString("\n")
- }
- return result.String(), nil
- }
|