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,502 @@
1
+ = Gantt chart diagrams
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ == Overview
6
+
7
+ Gantt chart diagrams in Sirena visualize project schedules, showing tasks over time with dependencies, sections, and status indicators. Gantt charts are essential for project management and timeline visualization.
8
+
9
+ Gantt charts are useful for:
10
+
11
+ * Project planning and scheduling
12
+ * Task dependency visualization
13
+ * Timeline management
14
+ * Resource allocation tracking
15
+ * Progress monitoring
16
+ * Milestone tracking
17
+
18
+ == Syntax specification
19
+
20
+ === Diagram declaration
21
+
22
+ Gantt charts are declared using the `gantt` keyword:
23
+
24
+ [source,mermaid]
25
+ ----
26
+ gantt
27
+ <configuration>
28
+ <sections-and-tasks>
29
+ ----
30
+
31
+ === Configuration directives
32
+
33
+ ==== Title
34
+
35
+ Sets the diagram title:
36
+
37
+ [source,mermaid]
38
+ ----
39
+ gantt
40
+ title Project Timeline
41
+ ----
42
+
43
+ ==== Date format
44
+
45
+ Specifies the date format for task dates:
46
+
47
+ [source,mermaid]
48
+ ----
49
+ gantt
50
+ dateFormat YYYY-MM-DD
51
+ ----
52
+
53
+ Common date formats:
54
+
55
+ * `YYYY-MM-DD` - ISO date format (2024-01-15)
56
+ * `YYYY-MM-DD HH:mm` - Date with time
57
+ * `DD/MM/YYYY` - European format
58
+ * `MM/DD/YYYY` - US format
59
+
60
+ ==== Axis format
61
+
62
+ Specifies how dates are displayed on the timeline axis:
63
+
64
+ [source,mermaid]
65
+ ----
66
+ gantt
67
+ axisFormat %m-%d
68
+ ----
69
+
70
+ Format specifiers:
71
+
72
+ * `%Y` - Full year (2024)
73
+ * `%m` - Month (01-12)
74
+ * `%d` - Day (01-31)
75
+ * `%H` - Hour (00-23)
76
+ * `%M` - Minute (00-59)
77
+
78
+ ==== Tick interval
79
+
80
+ Sets the interval between timeline ticks:
81
+
82
+ [source,mermaid]
83
+ ----
84
+ gantt
85
+ tickInterval 1day
86
+ tickInterval 1week
87
+ tickInterval 1month
88
+ ----
89
+
90
+ ==== Excludes
91
+
92
+ Excludes certain days from the timeline:
93
+
94
+ [source,mermaid]
95
+ ----
96
+ gantt
97
+ excludes weekends
98
+ excludes weekdays
99
+ excludes 2024-01-10
100
+ ----
101
+
102
+ ==== Today marker
103
+
104
+ Adds a marker for the current date:
105
+
106
+ [source,mermaid]
107
+ ----
108
+ gantt
109
+ todayMarker on
110
+ todayMarker off
111
+ ----
112
+
113
+ === Section declarations
114
+
115
+ Sections group related tasks:
116
+
117
+ [source,mermaid]
118
+ ----
119
+ gantt
120
+ section Planning
121
+ Task 1 :2024-01-01, 30d
122
+ Task 2 :2024-01-15, 20d
123
+
124
+ section Development
125
+ Task 3 :2024-02-01, 45d
126
+ ----
127
+
128
+ === Task definitions
129
+
130
+ Tasks can be defined in multiple formats:
131
+
132
+ ==== Basic task with dates and duration
133
+
134
+ [source,mermaid]
135
+ ----
136
+ Task description :task_id, start_date, duration
137
+ ----
138
+
139
+ Example:
140
+
141
+ [source,mermaid]
142
+ ----
143
+ Design phase :des1, 2024-01-01, 30d
144
+ ----
145
+
146
+ ==== Task with start and end dates
147
+
148
+ [source,mermaid]
149
+ ----
150
+ Task description :task_id, start_date, end_date
151
+ ----
152
+
153
+ Example:
154
+
155
+ [source,mermaid]
156
+ ----
157
+ Implementation :impl, 2024-01-15, 2024-02-15
158
+ ----
159
+
160
+ ==== Task with dependencies
161
+
162
+ [source,mermaid]
163
+ ----
164
+ Task description :task_id, after other_task_id, duration
165
+ ----
166
+
167
+ Example:
168
+
169
+ [source,mermaid]
170
+ ----
171
+ Testing :test, after impl, 15d
172
+ ----
173
+
174
+ ==== Task with status tags
175
+
176
+ Tasks can have status tags that affect their appearance:
177
+
178
+ * `done` - Completed task (green)
179
+ * `active` - Currently active task (blue)
180
+ * `crit` - Critical task (red)
181
+ * `milestone` - Milestone marker (diamond shape)
182
+
183
+ [source,mermaid]
184
+ ----
185
+ Completed task :done, task1, 2024-01-01, 10d
186
+ Active task :active, task2, 2024-01-11, 5d
187
+ Critical task :crit, task3, 2024-01-16, 3d
188
+ Project milestone :milestone, m1, 2024-01-20, 0d
189
+ ----
190
+
191
+ ==== Duration formats
192
+
193
+ * `30d` - 30 days
194
+ * `2w` - 2 weeks
195
+ * `48h` - 48 hours
196
+ * `1M` - 1 month
197
+
198
+ === Task dependencies
199
+
200
+ Tasks can depend on other tasks using the `after` keyword:
201
+
202
+ [source,mermaid]
203
+ ----
204
+ gantt
205
+ section Tasks
206
+ Task A :a, 2024-01-01, 10d
207
+ Task B :b, after a, 5d
208
+ Task C :c, after b, 3d
209
+ ----
210
+
211
+ Tasks can also use `until` to end when another task starts:
212
+
213
+ [source,mermaid]
214
+ ----
215
+ gantt
216
+ section Tasks
217
+ Task A :a, 2024-01-01, 10d
218
+ Task B :b, 2024-01-05, until a
219
+ ----
220
+
221
+ == Examples
222
+
223
+ === Basic Gantt chart
224
+
225
+ .Simple project timeline
226
+ [example]
227
+ ====
228
+ [source,mermaid]
229
+ ----
230
+ gantt
231
+ title Simple Project Timeline
232
+ dateFormat YYYY-MM-DD
233
+
234
+ section Planning
235
+ Requirements :a1, 2024-01-01, 30d
236
+ Design :a2, after a1, 20d
237
+
238
+ section Development
239
+ Implementation :b1, after a2, 45d
240
+ Testing :b2, after b1, 15d
241
+ ----
242
+
243
+ This creates a basic Gantt chart with two sections and sequential tasks.
244
+ ====
245
+
246
+ === Gantt chart with task statuses
247
+
248
+ .Project with status indicators
249
+ [example]
250
+ ====
251
+ [source,mermaid]
252
+ ----
253
+ gantt
254
+ title Project Progress
255
+ dateFormat YYYY-MM-DD
256
+
257
+ section Completed
258
+ Analysis :done, a1, 2024-01-01, 10d
259
+ Design :done, a2, 2024-01-11, 15d
260
+
261
+ section In Progress
262
+ Development :active, b1, 2024-01-26, 30d
263
+
264
+ section Pending
265
+ Testing :crit, b2, after b1, 10d
266
+ Deployment :milestone, m1, after b2, 0d
267
+ ----
268
+
269
+ This example shows:
270
+
271
+ * Completed tasks marked with `done` tag (green)
272
+ * Active task marked with `active` tag (blue)
273
+ * Critical task marked with `crit` tag (red)
274
+ * Milestone marker with zero duration
275
+ ====
276
+
277
+ === Complex Gantt chart with dependencies
278
+
279
+ .Multi-phase project
280
+ [example]
281
+ ====
282
+ [source,mermaid]
283
+ ----
284
+ gantt
285
+ title Software Development Project
286
+ dateFormat YYYY-MM-DD
287
+ axisFormat %m-%d
288
+
289
+ section Planning
290
+ Requirements gathering :done, req, 2024-01-01, 15d
291
+ System design :done, des, after req, 20d
292
+
293
+ section Development
294
+ Backend development :active, be, after des, 30d
295
+ Frontend development :active, fe, after des, 35d
296
+ Integration :int, after be, after fe, 10d
297
+
298
+ section Testing
299
+ Unit testing :crit, ut, after be, 5d
300
+ Integration testing :crit, it, after int, 7d
301
+ UAT :uat, after it, 10d
302
+
303
+ section Deployment
304
+ Staging deployment :sd, after uat, 2d
305
+ Production deployment :milestone, pd, after sd, 0d
306
+ ----
307
+
308
+ This demonstrates:
309
+
310
+ * Multiple sections organizing the project
311
+ * Task dependencies using `after` keyword
312
+ * Mixed task statuses (done, active, crit)
313
+ * Milestone marker for deployment
314
+ * Custom axis format for date display
315
+ ====
316
+
317
+ === Gantt chart with excludes
318
+
319
+ .Project excluding weekends
320
+ [example]
321
+ ====
322
+ [source,mermaid]
323
+ ----
324
+ gantt
325
+ title Development Sprint
326
+ dateFormat YYYY-MM-DD
327
+ excludes weekends
328
+
329
+ section Week 1
330
+ Sprint planning :done, 2024-01-08, 1d
331
+ Feature A :active, 2024-01-09, 4d
332
+
333
+ section Week 2
334
+ Feature B :2024-01-15, 5d
335
+ Code review :2024-01-22, 2d
336
+ ----
337
+
338
+ This shows how to exclude weekends from the timeline calculation.
339
+ ====
340
+
341
+ == Features
342
+
343
+ === Task identification
344
+
345
+ Tasks can have IDs for referencing in dependencies:
346
+
347
+ [source,mermaid]
348
+ ----
349
+ gantt
350
+ section Tasks
351
+ First task :task1, 2024-01-01, 10d
352
+ Second task :task2, after task1, 5d
353
+ Third task :after task2, 3d
354
+ ----
355
+
356
+ === Multiple task tags
357
+
358
+ Tasks can have multiple status tags:
359
+
360
+ [source,mermaid]
361
+ ----
362
+ gantt
363
+ section Critical Path
364
+ Important task :crit, active, t1, 2024-01-01, 10d
365
+ Completed critical :crit, done, t2, 2024-01-11, 5d
366
+ ----
367
+
368
+ === Flexible date formats
369
+
370
+ Supports various date input formats:
371
+
372
+ [source,mermaid]
373
+ ----
374
+ gantt
375
+ dateFormat YYYY-MM-DD
376
+ section Tasks
377
+ Task 1 :2024-01-01, 10d
378
+ Task 2 :2024-01-15, 2024-01-30
379
+ Task 3 :after Task 2, 1w
380
+ ----
381
+
382
+ === Timeline customization
383
+
384
+ Customize timeline appearance:
385
+
386
+ [source,mermaid]
387
+ ----
388
+ gantt
389
+ title Customized Timeline
390
+ dateFormat YYYY-MM-DD
391
+ axisFormat %d/%m
392
+ tickInterval 1week
393
+
394
+ section Tasks
395
+ Task 1 :2024-01-01, 30d
396
+ ----
397
+
398
+ == Limitations
399
+
400
+ === Currently not supported
401
+
402
+ The following Mermaid Gantt chart features are not yet supported in Sirena:
403
+
404
+ * Click events and interactivity
405
+ * Custom styling with `style` directives
406
+ * Accessibility tags beyond basic support
407
+ * Comments using `%%`
408
+ * Custom themes per diagram
409
+
410
+ === Known issues
411
+
412
+ * Very long task names may overflow in some layouts
413
+ * Complex dependency chains may require manual adjustment
414
+ * Timeline scaling with many tasks may need optimization
415
+
416
+ == Best practices
417
+
418
+ === Use meaningful task names
419
+
420
+ Use clear, descriptive names for tasks:
421
+
422
+ [source,mermaid]
423
+ ----
424
+ gantt
425
+ %% Good
426
+ Requirements analysis :done, 2024-01-01, 10d
427
+
428
+ %% Less clear
429
+ Task 1 :done, 2024-01-01, 10d
430
+ ----
431
+
432
+ === Organize with sections
433
+
434
+ Group related tasks into logical sections:
435
+
436
+ [source,mermaid]
437
+ ----
438
+ gantt
439
+ section Planning
440
+ <planning tasks>
441
+
442
+ section Development
443
+ <development tasks>
444
+
445
+ section Testing
446
+ <testing tasks>
447
+ ----
448
+
449
+ === Use status tags appropriately
450
+
451
+ Apply status tags to provide visual context:
452
+
453
+ * `done` for completed work
454
+ * `active` for current work
455
+ * `crit` for critical path items
456
+ * `milestone` for key dates
457
+
458
+ === Set appropriate date formats
459
+
460
+ Choose date formats that match your audience:
461
+
462
+ [source,mermaid]
463
+ ----
464
+ gantt
465
+ %% For international audience
466
+ dateFormat YYYY-MM-DD
467
+ axisFormat %Y-%m-%d
468
+
469
+ %% For US audience
470
+ dateFormat MM/DD/YYYY
471
+ axisFormat %m/%d
472
+ ----
473
+
474
+ === Keep timelines readable
475
+
476
+ Avoid overcrowding:
477
+
478
+ * Limit to 20-30 tasks per diagram
479
+ * Use appropriate tick intervals
480
+ * Consider splitting long projects into phases
481
+
482
+ === Leverage dependencies
483
+
484
+ Use task dependencies instead of manual date calculation:
485
+
486
+ [source,mermaid]
487
+ ----
488
+ gantt
489
+ %% Good - uses dependencies
490
+ Task A :a, 2024-01-01, 10d
491
+ Task B :b, after a, 5d
492
+
493
+ %% Less maintainable - hardcoded dates
494
+ Task A :a, 2024-01-01, 10d
495
+ Task B :b, 2024-01-11, 5d
496
+ ----
497
+
498
+ == Related documentation
499
+
500
+ * <<index.adoc#,Diagram types overview>>
501
+ * <<flowchart.adoc#,Flowchart diagrams>>
502
+ * link:https://mermaid.js.org/syntax/gantt.html[Official Mermaid Gantt chart documentation]