sirena 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build_deploy.yml +59 -0
  3. data/.github/workflows/links.yml +85 -0
  4. data/.github/workflows/rake.yml +15 -0
  5. data/.github/workflows/release.yml +27 -0
  6. data/.gitignore +68 -0
  7. data/.rspec +3 -0
  8. data/.rubocop.yml +14 -0
  9. data/.rubocop_todo.yml +70 -0
  10. data/ARCHITECTURE.md +744 -0
  11. data/Gemfile +12 -0
  12. data/LICENSE +25 -0
  13. data/README.adoc +357 -0
  14. data/Rakefile +11 -0
  15. data/docs/.gitignore +1 -0
  16. data/docs/Gemfile +13 -0
  17. data/docs/_config.yml +182 -0
  18. data/docs/_diagram_types/architecture-diagram.adoc +314 -0
  19. data/docs/_diagram_types/block-diagram.adoc +345 -0
  20. data/docs/_diagram_types/c4-diagram.adoc +559 -0
  21. data/docs/_diagram_types/class-diagram.adoc +816 -0
  22. data/docs/_diagram_types/er-diagram.adoc +719 -0
  23. data/docs/_diagram_types/error-diagram.adoc +114 -0
  24. data/docs/_diagram_types/examples/flowchart-examples.adoc +29 -0
  25. data/docs/_diagram_types/flowchart.adoc +488 -0
  26. data/docs/_diagram_types/gantt-chart.adoc +502 -0
  27. data/docs/_diagram_types/git-graph.adoc +600 -0
  28. data/docs/_diagram_types/index.adoc +192 -0
  29. data/docs/_diagram_types/info-diagram.adoc +103 -0
  30. data/docs/_diagram_types/kanban-diagram.adoc +262 -0
  31. data/docs/_diagram_types/mindmap.adoc +603 -0
  32. data/docs/_diagram_types/packet-diagram.adoc +378 -0
  33. data/docs/_diagram_types/pie-chart.adoc +335 -0
  34. data/docs/_diagram_types/quadrant-chart.adoc +406 -0
  35. data/docs/_diagram_types/radar-chart.adoc +528 -0
  36. data/docs/_diagram_types/requirement-diagram.adoc +416 -0
  37. data/docs/_diagram_types/sankey-diagram.adoc +357 -0
  38. data/docs/_diagram_types/sequence-diagram.adoc +664 -0
  39. data/docs/_diagram_types/state-diagram.adoc +658 -0
  40. data/docs/_diagram_types/timeline.adoc +352 -0
  41. data/docs/_diagram_types/treemap-diagram.adoc +462 -0
  42. data/docs/_diagram_types/user-journey.adoc +602 -0
  43. data/docs/_features/index.adoc +129 -0
  44. data/docs/_guides/cli-reference.adoc +203 -0
  45. data/docs/_guides/index.adoc +56 -0
  46. data/docs/_guides/installation.adoc +100 -0
  47. data/docs/_guides/quick-start.adoc +132 -0
  48. data/docs/_pages/comparison.adoc +441 -0
  49. data/docs/_pages/compatibility.adoc +300 -0
  50. data/docs/_pages/index.adoc +39 -0
  51. data/docs/_references/index.adoc +103 -0
  52. data/docs/_tutorials/index.adoc +57 -0
  53. data/docs/index.adoc +166 -0
  54. data/docs/lychee.toml +54 -0
  55. data/examples/.gitignore +10 -0
  56. data/examples/README.adoc +196 -0
  57. data/examples/README.md +64 -0
  58. data/examples/architecture/01-basic-services.mmd +9 -0
  59. data/examples/architecture/01-basic-services.svg +37 -0
  60. data/examples/architecture/02-service-groups.mmd +16 -0
  61. data/examples/architecture/02-service-groups.svg +55 -0
  62. data/examples/architecture/README.adoc +79 -0
  63. data/examples/block/01-basic-blocks.mmd +13 -0
  64. data/examples/block/01-basic-blocks.svg +44 -0
  65. data/examples/block/02-block-shapes.mmd +13 -0
  66. data/examples/block/02-block-shapes.svg +47 -0
  67. data/examples/block/README.adoc +85 -0
  68. data/examples/c4/01-context-diagram.mmd +10 -0
  69. data/examples/c4/01-context-diagram.svg +45 -0
  70. data/examples/c4/02-container-diagram.mmd +24 -0
  71. data/examples/c4/02-container-diagram.svg +105 -0
  72. data/examples/c4/README.adoc +92 -0
  73. data/examples/class_diagram/01-basic-classes.mmd +61 -0
  74. data/examples/class_diagram/01-basic-classes.svg +117 -0
  75. data/examples/class_diagram/02-relationships.mmd +61 -0
  76. data/examples/class_diagram/02-relationships.svg +129 -0
  77. data/examples/class_diagram/README.adoc +93 -0
  78. data/examples/er_diagram/01-basic-entities.mmd +64 -0
  79. data/examples/er_diagram/01-basic-entities.svg +5 -0
  80. data/examples/er_diagram/02-cardinality.mmd +57 -0
  81. data/examples/er_diagram/02-cardinality.svg +125 -0
  82. data/examples/er_diagram/README.adoc +88 -0
  83. data/examples/error/01-basic-error.mmd +1 -0
  84. data/examples/error/01-basic-error.svg +13 -0
  85. data/examples/error/02-error-display.mmd +1 -0
  86. data/examples/error/02-error-display.svg +13 -0
  87. data/examples/error/README.adoc +71 -0
  88. data/examples/error_message_example.svg +13 -0
  89. data/examples/flowchart/00-original.mmd +13 -0
  90. data/examples/flowchart/00-original.svg +5 -0
  91. data/examples/flowchart/01-basic-flow.mmd +7 -0
  92. data/examples/flowchart/01-basic-flow.svg +52 -0
  93. data/examples/flowchart/01-basic-flow.yml +13 -0
  94. data/examples/flowchart/02*.svg +87 -0
  95. data/examples/flowchart/02-node-shapes.mmd +9 -0
  96. data/examples/flowchart/02-node-shapes.svg +33 -0
  97. data/examples/flowchart/03-edge-types.mmd +7 -0
  98. data/examples/flowchart/03-edge-types.svg +53 -0
  99. data/examples/flowchart/04-subgraphs.mmd +9 -0
  100. data/examples/flowchart/04-subgraphs.svg +33 -0
  101. data/examples/flowchart/05-styling.mmd +9 -0
  102. data/examples/flowchart/05-styling.svg +33 -0
  103. data/examples/flowchart/06-complex-flow.mmd +8 -0
  104. data/examples/flowchart/06-complex-flow.svg +59 -0
  105. data/examples/flowchart/README.adoc +167 -0
  106. data/examples/gantt/01-simple-timeline.* +14 -0
  107. data/examples/gantt/01-simple-timeline.mmd +6 -0
  108. data/examples/gantt/01-simple-timeline.svg +26 -0
  109. data/examples/gantt/02-task-dependencies.mmd +6 -0
  110. data/examples/gantt/02-task-dependencies.svg +26 -0
  111. data/examples/gantt/README.adoc +86 -0
  112. data/examples/git_graph/01-linear-history.mmd +12 -0
  113. data/examples/git_graph/01-linear-history.svg +26 -0
  114. data/examples/git_graph/02-branching.mmd +12 -0
  115. data/examples/git_graph/02-branching.svg +26 -0
  116. data/examples/git_graph/README.adoc +73 -0
  117. data/examples/info/02-showinfo.mmd +1 -0
  118. data/examples/info/02-showinfo.svg +10 -0
  119. data/examples/info/README.adoc +58 -0
  120. data/examples/info_showinfo_example.svg +10 -0
  121. data/examples/kanban/01-simple-board.mmd +8 -0
  122. data/examples/kanban/01-simple-board.svg +43 -0
  123. data/examples/kanban/02-workflow.mmd +8 -0
  124. data/examples/kanban/02-workflow.svg +43 -0
  125. data/examples/kanban/README.adoc +79 -0
  126. data/examples/mindmap/01-simple-tree.mmd +19 -0
  127. data/examples/mindmap/01-simple-tree.svg +61 -0
  128. data/examples/mindmap/02-knowledge-map.mmd +19 -0
  129. data/examples/mindmap/02-knowledge-map.svg +61 -0
  130. data/examples/mindmap/README.adoc +77 -0
  131. data/examples/packet/01-basic-packet.* +17 -0
  132. data/examples/packet/01-basic-packet.mmd +4 -0
  133. data/examples/packet/01-basic-packet.svg +82 -0
  134. data/examples/packet/README.adoc +58 -0
  135. data/examples/pie/01-simple-chart.mmd +5 -0
  136. data/examples/pie/01-simple-chart.svg +17 -0
  137. data/examples/pie/02-labeled-slices.mmd +6 -0
  138. data/examples/pie/02-labeled-slices.svg +19 -0
  139. data/examples/pie/README.adoc +75 -0
  140. data/examples/quadrant/01-basic-quadrant.mmd +13 -0
  141. data/examples/quadrant/01-basic-quadrant.svg +33 -0
  142. data/examples/quadrant/02-positioned-items.mmd +14 -0
  143. data/examples/quadrant/02-positioned-items.svg +35 -0
  144. data/examples/quadrant/README.adoc +84 -0
  145. data/examples/radar/01-simple-radar.* +5 -0
  146. data/examples/radar/01-simple-radar.mmd +3 -0
  147. data/examples/radar/01-simple-radar.svg +25 -0
  148. data/examples/radar/02-multiple-curves.mmd +4 -0
  149. data/examples/radar/02-multiple-curves.svg +43 -0
  150. data/examples/radar/README.adoc +75 -0
  151. data/examples/requirement/01-basic-requirements.mmd +23 -0
  152. data/examples/requirement/01-basic-requirements.svg +49 -0
  153. data/examples/requirement/02-risk-levels.mmd +23 -0
  154. data/examples/requirement/02-risk-levels.svg +49 -0
  155. data/examples/requirement/README.adoc +85 -0
  156. data/examples/sankey/01-simple-flow.mmd +7 -0
  157. data/examples/sankey/01-simple-flow.svg +34 -0
  158. data/examples/sankey/02-multi-stage.mmd +11 -0
  159. data/examples/sankey/02-multi-stage.svg +44 -0
  160. data/examples/sankey/README.adoc +74 -0
  161. data/examples/sequence/01-basic-sequence.mmd +27 -0
  162. data/examples/sequence/01-basic-sequence.svg +5 -0
  163. data/examples/sequence/02-activations.mmd +17 -0
  164. data/examples/sequence/02-activations.svg +78 -0
  165. data/examples/sequence/README.adoc +86 -0
  166. data/examples/state_diagram/01-simple-states.mmd +29 -0
  167. data/examples/state_diagram/01-simple-states.svg +5 -0
  168. data/examples/state_diagram/02-composite.mmd +19 -0
  169. data/examples/state_diagram/02-composite.svg +81 -0
  170. data/examples/state_diagram/README.adoc +90 -0
  171. data/examples/timeline/01-simple-timeline.mmd +11 -0
  172. data/examples/timeline/01-simple-timeline.svg +36 -0
  173. data/examples/timeline/02-periods.mmd +15 -0
  174. data/examples/timeline/02-periods.svg +47 -0
  175. data/examples/timeline/README.adoc +78 -0
  176. data/examples/treemap/01-basic-treemap.mmd +12 -0
  177. data/examples/treemap/01-basic-treemap.svg +59 -0
  178. data/examples/treemap/README.adoc +59 -0
  179. data/examples/user_journey/01-simple-journey.mmd +23 -0
  180. data/examples/user_journey/01-simple-journey.svg +5 -0
  181. data/examples/user_journey/02-multi-actor.mmd +18 -0
  182. data/examples/user_journey/02-multi-actor.svg +129 -0
  183. data/examples/user_journey/README.adoc +81 -0
  184. data/examples/xychart/01-line-chart.mmd +5 -0
  185. data/examples/xychart/01-line-chart.svg +43 -0
  186. data/examples/xychart/02-bar-chart.mmd +7 -0
  187. data/examples/xychart/02-bar-chart.svg +48 -0
  188. data/examples/xychart/README.adoc +80 -0
  189. data/exe/sirena +7 -0
  190. data/lib/sirena/cli.rb +138 -0
  191. data/lib/sirena/commands/batch.rb +117 -0
  192. data/lib/sirena/commands/render.rb +80 -0
  193. data/lib/sirena/commands/types.rb +29 -0
  194. data/lib/sirena/commands/version.rb +24 -0
  195. data/lib/sirena/diagram/architecture.rb +46 -0
  196. data/lib/sirena/diagram/base.rb +61 -0
  197. data/lib/sirena/diagram/block.rb +81 -0
  198. data/lib/sirena/diagram/c4.rb +328 -0
  199. data/lib/sirena/diagram/class_diagram.rb +385 -0
  200. data/lib/sirena/diagram/er_diagram.rb +238 -0
  201. data/lib/sirena/diagram/error.rb +38 -0
  202. data/lib/sirena/diagram/flowchart.rb +160 -0
  203. data/lib/sirena/diagram/gantt.rb +71 -0
  204. data/lib/sirena/diagram/git_graph.rb +36 -0
  205. data/lib/sirena/diagram/info.rb +38 -0
  206. data/lib/sirena/diagram/kanban.rb +178 -0
  207. data/lib/sirena/diagram/mindmap.rb +54 -0
  208. data/lib/sirena/diagram/packet.rb +79 -0
  209. data/lib/sirena/diagram/pie.rb +115 -0
  210. data/lib/sirena/diagram/quadrant.rb +138 -0
  211. data/lib/sirena/diagram/radar.rb +52 -0
  212. data/lib/sirena/diagram/requirement.rb +133 -0
  213. data/lib/sirena/diagram/sankey.rb +217 -0
  214. data/lib/sirena/diagram/sequence.rb +242 -0
  215. data/lib/sirena/diagram/state_diagram.rb +237 -0
  216. data/lib/sirena/diagram/timeline.rb +171 -0
  217. data/lib/sirena/diagram/treemap.rb +84 -0
  218. data/lib/sirena/diagram/user_journey.rb +149 -0
  219. data/lib/sirena/diagram/xy_chart.rb +76 -0
  220. data/lib/sirena/diagram.rb +8 -0
  221. data/lib/sirena/diagram_registry.rb +101 -0
  222. data/lib/sirena/engine.rb +292 -0
  223. data/lib/sirena/parser/architecture.rb +41 -0
  224. data/lib/sirena/parser/base.rb +41 -0
  225. data/lib/sirena/parser/block.rb +72 -0
  226. data/lib/sirena/parser/c4.rb +53 -0
  227. data/lib/sirena/parser/class_diagram.rb +63 -0
  228. data/lib/sirena/parser/er_diagram.rb +40 -0
  229. data/lib/sirena/parser/error.rb +49 -0
  230. data/lib/sirena/parser/flowchart.rb +71 -0
  231. data/lib/sirena/parser/gantt.rb +60 -0
  232. data/lib/sirena/parser/git_graph.rb +95 -0
  233. data/lib/sirena/parser/grammars/architecture.rb +145 -0
  234. data/lib/sirena/parser/grammars/block.rb +190 -0
  235. data/lib/sirena/parser/grammars/c4.rb +226 -0
  236. data/lib/sirena/parser/grammars/class_diagram.rb +284 -0
  237. data/lib/sirena/parser/grammars/common.rb +84 -0
  238. data/lib/sirena/parser/grammars/er_diagram.rb +114 -0
  239. data/lib/sirena/parser/grammars/error.rb +40 -0
  240. data/lib/sirena/parser/grammars/flowchart.rb +298 -0
  241. data/lib/sirena/parser/grammars/gantt.rb +252 -0
  242. data/lib/sirena/parser/grammars/git_graph.rb +167 -0
  243. data/lib/sirena/parser/grammars/info.rb +58 -0
  244. data/lib/sirena/parser/grammars/kanban.rb +83 -0
  245. data/lib/sirena/parser/grammars/mindmap.rb +115 -0
  246. data/lib/sirena/parser/grammars/packet.rb +73 -0
  247. data/lib/sirena/parser/grammars/pie.rb +128 -0
  248. data/lib/sirena/parser/grammars/quadrant.rb +199 -0
  249. data/lib/sirena/parser/grammars/radar.rb +150 -0
  250. data/lib/sirena/parser/grammars/requirement.rb +188 -0
  251. data/lib/sirena/parser/grammars/sankey.rb +104 -0
  252. data/lib/sirena/parser/grammars/sequence.rb +247 -0
  253. data/lib/sirena/parser/grammars/state_diagram.rb +172 -0
  254. data/lib/sirena/parser/grammars/timeline.rb +142 -0
  255. data/lib/sirena/parser/grammars/treemap.rb +120 -0
  256. data/lib/sirena/parser/grammars/xy_chart.rb +120 -0
  257. data/lib/sirena/parser/info.rb +49 -0
  258. data/lib/sirena/parser/kanban.rb +97 -0
  259. data/lib/sirena/parser/mindmap.rb +106 -0
  260. data/lib/sirena/parser/packet.rb +76 -0
  261. data/lib/sirena/parser/pie.rb +49 -0
  262. data/lib/sirena/parser/quadrant.rb +57 -0
  263. data/lib/sirena/parser/radar.rb +104 -0
  264. data/lib/sirena/parser/requirement.rb +70 -0
  265. data/lib/sirena/parser/sankey.rb +64 -0
  266. data/lib/sirena/parser/sequence.rb +51 -0
  267. data/lib/sirena/parser/state_diagram.rb +69 -0
  268. data/lib/sirena/parser/timeline.rb +57 -0
  269. data/lib/sirena/parser/transforms/architecture.rb +97 -0
  270. data/lib/sirena/parser/transforms/block.rb +254 -0
  271. data/lib/sirena/parser/transforms/c4.rb +347 -0
  272. data/lib/sirena/parser/transforms/class_diagram.rb +352 -0
  273. data/lib/sirena/parser/transforms/er_diagram.rb +169 -0
  274. data/lib/sirena/parser/transforms/error.rb +58 -0
  275. data/lib/sirena/parser/transforms/flowchart.rb +293 -0
  276. data/lib/sirena/parser/transforms/gantt.rb +215 -0
  277. data/lib/sirena/parser/transforms/git_graph.rb +160 -0
  278. data/lib/sirena/parser/transforms/info.rb +58 -0
  279. data/lib/sirena/parser/transforms/kanban.rb +176 -0
  280. data/lib/sirena/parser/transforms/mindmap.rb +227 -0
  281. data/lib/sirena/parser/transforms/packet.rb +63 -0
  282. data/lib/sirena/parser/transforms/pie.rb +143 -0
  283. data/lib/sirena/parser/transforms/quadrant.rb +177 -0
  284. data/lib/sirena/parser/transforms/radar.rb +126 -0
  285. data/lib/sirena/parser/transforms/requirement.rb +272 -0
  286. data/lib/sirena/parser/transforms/sankey.rb +122 -0
  287. data/lib/sirena/parser/transforms/sequence.rb +342 -0
  288. data/lib/sirena/parser/transforms/state_diagram.rb +292 -0
  289. data/lib/sirena/parser/transforms/timeline.rb +177 -0
  290. data/lib/sirena/parser/transforms/treemap.rb +81 -0
  291. data/lib/sirena/parser/transforms/xy_chart.rb +132 -0
  292. data/lib/sirena/parser/treemap.rb +98 -0
  293. data/lib/sirena/parser/user_journey.rb +120 -0
  294. data/lib/sirena/parser/xy_chart.rb +114 -0
  295. data/lib/sirena/parser.rb +8 -0
  296. data/lib/sirena/renderer/architecture.rb +251 -0
  297. data/lib/sirena/renderer/base.rb +251 -0
  298. data/lib/sirena/renderer/block.rb +286 -0
  299. data/lib/sirena/renderer/c4.rb +490 -0
  300. data/lib/sirena/renderer/class_diagram.rb +499 -0
  301. data/lib/sirena/renderer/er_diagram.rb +417 -0
  302. data/lib/sirena/renderer/error.rb +131 -0
  303. data/lib/sirena/renderer/flowchart.rb +301 -0
  304. data/lib/sirena/renderer/gantt.rb +331 -0
  305. data/lib/sirena/renderer/git_graph.rb +368 -0
  306. data/lib/sirena/renderer/info.rb +93 -0
  307. data/lib/sirena/renderer/kanban.rb +295 -0
  308. data/lib/sirena/renderer/mindmap.rb +396 -0
  309. data/lib/sirena/renderer/packet.rb +239 -0
  310. data/lib/sirena/renderer/pie.rb +235 -0
  311. data/lib/sirena/renderer/quadrant.rb +292 -0
  312. data/lib/sirena/renderer/radar.rb +323 -0
  313. data/lib/sirena/renderer/requirement.rb +371 -0
  314. data/lib/sirena/renderer/sankey.rb +255 -0
  315. data/lib/sirena/renderer/sequence.rb +424 -0
  316. data/lib/sirena/renderer/state_diagram.rb +328 -0
  317. data/lib/sirena/renderer/timeline.rb +304 -0
  318. data/lib/sirena/renderer/treemap.rb +152 -0
  319. data/lib/sirena/renderer/user_journey.rb +331 -0
  320. data/lib/sirena/renderer/xy_chart.rb +452 -0
  321. data/lib/sirena/renderer.rb +8 -0
  322. data/lib/sirena/svg/circle.rb +41 -0
  323. data/lib/sirena/svg/document.rb +103 -0
  324. data/lib/sirena/svg/element.rb +65 -0
  325. data/lib/sirena/svg/ellipse.rb +33 -0
  326. data/lib/sirena/svg/group.rb +71 -0
  327. data/lib/sirena/svg/line.rb +49 -0
  328. data/lib/sirena/svg/path.rb +76 -0
  329. data/lib/sirena/svg/polygon.rb +43 -0
  330. data/lib/sirena/svg/polyline.rb +35 -0
  331. data/lib/sirena/svg/rect.rb +57 -0
  332. data/lib/sirena/svg/style.rb +44 -0
  333. data/lib/sirena/svg/text.rb +72 -0
  334. data/lib/sirena/svg.rb +19 -0
  335. data/lib/sirena/text_measurement.rb +71 -0
  336. data/lib/sirena/theme/builtin/dark.yml +70 -0
  337. data/lib/sirena/theme/builtin/default.yml +80 -0
  338. data/lib/sirena/theme/builtin/high_contrast.yml +70 -0
  339. data/lib/sirena/theme/builtin/light.yml +70 -0
  340. data/lib/sirena/theme/color_palette.rb +48 -0
  341. data/lib/sirena/theme/effect_styles.rb +28 -0
  342. data/lib/sirena/theme/registry.rb +41 -0
  343. data/lib/sirena/theme/shape_styles.rb +28 -0
  344. data/lib/sirena/theme/spacing_config.rb +24 -0
  345. data/lib/sirena/theme/typography.rb +30 -0
  346. data/lib/sirena/theme.rb +69 -0
  347. data/lib/sirena/transform/architecture.rb +273 -0
  348. data/lib/sirena/transform/base.rb +199 -0
  349. data/lib/sirena/transform/block.rb +215 -0
  350. data/lib/sirena/transform/c4.rb +288 -0
  351. data/lib/sirena/transform/class_diagram.rb +296 -0
  352. data/lib/sirena/transform/er_diagram.rb +204 -0
  353. data/lib/sirena/transform/error.rb +39 -0
  354. data/lib/sirena/transform/flowchart.rb +161 -0
  355. data/lib/sirena/transform/gantt.rb +253 -0
  356. data/lib/sirena/transform/git_graph.rb +283 -0
  357. data/lib/sirena/transform/info.rb +39 -0
  358. data/lib/sirena/transform/kanban.rb +180 -0
  359. data/lib/sirena/transform/mindmap.rb +251 -0
  360. data/lib/sirena/transform/packet.rb +185 -0
  361. data/lib/sirena/transform/pie.rb +62 -0
  362. data/lib/sirena/transform/quadrant.rb +167 -0
  363. data/lib/sirena/transform/radar.rb +227 -0
  364. data/lib/sirena/transform/requirement.rb +233 -0
  365. data/lib/sirena/transform/sankey.rb +212 -0
  366. data/lib/sirena/transform/sequence.rb +143 -0
  367. data/lib/sirena/transform/state_diagram.rb +228 -0
  368. data/lib/sirena/transform/timeline.rb +139 -0
  369. data/lib/sirena/transform/treemap.rb +120 -0
  370. data/lib/sirena/transform/user_journey.rb +207 -0
  371. data/lib/sirena/transform/xy_chart.rb +273 -0
  372. data/lib/sirena/transform.rb +8 -0
  373. data/lib/sirena/version.rb +5 -0
  374. data/lib/sirena.rb +328 -0
  375. data/lib/tasks/benchmark.rake +532 -0
  376. data/lib/tasks/examples.rake +468 -0
  377. data/lib/tasks/generate_mermaid_fixtures.rake +363 -0
  378. data/lib/tasks/mermaid_fixtures.rake +46 -0
  379. data/scripts/extract_mermaid_tests.rb +493 -0
  380. data/scripts/rename_to_sirena.rb +73 -0
  381. data/sirena.gemspec +47 -0
  382. metadata +529 -0
@@ -0,0 +1,114 @@
1
+ = Error Diagram
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ == Purpose
6
+
7
+ Error diagrams display error messages or error states in Mermaid syntax. They are utility diagrams used to show parsing errors, syntax errors, or system failure states.
8
+
9
+ == Syntax
10
+
11
+ === Basic error diagram
12
+
13
+ The simplest form displays just an error indicator:
14
+
15
+ [source,mermaid]
16
+ ----
17
+ error
18
+ ----
19
+
20
+ === Error with message
21
+
22
+ You can include an error message after the keyword:
23
+
24
+ [source,mermaid]
25
+ ----
26
+ Error Diagrams
27
+ ----
28
+
29
+ The keyword can be lowercase or capitalized:
30
+
31
+ [source,mermaid]
32
+ ----
33
+ error
34
+ ----
35
+
36
+ [source,mermaid]
37
+ ----
38
+ Error
39
+ ----
40
+
41
+ == Features
42
+
43
+ === Visual representation
44
+
45
+ Error diagrams render as:
46
+
47
+ * A centered box with error styling (light red background, red border)
48
+ * An error icon (red circle with exclamation mark)
49
+ * Error message text next to the icon
50
+ * Visual design emphasizing the error state
51
+
52
+ === Theme integration
53
+
54
+ Error diagrams use fixed error colors but integrate with theme typography:
55
+
56
+ * Background: Light red (#FFEBEE)
57
+ * Border: Red (#D32F2F)
58
+ * Icon: Red circle with white exclamation mark
59
+ * Text: Dark red (#C62828)
60
+ * Typography settings for font family and size from theme
61
+
62
+ == Implementation details
63
+
64
+ === Parser
65
+
66
+ The error diagram parser (`Sirena::Parser::ErrorParser`) uses Parslet grammar to handle:
67
+
68
+ * Basic `error` or `Error` keyword
69
+ * Optional error message text after the keyword
70
+
71
+ === Model
72
+
73
+ The error diagram model (`Sirena::Diagram::Error`) contains:
74
+
75
+ * `message`: Optional error message string
76
+
77
+ === Renderer
78
+
79
+ The error renderer (`Sirena::Renderer::ErrorRenderer`) creates:
80
+
81
+ * A rounded rectangle box (400x120 pixels)
82
+ * An error icon (red circle with exclamation mark) on the left
83
+ * Error message text on the right
84
+ * Fixed error color scheme for immediate recognition
85
+
86
+ == Examples
87
+
88
+ === Simple error
89
+
90
+ [source,mermaid]
91
+ ----
92
+ error
93
+ ----
94
+
95
+ Renders "Error" in an error box with icon.
96
+
97
+ === Error with message
98
+
99
+ [source,mermaid]
100
+ ----
101
+ Error Diagrams
102
+ ----
103
+
104
+ Renders "Diagrams" as the error message.
105
+
106
+ == Use cases
107
+
108
+ Error diagrams are useful for:
109
+
110
+ * Displaying parsing or syntax errors
111
+ * Showing system failure states
112
+ * Indicating error conditions in workflows
113
+ * Testing error handling in diagram rendering
114
+ * Documentation of error states
@@ -0,0 +1,29 @@
1
+ // Auto-generated examples for flowchart
2
+ // Generated: 2025-10-29 15:06:35
3
+
4
+ ==== Example 1: Basic Flowchart
5
+
6
+ .Simple flowchart showing start, process, decision, and end nodes with conditional branching
7
+ [NOTE]
8
+ ====
9
+ Complexity: Basic
10
+ +
11
+ Use Cases: Getting started with flowcharts, Simple process documentation, Decision tree visualization
12
+ ====
13
+
14
+ .Source Code
15
+ [source,mermaid]
16
+ ----
17
+ flowchart TD
18
+ Start([Start]) --> Process[Process Data]
19
+ Process --> Decision{Valid?}
20
+ Decision -->|Yes| Success[Success]
21
+ Decision -->|No| Error[Error]
22
+ Success --> End([End])
23
+ Error --> End
24
+ ----
25
+
26
+ .Rendered Output
27
+ image::../../assets/examples/flowchart/01-basic-flow.svg[Basic Flowchart,600]
28
+
29
+ '''
@@ -0,0 +1,488 @@
1
+ ---
2
+ layout: default
3
+ title: Flowchart Diagrams
4
+ parent: Diagram Types
5
+ nav_order: 7
6
+ ---
7
+
8
+ == Flowchart diagrams
9
+
10
+ === Overview
11
+
12
+ Flowchart diagrams in Sirena represent directed graphs showing process flows, decision trees, and relationships between nodes. Flowcharts are one of the most versatile diagram types, supporting various node shapes, edge types, and layout directions.
13
+
14
+ Flowcharts are useful for:
15
+
16
+ * Documenting business processes and workflows
17
+ * Visualizing algorithms and decision logic
18
+ * Creating system architecture diagrams
19
+ * Showing data flow between components
20
+ * Mapping user interaction flows
21
+
22
+ === Syntax specification
23
+
24
+ ==== Diagram declaration
25
+
26
+ Flowcharts can be declared using either `graph` or `flowchart` keywords:
27
+
28
+ [source,mermaid]
29
+ ----
30
+ graph <direction>
31
+ <diagram-content>
32
+ ----
33
+
34
+ Or:
35
+
36
+ [source,mermaid]
37
+ ----
38
+ flowchart <direction>
39
+ <diagram-content>
40
+ ----
41
+
42
+ Where `<direction>` specifies the layout direction:
43
+
44
+ * `TD` or `TB` - Top to bottom (default)
45
+ * `BT` - Bottom to top
46
+ * `LR` - Left to right
47
+ * `RL` - Right to left
48
+
49
+ ==== Node definitions
50
+
51
+ Nodes can be defined with various shapes using different bracket styles:
52
+
53
+ [cols="2,2,3"]
54
+ |===
55
+ |Syntax |Shape |Description
56
+
57
+ |`id[text]`
58
+ |Rectangle
59
+ |Standard rectangular node
60
+
61
+ |`id(text)`
62
+ |Rounded rectangle
63
+ |Rectangle with rounded corners
64
+
65
+ |`id([text])`
66
+ |Stadium
67
+ |Pill-shaped node
68
+
69
+ |`id[[text]]`
70
+ |Subroutine
71
+ |Rectangle with double vertical lines
72
+
73
+ |`id[(text)]`
74
+ |Cylindrical
75
+ |Database or storage shape
76
+
77
+ |`id((text))`
78
+ |Circle
79
+ |Circular node
80
+
81
+ |`id>text]`
82
+ |Asymmetric
83
+ |Flag or banner shape
84
+
85
+ |`id{text}`
86
+ |Diamond
87
+ |Decision or conditional node
88
+
89
+ |`id{{text}}`
90
+ |Hexagon
91
+ |Process or preparation node
92
+
93
+ |`id[/text/]`
94
+ |Parallelogram
95
+ |Input/output operation
96
+
97
+ |`id[\text\]`
98
+ |Parallelogram (alt)
99
+ |Alternative input/output syntax
100
+
101
+ |`id[/text\]`
102
+ |Trapezoid
103
+ |Manual operation
104
+
105
+ |`id[\text/]`
106
+ |Trapezoid (inverted)
107
+ |Inverted manual operation
108
+ |===
109
+
110
+ ==== Edge definitions
111
+
112
+ Edges connect nodes and can have different styles:
113
+
114
+ [cols="2,3,3"]
115
+ |===
116
+ |Syntax |Style |Description
117
+
118
+ |`A --> B`
119
+ |Arrow
120
+ |Solid line with arrowhead
121
+
122
+ |`A --- B`
123
+ |Open link
124
+ |Solid line without arrowhead
125
+
126
+ |`A -.-> B`
127
+ |Dotted arrow
128
+ |Dotted line with arrowhead
129
+
130
+ |`A -.- B`
131
+ |Dotted link
132
+ |Dotted line without arrowhead
133
+
134
+ |`A ==> B`
135
+ |Thick arrow
136
+ |Thick solid line with arrowhead
137
+
138
+ |`A === B`
139
+ |Thick link
140
+ |Thick solid line without arrowhead
141
+
142
+ |`A --o B`
143
+ |Circle edge
144
+ |Line ending with a circle
145
+
146
+ |`A --x B`
147
+ |Cross edge
148
+ |Line ending with a cross
149
+
150
+ |`A <--> B`
151
+ |Bidirectional arrow
152
+ |Arrow pointing both ways
153
+
154
+ |`A o--o B`
155
+ |Bidirectional circle
156
+ |Circles on both ends
157
+
158
+ |`A x--x B`
159
+ |Bidirectional cross
160
+ |Crosses on both ends
161
+ |===
162
+
163
+ ==== Edge labels
164
+
165
+ Edges can have labels using the pipe `|` character:
166
+
167
+ [source,mermaid]
168
+ ----
169
+ A -->|label text| B
170
+ A -- label text --> B
171
+ ----
172
+
173
+ Both syntaxes are equivalent.
174
+
175
+ ==== Subgraphs
176
+
177
+ Subgraphs group related nodes together:
178
+
179
+ [source,mermaid]
180
+ ----
181
+ subgraph title
182
+ A --> B
183
+ end
184
+ ----
185
+
186
+ Subgraphs can be nested:
187
+
188
+ [source,mermaid]
189
+ ----
190
+ subgraph outer
191
+ subgraph inner
192
+ A --> B
193
+ end
194
+ end
195
+ ----
196
+
197
+ === Examples
198
+
199
+ ==== Basic flowchart
200
+
201
+ .Simple top-to-bottom flowchart
202
+ [example]
203
+ ====
204
+ [source,mermaid]
205
+ ----
206
+ graph TD
207
+ Start --> End
208
+ ----
209
+
210
+ This creates a simple flowchart with two rectangular nodes connected by an arrow.
211
+ ====
212
+
213
+ ==== Flowchart with different node shapes
214
+
215
+ .Various node shapes
216
+ [example]
217
+ ====
218
+ [source,mermaid]
219
+ ----
220
+ graph TD
221
+ Start[Start Process] --> Input[Receive Input]
222
+ Input --> Validate{Valid Input?}
223
+ Validate -->|Yes| Process[Process Data]
224
+ Validate -->|No| Error[Show Error]
225
+ Error --> Input
226
+ Process --> End[End Process]
227
+ ----
228
+
229
+ This example demonstrates:
230
+
231
+ * Rectangle nodes for process steps
232
+ * Diamond node for decision points
233
+ * Labeled edges showing decision outcomes
234
+ * Loop back from error to input
235
+ ====
236
+
237
+ ==== Complex workflow with subgraphs and multiple shapes
238
+
239
+ .Advanced flowchart with various features
240
+ [example]
241
+ ====
242
+ [source,mermaid]
243
+ ----
244
+ graph TD
245
+ Start[Start Process] --> Input[Receive Input]
246
+ Input --> Validate{Valid Input?}
247
+ Validate -->|Yes| Process[Process Data]
248
+ Validate -->|No| Error[Show Error]
249
+ Error --> Input
250
+ Process --> Calculate[Calculate Result]
251
+ Calculate --> Output[Generate Output]
252
+ Output --> Save{Save to Database?}
253
+ Save -->|Yes| DB[(Database)]
254
+ Save -->|No| Display[Display Result]
255
+ DB --> Display
256
+ Display --> End[End Process]
257
+ ----
258
+
259
+ This example shows:
260
+
261
+ * Multiple decision points (diamond nodes)
262
+ * Database node using cylindrical shape `[(Database)]`
263
+ * Branching and merging flows
264
+ * Conditional paths with labels
265
+ ====
266
+
267
+ ==== Left-to-right flowchart
268
+
269
+ .Horizontal layout
270
+ [example]
271
+ ====
272
+ [source,mermaid]
273
+ ----
274
+ graph LR
275
+ A[Client] --> B[Load Balancer]
276
+ B --> C[Server 1]
277
+ B --> D[Server 2]
278
+ B --> E[Server 3]
279
+ C --> F[(Database)]
280
+ D --> F
281
+ E --> F
282
+ ----
283
+
284
+ This demonstrates:
285
+
286
+ * Left-to-right layout using `LR` direction
287
+ * Multiple parallel paths from one node
288
+ * Convergence of multiple paths to a single node
289
+ * Database representation
290
+ ====
291
+
292
+ ==== Flowchart with various edge styles
293
+
294
+ .Different edge types
295
+ [example]
296
+ ====
297
+ [source,mermaid]
298
+ ----
299
+ graph TD
300
+ A[Start] --> B[Process]
301
+ B -.-> C[Optional Step]
302
+ C ==> D[Important Step]
303
+ D --> E{Decision}
304
+ E -->|Yes| F[Action 1]
305
+ E -->|No| G[Action 2]
306
+ F --> H[End]
307
+ G --> H
308
+ ----
309
+
310
+ This shows:
311
+
312
+ * Solid arrow for normal flow
313
+ * Dotted arrow for optional or conditional flow
314
+ * Thick arrow for emphasized flow
315
+ * Labeled decision branches
316
+ ====
317
+
318
+ ==== Subgraph example
319
+
320
+ .Grouping with subgraphs
321
+ [example]
322
+ ====
323
+ [source,mermaid]
324
+ ----
325
+ graph TB
326
+ A[Start] --> B[Authenticate]
327
+
328
+ subgraph Authentication
329
+ B --> C{Valid Credentials?}
330
+ C -->|Yes| D[Grant Access]
331
+ C -->|No| E[Deny Access]
332
+ end
333
+
334
+ D --> F[Main Application]
335
+ E --> G[Login Screen]
336
+ G --> B
337
+ F --> H[End]
338
+ ----
339
+
340
+ This demonstrates:
341
+
342
+ * Grouping related nodes in a subgraph
343
+ * Connections between nodes inside and outside subgraphs
344
+ * Clear visual organization of workflow sections
345
+ ====
346
+
347
+ === Features
348
+
349
+ ==== Node identifiers
350
+
351
+ Node identifiers can contain letters, numbers, and underscores:
352
+
353
+ [source,mermaid]
354
+ ----
355
+ graph TD
356
+ node_1[First Node]
357
+ node_2[Second Node]
358
+ node_1 --> node_2
359
+ ----
360
+
361
+ ==== Multi-word labels
362
+
363
+ Labels can contain spaces and special characters:
364
+
365
+ [source,mermaid]
366
+ ----
367
+ graph TD
368
+ A[This is a multi-word label!]
369
+ B[Special chars: @#$%]
370
+ A --> B
371
+ ----
372
+
373
+ ==== Long text in nodes
374
+
375
+ Text in nodes automatically wraps:
376
+
377
+ [source,mermaid]
378
+ ----
379
+ graph TD
380
+ A[This is a very long text that will be wrapped automatically to fit within the node boundaries]
381
+ ----
382
+
383
+ ==== Multiple edges from one node
384
+
385
+ A single node can have multiple outgoing edges:
386
+
387
+ [source,mermaid]
388
+ ----
389
+ graph TD
390
+ A --> B
391
+ A --> C
392
+ A --> D
393
+ ----
394
+
395
+ This can also be written as:
396
+
397
+ [source,mermaid]
398
+ ----
399
+ graph TD
400
+ A --> B & C & D
401
+ ----
402
+
403
+ ==== Chained connections
404
+
405
+ Multiple connections can be chained:
406
+
407
+ [source,mermaid]
408
+ ----
409
+ graph TD
410
+ A --> B --> C --> D
411
+ ----
412
+
413
+ ==== Unicode support
414
+
415
+ Unicode characters are supported in labels:
416
+
417
+ [source,mermaid]
418
+ ----
419
+ graph TD
420
+ A[Hello δΈ–η•Œ]
421
+ B[Bonjour 🌍]
422
+ A --> B
423
+ ----
424
+
425
+ === Limitations
426
+
427
+ ==== Currently not supported
428
+
429
+ The following Mermaid flowchart features are not yet supported in Sirena:
430
+
431
+ * Styling individual nodes or edges with `style` or `class` directives
432
+ * Click events and interactions
433
+ * Comments using `%%`
434
+ * Font Awesome icons
435
+ * Markdown formatting in node text
436
+
437
+ ==== Known issues
438
+
439
+ * Very long labels may overflow node boundaries in some cases
440
+ * Circular dependencies may cause layout issues
441
+ * Complex nested subgraphs may not render optimally
442
+
443
+ === Best practices
444
+
445
+ ==== Keep it simple
446
+
447
+ Avoid creating overly complex diagrams. If a flowchart becomes too large:
448
+
449
+ * Split into multiple diagrams
450
+ * Use subgraphs to organize related sections
451
+ * Consider using different diagram types for different aspects
452
+
453
+ ==== Use meaningful labels
454
+
455
+ Use clear, descriptive labels for nodes and edges:
456
+
457
+ [source,mermaid]
458
+ ----
459
+ graph TD
460
+ %% Good
461
+ ValidateInput{Input Valid?} -->|Yes| ProcessData[Process Data]
462
+
463
+ %% Less clear
464
+ A{?} --> B
465
+ ----
466
+
467
+ ==== Consistent node shapes
468
+
469
+ Use consistent node shapes for similar types of operations:
470
+
471
+ * Rectangles for processes
472
+ * Diamonds for decisions
473
+ * Cylinders for databases
474
+ * Parallelograms for I/O operations
475
+
476
+ ==== Direction choice
477
+
478
+ Choose the layout direction that best fits your content:
479
+
480
+ * `TD` (top-down) for sequential processes
481
+ * `LR` (left-right) for timelines or horizontal flows
482
+ * Consider your display medium (wide vs. tall screens)
483
+
484
+ === Related documentation
485
+
486
+ * <<index.adoc#,Diagram types overview>>
487
+ * <<sequence-diagram.adoc#,Sequence diagrams>>
488
+ * link:https://mermaid.js.org/syntax/flowchart.html[Official Mermaid flowchart documentation]