mermaid.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. return r.renderGanttDiagram(d)
  36. case *ast.TimelineDiagram:
  37. return r.renderTimelineDiagram(d)
  38. case *ast.UserJourneyDiagram:
  39. return r.renderUserJourneyDiagram(d)
  40. case *ast.QuadrantChart:
  41. return r.renderQuadrantChart(d)
  42. case *ast.RequirementDiagram:
  43. return r.renderRequirementDiagram(d)
  44. default:
  45. return "", fmt.Errorf("unsupported diagram type: %T", diagram)
  46. }
  47. }
  48. // Placeholder implementations for other diagram types
  49. func (r *MermaidRenderer) renderERDiagram(diagram *ast.ERDiagram) (string, error) {
  50. return "erDiagram\n %% ER diagram rendering not yet implemented\n", nil
  51. }
  52. func (r *MermaidRenderer) renderGanttDiagram(diagram *ast.GanttDiagram) (string, error) {
  53. return "gantt\n %% Gantt diagram rendering not yet implemented\n", nil
  54. }
  55. func (r *MermaidRenderer) renderPieChart(diagram *ast.PieChart) (string, error) {
  56. return "pie\n %% Pie chart rendering not yet implemented\n", nil
  57. }
  58. func (r *MermaidRenderer) renderTimelineDiagram(diagram *ast.TimelineDiagram) (string, error) {
  59. return "timeline\n %% Timeline diagram rendering not yet implemented\n", nil
  60. }
  61. func (r *MermaidRenderer) renderUserJourneyDiagram(diagram *ast.UserJourneyDiagram) (string, error) {
  62. return "journey\n %% User journey diagram rendering not yet implemented\n", nil
  63. }
  64. func (r *MermaidRenderer) renderQuadrantChart(diagram *ast.QuadrantChart) (string, error) {
  65. return "quadrantChart\n %% Quadrant chart rendering not yet implemented\n", nil
  66. }
  67. func (r *MermaidRenderer) renderRequirementDiagram(diagram *ast.RequirementDiagram) (string, error) {
  68. return "requirementDiagram\n %% Requirement diagram rendering not yet implemented\n", nil
  69. }