etassia 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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +140 -0
- data/LICENSE +25 -0
- data/README.adoc +436 -0
- data/exe/etassia +7 -0
- data/lib/etassia/cli.rb +187 -0
- data/lib/etassia/commands/batch.rb +210 -0
- data/lib/etassia/commands/notation_loader.rb +22 -0
- data/lib/etassia/commands/render.rb +98 -0
- data/lib/etassia/commands/types.rb +33 -0
- data/lib/etassia/commands/version.rb +24 -0
- data/lib/etassia/corpus_type_names.rb +52 -0
- data/lib/etassia/diagram/architecture.rb +108 -0
- data/lib/etassia/diagram/base.rb +61 -0
- data/lib/etassia/diagram/block.rb +102 -0
- data/lib/etassia/diagram/c4.rb +337 -0
- data/lib/etassia/diagram/class_diagram.rb +466 -0
- data/lib/etassia/diagram/class_namespace.rb +17 -0
- data/lib/etassia/diagram/class_note.rb +17 -0
- data/lib/etassia/diagram/containment.rb +107 -0
- data/lib/etassia/diagram/er_diagram.rb +317 -0
- data/lib/etassia/diagram/error.rb +38 -0
- data/lib/etassia/diagram/flowchart.rb +419 -0
- data/lib/etassia/diagram/flowchart_label_text.rb +63 -0
- data/lib/etassia/diagram/gantt.rb +94 -0
- data/lib/etassia/diagram/generic_text.rb +30 -0
- data/lib/etassia/diagram/git_graph.rb +57 -0
- data/lib/etassia/diagram/info.rb +38 -0
- data/lib/etassia/diagram/kanban.rb +198 -0
- data/lib/etassia/diagram/mindmap.rb +71 -0
- data/lib/etassia/diagram/packet.rb +93 -0
- data/lib/etassia/diagram/pie.rb +115 -0
- data/lib/etassia/diagram/quadrant.rb +135 -0
- data/lib/etassia/diagram/radar.rb +65 -0
- data/lib/etassia/diagram/requirement.rb +168 -0
- data/lib/etassia/diagram/sankey.rb +217 -0
- data/lib/etassia/diagram/sequence.rb +299 -0
- data/lib/etassia/diagram/sequence_box.rb +18 -0
- data/lib/etassia/diagram/sequence_frame.rb +37 -0
- data/lib/etassia/diagram/sequence_frame_section.rb +23 -0
- data/lib/etassia/diagram/sequence_text.rb +69 -0
- data/lib/etassia/diagram/sequence_wrap.rb +23 -0
- data/lib/etassia/diagram/state_diagram.rb +282 -0
- data/lib/etassia/diagram/timeline.rb +183 -0
- data/lib/etassia/diagram/treemap.rb +95 -0
- data/lib/etassia/diagram/user_journey.rb +153 -0
- data/lib/etassia/diagram/xy_chart.rb +90 -0
- data/lib/etassia/diagram.rb +8 -0
- data/lib/etassia/diagram_registry.rb +34 -0
- data/lib/etassia/engine.rb +334 -0
- data/lib/etassia/error/diagram_type_error.rb +10 -0
- data/lib/etassia/error/layout_error.rb +12 -0
- data/lib/etassia/error/notation_registration_error.rb +10 -0
- data/lib/etassia/error/parse_error.rb +11 -0
- data/lib/etassia/error/pipeline_error.rb +10 -0
- data/lib/etassia/error/render_error.rb +12 -0
- data/lib/etassia/error/score_error.rb +12 -0
- data/lib/etassia/error.rb +10 -0
- data/lib/etassia/error_report.rb +69 -0
- data/lib/etassia/ir/data.rb +39 -0
- data/lib/etassia/ir/data_value.rb +35 -0
- data/lib/etassia/ir/dimension.rb +10 -0
- data/lib/etassia/ir/edge.rb +34 -0
- data/lib/etassia/ir/graph.rb +28 -0
- data/lib/etassia/ir/integrity.rb +80 -0
- data/lib/etassia/ir/item.rb +46 -0
- data/lib/etassia/ir/model.rb +56 -0
- data/lib/etassia/ir/node.rb +10 -0
- data/lib/etassia/ir/placement.rb +47 -0
- data/lib/etassia/ir/prepositioned.rb +25 -0
- data/lib/etassia/ir/prepositioned_item.rb +26 -0
- data/lib/etassia/ir/property_set.rb +43 -0
- data/lib/etassia/ir/scalar.rb +25 -0
- data/lib/etassia/ir/series.rb +10 -0
- data/lib/etassia/ir.rb +17 -0
- data/lib/etassia/js_math.rb +511 -0
- data/lib/etassia/js_number.rb +64 -0
- data/lib/etassia/layout/architecture.rb +1472 -0
- data/lib/etassia/layout/base.rb +276 -0
- data/lib/etassia/layout/block.rb +738 -0
- data/lib/etassia/layout/c4.rb +876 -0
- data/lib/etassia/layout/c4_boundary_metrics.rb +35 -0
- data/lib/etassia/layout/c4_bounds.rb +106 -0
- data/lib/etassia/layout/c4_intersection.rb +77 -0
- data/lib/etassia/layout/c4_placement.rb +135 -0
- data/lib/etassia/layout/c4_shape_metrics.rb +97 -0
- data/lib/etassia/layout/c4_shape_outline.rb +67 -0
- data/lib/etassia/layout/c4_stereotype.rb +30 -0
- data/lib/etassia/layout/c4_text.rb +54 -0
- data/lib/etassia/layout/class_cell_placement.rb +148 -0
- data/lib/etassia/layout/class_diagram.rb +1116 -0
- data/lib/etassia/layout/class_diagram_namespaces.rb +26 -0
- data/lib/etassia/layout/class_diagram_notes.rb +26 -0
- data/lib/etassia/layout/class_name_advances.rb +31 -0
- data/lib/etassia/layout/class_namespace_box.rb +21 -0
- data/lib/etassia/layout/class_namespace_nodes.rb +197 -0
- data/lib/etassia/layout/class_namespace_placement.rb +71 -0
- data/lib/etassia/layout/class_note.rb +44 -0
- data/lib/etassia/layout/class_note_nodes.rb +84 -0
- data/lib/etassia/layout/elk_notices.rb +48 -0
- data/lib/etassia/layout/elk_placement.rb +197 -0
- data/lib/etassia/layout/er_diagram.rb +1002 -0
- data/lib/etassia/layout/er_diagram_adjacency.rb +20 -0
- data/lib/etassia/layout/er_diagram_alignment.rb +72 -0
- data/lib/etassia/layout/er_diagram_compaction.rb +85 -0
- data/lib/etassia/layout/er_diagram_conflicts.rb +70 -0
- data/lib/etassia/layout/er_diagram_coordinates.rb +104 -0
- data/lib/etassia/layout/er_diagram_entity_size.rb +82 -0
- data/lib/etassia/layout/er_diagram_layering.rb +109 -0
- data/lib/etassia/layout/er_diagram_ordering.rb +143 -0
- data/lib/etassia/layout/er_diagram_placement.rb +163 -0
- data/lib/etassia/layout/er_diagram_placement_node.rb +22 -0
- data/lib/etassia/layout/error.rb +133 -0
- data/lib/etassia/layout/flowchart/brandes_koepf.rb +208 -0
- data/lib/etassia/layout/flowchart/cluster_reach.rb +70 -0
- data/lib/etassia/layout/flowchart/component_packing.rb +129 -0
- data/lib/etassia/layout/flowchart/directed_placement.rb +428 -0
- data/lib/etassia/layout/flowchart/edge_chains.rb +111 -0
- data/lib/etassia/layout/flowchart/edge_order.rb +34 -0
- data/lib/etassia/layout/flowchart/edge_router.rb +533 -0
- data/lib/etassia/layout/flowchart/label_backdrop_geometry.rb +62 -0
- data/lib/etassia/layout/flowchart/layer_spacing.rb +85 -0
- data/lib/etassia/layout/flowchart/level_edges.rb +74 -0
- data/lib/etassia/layout/flowchart/level_frame.rb +47 -0
- data/lib/etassia/layout/flowchart/minimum_rank_spacing.rb +74 -0
- data/lib/etassia/layout/flowchart/row_centering.rb +229 -0
- data/lib/etassia/layout/flowchart.rb +1290 -0
- data/lib/etassia/layout/gantt.rb +814 -0
- data/lib/etassia/layout/gantt_duration.rb +49 -0
- data/lib/etassia/layout/gantt_exclusions.rb +74 -0
- data/lib/etassia/layout/gantt_ticks.rb +165 -0
- data/lib/etassia/layout/git_graph.rb +1075 -0
- data/lib/etassia/layout/grid.rb +165 -0
- data/lib/etassia/layout/info.rb +113 -0
- data/lib/etassia/layout/kanban.rb +452 -0
- data/lib/etassia/layout/kanban_card_text.rb +95 -0
- data/lib/etassia/layout/mindmap.rb +425 -0
- data/lib/etassia/layout/mindmap_cose.rb +81 -0
- data/lib/etassia/layout/mindmap_cose_body.rb +93 -0
- data/lib/etassia/layout/mindmap_cose_geometry.rb +190 -0
- data/lib/etassia/layout/mindmap_cose_grid.rb +96 -0
- data/lib/etassia/layout/mindmap_cose_link.rb +42 -0
- data/lib/etassia/layout/mindmap_cose_relaxation.rb +166 -0
- data/lib/etassia/layout/mindmap_cose_seed.rb +93 -0
- data/lib/etassia/layout/mindmap_cose_wedge.rb +37 -0
- data/lib/etassia/layout/mindmap_node_size.rb +130 -0
- data/lib/etassia/layout/packet.rb +285 -0
- data/lib/etassia/layout/pie.rb +305 -0
- data/lib/etassia/layout/pie_legend.rb +64 -0
- data/lib/etassia/layout/pie_legend_entry.rb +21 -0
- data/lib/etassia/layout/quadrant.rb +402 -0
- data/lib/etassia/layout/radar.rb +442 -0
- data/lib/etassia/layout/requirement.rb +765 -0
- data/lib/etassia/layout/sankey.rb +501 -0
- data/lib/etassia/layout/scene.rb +18 -0
- data/lib/etassia/layout/sequence/actor_gaps.rb +151 -0
- data/lib/etassia/layout/sequence/box_shape.rb +23 -0
- data/lib/etassia/layout/sequence/creations.rb +73 -0
- data/lib/etassia/layout/sequence/frame_divider.rb +22 -0
- data/lib/etassia/layout/sequence/frame_placement.rb +424 -0
- data/lib/etassia/layout/sequence/frame_reader.rb +75 -0
- data/lib/etassia/layout/sequence/frame_shape.rb +45 -0
- data/lib/etassia/layout/sequence/geometry.rb +24 -0
- data/lib/etassia/layout/sequence/message_rows.rb +165 -0
- data/lib/etassia/layout/sequence/note.rb +16 -0
- data/lib/etassia/layout/sequence/note_box.rb +114 -0
- data/lib/etassia/layout/sequence/note_placement.rb +223 -0
- data/lib/etassia/layout/sequence/text_width.rb +69 -0
- data/lib/etassia/layout/sequence/text_wrap.rb +93 -0
- data/lib/etassia/layout/sequence.rb +936 -0
- data/lib/etassia/layout/state_diagram.rb +1277 -0
- data/lib/etassia/layout/timeline.rb +165 -0
- data/lib/etassia/layout/timeline_card.rb +142 -0
- data/lib/etassia/layout/timeline_flow.rb +164 -0
- data/lib/etassia/layout/timeline_line.rb +33 -0
- data/lib/etassia/layout/timeline_rounding.rb +19 -0
- data/lib/etassia/layout/timeline_text.rb +105 -0
- data/lib/etassia/layout/treemap.rb +303 -0
- data/lib/etassia/layout/treemap_placement.rb +52 -0
- data/lib/etassia/layout/treemap_squarify.rb +108 -0
- data/lib/etassia/layout/user_journey.rb +300 -0
- data/lib/etassia/layout/user_journey_face.rb +33 -0
- data/lib/etassia/layout/user_journey_face_geometry.rb +80 -0
- data/lib/etassia/layout/user_journey_geometry.rb +336 -0
- data/lib/etassia/layout/user_journey_legend.rb +84 -0
- data/lib/etassia/layout/xy_chart.rb +620 -0
- data/lib/etassia/layout.rb +19 -0
- data/lib/etassia/lint_debt_scoreboard.rb +219 -0
- data/lib/etassia/markdown_text/emphasis_simulator.rb +373 -0
- data/lib/etassia/markdown_text.rb +393 -0
- data/lib/etassia/notation/builtin.rb +39 -0
- data/lib/etassia/notation/entry.rb +15 -0
- data/lib/etassia/notation/mermaid/class_diagram_config.rb +42 -0
- data/lib/etassia/notation/mermaid/git_graph_config.rb +46 -0
- data/lib/etassia/notation/mermaid/ir_adapter.rb +27 -0
- data/lib/etassia/notation/mermaid/ir_adapters/architecture.rb +196 -0
- data/lib/etassia/notation/mermaid/ir_adapters/block.rb +138 -0
- data/lib/etassia/notation/mermaid/ir_adapters/c4.rb +258 -0
- data/lib/etassia/notation/mermaid/ir_adapters/class_diagram.rb +257 -0
- data/lib/etassia/notation/mermaid/ir_adapters/er_diagram.rb +220 -0
- data/lib/etassia/notation/mermaid/ir_adapters/error.rb +32 -0
- data/lib/etassia/notation/mermaid/ir_adapters/flowchart.rb +208 -0
- data/lib/etassia/notation/mermaid/ir_adapters/gantt.rb +236 -0
- data/lib/etassia/notation/mermaid/ir_adapters/git_graph.rb +186 -0
- data/lib/etassia/notation/mermaid/ir_adapters/info.rb +34 -0
- data/lib/etassia/notation/mermaid/ir_adapters/kanban.rb +110 -0
- data/lib/etassia/notation/mermaid/ir_adapters/mindmap.rb +76 -0
- data/lib/etassia/notation/mermaid/ir_adapters/packet.rb +51 -0
- data/lib/etassia/notation/mermaid/ir_adapters/pie.rb +71 -0
- data/lib/etassia/notation/mermaid/ir_adapters/quadrant.rb +116 -0
- data/lib/etassia/notation/mermaid/ir_adapters/radar.rb +142 -0
- data/lib/etassia/notation/mermaid/ir_adapters/requirement.rb +237 -0
- data/lib/etassia/notation/mermaid/ir_adapters/sankey.rb +74 -0
- data/lib/etassia/notation/mermaid/ir_adapters/sequence.rb +304 -0
- data/lib/etassia/notation/mermaid/ir_adapters/state_diagram.rb +225 -0
- data/lib/etassia/notation/mermaid/ir_adapters/timeline.rb +93 -0
- data/lib/etassia/notation/mermaid/ir_adapters/treemap.rb +143 -0
- data/lib/etassia/notation/mermaid/ir_adapters/user_journey.rb +127 -0
- data/lib/etassia/notation/mermaid/ir_adapters/xychart.rb +131 -0
- data/lib/etassia/notation/mermaid.rb +399 -0
- data/lib/etassia/notation/parsed.rb +31 -0
- data/lib/etassia/notation/plantuml/activity/arrow_head.rb +45 -0
- data/lib/etassia/notation/plantuml/activity/arrow_style.rb +53 -0
- data/lib/etassia/notation/plantuml/activity/bar_columns.rb +75 -0
- data/lib/etassia/notation/plantuml/activity/box.rb +60 -0
- data/lib/etassia/notation/plantuml/activity/builder.rb +77 -0
- data/lib/etassia/notation/plantuml/activity/canvas.rb +117 -0
- data/lib/etassia/notation/plantuml/activity/column_centres.rb +151 -0
- data/lib/etassia/notation/plantuml/activity/columns.rb +224 -0
- data/lib/etassia/notation/plantuml/activity/diagram.rb +35 -0
- data/lib/etassia/notation/plantuml/activity/edge.rb +35 -0
- data/lib/etassia/notation/plantuml/activity/edge_marks.rb +68 -0
- data/lib/etassia/notation/plantuml/activity/exits.rb +61 -0
- data/lib/etassia/notation/plantuml/activity/frame_marks.rb +116 -0
- data/lib/etassia/notation/plantuml/activity/lane_steps.rb +82 -0
- data/lib/etassia/notation/plantuml/activity/lane_titles.rb +46 -0
- data/lib/etassia/notation/plantuml/activity/layout.rb +50 -0
- data/lib/etassia/notation/plantuml/activity/legacy_parser.rb +181 -0
- data/lib/etassia/notation/plantuml/activity/legacy_row_gaps.rb +65 -0
- data/lib/etassia/notation/plantuml/activity/mark.rb +23 -0
- data/lib/etassia/notation/plantuml/activity/marks.rb +62 -0
- data/lib/etassia/notation/plantuml/activity/metrics.rb +169 -0
- data/lib/etassia/notation/plantuml/activity/new_parser/blocks.rb +166 -0
- data/lib/etassia/notation/plantuml/activity/new_parser.rb +177 -0
- data/lib/etassia/notation/plantuml/activity/node.rb +50 -0
- data/lib/etassia/notation/plantuml/activity/node_marks.rb +174 -0
- data/lib/etassia/notation/plantuml/activity/note.rb +27 -0
- data/lib/etassia/notation/plantuml/activity/parser.rb +51 -0
- data/lib/etassia/notation/plantuml/activity/placement.rb +327 -0
- data/lib/etassia/notation/plantuml/activity/ranking.rb +142 -0
- data/lib/etassia/notation/plantuml/activity/reach.rb +58 -0
- data/lib/etassia/notation/plantuml/activity/renderer.rb +220 -0
- data/lib/etassia/notation/plantuml/activity/route.rb +22 -0
- data/lib/etassia/notation/plantuml/activity/router.rb +308 -0
- data/lib/etassia/notation/plantuml/activity/row_gaps.rb +105 -0
- data/lib/etassia/notation/plantuml/activity/row_spread.rb +59 -0
- data/lib/etassia/notation/plantuml/activity/scene.rb +20 -0
- data/lib/etassia/notation/plantuml/activity/text.rb +36 -0
- data/lib/etassia/notation/plantuml/activity.rb +50 -0
- data/lib/etassia/notation/plantuml/arrow.rb +135 -0
- data/lib/etassia/notation/plantuml/caption.rb +50 -0
- data/lib/etassia/notation/plantuml/caption_layout.rb +97 -0
- data/lib/etassia/notation/plantuml/caption_rows.rb +67 -0
- data/lib/etassia/notation/plantuml/class_header.rb +178 -0
- data/lib/etassia/notation/plantuml/class_name.rb +51 -0
- data/lib/etassia/notation/plantuml/component.rb +37 -0
- data/lib/etassia/notation/plantuml/creole.rb +278 -0
- data/lib/etassia/notation/plantuml/creole_icons.rb +33 -0
- data/lib/etassia/notation/plantuml/diagram.rb +60 -0
- data/lib/etassia/notation/plantuml/diagram_builder.rb +442 -0
- data/lib/etassia/notation/plantuml/diagram_name.rb +51 -0
- data/lib/etassia/notation/plantuml/directives.rb +33 -0
- data/lib/etassia/notation/plantuml/drawing/box.rb +28 -0
- data/lib/etassia/notation/plantuml/drawing/face.rb +39 -0
- data/lib/etassia/notation/plantuml/drawing/pen.rb +105 -0
- data/lib/etassia/notation/plantuml/drawing/renderer.rb +36 -0
- data/lib/etassia/notation/plantuml/drawing/scene.rb +28 -0
- data/lib/etassia/notation/plantuml/drawing.rb +19 -0
- data/lib/etassia/notation/plantuml/ebnf/blocks.rb +272 -0
- data/lib/etassia/notation/plantuml/ebnf/layout.rb +117 -0
- data/lib/etassia/notation/plantuml/ebnf/model.rb +22 -0
- data/lib/etassia/notation/plantuml/ebnf/reader.rb +131 -0
- data/lib/etassia/notation/plantuml/ebnf.rb +34 -0
- data/lib/etassia/notation/plantuml/end_texts.rb +78 -0
- data/lib/etassia/notation/plantuml/entity.rb +54 -0
- data/lib/etassia/notation/plantuml/further.rb +38 -0
- data/lib/etassia/notation/plantuml/gantt/layout.rb +269 -0
- data/lib/etassia/notation/plantuml/gantt/reader.rb +210 -0
- data/lib/etassia/notation/plantuml/gantt/renderer.rb +81 -0
- data/lib/etassia/notation/plantuml/gantt.rb +34 -0
- data/lib/etassia/notation/plantuml/include/blocks.rb +66 -0
- data/lib/etassia/notation/plantuml/include/finder.rb +61 -0
- data/lib/etassia/notation/plantuml/include.rb +78 -0
- data/lib/etassia/notation/plantuml/ir_adapter/annotations.rb +40 -0
- data/lib/etassia/notation/plantuml/ir_adapter/links.rb +91 -0
- data/lib/etassia/notation/plantuml/ir_adapter/sink.rb +49 -0
- data/lib/etassia/notation/plantuml/ir_adapter/structure.rb +86 -0
- data/lib/etassia/notation/plantuml/ir_adapter.rb +32 -0
- data/lib/etassia/notation/plantuml/ir_reader/annotations.rb +51 -0
- data/lib/etassia/notation/plantuml/ir_reader/index.rb +49 -0
- data/lib/etassia/notation/plantuml/ir_reader/links.rb +133 -0
- data/lib/etassia/notation/plantuml/ir_reader/structure.rb +83 -0
- data/lib/etassia/notation/plantuml/ir_reader.rb +42 -0
- data/lib/etassia/notation/plantuml/junction.rb +20 -0
- data/lib/etassia/notation/plantuml/klass.rb +41 -0
- data/lib/etassia/notation/plantuml/label_clearance.rb +67 -0
- data/lib/etassia/notation/plantuml/layout.rb +2806 -0
- data/lib/etassia/notation/plantuml/member.rb +37 -0
- data/lib/etassia/notation/plantuml/member_icon.rb +87 -0
- data/lib/etassia/notation/plantuml/member_icon_elements.rb +91 -0
- data/lib/etassia/notation/plantuml/member_pitch.rb +76 -0
- data/lib/etassia/notation/plantuml/member_rule.rb +48 -0
- data/lib/etassia/notation/plantuml/network/grid.rb +170 -0
- data/lib/etassia/notation/plantuml/network/layout.rb +158 -0
- data/lib/etassia/notation/plantuml/network/model.rb +22 -0
- data/lib/etassia/notation/plantuml/network/placement.rb +64 -0
- data/lib/etassia/notation/plantuml/network/reader.rb +126 -0
- data/lib/etassia/notation/plantuml/network/shapes.rb +109 -0
- data/lib/etassia/notation/plantuml/network.rb +37 -0
- data/lib/etassia/notation/plantuml/node_graph/archimate.rb +49 -0
- data/lib/etassia/notation/plantuml/node_graph/box_reader.rb +86 -0
- data/lib/etassia/notation/plantuml/node_graph/cloud.rb +73 -0
- data/lib/etassia/notation/plantuml/node_graph/crows_foot.rb +85 -0
- data/lib/etassia/notation/plantuml/node_graph/curve.rb +66 -0
- data/lib/etassia/notation/plantuml/node_graph/data_reader.rb +77 -0
- data/lib/etassia/notation/plantuml/node_graph/data_shape.rb +39 -0
- data/lib/etassia/notation/plantuml/node_graph/detour.rb +98 -0
- data/lib/etassia/notation/plantuml/node_graph/edge.rb +26 -0
- data/lib/etassia/notation/plantuml/node_graph/entity_metrics.rb +49 -0
- data/lib/etassia/notation/plantuml/node_graph/entity_reader.rb +65 -0
- data/lib/etassia/notation/plantuml/node_graph/entity_shape.rb +111 -0
- data/lib/etassia/notation/plantuml/node_graph/figures.rb +92 -0
- data/lib/etassia/notation/plantuml/node_graph/frame_ports.rb +73 -0
- data/lib/etassia/notation/plantuml/node_graph/graph.rb +40 -0
- data/lib/etassia/notation/plantuml/node_graph/heads.rb +89 -0
- data/lib/etassia/notation/plantuml/node_graph/label_fan.rb +76 -0
- data/lib/etassia/notation/plantuml/node_graph/label_placer.rb +310 -0
- data/lib/etassia/notation/plantuml/node_graph/label_waypoint.rb +47 -0
- data/lib/etassia/notation/plantuml/node_graph/layout.rb +293 -0
- data/lib/etassia/notation/plantuml/node_graph/link.rb +78 -0
- data/lib/etassia/notation/plantuml/node_graph/macros.rb +39 -0
- data/lib/etassia/notation/plantuml/node_graph/metrics.rb +113 -0
- data/lib/etassia/notation/plantuml/node_graph/node.rb +44 -0
- data/lib/etassia/notation/plantuml/node_graph/note_tail.rb +58 -0
- data/lib/etassia/notation/plantuml/node_graph/packer.rb +126 -0
- data/lib/etassia/notation/plantuml/node_graph/parser.rb +309 -0
- data/lib/etassia/notation/plantuml/node_graph/paths.rb +48 -0
- data/lib/etassia/notation/plantuml/node_graph/ranking.rb +231 -0
- data/lib/etassia/notation/plantuml/node_graph/reader.rb +53 -0
- data/lib/etassia/notation/plantuml/node_graph/references.rb +38 -0
- data/lib/etassia/notation/plantuml/node_graph/renderer.rb +160 -0
- data/lib/etassia/notation/plantuml/node_graph/scene.rb +22 -0
- data/lib/etassia/notation/plantuml/node_graph/shapes.rb +302 -0
- data/lib/etassia/notation/plantuml/node_graph/skipped_ranks.rb +61 -0
- data/lib/etassia/notation/plantuml/node_graph/tab.rb +68 -0
- data/lib/etassia/notation/plantuml/node_graph/usecase_ellipse.rb +100 -0
- data/lib/etassia/notation/plantuml/node_graph.rb +38 -0
- data/lib/etassia/notation/plantuml/note.rb +27 -0
- data/lib/etassia/notation/plantuml/note_layout.rb +257 -0
- data/lib/etassia/notation/plantuml/note_outline.rb +68 -0
- data/lib/etassia/notation/plantuml/objects/map_rows.rb +46 -0
- data/lib/etassia/notation/plantuml/objects/reader.rb +208 -0
- data/lib/etassia/notation/plantuml/objects.rb +39 -0
- data/lib/etassia/notation/plantuml/package.rb +45 -0
- data/lib/etassia/notation/plantuml/package_color.rb +32 -0
- data/lib/etassia/notation/plantuml/package_frames.rb +178 -0
- data/lib/etassia/notation/plantuml/parser.rb +622 -0
- data/lib/etassia/notation/plantuml/portion_visibility.rb +91 -0
- data/lib/etassia/notation/plantuml/qualified_association_layout.rb +332 -0
- data/lib/etassia/notation/plantuml/qualifier_box.rb +78 -0
- data/lib/etassia/notation/plantuml/rank_chain.rb +527 -0
- data/lib/etassia/notation/plantuml/rank_hierarchy.rb +347 -0
- data/lib/etassia/notation/plantuml/relation.rb +103 -0
- data/lib/etassia/notation/plantuml/relation_label_separator.rb +199 -0
- data/lib/etassia/notation/plantuml/relation_path_points.rb +84 -0
- data/lib/etassia/notation/plantuml/renderer.rb +490 -0
- data/lib/etassia/notation/plantuml/scene.rb +134 -0
- data/lib/etassia/notation/plantuml/segment_box.rb +85 -0
- data/lib/etassia/notation/plantuml/sequence/activation.rb +28 -0
- data/lib/etassia/notation/plantuml/sequence/appearance.rb +71 -0
- data/lib/etassia/notation/plantuml/sequence/arrow_end.rb +23 -0
- data/lib/etassia/notation/plantuml/sequence/arrow_marks.rb +111 -0
- data/lib/etassia/notation/plantuml/sequence/arrow_style.rb +42 -0
- data/lib/etassia/notation/plantuml/sequence/arrow_syntax.rb +122 -0
- data/lib/etassia/notation/plantuml/sequence/bar_tracker.rb +59 -0
- data/lib/etassia/notation/plantuml/sequence/box.rb +23 -0
- data/lib/etassia/notation/plantuml/sequence/chrome.rb +60 -0
- data/lib/etassia/notation/plantuml/sequence/chrome_rows.rb +184 -0
- data/lib/etassia/notation/plantuml/sequence/create.rb +34 -0
- data/lib/etassia/notation/plantuml/sequence/delay.rb +19 -0
- data/lib/etassia/notation/plantuml/sequence/destroy.rb +20 -0
- data/lib/etassia/notation/plantuml/sequence/diagram.rb +86 -0
- data/lib/etassia/notation/plantuml/sequence/divider.rb +19 -0
- data/lib/etassia/notation/plantuml/sequence/edge.rb +53 -0
- data/lib/etassia/notation/plantuml/sequence/embedded.rb +77 -0
- data/lib/etassia/notation/plantuml/sequence/fill.rb +56 -0
- data/lib/etassia/notation/plantuml/sequence/fragment.rb +28 -0
- data/lib/etassia/notation/plantuml/sequence/fragment_shape.rb +138 -0
- data/lib/etassia/notation/plantuml/sequence/head_style.rb +43 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter/blocks.rb +73 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter/fills.rb +24 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter/items.rb +48 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter/messages.rb +62 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter/participants.rb +42 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter/settings.rb +54 -0
- data/lib/etassia/notation/plantuml/sequence/ir_adapter.rb +38 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/blocks.rb +77 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/fills.rb +27 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/index.rb +36 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/items.rb +35 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/messages.rb +70 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/participants.rb +42 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader/settings.rb +74 -0
- data/lib/etassia/notation/plantuml/sequence/ir_reader.rb +38 -0
- data/lib/etassia/notation/plantuml/sequence/keyword_defaults.rb +28 -0
- data/lib/etassia/notation/plantuml/sequence/layout.rb +1567 -0
- data/lib/etassia/notation/plantuml/sequence/message.rb +97 -0
- data/lib/etassia/notation/plantuml/sequence/message_wrap.rb +77 -0
- data/lib/etassia/notation/plantuml/sequence/note.rb +61 -0
- data/lib/etassia/notation/plantuml/sequence/note_fill.rb +35 -0
- data/lib/etassia/notation/plantuml/sequence/note_geometry.rb +126 -0
- data/lib/etassia/notation/plantuml/sequence/note_shape.rb +51 -0
- data/lib/etassia/notation/plantuml/sequence/numbered_label.rb +57 -0
- data/lib/etassia/notation/plantuml/sequence/numbering.rb +49 -0
- data/lib/etassia/notation/plantuml/sequence/outline.rb +204 -0
- data/lib/etassia/notation/plantuml/sequence/page_break.rb +17 -0
- data/lib/etassia/notation/plantuml/sequence/paint.rb +79 -0
- data/lib/etassia/notation/plantuml/sequence/parallel_message.rb +19 -0
- data/lib/etassia/notation/plantuml/sequence/parser.rb +844 -0
- data/lib/etassia/notation/plantuml/sequence/participant.rb +27 -0
- data/lib/etassia/notation/plantuml/sequence/picture.rb +29 -0
- data/lib/etassia/notation/plantuml/sequence/ref.rb +24 -0
- data/lib/etassia/notation/plantuml/sequence/ref_shape.rb +74 -0
- data/lib/etassia/notation/plantuml/sequence/refusals.rb +47 -0
- data/lib/etassia/notation/plantuml/sequence/renderer.rb +501 -0
- data/lib/etassia/notation/plantuml/sequence/scene.rb +200 -0
- data/lib/etassia/notation/plantuml/sequence/skin.rb +76 -0
- data/lib/etassia/notation/plantuml/sequence/spacing.rb +28 -0
- data/lib/etassia/notation/plantuml/sequence/style.rb +151 -0
- data/lib/etassia/notation/plantuml/sequence/tab_size.rb +42 -0
- data/lib/etassia/notation/plantuml/sequence/walker.rb +1190 -0
- data/lib/etassia/notation/plantuml/sequence.rb +47 -0
- data/lib/etassia/notation/plantuml/source_lines.rb +33 -0
- data/lib/etassia/notation/plantuml/state/axis_solver.rb +272 -0
- data/lib/etassia/notation/plantuml/state/cluster_padding.rb +75 -0
- data/lib/etassia/notation/plantuml/state/curve.rb +73 -0
- data/lib/etassia/notation/plantuml/state/dot_axis.rb +248 -0
- data/lib/etassia/notation/plantuml/state/extent.rb +42 -0
- data/lib/etassia/notation/plantuml/state/hierarchy.rb +355 -0
- data/lib/etassia/notation/plantuml/state/label_clearance.rb +148 -0
- data/lib/etassia/notation/plantuml/state/label_reach.rb +139 -0
- data/lib/etassia/notation/plantuml/state/layout.rb +173 -0
- data/lib/etassia/notation/plantuml/state/level_edges.rb +113 -0
- data/lib/etassia/notation/plantuml/state/look.rb +36 -0
- data/lib/etassia/notation/plantuml/state/note_shape.rb +73 -0
- data/lib/etassia/notation/plantuml/state/plane.rb +85 -0
- data/lib/etassia/notation/plantuml/state/ranking.rb +181 -0
- data/lib/etassia/notation/plantuml/state/reader.rb +310 -0
- data/lib/etassia/notation/plantuml/state/renderer.rb +253 -0
- data/lib/etassia/notation/plantuml/state/route_detour.rb +115 -0
- data/lib/etassia/notation/plantuml/state/route_geometry.rb +186 -0
- data/lib/etassia/notation/plantuml/state/routes.rb +196 -0
- data/lib/etassia/notation/plantuml/state/row.rb +88 -0
- data/lib/etassia/notation/plantuml/state/rows.rb +50 -0
- data/lib/etassia/notation/plantuml/state/stretch.rb +71 -0
- data/lib/etassia/notation/plantuml/state.rb +62 -0
- data/lib/etassia/notation/plantuml/stereotype_head.rb +58 -0
- data/lib/etassia/notation/plantuml/style/bound.rb +34 -0
- data/lib/etassia/notation/plantuml/style/colour.rb +41 -0
- data/lib/etassia/notation/plantuml/style/colour_names.rb +89 -0
- data/lib/etassia/notation/plantuml/style/defaults.rb +33 -0
- data/lib/etassia/notation/plantuml/style/inline.rb +56 -0
- data/lib/etassia/notation/plantuml/style/reader.rb +242 -0
- data/lib/etassia/notation/plantuml/style/sheet.rb +103 -0
- data/lib/etassia/notation/plantuml/style.rb +32 -0
- data/lib/etassia/notation/plantuml/style_reader.rb +160 -0
- data/lib/etassia/notation/plantuml/style_sheet.rb +27 -0
- data/lib/etassia/notation/plantuml/styled_relation_curve.rb +71 -0
- data/lib/etassia/notation/plantuml/timing/arrows.rb +81 -0
- data/lib/etassia/notation/plantuml/timing/axis.rb +100 -0
- data/lib/etassia/notation/plantuml/timing/layout.rb +172 -0
- data/lib/etassia/notation/plantuml/timing/model.rb +34 -0
- data/lib/etassia/notation/plantuml/timing/reader.rb +173 -0
- data/lib/etassia/notation/plantuml/timing/signals.rb +328 -0
- data/lib/etassia/notation/plantuml/timing.rb +38 -0
- data/lib/etassia/notation/plantuml/tree/layout.rb +276 -0
- data/lib/etassia/notation/plantuml/tree/mindmap_layout.rb +157 -0
- data/lib/etassia/notation/plantuml/tree/reader.rb +186 -0
- data/lib/etassia/notation/plantuml/tree/renderer.rb +67 -0
- data/lib/etassia/notation/plantuml/tree/role.rb +57 -0
- data/lib/etassia/notation/plantuml/tree/rules.rb +156 -0
- data/lib/etassia/notation/plantuml/tree/wbs_layout.rb +164 -0
- data/lib/etassia/notation/plantuml/tree.rb +41 -0
- data/lib/etassia/notation/plantuml/unsupported_construct_error.rb +39 -0
- data/lib/etassia/notation/plantuml/unsupported_constructs.rb +103 -0
- data/lib/etassia/notation/plantuml/usecase.rb +36 -0
- data/lib/etassia/notation/plantuml.rb +132 -0
- data/lib/etassia/notation/plantuml_data/boxes/frames.rb +101 -0
- data/lib/etassia/notation/plantuml_data/boxes/graph_layout.rb +348 -0
- data/lib/etassia/notation/plantuml_data/boxes/heads.rb +65 -0
- data/lib/etassia/notation/plantuml_data/boxes/highlights.rb +70 -0
- data/lib/etassia/notation/plantuml_data/boxes/inline_rows.rb +99 -0
- data/lib/etassia/notation/plantuml_data/boxes/json_reader.rb +24 -0
- data/lib/etassia/notation/plantuml_data/boxes/link_text.rb +94 -0
- data/lib/etassia/notation/plantuml_data/boxes/marks.rb +76 -0
- data/lib/etassia/notation/plantuml_data/boxes/ornaments.rb +130 -0
- data/lib/etassia/notation/plantuml_data/boxes/renderer.rb +95 -0
- data/lib/etassia/notation/plantuml_data/boxes/row_alignment.rb +58 -0
- data/lib/etassia/notation/plantuml_data/boxes/row_bend.rb +43 -0
- data/lib/etassia/notation/plantuml_data/boxes/scene.rb +27 -0
- data/lib/etassia/notation/plantuml_data/boxes/table.rb +56 -0
- data/lib/etassia/notation/plantuml_data/boxes/table_box.rb +355 -0
- data/lib/etassia/notation/plantuml_data/boxes/text.rb +101 -0
- data/lib/etassia/notation/plantuml_data/boxes/tree_builder.rb +82 -0
- data/lib/etassia/notation/plantuml_data/boxes/tree_layout.rb +82 -0
- data/lib/etassia/notation/plantuml_data/boxes/yaml_reader.rb +105 -0
- data/lib/etassia/notation/plantuml_data/openiconic.LICENSE +6 -0
- data/lib/etassia/notation/plantuml_data/openiconic.json +1 -0
- data/lib/etassia/notation/plantuml_data.rb +84 -0
- data/lib/etassia/notation/plantuml_salt/block.rb +80 -0
- data/lib/etassia/notation/plantuml_salt/box.rb +30 -0
- data/lib/etassia/notation/plantuml_salt/font_metrics.rb +28 -0
- data/lib/etassia/notation/plantuml_salt/grid_marks.rb +66 -0
- data/lib/etassia/notation/plantuml_salt/group_marks.rb +77 -0
- data/lib/etassia/notation/plantuml_salt/layout.rb +206 -0
- data/lib/etassia/notation/plantuml_salt/mark.rb +36 -0
- data/lib/etassia/notation/plantuml_salt/markup.rb +57 -0
- data/lib/etassia/notation/plantuml_salt/parser.rb +239 -0
- data/lib/etassia/notation/plantuml_salt/renderer.rb +138 -0
- data/lib/etassia/notation/plantuml_salt/row.rb +19 -0
- data/lib/etassia/notation/plantuml_salt/run.rb +34 -0
- data/lib/etassia/notation/plantuml_salt/scene.rb +23 -0
- data/lib/etassia/notation/plantuml_salt/scroll_marks.rb +94 -0
- data/lib/etassia/notation/plantuml_salt/tab_marks.rb +74 -0
- data/lib/etassia/notation/plantuml_salt/tree_marks.rb +127 -0
- data/lib/etassia/notation/plantuml_salt/widget.rb +40 -0
- data/lib/etassia/notation/plantuml_salt/widget_marks.rb +319 -0
- data/lib/etassia/notation/plantuml_salt.rb +66 -0
- data/lib/etassia/notation/plugin_failure.rb +42 -0
- data/lib/etassia/notation.rb +289 -0
- data/lib/etassia/parser/architecture.rb +25 -0
- data/lib/etassia/parser/atoms/delimited_run.rb +82 -0
- data/lib/etassia/parser/atoms/greedy_run.rb +116 -0
- data/lib/etassia/parser/atoms/joined.rb +47 -0
- data/lib/etassia/parser/atoms/trimmed_run.rb +47 -0
- data/lib/etassia/parser/base.rb +258 -0
- data/lib/etassia/parser/block.rb +32 -0
- data/lib/etassia/parser/builders/architecture.rb +135 -0
- data/lib/etassia/parser/builders/block.rb +288 -0
- data/lib/etassia/parser/builders/c4.rb +275 -0
- data/lib/etassia/parser/builders/capture_string.rb +17 -0
- data/lib/etassia/parser/builders/class_diagram.rb +539 -0
- data/lib/etassia/parser/builders/er_diagram.rb +308 -0
- data/lib/etassia/parser/builders/error.rb +51 -0
- data/lib/etassia/parser/builders/flowchart.rb +1150 -0
- data/lib/etassia/parser/builders/gantt.rb +267 -0
- data/lib/etassia/parser/builders/git_graph.rb +301 -0
- data/lib/etassia/parser/builders/info.rb +57 -0
- data/lib/etassia/parser/builders/kanban.rb +411 -0
- data/lib/etassia/parser/builders/mindmap.rb +271 -0
- data/lib/etassia/parser/builders/packet.rb +85 -0
- data/lib/etassia/parser/builders/pie.rb +105 -0
- data/lib/etassia/parser/builders/quadrant.rb +165 -0
- data/lib/etassia/parser/builders/radar.rb +157 -0
- data/lib/etassia/parser/builders/requirement.rb +230 -0
- data/lib/etassia/parser/builders/sankey.rb +142 -0
- data/lib/etassia/parser/builders/sequence.rb +431 -0
- data/lib/etassia/parser/builders/sequence_blocks.rb +117 -0
- data/lib/etassia/parser/builders/sequence_box_title.rb +57 -0
- data/lib/etassia/parser/builders/state_diagram.rb +364 -0
- data/lib/etassia/parser/builders/timeline.rb +133 -0
- data/lib/etassia/parser/builders/treemap.rb +138 -0
- data/lib/etassia/parser/builders/xy_chart.rb +148 -0
- data/lib/etassia/parser/c4.rb +37 -0
- data/lib/etassia/parser/class_diagram.rb +58 -0
- data/lib/etassia/parser/class_namespaces.rb +62 -0
- data/lib/etassia/parser/class_notes.rb +54 -0
- data/lib/etassia/parser/er_diagram.rb +28 -0
- data/lib/etassia/parser/error.rb +30 -0
- data/lib/etassia/parser/flowchart.rb +87 -0
- data/lib/etassia/parser/gantt.rb +43 -0
- data/lib/etassia/parser/git_graph.rb +106 -0
- data/lib/etassia/parser/grammars/architecture.rb +165 -0
- data/lib/etassia/parser/grammars/block.rb +190 -0
- data/lib/etassia/parser/grammars/c4.rb +229 -0
- data/lib/etassia/parser/grammars/class_diagram.rb +606 -0
- data/lib/etassia/parser/grammars/common.rb +107 -0
- data/lib/etassia/parser/grammars/er_diagram.rb +232 -0
- data/lib/etassia/parser/grammars/error.rb +32 -0
- data/lib/etassia/parser/grammars/flowchart.rb +1722 -0
- data/lib/etassia/parser/grammars/gantt.rb +198 -0
- data/lib/etassia/parser/grammars/git_graph.rb +234 -0
- data/lib/etassia/parser/grammars/info.rb +53 -0
- data/lib/etassia/parser/grammars/kanban.rb +417 -0
- data/lib/etassia/parser/grammars/mermaid_unicode_text.rb +108 -0
- data/lib/etassia/parser/grammars/mindmap.rb +220 -0
- data/lib/etassia/parser/grammars/packet.rb +71 -0
- data/lib/etassia/parser/grammars/pie.rb +128 -0
- data/lib/etassia/parser/grammars/quadrant.rb +202 -0
- data/lib/etassia/parser/grammars/radar.rb +158 -0
- data/lib/etassia/parser/grammars/requirement.rb +258 -0
- data/lib/etassia/parser/grammars/sankey.rb +104 -0
- data/lib/etassia/parser/grammars/sequence.rb +940 -0
- data/lib/etassia/parser/grammars/state_diagram.rb +382 -0
- data/lib/etassia/parser/grammars/timeline.rb +153 -0
- data/lib/etassia/parser/grammars/treemap.rb +122 -0
- data/lib/etassia/parser/grammars/xy_chart.rb +119 -0
- data/lib/etassia/parser/info.rb +32 -0
- data/lib/etassia/parser/kanban.rb +131 -0
- data/lib/etassia/parser/mermaid_shapes.rb +106 -0
- data/lib/etassia/parser/metadata_yaml.rb +452 -0
- data/lib/etassia/parser/mindmap.rb +92 -0
- data/lib/etassia/parser/native/builders/architecture.rb +103 -0
- data/lib/etassia/parser/native/builders/block.rb +68 -0
- data/lib/etassia/parser/native/builders/c4.rb +16 -0
- data/lib/etassia/parser/native/builders/class_diagram.rb +63 -0
- data/lib/etassia/parser/native/builders/er_diagram.rb +47 -0
- data/lib/etassia/parser/native/builders/flowchart.rb +58 -0
- data/lib/etassia/parser/native/builders/gantt.rb +35 -0
- data/lib/etassia/parser/native/builders/gitgraph.rb +35 -0
- data/lib/etassia/parser/native/builders/info.rb +30 -0
- data/lib/etassia/parser/native/builders/kanban.rb +37 -0
- data/lib/etassia/parser/native/builders/mindmap.rb +26 -0
- data/lib/etassia/parser/native/builders/packet.rb +63 -0
- data/lib/etassia/parser/native/builders/pie.rb +82 -0
- data/lib/etassia/parser/native/builders/quadrant.rb +27 -0
- data/lib/etassia/parser/native/builders/radar.rb +84 -0
- data/lib/etassia/parser/native/builders/requirement.rb +25 -0
- data/lib/etassia/parser/native/builders/sankey.rb +18 -0
- data/lib/etassia/parser/native/builders/sequence.rb +48 -0
- data/lib/etassia/parser/native/builders/state_diagram.rb +61 -0
- data/lib/etassia/parser/native/builders/timeline.rb +46 -0
- data/lib/etassia/parser/native/builders/treemap.rb +60 -0
- data/lib/etassia/parser/native/builders/user_journey.rb +83 -0
- data/lib/etassia/parser/native/builders/xy_chart.rb +94 -0
- data/lib/etassia/parser/native/declined.rb +12 -0
- data/lib/etassia/parser/native/mermaid.json +1 -0
- data/lib/etassia/parser/native/text.rb +31 -0
- data/lib/etassia/parser/native.rb +99 -0
- data/lib/etassia/parser/packet.rb +56 -0
- data/lib/etassia/parser/pie.rb +32 -0
- data/lib/etassia/parser/quadrant.rb +77 -0
- data/lib/etassia/parser/radar.rb +99 -0
- data/lib/etassia/parser/requirement.rb +32 -0
- data/lib/etassia/parser/sankey.rb +47 -0
- data/lib/etassia/parser/sequence.rb +34 -0
- data/lib/etassia/parser/state_diagram.rb +29 -0
- data/lib/etassia/parser/timeline.rb +40 -0
- data/lib/etassia/parser/treemap.rb +25 -0
- data/lib/etassia/parser/user_journey.rb +253 -0
- data/lib/etassia/parser/xy_chart.rb +98 -0
- data/lib/etassia/parser.rb +18 -0
- data/lib/etassia/renderer/architecture.rb +232 -0
- data/lib/etassia/renderer/architecture_edge_router.rb +379 -0
- data/lib/etassia/renderer/base.rb +295 -0
- data/lib/etassia/renderer/block.rb +157 -0
- data/lib/etassia/renderer/c4.rb +294 -0
- data/lib/etassia/renderer/class_diagram.rb +671 -0
- data/lib/etassia/renderer/er_diagram.rb +842 -0
- data/lib/etassia/renderer/error.rb +131 -0
- data/lib/etassia/renderer/flowchart.rb +315 -0
- data/lib/etassia/renderer/gantt.rb +177 -0
- data/lib/etassia/renderer/git_graph.rb +224 -0
- data/lib/etassia/renderer/info.rb +59 -0
- data/lib/etassia/renderer/kanban.rb +157 -0
- data/lib/etassia/renderer/line_break_text.rb +56 -0
- data/lib/etassia/renderer/markdown_text.rb +106 -0
- data/lib/etassia/renderer/mindmap.rb +290 -0
- data/lib/etassia/renderer/packet.rb +87 -0
- data/lib/etassia/renderer/pie.rb +113 -0
- data/lib/etassia/renderer/quadrant.rb +189 -0
- data/lib/etassia/renderer/radar.rb +191 -0
- data/lib/etassia/renderer/requirement.rb +209 -0
- data/lib/etassia/renderer/sankey.rb +114 -0
- data/lib/etassia/renderer/sequence/frame_drawing.rb +169 -0
- data/lib/etassia/renderer/sequence/note_drawing.rb +69 -0
- data/lib/etassia/renderer/sequence.rb +490 -0
- data/lib/etassia/renderer/state_diagram.rb +202 -0
- data/lib/etassia/renderer/timeline.rb +134 -0
- data/lib/etassia/renderer/timeline_palette.rb +18 -0
- data/lib/etassia/renderer/treemap/section_total.rb +33 -0
- data/lib/etassia/renderer/treemap.rb +128 -0
- data/lib/etassia/renderer/user_journey.rb +209 -0
- data/lib/etassia/renderer/xy_chart.rb +180 -0
- data/lib/etassia/renderer.rb +22 -0
- data/lib/etassia/runtime.rb +125 -0
- data/lib/etassia/source/frontmatter.rb +501 -0
- data/lib/etassia/source.rb +224 -0
- data/lib/etassia/svg/arrowhead.rb +205 -0
- data/lib/etassia/svg/circle.rb +19 -0
- data/lib/etassia/svg/document.rb +106 -0
- data/lib/etassia/svg/element.rb +209 -0
- data/lib/etassia/svg/ellipse.rb +23 -0
- data/lib/etassia/svg/escaping.rb +149 -0
- data/lib/etassia/svg/group.rb +64 -0
- data/lib/etassia/svg/line.rb +21 -0
- data/lib/etassia/svg/numbers.rb +53 -0
- data/lib/etassia/svg/path.rb +67 -0
- data/lib/etassia/svg/path_geometry.rb +378 -0
- data/lib/etassia/svg/polygon.rb +25 -0
- data/lib/etassia/svg/polyline.rb +28 -0
- data/lib/etassia/svg/rect.rb +34 -0
- data/lib/etassia/svg/style.rb +50 -0
- data/lib/etassia/svg/text.rb +181 -0
- data/lib/etassia/svg/tspan.rb +48 -0
- data/lib/etassia/svg.rb +38 -0
- data/lib/etassia/text_measurement/arial_advances.rb +122 -0
- data/lib/etassia/text_measurement/dejavu_advances.rb +111 -0
- data/lib/etassia/text_measurement/times_advances.rb +64 -0
- data/lib/etassia/text_measurement/trebuchet_advances.rb +53 -0
- data/lib/etassia/text_measurement/trebuchet_kerning.rb +29 -0
- data/lib/etassia/text_measurement.rb +198 -0
- data/lib/etassia/theme/builtin/dark.yml +229 -0
- data/lib/etassia/theme/builtin/default.yml +239 -0
- data/lib/etassia/theme/builtin/high_contrast.yml +231 -0
- data/lib/etassia/theme/builtin/light.yml +229 -0
- data/lib/etassia/theme/color_palette.rb +97 -0
- data/lib/etassia/theme/completion.rb +50 -0
- data/lib/etassia/theme/effect_styles.rb +34 -0
- data/lib/etassia/theme/registry.rb +45 -0
- data/lib/etassia/theme/shape_styles.rb +34 -0
- data/lib/etassia/theme/spacing_config.rb +30 -0
- data/lib/etassia/theme/typography.rb +40 -0
- data/lib/etassia/theme.rb +73 -0
- data/lib/etassia/version.rb +5 -0
- data/lib/etassia.rb +40 -0
- metadata +865 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Etassia
|
|
4
|
+
module Parser
|
|
5
|
+
module Native
|
|
6
|
+
# Reads captures out of a native parse tree.
|
|
7
|
+
module Text
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
# An empty capture is an Array in the tree, like Parslet's.
|
|
11
|
+
#
|
|
12
|
+
# @return [String]
|
|
13
|
+
def of(capture)
|
|
14
|
+
capture.is_a?(Array) ? "" : capture.to_s
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @return [Boolean] whether the capture matched no characters
|
|
18
|
+
def empty?(capture)
|
|
19
|
+
of(capture).empty?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# The tree's statement list, whatever shape one statement gives.
|
|
23
|
+
#
|
|
24
|
+
# @return [Array<Hash>]
|
|
25
|
+
def items(tree)
|
|
26
|
+
[tree].flatten(1).grep(Hash)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Etassia
|
|
4
|
+
module Parser
|
|
5
|
+
# The native parse path: Mermaid grammars compiled from PARG
|
|
6
|
+
# (claricle/etassia-mermaid-parg) and run by the parsanol engine.
|
|
7
|
+
#
|
|
8
|
+
# It is strictly an accelerator. It answers only for input it accepts;
|
|
9
|
+
# on a missing engine, an unreadable encoding or any rejection it
|
|
10
|
+
# returns nil and the caller runs the Parslet grammar, which stays the
|
|
11
|
+
# source of every positioned ParseError.
|
|
12
|
+
module Native
|
|
13
|
+
ARTIFACT_PATH = File.expand_path("native/mermaid.json", __dir__)
|
|
14
|
+
ARTIFACT_VARIABLE = "ETASSIA_NATIVE_ARTIFACT"
|
|
15
|
+
DISABLE_VARIABLE = "ETASSIA_NATIVE_PARSER"
|
|
16
|
+
DISABLED_VALUES = %w[0 off false ruby].freeze
|
|
17
|
+
# The engine recurses on the machine stack once per nested block and
|
|
18
|
+
# a source that nests deeper than the stack allows kills the whole
|
|
19
|
+
# process (a segfault in the extension, not a SystemStackError): about
|
|
20
|
+
# 60 nested subgraphs on a 1 MB stack, Windows' main-thread size. Past
|
|
21
|
+
# this depth the Ruby grammar answers, as it does without the engine.
|
|
22
|
+
MAX_NESTING = 32
|
|
23
|
+
NESTING_OPEN = /\A\s*(?:subgraph|block:|alt|loop|opt|par|critical|break|
|
|
24
|
+
rect|box)\b|\{\s*\z/ix
|
|
25
|
+
NESTING_CLOSE = /\A\s*(?:end\b|\})/i
|
|
26
|
+
private_constant :ARTIFACT_PATH, :ARTIFACT_VARIABLE, :DISABLE_VARIABLE,
|
|
27
|
+
:DISABLED_VALUES, :MAX_NESTING, :NESTING_OPEN,
|
|
28
|
+
:NESTING_CLOSE
|
|
29
|
+
|
|
30
|
+
class << self
|
|
31
|
+
# @return [Boolean] whether the parsanol engine and artifact loaded
|
|
32
|
+
def available?
|
|
33
|
+
!artifact.nil?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Parses source with one entry of the Mermaid artifact.
|
|
37
|
+
#
|
|
38
|
+
# @param entry [Symbol] an entry of mermaid.parg
|
|
39
|
+
# @param source [String] Mermaid source
|
|
40
|
+
# @return [Hash, Array, Parsanol::Slice, nil] the parse tree, or
|
|
41
|
+
# nil when the native path does not answer
|
|
42
|
+
def parse(entry, source)
|
|
43
|
+
return nil if disabled? || !readable?(source) || too_deep?(source)
|
|
44
|
+
|
|
45
|
+
artifact&.parse(entry.to_s, source)
|
|
46
|
+
rescue Parsanol::ParseFailed
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Forgets the loaded artifact (specs swap the engine out).
|
|
51
|
+
def reset!
|
|
52
|
+
@artifact = nil
|
|
53
|
+
@loaded = false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def disabled?
|
|
59
|
+
DISABLED_VALUES.include?(ENV.fetch(DISABLE_VARIABLE, "").downcase)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def readable?(source)
|
|
63
|
+
source.encoding == Encoding::UTF_8 && source.valid_encoding?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Whether blocks opened and not yet closed ever pass MAX_NESTING.
|
|
67
|
+
# A line that merely looks like an opener only sends the source to
|
|
68
|
+
# the Ruby grammar, which answers identically.
|
|
69
|
+
def too_deep?(source)
|
|
70
|
+
depth = 0
|
|
71
|
+
source.each_line do |line|
|
|
72
|
+
if line.match?(NESTING_OPEN)
|
|
73
|
+
depth += 1
|
|
74
|
+
return true if depth > MAX_NESTING
|
|
75
|
+
elsif line.match?(NESTING_CLOSE)
|
|
76
|
+
depth -= 1 if depth.positive?
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
false
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def artifact
|
|
83
|
+
return @artifact if @loaded
|
|
84
|
+
|
|
85
|
+
@loaded = true
|
|
86
|
+
@artifact = load_artifact
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def load_artifact
|
|
90
|
+
require "parsanol"
|
|
91
|
+
Parsanol::PARG::Artifact.load(ENV.fetch(ARTIFACT_VARIABLE,
|
|
92
|
+
ARTIFACT_PATH))
|
|
93
|
+
rescue LoadError, StandardError
|
|
94
|
+
nil
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/packet"
|
|
5
|
+
require_relative "builders/packet"
|
|
6
|
+
require_relative "native/builders/packet"
|
|
7
|
+
require_relative "../diagram/packet"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Packet diagram parser for Mermaid packet-beta diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to handle packet diagram syntax
|
|
14
|
+
# with bit ranges and field labels.
|
|
15
|
+
#
|
|
16
|
+
# Parses packet diagrams with support for:
|
|
17
|
+
# - Title metadata
|
|
18
|
+
# - Field definitions with bit ranges
|
|
19
|
+
# - Field labels
|
|
20
|
+
#
|
|
21
|
+
# @example Parse a simple packet diagram
|
|
22
|
+
# parser = Packet.new
|
|
23
|
+
# source = <<~MERMAID
|
|
24
|
+
# packet-beta
|
|
25
|
+
# title Hello world
|
|
26
|
+
# 0-10: "hello"
|
|
27
|
+
# MERMAID
|
|
28
|
+
# diagram = parser.parse(source)
|
|
29
|
+
class Packet < Base
|
|
30
|
+
grammar Grammars::Packet
|
|
31
|
+
builder Builders::Packet
|
|
32
|
+
native :packet, builder: Native::Builders::Packet
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def create_diagram(result)
|
|
37
|
+
diagram = Diagram::Packet.new
|
|
38
|
+
return diagram unless result.is_a?(Hash)
|
|
39
|
+
|
|
40
|
+
diagram.title = result[:title]
|
|
41
|
+
append_fields(diagram, result[:fields])
|
|
42
|
+
diagram
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def append_fields(diagram, fields)
|
|
46
|
+
Array(fields).each { |data| diagram.add_field(build_field(data)) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def build_field(data)
|
|
50
|
+
Diagram::PacketField.new(
|
|
51
|
+
data[:bit_start], data[:bit_end], data[:label]
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/pie"
|
|
5
|
+
require_relative "builders/pie"
|
|
6
|
+
require_relative "native/builders/pie"
|
|
7
|
+
require_relative "../diagram/pie"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Pie chart parser for Mermaid pie diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to handle pie chart syntax
|
|
14
|
+
# with labeled data entries and numeric values.
|
|
15
|
+
#
|
|
16
|
+
# Parses pie charts with support for:
|
|
17
|
+
# - Title declarations
|
|
18
|
+
# - showData flag for displaying values
|
|
19
|
+
# - Data entries with quoted labels and numeric values
|
|
20
|
+
# - Accessibility features (accTitle, accDescr)
|
|
21
|
+
# - Comments
|
|
22
|
+
#
|
|
23
|
+
# @example Parse a simple pie chart
|
|
24
|
+
# parser = Pie.new
|
|
25
|
+
# diagram = parser.parse("pie\n \"Apples\" : 42\n \"Oranges\" : 58")
|
|
26
|
+
class Pie < Base
|
|
27
|
+
grammar Grammars::Pie
|
|
28
|
+
builder Builders::Pie
|
|
29
|
+
native :pie, builder: Native::Builders::Pie
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/quadrant"
|
|
5
|
+
require_relative "builders/quadrant"
|
|
6
|
+
require_relative "native/builders/quadrant"
|
|
7
|
+
require_relative "../diagram/quadrant"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Quadrant chart parser for Mermaid quadrant diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to handle quadrant chart syntax
|
|
14
|
+
# with axis labels, quadrant labels, and data points.
|
|
15
|
+
#
|
|
16
|
+
# Parses quadrant charts with support for:
|
|
17
|
+
# - Title declarations
|
|
18
|
+
# - X-axis and Y-axis labels
|
|
19
|
+
# - Quadrant labels (1-4)
|
|
20
|
+
# - Data points with normalized coordinates
|
|
21
|
+
# - Point styling (radius, color, stroke)
|
|
22
|
+
# - Comments
|
|
23
|
+
#
|
|
24
|
+
# @example Parse a simple quadrant chart
|
|
25
|
+
# parser = Quadrant.new
|
|
26
|
+
# source = <<~MERMAID
|
|
27
|
+
# quadrantChart
|
|
28
|
+
# title Product Analysis
|
|
29
|
+
# x-axis Low Cost --> High Cost
|
|
30
|
+
# y-axis Low Value --> High Value
|
|
31
|
+
# Product A: [0.3, 0.7]
|
|
32
|
+
# MERMAID
|
|
33
|
+
# diagram = parser.parse(source)
|
|
34
|
+
class Quadrant < Base
|
|
35
|
+
grammar Grammars::Quadrant
|
|
36
|
+
builder Builders::Quadrant
|
|
37
|
+
native :quadrant, builder: Native::Builders::Quadrant
|
|
38
|
+
|
|
39
|
+
CLASS_STYLE_KEYS = %w[radius color stroke-color stroke-width].freeze
|
|
40
|
+
private_constant :CLASS_STYLE_KEYS
|
|
41
|
+
|
|
42
|
+
# @raise [ParseError] when a classDef uses a style Mermaid rejects
|
|
43
|
+
def parse(source)
|
|
44
|
+
native_diagram(source) || ruby_quadrant(source)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Mermaid rejects a classDef style outside CLASS_STYLE_KEYS; the
|
|
48
|
+
# native builder shares this check.
|
|
49
|
+
#
|
|
50
|
+
# @param tree [Array, Hash] statements carrying :class_style
|
|
51
|
+
# @raise [ParseError] for an unsupported style
|
|
52
|
+
def validate_class_styles(tree)
|
|
53
|
+
[tree].flatten.each do |item|
|
|
54
|
+
next unless item.is_a?(Hash) && item.key?(:class_style)
|
|
55
|
+
|
|
56
|
+
class_style_keys(item[:class_style]).each do |key|
|
|
57
|
+
next if CLASS_STYLE_KEYS.include?(key)
|
|
58
|
+
|
|
59
|
+
raise ParseError, "style named #{key} is not supported."
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
def ruby_quadrant(source)
|
|
67
|
+
tree = parse_with_grammar(Grammars::Quadrant.new, source)
|
|
68
|
+
validate_class_styles(tree)
|
|
69
|
+
Builders::Quadrant.new.apply(tree)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def class_style_keys(style)
|
|
73
|
+
style.to_s.split(",").map { |part| part.strip.split(/\s*:\s*/).first }
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/radar"
|
|
5
|
+
require_relative "builders/radar"
|
|
6
|
+
require_relative "native/builders/radar"
|
|
7
|
+
require_relative "../diagram/radar"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Radar chart parser for Mermaid radar-beta diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to handle radar chart syntax
|
|
14
|
+
# with axes and multiple data curves.
|
|
15
|
+
#
|
|
16
|
+
# Parses radar charts with support for:
|
|
17
|
+
# - Title and accessibility metadata
|
|
18
|
+
# - Axis definitions with labels
|
|
19
|
+
# - Multiple data curves/datasets
|
|
20
|
+
# - Configuration options (ticks, legend, graticule, min/max)
|
|
21
|
+
#
|
|
22
|
+
# @example Parse a simple radar chart
|
|
23
|
+
# parser = Radar.new
|
|
24
|
+
# source = <<~MERMAID
|
|
25
|
+
# radar-beta
|
|
26
|
+
# title Skills Assessment
|
|
27
|
+
# axis A, B, C
|
|
28
|
+
# curve mycurve{1, 2, 3}
|
|
29
|
+
# MERMAID
|
|
30
|
+
# diagram = parser.parse(source)
|
|
31
|
+
class Radar < Base
|
|
32
|
+
grammar Grammars::Radar
|
|
33
|
+
builder Builders::Radar
|
|
34
|
+
native :radar, builder: Native::Builders::Radar
|
|
35
|
+
|
|
36
|
+
# Assembles the diagram from the builder's intermediate result; the
|
|
37
|
+
# native builder shares it.
|
|
38
|
+
#
|
|
39
|
+
# @param result [Hash] title, axes, curves and options
|
|
40
|
+
# @return [Diagram::Radar]
|
|
41
|
+
def create_diagram(result)
|
|
42
|
+
diagram = Diagram::Radar.new
|
|
43
|
+
assign_metadata(diagram, result)
|
|
44
|
+
append_axes(diagram, result[:axes])
|
|
45
|
+
append_curves(diagram, result[:curves])
|
|
46
|
+
diagram
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def assign_metadata(diagram, result)
|
|
52
|
+
diagram.title = result[:title]
|
|
53
|
+
diagram.acc_title = result[:acc_title]
|
|
54
|
+
diagram.acc_descr = result[:acc_descr]
|
|
55
|
+
diagram.options = result[:options]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def append_axes(diagram, axes)
|
|
59
|
+
axes.each do |data|
|
|
60
|
+
diagram.axes << Diagram::RadarAxis.new(data[:id], data[:label])
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def append_curves(diagram, curves)
|
|
65
|
+
curves.each do |data|
|
|
66
|
+
diagram.curves << build_curve(data, diagram.axes)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def build_curve(data, axes)
|
|
71
|
+
curve = Diagram::RadarCurve.new(data[:id], data[:label])
|
|
72
|
+
assign_curve_values(curve, Array(data[:values]), axes)
|
|
73
|
+
curve
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def assign_curve_values(curve, values, axes)
|
|
77
|
+
return assign_named_values(curve, values) if named_values?(values)
|
|
78
|
+
|
|
79
|
+
assign_positional_values(curve, values, axes)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def named_values?(values)
|
|
83
|
+
values.first.is_a?(Hash) && values.first[:axis]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def assign_named_values(curve, values)
|
|
87
|
+
values.each { |value| curve.add_value(value[:axis], value[:value]) }
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def assign_positional_values(curve, values, axes)
|
|
91
|
+
values.each_with_index do |value, index|
|
|
92
|
+
next unless axes[index]
|
|
93
|
+
|
|
94
|
+
curve.add_value(axes[index].id, value)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/requirement"
|
|
5
|
+
require_relative "builders/requirement"
|
|
6
|
+
require_relative "native/builders/requirement"
|
|
7
|
+
require_relative "../diagram/requirement"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Requirement diagram parser for Mermaid requirement diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Parses requirement diagrams with support for:
|
|
14
|
+
# - Requirements with properties (id, text, risk, verifymethod)
|
|
15
|
+
# - Multiple requirement types (requirement, functionalRequirement, etc.)
|
|
16
|
+
# - Elements with properties (type, docref)
|
|
17
|
+
# - Relationships (contains, copies, derives, satisfies, verifies, refines,
|
|
18
|
+
# traces)
|
|
19
|
+
# - Styling directives
|
|
20
|
+
# - Class definitions and assignments
|
|
21
|
+
#
|
|
22
|
+
# @example Parse a simple requirement diagram
|
|
23
|
+
# parser = Requirement.new
|
|
24
|
+
# source = "requirementDiagram\n requirement test_req { id: 1 }"
|
|
25
|
+
# diagram = parser.parse(source)
|
|
26
|
+
class Requirement < Base
|
|
27
|
+
grammar Grammars::Requirement
|
|
28
|
+
builder Builders::Requirement
|
|
29
|
+
native :requirement, builder: Native::Builders::Requirement
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/sankey"
|
|
5
|
+
require_relative "builders/sankey"
|
|
6
|
+
require_relative "native/builders/sankey"
|
|
7
|
+
require_relative "../diagram/sankey"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Sankey parser for Mermaid sankey diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to handle Sankey diagram syntax
|
|
14
|
+
# with flows between nodes and optional node labels.
|
|
15
|
+
#
|
|
16
|
+
# Parses Sankey diagrams with support for:
|
|
17
|
+
# - Flow definitions (CSV format: source,target,value)
|
|
18
|
+
# - Optional node declarations with labels
|
|
19
|
+
# - Automatic node discovery from flows
|
|
20
|
+
# - Numeric flow values (integer or float)
|
|
21
|
+
# - Comments
|
|
22
|
+
#
|
|
23
|
+
# @example Parse a simple Sankey diagram
|
|
24
|
+
# parser = Sankey.new
|
|
25
|
+
# diagram = parser.parse(<<~SANKEY)
|
|
26
|
+
# sankey-beta
|
|
27
|
+
# A,B,10
|
|
28
|
+
# B,C,20
|
|
29
|
+
# A,D,5
|
|
30
|
+
# SANKEY
|
|
31
|
+
#
|
|
32
|
+
# @example Parse Sankey with node labels
|
|
33
|
+
# parser = Sankey.new
|
|
34
|
+
# diagram = parser.parse(<<~SANKEY)
|
|
35
|
+
# sankey-beta
|
|
36
|
+
# Source [Energy Source]
|
|
37
|
+
# Process [Processing Plant]
|
|
38
|
+
# Source,Process,100
|
|
39
|
+
# Process,Output,70
|
|
40
|
+
# SANKEY
|
|
41
|
+
class Sankey < Base
|
|
42
|
+
grammar Grammars::Sankey
|
|
43
|
+
builder Builders::Sankey
|
|
44
|
+
native :sankey, builder: Native::Builders::Sankey
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/sequence"
|
|
5
|
+
require_relative "builders/sequence"
|
|
6
|
+
require_relative "native/builders/sequence"
|
|
7
|
+
require_relative "../diagram/sequence"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Sequence parser for Mermaid sequence diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to correctly handle complex arrow
|
|
14
|
+
# patterns with activation modifiers (e.g., `->>+`, `-->>-`) that cannot
|
|
15
|
+
# be parsed accurately with regex-based lexers.
|
|
16
|
+
#
|
|
17
|
+
# Parses sequence diagrams with support for:
|
|
18
|
+
# - Participant declarations (participant, actor)
|
|
19
|
+
# - Multiple message types with activation modifiers
|
|
20
|
+
# - Activations and deactivations
|
|
21
|
+
# - Notes (left of, right of, over)
|
|
22
|
+
# - Control structures (loop, alt, opt, par, critical, break)
|
|
23
|
+
# - Box grouping
|
|
24
|
+
#
|
|
25
|
+
# @example Parse a simple sequence diagram
|
|
26
|
+
# parser = Sequence.new
|
|
27
|
+
# diagram = parser.parse("sequenceDiagram\nAlice->>Bob: Hello")
|
|
28
|
+
class Sequence < Base
|
|
29
|
+
grammar Grammars::Sequence
|
|
30
|
+
builder Builders::Sequence
|
|
31
|
+
native :sequence, builder: Native::Builders::Sequence
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/state_diagram"
|
|
5
|
+
require_relative "builders/state_diagram"
|
|
6
|
+
require_relative "native/builders/state_diagram"
|
|
7
|
+
require_relative "../diagram/state_diagram"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# State diagram parser for Mermaid state diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Parses state diagrams with support for:
|
|
14
|
+
# - Normal states with labels
|
|
15
|
+
# - Special states (start [*], end [*], choice, fork, join)
|
|
16
|
+
# - Transitions with triggers and guard conditions
|
|
17
|
+
# - Composite/nested states
|
|
18
|
+
# - Direction statements (TB, BT, LR, RL)
|
|
19
|
+
#
|
|
20
|
+
# @example Parse a simple state diagram
|
|
21
|
+
# parser = StateDiagram.new
|
|
22
|
+
# diagram = parser.parse("stateDiagram-v2\n[*]-->Idle\nIdle-->Active")
|
|
23
|
+
class StateDiagram < Base
|
|
24
|
+
grammar Grammars::StateDiagram
|
|
25
|
+
builder Builders::StateDiagram
|
|
26
|
+
native :state_diagram, builder: Native::Builders::StateDiagram
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/timeline"
|
|
5
|
+
require_relative "builders/timeline"
|
|
6
|
+
require_relative "native/builders/timeline"
|
|
7
|
+
require_relative "../diagram/timeline"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Timeline parser for Mermaid timeline diagram syntax.
|
|
12
|
+
#
|
|
13
|
+
# Uses Parslet grammar-based parsing to handle timeline syntax
|
|
14
|
+
# with sections, events, and chronological ordering.
|
|
15
|
+
#
|
|
16
|
+
# Parses timelines with support for:
|
|
17
|
+
# - Title declarations
|
|
18
|
+
# - Section grouping (periods, categories)
|
|
19
|
+
# - Events with timestamps and descriptions
|
|
20
|
+
# - Multiple descriptions per timestamp
|
|
21
|
+
# - Tasks within sections
|
|
22
|
+
# - Accessibility features (accTitle, accDescr)
|
|
23
|
+
# - Comments
|
|
24
|
+
#
|
|
25
|
+
# @example Parse a simple timeline
|
|
26
|
+
# parser = Timeline.new
|
|
27
|
+
# diagram = parser.parse(<<~TIMELINE)
|
|
28
|
+
# timeline
|
|
29
|
+
# title History of Social Media
|
|
30
|
+
# 2002 : LinkedIn
|
|
31
|
+
# 2004 : Facebook : Google
|
|
32
|
+
# 2005 : YouTube
|
|
33
|
+
# TIMELINE
|
|
34
|
+
class Timeline < Base
|
|
35
|
+
grammar Grammars::Timeline
|
|
36
|
+
builder Builders::Timeline
|
|
37
|
+
native :timeline, builder: Native::Builders::Timeline
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "grammars/treemap"
|
|
5
|
+
require_relative "builders/treemap"
|
|
6
|
+
require_relative "native/builders/treemap"
|
|
7
|
+
require_relative "../diagram/treemap"
|
|
8
|
+
|
|
9
|
+
module Etassia
|
|
10
|
+
module Parser
|
|
11
|
+
# Parser for treemap diagrams using Parslet
|
|
12
|
+
class Treemap < Base
|
|
13
|
+
grammar Grammars::Treemap
|
|
14
|
+
builder Builders::Treemap
|
|
15
|
+
native :treemap, builder: Native::Builders::Treemap
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# The builder's Parslet pass returns statement data, not a diagram.
|
|
20
|
+
def create_diagram(data)
|
|
21
|
+
self.class.builder.new.build_diagram(data)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|