export_example.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // Package examples demonstrates diagram export functionality
  2. package main
  3. import (
  4. "fmt"
  5. "log"
  6. "os"
  7. "mermaid-go/pkg/exporter"
  8. "mermaid-go/pkg/parser"
  9. )
  10. func main() {
  11. fmt.Println("=== Mermaid-Go Export Examples ===")
  12. // Create exporter
  13. exp := exporter.NewDiagramExporter()
  14. mermaidParser := parser.NewMermaidParser()
  15. // Test different diagram types
  16. examples := []struct {
  17. name string
  18. input string
  19. filename string
  20. }{
  21. {
  22. name: "Pie Chart",
  23. input: `pie showData
  24. title Market Share 2024
  25. "Company A" : 45
  26. "Company B" : 30
  27. "Company C" : 15
  28. "Others" : 10`,
  29. filename: "pie_chart",
  30. },
  31. {
  32. name: "Organization Chart",
  33. input: `organization
  34. title Company Structure
  35. CEO[Chief Executive Officer]
  36. CEO --> CTO[Chief Technology Officer]
  37. CEO --> CFO[Chief Financial Officer]
  38. CTO --> DevManager[Development Manager]
  39. DevManager --> Developer[Senior Developer]`,
  40. filename: "org_chart",
  41. },
  42. {
  43. name: "Flowchart",
  44. input: `flowchart TD
  45. A[Start] --> B{Decision}
  46. B -->|Yes| C[Process]
  47. B -->|No| D[End]
  48. C --> D`,
  49. filename: "flowchart",
  50. },
  51. {
  52. name: "Sequence Diagram",
  53. input: `sequenceDiagram
  54. participant User
  55. participant System
  56. User ->> System: Login Request
  57. System -->> User: Login Response
  58. User ->> System: Data Request
  59. System -->> User: Data Response`,
  60. filename: "sequence",
  61. },
  62. {
  63. name: "Gantt Chart",
  64. input: `gantt
  65. title Project Timeline
  66. dateFormat YYYY-MM-DD
  67. section Planning
  68. Requirements : 2024-01-01, 5d
  69. Design : 2024-01-06, 3d
  70. section Development
  71. Backend : 2024-01-09, 10d
  72. Frontend : 2024-01-15, 8d`,
  73. filename: "gantt",
  74. },
  75. }
  76. // Create output directory
  77. outputDir := "output"
  78. if err := os.MkdirAll(outputDir, 0755); err != nil {
  79. log.Fatalf("Failed to create output directory: %v", err)
  80. }
  81. // Export each example
  82. for i, example := range examples {
  83. fmt.Printf("\n--- Example %d: %s ---\n", i+1, example.name)
  84. // Parse diagram
  85. diagram, err := mermaidParser.Parse(example.input)
  86. if err != nil {
  87. log.Printf("Failed to parse %s: %v", example.name, err)
  88. continue
  89. }
  90. // Export to SVG
  91. svgOptions := &exporter.ExportOptions{
  92. Format: exporter.FormatSVG,
  93. Width: 800,
  94. Height: 600,
  95. Theme: "default",
  96. }
  97. svgFile := fmt.Sprintf("%s/%s.svg", outputDir, example.filename)
  98. err = exp.ExportToFile(diagram, svgFile, svgOptions)
  99. if err != nil {
  100. log.Printf("Failed to export %s to SVG: %v", example.name, err)
  101. } else {
  102. fmt.Printf("✅ Exported SVG: %s\n", svgFile)
  103. }
  104. // Show file size
  105. if svgInfo, err := os.Stat(svgFile); err == nil {
  106. fmt.Printf(" SVG size: %d bytes\n", svgInfo.Size())
  107. }
  108. }
  109. // Demonstrate different export options
  110. fmt.Printf("\n--- Custom Export Options ---\n")
  111. // Large size export
  112. pieInput := `pie showData
  113. title Large Size Export
  114. "Data A" : 40
  115. "Data B" : 35
  116. "Data C" : 25`
  117. diagram, err := mermaidParser.Parse(pieInput)
  118. if err != nil {
  119. log.Printf("Failed to parse pie chart: %v", err)
  120. } else {
  121. // Large SVG
  122. largeOptions := &exporter.ExportOptions{
  123. Format: exporter.FormatSVG,
  124. Width: 1600,
  125. Height: 1200,
  126. Theme: "default",
  127. }
  128. largeFile := fmt.Sprintf("%s/large_pie.svg", outputDir)
  129. err = exp.ExportToFile(diagram, largeFile, largeOptions)
  130. if err != nil {
  131. log.Printf("Failed to export large SVG: %v", err)
  132. } else {
  133. fmt.Printf("✅ Exported large SVG: %s\n", largeFile)
  134. if info, err := os.Stat(largeFile); err == nil {
  135. fmt.Printf(" Size: %d bytes (1600x1200)\n", info.Size())
  136. }
  137. }
  138. }
  139. // Show supported formats and diagram types
  140. fmt.Printf("\n--- Export Capabilities ---\n")
  141. fmt.Printf("Supported formats: %v\n", exp.GetSupportedFormats())
  142. fmt.Printf("Supported diagram types: %v\n", exp.GetSupportedDiagramTypes())
  143. fmt.Printf("\n=== Export Examples Complete ===\n")
  144. fmt.Printf("Check the '%s' directory for exported files!\n", outputDir)
  145. }