main.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  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 ===")
  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. // Test Gantt chart
  30. testGanttChart()
  31. fmt.Println()
  32. // Test Timeline
  33. testTimeline()
  34. fmt.Println()
  35. // Test User Journey
  36. testUserJourney()
  37. fmt.Println()
  38. // Test Architecture
  39. testArchitecture()
  40. fmt.Println()
  41. // Test Organization Chart
  42. testOrganizationChart()
  43. fmt.Println()
  44. // Test BPMN
  45. testBPMN()
  46. fmt.Println()
  47. fmt.Println("=== Demo Complete ===")
  48. }
  49. func testFlowchart() {
  50. fmt.Println("--- Testing Flowchart ---")
  51. input := `flowchart TD
  52. A --> B
  53. B --> C
  54. C --> D`
  55. mermaidParser := parser.NewMermaidParser()
  56. diagram, err := mermaidParser.Parse(input)
  57. if err != nil {
  58. log.Printf("Failed to parse flowchart: %v", err)
  59. return
  60. }
  61. mermaidRenderer := renderer.NewMermaidRenderer()
  62. output, err := mermaidRenderer.Render(diagram)
  63. if err != nil {
  64. log.Printf("Failed to render flowchart: %v", err)
  65. return
  66. }
  67. fmt.Printf("Input:\n%s\n", input)
  68. fmt.Printf("Parsed and rendered:\n%s", output)
  69. }
  70. func testSequenceDiagram() {
  71. fmt.Println("--- Testing Sequence Diagram ---")
  72. input := `sequenceDiagram
  73. participant A
  74. participant B
  75. A --> B : Hello
  76. B --> A : Hi`
  77. mermaidParser := parser.NewMermaidParser()
  78. diagram, err := mermaidParser.Parse(input)
  79. if err != nil {
  80. log.Printf("Failed to parse sequence diagram: %v", err)
  81. return
  82. }
  83. mermaidRenderer := renderer.NewMermaidRenderer()
  84. output, err := mermaidRenderer.Render(diagram)
  85. if err != nil {
  86. log.Printf("Failed to render sequence diagram: %v", err)
  87. return
  88. }
  89. fmt.Printf("Input:\n%s\n", input)
  90. fmt.Printf("Parsed and rendered:\n%s", output)
  91. }
  92. func testClassDiagram() {
  93. fmt.Println("--- Testing Class Diagram ---")
  94. input := `classDiagram
  95. class Animal
  96. class Dog
  97. Animal --> Dog`
  98. mermaidParser := parser.NewMermaidParser()
  99. diagram, err := mermaidParser.Parse(input)
  100. if err != nil {
  101. log.Printf("Failed to parse class diagram: %v", err)
  102. return
  103. }
  104. mermaidRenderer := renderer.NewMermaidRenderer()
  105. output, err := mermaidRenderer.Render(diagram)
  106. if err != nil {
  107. log.Printf("Failed to render class diagram: %v", err)
  108. return
  109. }
  110. fmt.Printf("Input:\n%s\n", input)
  111. fmt.Printf("Parsed and rendered:\n%s", output)
  112. }
  113. func testStateDiagram() {
  114. fmt.Println("--- Testing State Diagram ---")
  115. input := `stateDiagram
  116. Idle --> Active
  117. Active --> Idle`
  118. mermaidParser := parser.NewMermaidParser()
  119. diagram, err := mermaidParser.Parse(input)
  120. if err != nil {
  121. log.Printf("Failed to parse state diagram: %v", err)
  122. return
  123. }
  124. mermaidRenderer := renderer.NewMermaidRenderer()
  125. output, err := mermaidRenderer.Render(diagram)
  126. if err != nil {
  127. log.Printf("Failed to render state diagram: %v", err)
  128. return
  129. }
  130. fmt.Printf("Input:\n%s\n", input)
  131. fmt.Printf("Parsed and rendered:\n%s", output)
  132. }
  133. func testPieChart() {
  134. fmt.Println("--- Testing Pie Chart ---")
  135. input := `pie showData
  136. title Pie Chart Example
  137. "Apples" : 30
  138. "Oranges" : 25
  139. "Bananas" : 20
  140. "Grapes" : 15
  141. "Others" : 10`
  142. mermaidParser := parser.NewMermaidParser()
  143. diagram, err := mermaidParser.Parse(input)
  144. if err != nil {
  145. log.Printf("Failed to parse pie chart: %v", err)
  146. return
  147. }
  148. mermaidRenderer := renderer.NewMermaidRenderer()
  149. output, err := mermaidRenderer.Render(diagram)
  150. if err != nil {
  151. log.Printf("Failed to render pie chart: %v", err)
  152. return
  153. }
  154. fmt.Printf("Input:\n%s\n", input)
  155. fmt.Printf("Parsed and rendered:\n%s", output)
  156. }
  157. func testERDiagram() {
  158. fmt.Println("--- Testing ER Diagram ---")
  159. input := `erDiagram
  160. Customer {
  161. string name
  162. string email PK
  163. int age
  164. }
  165. Order {
  166. int id PK
  167. string status
  168. date created
  169. }
  170. Customer ||--o{ Order : places`
  171. mermaidParser := parser.NewMermaidParser()
  172. diagram, err := mermaidParser.Parse(input)
  173. if err != nil {
  174. log.Printf("Failed to parse ER diagram: %v", err)
  175. return
  176. }
  177. mermaidRenderer := renderer.NewMermaidRenderer()
  178. output, err := mermaidRenderer.Render(diagram)
  179. if err != nil {
  180. log.Printf("Failed to render ER diagram: %v", err)
  181. return
  182. }
  183. fmt.Printf("Input:\n%s\n", input)
  184. fmt.Printf("Parsed and rendered:\n%s", output)
  185. }
  186. func testGanttChart() {
  187. fmt.Println("--- Testing Gantt Chart ---")
  188. input := `gantt
  189. title Project Timeline
  190. dateFormat YYYY-MM-DD
  191. section Planning
  192. Research : 2024-01-01, 5d
  193. Design : 2024-01-06, 3d
  194. section Development
  195. Backend : 2024-01-09, 10d
  196. Frontend : 2024-01-15, 8d`
  197. mermaidParser := parser.NewMermaidParser()
  198. diagram, err := mermaidParser.Parse(input)
  199. if err != nil {
  200. log.Printf("Failed to parse Gantt chart: %v", err)
  201. return
  202. }
  203. mermaidRenderer := renderer.NewMermaidRenderer()
  204. output, err := mermaidRenderer.Render(diagram)
  205. if err != nil {
  206. log.Printf("Failed to render Gantt chart: %v", err)
  207. return
  208. }
  209. fmt.Printf("Input:\n%s\n", input)
  210. fmt.Printf("Parsed and rendered:\n%s", output)
  211. }
  212. func testTimeline() {
  213. fmt.Println("--- Testing Timeline ---")
  214. input := `timeline
  215. title History of Computing
  216. section Early Era
  217. : 1940s : First computers
  218. : 1950s : Programming languages
  219. section Modern Era
  220. : 1970s : Personal computers
  221. : 1990s : Internet boom`
  222. mermaidParser := parser.NewMermaidParser()
  223. diagram, err := mermaidParser.Parse(input)
  224. if err != nil {
  225. log.Printf("Failed to parse Timeline: %v", err)
  226. return
  227. }
  228. mermaidRenderer := renderer.NewMermaidRenderer()
  229. output, err := mermaidRenderer.Render(diagram)
  230. if err != nil {
  231. log.Printf("Failed to render Timeline: %v", err)
  232. return
  233. }
  234. fmt.Printf("Input:\n%s\n", input)
  235. fmt.Printf("Parsed and rendered:\n%s", output)
  236. }
  237. func testUserJourney() {
  238. fmt.Println("--- Testing User Journey ---")
  239. input := `journey
  240. title User Shopping Journey
  241. section Discovery
  242. Search for product : 5 : User
  243. Read reviews : 3 : User
  244. section Purchase
  245. Add to cart : 5 : User
  246. Checkout : 2 : User, System`
  247. mermaidParser := parser.NewMermaidParser()
  248. diagram, err := mermaidParser.Parse(input)
  249. if err != nil {
  250. log.Printf("Failed to parse User Journey: %v", err)
  251. return
  252. }
  253. mermaidRenderer := renderer.NewMermaidRenderer()
  254. output, err := mermaidRenderer.Render(diagram)
  255. if err != nil {
  256. log.Printf("Failed to render User Journey: %v", err)
  257. return
  258. }
  259. fmt.Printf("Input:\n%s\n", input)
  260. fmt.Printf("Parsed and rendered:\n%s", output)
  261. }
  262. func testArchitecture() {
  263. fmt.Println("--- Testing Architecture ---")
  264. input := `architecture
  265. title System Architecture
  266. group api[API Layer]
  267. service web[Web Server] in api
  268. service db[Database]
  269. web L--R db : queries`
  270. mermaidParser := parser.NewMermaidParser()
  271. diagram, err := mermaidParser.Parse(input)
  272. if err != nil {
  273. log.Printf("Failed to parse Architecture: %v", err)
  274. return
  275. }
  276. mermaidRenderer := renderer.NewMermaidRenderer()
  277. output, err := mermaidRenderer.Render(diagram)
  278. if err != nil {
  279. log.Printf("Failed to render Architecture: %v", err)
  280. return
  281. }
  282. fmt.Printf("Input:\n%s\n", input)
  283. fmt.Printf("Parsed and rendered:\n%s", output)
  284. }
  285. func testOrganizationChart() {
  286. fmt.Println("--- Testing Organization Chart ---")
  287. input := `organization
  288. title Company Structure
  289. CEO[Chief Executive Officer]
  290. CEO --> CTO[Chief Technology Officer]
  291. CEO --> CFO[Chief Financial Officer]
  292. CTO --> DevManager[Development Manager]
  293. CTO --> QAManager[QA Manager]
  294. DevManager --> Developer1[Senior Developer]
  295. DevManager --> Developer2[Junior Developer]`
  296. mermaidParser := parser.NewMermaidParser()
  297. diagram, err := mermaidParser.Parse(input)
  298. if err != nil {
  299. log.Printf("Failed to parse Organization Chart: %v", err)
  300. return
  301. }
  302. mermaidRenderer := renderer.NewMermaidRenderer()
  303. output, err := mermaidRenderer.Render(diagram)
  304. if err != nil {
  305. log.Printf("Failed to render Organization Chart: %v", err)
  306. return
  307. }
  308. fmt.Printf("Input:\n%s\n", input)
  309. fmt.Printf("Parsed and rendered:\n%s", output)
  310. }
  311. func testBPMN() {
  312. fmt.Println("--- Testing BPMN ---")
  313. input := `bpmn
  314. title Order Processing
  315. pool customer[Customer]
  316. pool system[Order System]
  317. startEvent[Order Request](startEvent)
  318. validateTask[Validate Order](userTask)
  319. processTask[Process Payment](serviceTask)
  320. endEvent[Order Complete](endEvent)
  321. startEvent --> validateTask : submit order
  322. validateTask --> processTask : valid
  323. processTask --> endEvent : completed`
  324. mermaidParser := parser.NewMermaidParser()
  325. diagram, err := mermaidParser.Parse(input)
  326. if err != nil {
  327. log.Printf("Failed to parse BPMN: %v", err)
  328. return
  329. }
  330. mermaidRenderer := renderer.NewMermaidRenderer()
  331. output, err := mermaidRenderer.Render(diagram)
  332. if err != nil {
  333. log.Printf("Failed to render BPMN: %v", err)
  334. return
  335. }
  336. fmt.Printf("Input:\n%s\n", input)
  337. fmt.Printf("Parsed and rendered:\n%s", output)
  338. }