Class: Collie::Formatter::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/collie/formatter/formatter.rb

Overview

Formatter for .y grammar files

Instance Method Summary collapse

Constructor Details

#initialize(options = Options.new) ⇒ Formatter

Returns a new instance of Formatter.



7
8
9
# File 'lib/collie/formatter/formatter.rb', line 7

def initialize(options = Options.new)
  @options = options
end

Instance Method Details

#format(ast) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/collie/formatter/formatter.rb', line 11

def format(ast)
  output = []

  # Prologue
  output << format_prologue(ast.prologue) if ast.prologue
  append_blank_lines(output) if ast.prologue

  # Declarations
  output << format_declarations(ast.declarations) unless ast.declarations.empty?
  append_blank_lines(output) unless ast.declarations.empty?

  # Section separator
  output << "%%"
  append_blank_lines(output)

  # Rules
  output << format_rules(ast.rules) unless ast.rules.empty?

  # Epilogue
  if ast.epilogue
    append_blank_lines(output)
    output << "%%"
    append_blank_lines(output)
    output << ast.epilogue.code
  end

  output.pop while output.last == ""
  output.join("\n")
end