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(" • 完整的往返转换 (解析→渲染)") }