Class: AsciidoctorDiagramLayout::Parser

Inherits:
Object
  • Object
show all
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

Raises:



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