enhanced_features_demo.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "mermaid-go/pkg/ast"
  6. "mermaid-go/pkg/detector"
  7. "mermaid-go/pkg/parser"
  8. "mermaid-go/pkg/renderer"
  9. )
  10. func main() {
  11. fmt.Println("🎯 mermaid-go 增强功能演示")
  12. fmt.Println("================================")
  13. // 创建主解析器
  14. mermaidParser := parser.NewMermaidParser()
  15. // 演示序列图检测和解析
  16. fmt.Println("\n📊 序列图检测和解析:")
  17. sequenceInput := `sequenceDiagram
  18. participant U as User
  19. participant W as WebApp
  20. participant S as Server
  21. U -> W : login request
  22. activate W
  23. W -> S : validate credentials
  24. S --> W : success
  25. W --> U : login complete
  26. deactivate W`
  27. // 检测图表类型
  28. diagramType := mermaidParser.GetDiagramType(sequenceInput)
  29. fmt.Printf("检测到的图表类型: %s\n", diagramType)
  30. // 解析序列图
  31. sequenceDiagram, err := mermaidParser.Parse(sequenceInput)
  32. if err != nil {
  33. log.Fatalf("解析序列图失败: %v", err)
  34. }
  35. fmt.Printf("解析成功! 图表类型: %s\n", sequenceDiagram.Type())
  36. // 渲染回 mermaid 语法
  37. sequenceRenderer := renderer.NewSequenceRenderer()
  38. sequenceOutput, err := sequenceRenderer.Render(sequenceDiagram.(*ast.SequenceDiagram))
  39. if err != nil {
  40. log.Fatalf("渲染序列图失败: %v", err)
  41. }
  42. fmt.Printf("渲染结果:\n%s\n", sequenceOutput)
  43. // 演示状态图检测和解析
  44. fmt.Println("\n🔄 状态图检测和解析:")
  45. stateInput := `stateDiagram-v2
  46. [*] --> Idle
  47. Idle --> Processing : start [hasData] / processData
  48. Processing --> Idle : complete [success] / cleanup
  49. Processing --> Error : fail [error] / logError
  50. note right of Processing : Main processing state
  51. note left of Error : Error handling`
  52. // 检测图表类型
  53. stateDiagramType := mermaidParser.GetDiagramType(stateInput)
  54. fmt.Printf("检测到的图表类型: %s\n", stateDiagramType)
  55. // 解析状态图
  56. stateDiagram, err := mermaidParser.Parse(stateInput)
  57. if err != nil {
  58. log.Fatalf("解析状态图失败: %v", err)
  59. }
  60. fmt.Printf("解析成功! 图表类型: %s\n", stateDiagram.Type())
  61. // 渲染回 mermaid 语法
  62. stateRenderer := renderer.NewStateRenderer()
  63. stateOutput, err := stateRenderer.Render(stateDiagram.(*ast.StateDiagram))
  64. if err != nil {
  65. log.Fatalf("渲染状态图失败: %v", err)
  66. }
  67. fmt.Printf("渲染结果:\n%s\n", stateOutput)
  68. // 演示图表类型检测器
  69. fmt.Println("\n🔍 图表类型检测器演示:")
  70. testInputs := []struct {
  71. name string
  72. input string
  73. }{
  74. {"序列图", "sequenceDiagram\n A -> B : hello"},
  75. {"状态图 V2", "stateDiagram-v2\n [*] --> State1"},
  76. {"状态图", "stateDiagram\n [*] --> State1"},
  77. {"流程图", "flowchart TD\n A --> B"},
  78. {"类图", "classDiagram\n class Animal"},
  79. {"ER图", "erDiagram\n CUSTOMER ||--o{ ORDER"},
  80. {"甘特图", "gantt\n title A Gantt Diagram"},
  81. {"饼图", "pie\n title Pets adopted by volunteers"},
  82. {"Git图", "gitGraph\n commit"},
  83. {"用户旅程", "journey\n title My working day"},
  84. {"时间线", "timeline\n title History of Social Media Platform"},
  85. {"思维导图", "mindmap\n root((mindmap))"},
  86. {"看板图", "kanban\n title Kanban Example"},
  87. {"桑基图", "sankey-beta\n A --> B"},
  88. {"XY图", "xychart-beta\n title Sales Revenue"},
  89. {"象限图", "quadrantChart\n title Reach and engagement of campaigns"},
  90. {"需求图", "requirement\n requirement Test"},
  91. {"块图", "block-beta\n A"},
  92. {"C4图", "c4Context\n title System Context diagram for Internet Banking System"},
  93. {"架构图", "architecture\n title Architecture diagram"},
  94. {"雷达图", "radar\n title Simple Radar Chart"},
  95. {"树状图", "treemap\n title Tree Map Example"},
  96. {"包图", "packet\n title Packet Diagram"},
  97. {"信息图", "info\n title Info Diagram"},
  98. }
  99. detectorRegistry := detector.NewDetectorRegistry()
  100. for _, test := range testInputs {
  101. detectedType := detectorRegistry.DetectDiagramType(test.input)
  102. fmt.Printf(" %-12s: %s\n", test.name, detectedType)
  103. }
  104. fmt.Println("\n✅ 演示完成!")
  105. fmt.Println("\n🎉 mermaid-go 现在支持:")
  106. fmt.Println(" • 智能图表类型检测 (24种图表类型)")
  107. fmt.Println(" • 增强的序列图解析 (循环、条件、并行、激活框)")
  108. fmt.Println(" • 增强的状态图解析 (守卫、动作、注释)")
  109. fmt.Println(" • 丰富的箭头类型支持")
  110. fmt.Println(" • 模块化的解析器架构")
  111. fmt.Println(" • 完整的往返转换 (解析→渲染)")
  112. }