// Package renderer provides the main renderer router for all diagram types package renderer import ( "fmt" "mermaid-go/pkg/ast" ) // MermaidRenderer is the main renderer that routes to specific diagram renderers type MermaidRenderer struct{} // NewMermaidRenderer creates a new main mermaid renderer func NewMermaidRenderer() *MermaidRenderer { return &MermaidRenderer{} } // Render renders any diagram type to mermaid syntax func (r *MermaidRenderer) Render(diagram ast.Diagram) (string, error) { switch d := diagram.(type) { case *ast.Flowchart: renderer := NewFlowchartRenderer() return renderer.Render(d) case *ast.SequenceDiagram: renderer := NewSequenceRenderer() return renderer.Render(d) case *ast.ClassDiagram: renderer := NewClassRenderer() return renderer.Render(d) case *ast.StateDiagram: renderer := NewStateRenderer() return renderer.Render(d) case *ast.PieChart: renderer := NewPieRenderer() return renderer.Render(d) case *ast.ERDiagram: renderer := NewERRenderer() return renderer.Render(d) case *ast.GanttDiagram: renderer := NewGanttRenderer() return renderer.Render(d) case *ast.TimelineDiagram: renderer := NewTimelineRenderer() return renderer.Render(d) case *ast.UserJourneyDiagram: renderer := NewJourneyRenderer() return renderer.Render(d) case *ast.ArchitectureDiagram: renderer := NewArchitectureRenderer() return renderer.Render(d) case *ast.OrganizationDiagram: renderer := NewOrganizationRenderer() return renderer.Render(d) case *ast.BPMNDiagram: renderer := NewBPMNRenderer() return renderer.Render(d) case *ast.QuadrantChart: return r.renderQuadrantChart(d) case *ast.RequirementDiagram: return r.renderRequirementDiagram(d) default: return "", fmt.Errorf("unsupported diagram type: %T", diagram) } } // Placeholder implementations for remaining diagram types func (r *MermaidRenderer) renderQuadrantChart(diagram *ast.QuadrantChart) (string, error) { return "quadrantChart\n %% Quadrant chart rendering not yet implemented\n", nil } func (r *MermaidRenderer) renderRequirementDiagram(diagram *ast.RequirementDiagram) (string, error) { return "requirementDiagram\n %% Requirement diagram rendering not yet implemented\n", nil }