| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package main
- import (
- "fmt"
- "log"
- "mermaid-go/pkg/ast"
- "mermaid-go/pkg/detector"
- "mermaid-go/pkg/parser"
- "mermaid-go/pkg/renderer"
- )
- func main() {
- fmt.Println("🎯 mermaid-go 增强功能演示")
- fmt.Println("================================")
- // 创建主解析器
- mermaidParser := parser.NewMermaidParser()
- // 演示序列图检测和解析
- fmt.Println("\n📊 序列图检测和解析:")
- sequenceInput := `sequenceDiagram
- participant U as User
- participant W as WebApp
- participant S as Server
-
- U -> W : login request
- activate W
- W -> S : validate credentials
- S --> W : success
- W --> U : login complete
- deactivate W`
- // 检测图表类型
- diagramType := mermaidParser.GetDiagramType(sequenceInput)
- fmt.Printf("检测到的图表类型: %s\n", diagramType)
- // 解析序列图
- sequenceDiagram, err := mermaidParser.Parse(sequenceInput)
- if err != nil {
- log.Fatalf("解析序列图失败: %v", err)
- }
- fmt.Printf("解析成功! 图表类型: %s\n", sequenceDiagram.Type())
- // 渲染回 mermaid 语法
- sequenceRenderer := renderer.NewSequenceRenderer()
- sequenceOutput, err := sequenceRenderer.Render(sequenceDiagram.(*ast.SequenceDiagram))
- if err != nil {
- log.Fatalf("渲染序列图失败: %v", err)
- }
- fmt.Printf("渲染结果:\n%s\n", sequenceOutput)
- // 演示状态图检测和解析
- fmt.Println("\n🔄 状态图检测和解析:")
- stateInput := `stateDiagram-v2
- [*] --> Idle
- Idle --> Processing : start [hasData] / processData
- Processing --> Idle : complete [success] / cleanup
- Processing --> Error : fail [error] / logError
-
- note right of Processing : Main processing state
- note left of Error : Error handling`
- // 检测图表类型
- stateDiagramType := mermaidParser.GetDiagramType(stateInput)
- fmt.Printf("检测到的图表类型: %s\n", stateDiagramType)
- // 解析状态图
- stateDiagram, err := mermaidParser.Parse(stateInput)
- if err != nil {
- log.Fatalf("解析状态图失败: %v", err)
- }
- fmt.Printf("解析成功! 图表类型: %s\n", stateDiagram.Type())
- // 渲染回 mermaid 语法
- stateRenderer := renderer.NewStateRenderer()
- stateOutput, err := stateRenderer.Render(stateDiagram.(*ast.StateDiagram))
- if err != nil {
- log.Fatalf("渲染状态图失败: %v", err)
- }
- fmt.Printf("渲染结果:\n%s\n", stateOutput)
- // 演示图表类型检测器
- fmt.Println("\n🔍 图表类型检测器演示:")
- testInputs := []struct {
- name string
- input string
- }{
- {"序列图", "sequenceDiagram\n A -> B : hello"},
- {"状态图 V2", "stateDiagram-v2\n [*] --> State1"},
- {"状态图", "stateDiagram\n [*] --> State1"},
- {"流程图", "flowchart TD\n A --> B"},
- {"类图", "classDiagram\n class Animal"},
- {"ER图", "erDiagram\n CUSTOMER ||--o{ ORDER"},
- {"甘特图", "gantt\n title A Gantt Diagram"},
- {"饼图", "pie\n title Pets adopted by volunteers"},
- {"Git图", "gitGraph\n commit"},
- {"用户旅程", "journey\n title My working day"},
- {"时间线", "timeline\n title History of Social Media Platform"},
- {"思维导图", "mindmap\n root((mindmap))"},
- {"看板图", "kanban\n title Kanban Example"},
- {"桑基图", "sankey-beta\n A --> B"},
- {"XY图", "xychart-beta\n title Sales Revenue"},
- {"象限图", "quadrantChart\n title Reach and engagement of campaigns"},
- {"需求图", "requirement\n requirement Test"},
- {"块图", "block-beta\n A"},
- {"C4图", "c4Context\n title System Context diagram for Internet Banking System"},
- {"架构图", "architecture\n title Architecture diagram"},
- {"雷达图", "radar\n title Simple Radar Chart"},
- {"树状图", "treemap\n title Tree Map Example"},
- {"包图", "packet\n title Packet Diagram"},
- {"信息图", "info\n title Info Diagram"},
- }
- detectorRegistry := detector.NewDetectorRegistry()
- for _, test := range testInputs {
- detectedType := detectorRegistry.DetectDiagramType(test.input)
- fmt.Printf(" %-12s: %s\n", test.name, detectedType)
- }
- fmt.Println("\n✅ 演示完成!")
- fmt.Println("\n🎉 mermaid-go 现在支持:")
- fmt.Println(" • 智能图表类型检测 (24种图表类型)")
- fmt.Println(" • 增强的序列图解析 (循环、条件、并行、激活框)")
- fmt.Println(" • 增强的状态图解析 (守卫、动作、注释)")
- fmt.Println(" • 丰富的箭头类型支持")
- fmt.Println(" • 模块化的解析器架构")
- fmt.Println(" • 完整的往返转换 (解析→渲染)")
- }
|