Class: AsciidoctorDiagramLayout::Parser
- Inherits:
-
Object
- Object
- AsciidoctorDiagramLayout::Parser
- Defined in:
- lib/asciidoctor_diagram_layout/parser.rb
Overview
Parses flex layout DSL text into a node tree.
Format: one directive per line. Containers (cols, rows) declare a nested block via indentation. Leaf zones use cell. An optional size in parentheses sets a fixed percentage:
cell(30): Name or cols(40):
Constant Summary collapse
- LINE_PATTERN =
/\A(?<keyword>cols|rows|cell)(?:\((?<size>\d+)\))?:(?<rest>.*)\z/i- TAB_WIDTH =
4
Instance Method Summary collapse
Instance Method Details
#parse(dsl, implicit_direction = :rows) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/asciidoctor_diagram_layout/parser.rb', line 14 def parse(dsl, implicit_direction = :rows) lines = dsl.split("\n", -1) state = ParseState.new(lines) roots = parse_children(state, 0) raise ParseError, "Empty input: expected at least one cell, rows, or cols" if roots.empty? if roots.size == 1 && roots.first.is_a?(ContainerNode) roots.first else ContainerNode.new(implicit_direction, :auto, roots) end end |