chinese_support_demo.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // Comprehensive Chinese character support test
  2. package main
  3. import (
  4. "fmt"
  5. "log"
  6. "mermaid-go/pkg/parser"
  7. "mermaid-go/pkg/renderer"
  8. )
  9. func main() {
  10. fmt.Println("=== 全面中文支持测试 ===")
  11. examples := []struct {
  12. name string
  13. input string
  14. }{
  15. {
  16. name: "中文饼图",
  17. input: `pie showData
  18. title 2024年中国互联网公司市场份额
  19. "阿里巴巴" : 35
  20. "腾讯" : 30
  21. "百度" : 20
  22. "字节跳动" : 15`,
  23. },
  24. {
  25. name: "中文流程图",
  26. input: `flowchart TD
  27. 开始 --> 用户登录{用户登录}
  28. 用户登录 -->|成功| 进入系统
  29. 用户登录 -->|失败| 显示错误
  30. 进入系统 --> 选择功能
  31. 选择功能 --> 数据处理
  32. 数据处理 --> 保存结果
  33. 保存结果 --> 结束
  34. 显示错误 --> 重新登录
  35. 重新登录 --> 用户登录`,
  36. },
  37. {
  38. name: "中文序列图",
  39. input: `sequenceDiagram
  40. participant 用户 as 用户端
  41. participant 前端 as 前端服务
  42. participant 后端 as 后端API
  43. participant 数据库 as MySQL数据库
  44. 用户 ->> 前端: 提交登录表单
  45. 前端 ->> 后端: 发送登录请求
  46. 后端 ->> 数据库: 查询用户信息
  47. 数据库 -->> 后端: 返回用户数据
  48. 后端 -->> 前端: 返回认证结果
  49. 前端 -->> 用户: 显示登录状态`,
  50. },
  51. {
  52. name: "中文状态图",
  53. input: `stateDiagram
  54. [*] --> 空闲状态
  55. 空闲状态 --> 工作中 : 开始工作
  56. 工作中 --> 暂停 : 暂停
  57. 暂停 --> 工作中 : 继续
  58. 工作中 --> 完成 : 完成任务
  59. 完成 --> [*]`,
  60. },
  61. {
  62. name: "中文ER图",
  63. input: `erDiagram
  64. 用户 {
  65. int 用户ID PK
  66. string 用户名
  67. string 邮箱 UK
  68. string 密码
  69. date 创建时间
  70. }
  71. 订单 {
  72. int 订单ID PK
  73. int 用户ID FK
  74. decimal 总金额
  75. string 订单状态
  76. date 下单时间
  77. }
  78. 商品 {
  79. int 商品ID PK
  80. string 商品名称
  81. decimal 价格
  82. int 库存数量
  83. }
  84. 用户 ||--o{ 订单 : 下单
  85. 订单 }o--o{ 商品 : 包含`,
  86. },
  87. {
  88. name: "中文甘特图",
  89. input: `gantt
  90. title 软件开发项目进度
  91. dateFormat YYYY-MM-DD
  92. section 需求分析
  93. 需求调研 : 2024-01-01, 5d
  94. 需求文档 : 2024-01-06, 3d
  95. section 系统设计
  96. 架构设计 : 2024-01-09, 4d
  97. 数据库设计 : 2024-01-13, 3d
  98. section 开发实现
  99. 后端开发 : 2024-01-16, 10d
  100. 前端开发 : 2024-01-20, 8d
  101. section 测试部署
  102. 系统测试 : 2024-01-28, 5d
  103. 上线部署 : 2024-02-02, 2d`,
  104. },
  105. {
  106. name: "中文用户旅程",
  107. input: `journey
  108. title 用户购物体验旅程
  109. section 发现阶段
  110. 搜索商品 : 5 : 用户
  111. 浏览商品详情 : 4 : 用户
  112. 比较不同商品 : 3 : 用户
  113. section 购买阶段
  114. 添加到购物车 : 5 : 用户
  115. 填写收货信息 : 3 : 用户
  116. 选择支付方式 : 4 : 用户
  117. 完成支付 : 2 : 用户, 支付系统
  118. section 售后阶段
  119. 物流跟踪 : 4 : 用户, 物流系统
  120. 确认收货 : 5 : 用户
  121. 商品评价 : 3 : 用户`,
  122. },
  123. }
  124. parser := parser.NewMermaidParser()
  125. renderer := renderer.NewMermaidRenderer()
  126. successCount := 0
  127. for i, example := range examples {
  128. fmt.Printf("\n--- 示例 %d: %s ---\n", i+1, example.name)
  129. // Parse
  130. diagram, err := parser.Parse(example.input)
  131. if err != nil {
  132. log.Printf("❌ %s 解析失败: %v", example.name, err)
  133. continue
  134. }
  135. // Validate
  136. if err := diagram.Validate(); err != nil {
  137. log.Printf("⚠️ %s 验证警告: %v", example.name, err)
  138. }
  139. // Render
  140. output, err := renderer.Render(diagram)
  141. if err != nil {
  142. log.Printf("❌ %s 渲染失败: %v", example.name, err)
  143. continue
  144. }
  145. fmt.Printf("✅ %s: 解析 → 验证 → 渲染 成功\n", example.name)
  146. fmt.Printf("图表类型: %s\n", diagram.Type())
  147. // Show a preview of the output
  148. lines := splitLines(output)
  149. if len(lines) > 3 {
  150. fmt.Printf("输出预览: %s...\n", joinLines(lines[:3]))
  151. } else {
  152. fmt.Printf("完整输出: %s\n", output)
  153. }
  154. successCount++
  155. }
  156. fmt.Printf("\n=== 测试总结 ===\n")
  157. fmt.Printf("✅ 成功测试: %d/%d 种中文图表类型\n", successCount, len(examples))
  158. fmt.Printf("🎯 中文支持覆盖率: %.1f%%\n", float64(successCount)/float64(len(examples))*100)
  159. fmt.Printf("🌟 mermaid-go 现已完全支持中文字符!\n")
  160. }
  161. func splitLines(s string) []string {
  162. lines := []string{}
  163. current := ""
  164. for _, r := range s {
  165. if r == '\n' {
  166. lines = append(lines, current)
  167. current = ""
  168. } else {
  169. current += string(r)
  170. }
  171. }
  172. if current != "" {
  173. lines = append(lines, current)
  174. }
  175. return lines
  176. }
  177. func joinLines(lines []string) string {
  178. result := ""
  179. for i, line := range lines {
  180. if i > 0 {
  181. result += " "
  182. }
  183. result += line
  184. }
  185. return result
  186. }