package main import ( "fmt" "log" "mermaid-go/pkg/parser" "mermaid-go/pkg/renderer" ) func main() { fmt.Println("Testing Advanced Flowchart Features:") // Test 1: Click events testClickEvents() fmt.Println() // Test 2: Advanced subgraphs with styling testAdvancedSubgraphs() fmt.Println() // Test 3: Complex node shapes testComplexShapes() fmt.Println() } func testClickEvents() { fmt.Println("--- Testing Click Events ---") input := `flowchart TD A[Start] --> B[Process] B --> C[End] click A "https://example.com" "_blank" click B callback click C "https://mermaid.js.org"` mermaidParser := parser.NewMermaidParser() diagram, err := mermaidParser.Parse(input) if err != nil { log.Printf("Failed to parse flowchart: %v", err) return } mermaidRenderer := renderer.NewMermaidRenderer() output, err := mermaidRenderer.Render(diagram) if err != nil { log.Printf("Failed to render flowchart: %v", err) return } fmt.Printf("Input:\n%s\n", input) fmt.Printf("Parsed and rendered:\n%s", output) } func testAdvancedSubgraphs() { fmt.Println("--- Testing Advanced Subgraphs ---") input := `flowchart TB subgraph TOP["Top Level"] direction TB A[Input] --> B[Process] end subgraph BOTTOM[Bottom Level] direction LR C[Review] --> D[Output] end TOP --> BOTTOM classDef processClass fill:#f9f,stroke:#333,stroke-width:2px` mermaidParser := parser.NewMermaidParser() diagram, err := mermaidParser.Parse(input) if err != nil { log.Printf("Failed to parse flowchart: %v", err) return } mermaidRenderer := renderer.NewMermaidRenderer() output, err := mermaidRenderer.Render(diagram) if err != nil { log.Printf("Failed to render flowchart: %v", err) return } fmt.Printf("Input:\n%s\n", input) fmt.Printf("Parsed and rendered:\n%s", output) } func testComplexShapes() { fmt.Println("--- Testing Complex Shapes ---") input := `flowchart LR A([Start]) --> B{Decision} B --> C[/Process/] B --> D[\Alternative\] C --> E>Flag Shape] D --> E E --> F((End))` mermaidParser := parser.NewMermaidParser() diagram, err := mermaidParser.Parse(input) if err != nil { log.Printf("Failed to parse flowchart: %v", err) return } mermaidRenderer := renderer.NewMermaidRenderer() output, err := mermaidRenderer.Render(diagram) if err != nil { log.Printf("Failed to render flowchart: %v", err) return } fmt.Printf("Input:\n%s\n", input) fmt.Printf("Parsed and rendered:\n%s", output) }