main.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. // Demo program showcasing all implemented mermaid diagram types
  2. package main
  3. import (
  4. "fmt"
  5. "log"
  6. "mermaid-go/pkg/parser"
  7. "mermaid-go/pkg/renderer"
  8. )
  9. func main() {
  10. fmt.Println("=== Mermaid-Go Comprehensive Demo ===\n")
  11. // Test flowchart
  12. testFlowchart()
  13. fmt.Println()
  14. // Test sequence diagram
  15. testSequenceDiagram()
  16. fmt.Println()
  17. // Test class diagram
  18. testClassDiagram()
  19. fmt.Println()
  20. // Test state diagram
  21. testStateDiagram()
  22. fmt.Println()
  23. // Test pie chart
  24. testPieChart()
  25. fmt.Println()
  26. // Test ER diagram
  27. testERDiagram()
  28. fmt.Println()
  29. fmt.Println("=== Demo Complete ===")
  30. }
  31. func testFlowchart() {
  32. fmt.Println("--- Testing Flowchart ---")
  33. input := `flowchart TD
  34. A --> B
  35. B --> C
  36. C --> D`
  37. mermaidParser := parser.NewMermaidParser()
  38. diagram, err := mermaidParser.Parse(input)
  39. if err != nil {
  40. log.Printf("Failed to parse flowchart: %v", err)
  41. return
  42. }
  43. mermaidRenderer := renderer.NewMermaidRenderer()
  44. output, err := mermaidRenderer.Render(diagram)
  45. if err != nil {
  46. log.Printf("Failed to render flowchart: %v", err)
  47. return
  48. }
  49. fmt.Printf("Input:\n%s\n", input)
  50. fmt.Printf("Parsed and rendered:\n%s", output)
  51. }
  52. func testSequenceDiagram() {
  53. fmt.Println("--- Testing Sequence Diagram ---")
  54. input := `sequenceDiagram
  55. participant A
  56. participant B
  57. A --> B : Hello
  58. B --> A : Hi`
  59. mermaidParser := parser.NewMermaidParser()
  60. diagram, err := mermaidParser.Parse(input)
  61. if err != nil {
  62. log.Printf("Failed to parse sequence diagram: %v", err)
  63. return
  64. }
  65. mermaidRenderer := renderer.NewMermaidRenderer()
  66. output, err := mermaidRenderer.Render(diagram)
  67. if err != nil {
  68. log.Printf("Failed to render sequence diagram: %v", err)
  69. return
  70. }
  71. fmt.Printf("Input:\n%s\n", input)
  72. fmt.Printf("Parsed and rendered:\n%s", output)
  73. }
  74. func testClassDiagram() {
  75. fmt.Println("--- Testing Class Diagram ---")
  76. input := `classDiagram
  77. class Animal
  78. class Dog
  79. Animal --> Dog`
  80. mermaidParser := parser.NewMermaidParser()
  81. diagram, err := mermaidParser.Parse(input)
  82. if err != nil {
  83. log.Printf("Failed to parse class diagram: %v", err)
  84. return
  85. }
  86. mermaidRenderer := renderer.NewMermaidRenderer()
  87. output, err := mermaidRenderer.Render(diagram)
  88. if err != nil {
  89. log.Printf("Failed to render class diagram: %v", err)
  90. return
  91. }
  92. fmt.Printf("Input:\n%s\n", input)
  93. fmt.Printf("Parsed and rendered:\n%s", output)
  94. }
  95. func testStateDiagram() {
  96. fmt.Println("--- Testing State Diagram ---")
  97. input := `stateDiagram
  98. Idle --> Active
  99. Active --> Idle`
  100. mermaidParser := parser.NewMermaidParser()
  101. diagram, err := mermaidParser.Parse(input)
  102. if err != nil {
  103. log.Printf("Failed to parse state diagram: %v", err)
  104. return
  105. }
  106. mermaidRenderer := renderer.NewMermaidRenderer()
  107. output, err := mermaidRenderer.Render(diagram)
  108. if err != nil {
  109. log.Printf("Failed to render state diagram: %v", err)
  110. return
  111. }
  112. fmt.Printf("Input:\n%s\n", input)
  113. fmt.Printf("Parsed and rendered:\n%s", output)
  114. }
  115. func testPieChart() {
  116. fmt.Println("--- Testing Pie Chart ---")
  117. input := `pie showData
  118. title Pie Chart Example
  119. "Apples" : 30
  120. "Oranges" : 25
  121. "Bananas" : 20
  122. "Grapes" : 15
  123. "Others" : 10`
  124. mermaidParser := parser.NewMermaidParser()
  125. diagram, err := mermaidParser.Parse(input)
  126. if err != nil {
  127. log.Printf("Failed to parse pie chart: %v", err)
  128. return
  129. }
  130. mermaidRenderer := renderer.NewMermaidRenderer()
  131. output, err := mermaidRenderer.Render(diagram)
  132. if err != nil {
  133. log.Printf("Failed to render pie chart: %v", err)
  134. return
  135. }
  136. fmt.Printf("Input:\n%s\n", input)
  137. fmt.Printf("Parsed and rendered:\n%s", output)
  138. }
  139. func testERDiagram() {
  140. fmt.Println("--- Testing ER Diagram ---")
  141. input := `erDiagram
  142. Customer {
  143. string name
  144. string email PK
  145. int age
  146. }
  147. Order {
  148. int id PK
  149. string status
  150. date created
  151. }
  152. Customer ||--o{ Order : places`
  153. mermaidParser := parser.NewMermaidParser()
  154. diagram, err := mermaidParser.Parse(input)
  155. if err != nil {
  156. log.Printf("Failed to parse ER diagram: %v", err)
  157. return
  158. }
  159. mermaidRenderer := renderer.NewMermaidRenderer()
  160. output, err := mermaidRenderer.Render(diagram)
  161. if err != nil {
  162. log.Printf("Failed to render ER diagram: %v", err)
  163. return
  164. }
  165. fmt.Printf("Input:\n%s\n", input)
  166. fmt.Printf("Parsed and rendered:\n%s", output)
  167. }