mermaid.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Package renderer provides the main renderer router for all diagram types
  2. package renderer
  3. import (
  4. "fmt"
  5. "mermaid-go/pkg/ast"
  6. )
  7. // MermaidRenderer is the main renderer that routes to specific diagram renderers
  8. type MermaidRenderer struct{}
  9. // NewMermaidRenderer creates a new main mermaid renderer
  10. func NewMermaidRenderer() *MermaidRenderer {
  11. return &MermaidRenderer{}
  12. }
  13. // Render renders any diagram type to mermaid syntax
  14. func (r *MermaidRenderer) Render(diagram ast.Diagram) (string, error) {
  15. switch d := diagram.(type) {
  16. case *ast.Flowchart:
  17. renderer := NewFlowchartRenderer()
  18. return renderer.Render(d)
  19. case *ast.SequenceDiagram:
  20. renderer := NewSequenceRenderer()
  21. return renderer.Render(d)
  22. case *ast.ClassDiagram:
  23. renderer := NewClassRenderer()
  24. return renderer.Render(d)
  25. case *ast.StateDiagram:
  26. renderer := NewStateRenderer()
  27. return renderer.Render(d)
  28. case *ast.PieChart:
  29. renderer := NewPieRenderer()
  30. return renderer.Render(d)
  31. case *ast.ERDiagram:
  32. renderer := NewERRenderer()
  33. return renderer.Render(d)
  34. case *ast.GanttDiagram:
  35. renderer := NewGanttRenderer()
  36. return renderer.Render(d)
  37. case *ast.TimelineDiagram:
  38. renderer := NewTimelineRenderer()
  39. return renderer.Render(d)
  40. case *ast.UserJourneyDiagram:
  41. renderer := NewJourneyRenderer()
  42. return renderer.Render(d)
  43. case *ast.ArchitectureDiagram:
  44. renderer := NewArchitectureRenderer()
  45. return renderer.Render(d)
  46. case *ast.OrganizationDiagram:
  47. renderer := NewOrganizationRenderer()
  48. return renderer.Render(d)
  49. case *ast.BPMNDiagram:
  50. renderer := NewBPMNRenderer()
  51. return renderer.Render(d)
  52. case *ast.QuadrantChart:
  53. return r.renderQuadrantChart(d)
  54. case *ast.RequirementDiagram:
  55. return r.renderRequirementDiagram(d)
  56. default:
  57. return "", fmt.Errorf("unsupported diagram type: %T", diagram)
  58. }
  59. }
  60. // Placeholder implementations for remaining diagram types
  61. func (r *MermaidRenderer) renderQuadrantChart(diagram *ast.QuadrantChart) (string, error) {
  62. return "quadrantChart\n %% Quadrant chart rendering not yet implemented\n", nil
  63. }
  64. func (r *MermaidRenderer) renderRequirementDiagram(diagram *ast.RequirementDiagram) (string, error) {
  65. return "requirementDiagram\n %% Requirement diagram rendering not yet implemented\n", nil
  66. }