Class: Lrama::Diagram

Inherits:
Object
  • Object
show all
Defined in:
lib/lrama/diagram.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(out:, grammar:, template_name: 'diagram/diagram.html') ⇒ Diagram

Returns a new instance of Diagram.



24
25
26
27
28
# File 'lib/lrama/diagram.rb', line 24

def initialize(out:, grammar:, template_name: 'diagram/diagram.html')
  @grammar = grammar
  @out = out
  @template_name = template_name
end

Class Method Details

.render(out:, grammar:, template_name: 'diagram/diagram.html') ⇒ Object



8
9
10
11
# File 'lib/lrama/diagram.rb', line 8

def render(out:, grammar:, template_name: 'diagram/diagram.html')
  return unless require_railroad_diagrams
  new(out: out, grammar: grammar, template_name: template_name).render
end

.require_railroad_diagramsObject



14
15
16
17
18
19
20
# File 'lib/lrama/diagram.rb', line 14

def require_railroad_diagrams
  require "railroad_diagrams"
  true
rescue LoadError
  warn "railroad_diagrams is not installed. Please run `bundle install`."
  false
end

Instance Method Details

#default_styleObject



37
38
39
# File 'lib/lrama/diagram.rb', line 37

def default_style
  RailroadDiagrams::Style::default_style
end

#diagramsObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/lrama/diagram.rb', line 42

def diagrams
  result = +''
  @grammar.unique_rule_s_values.each do |s_value|
    diagrams =
      @grammar.select_rules_by_s_value(s_value).map { |r| r.to_diagrams }
    add_diagram(
      s_value,
      RailroadDiagrams::Diagram.new(
        RailroadDiagrams::Choice.new(0, *diagrams),
      ),
      result
    )
  end
  result
end

#renderObject



31
32
33
34
# File 'lib/lrama/diagram.rb', line 31

def render
  RailroadDiagrams::TextDiagram.set_formatting(RailroadDiagrams::TextDiagram::PARTS_UNICODE)
  @out << ERB.render(template_file, output: self)
end