Module: Oppen

Defined in:
lib/oppen.rb,
lib/oppen/token.rb,
lib/wadler/print.rb,
lib/oppen/printer.rb,
lib/oppen/version.rb,
lib/oppen/scan_stack.rb,
lib/oppen/print_stack.rb

Overview

Oppen.

Defined Under Namespace

Classes: Config, PrintStack, Printer, ScanStack, Token, Wadler

Constant Summary collapse

VERSION =

Oppen version

Returns:

  • (String)

    current version

'0.1.0'

Class Method Summary collapse

Class Method Details

.begin_consistent(offset: 2) ⇒ Oppen::Token::Begin

Returns a new consistent Begin token.

Parameters:

  • offset (Integer) (defaults to: 2)

Returns:



124
125
126
# File 'lib/oppen.rb', line 124

def self.begin_consistent(offset: 2)
  Token::Begin.new(break_type: Token::BreakType::CONSISTENT, offset:)
end

.begin_inconsistent(offset: 2) ⇒ Oppen::Token::Begin

Returns a new inconsistent Begin token.

Parameters:

  • offset (Integer) (defaults to: 2)

Returns:



131
132
133
# File 'lib/oppen.rb', line 131

def self.begin_inconsistent(offset: 2)
  Token::Begin.new(break_type: Token::BreakType::INCONSISTENT, offset:)
end

.break(str = ' ', offset: 0) ⇒ Oppen::Token::Break

Returns a new Break token.

Parameters:

  • str (String) (defaults to: ' ')
  • offset (Integer) (defaults to: 0)

Returns:



110
111
112
# File 'lib/oppen.rb', line 110

def self.break(str = ' ', offset: 0)
  Token::Break.new(str, offset:)
end

.endOppen::Token::End

Returns a new End token.

Returns:



136
137
138
# File 'lib/oppen.rb', line 136

def self.end
  Token::End.new
end

.eofOppen::Token::EOF

Returns a new EOF token.

Returns:



141
142
143
# File 'lib/oppen.rb', line 141

def self.eof
  Token::EOF.new
end

.line_break(offset: 0) ⇒ Oppen::Token::LineBreak

Returns a new LineBreak token.

Parameters:

  • offset (Integer) (defaults to: 0)

Returns:



117
118
119
# File 'lib/oppen.rb', line 117

def self.line_break(offset: 0)
  Token::LineBreak.new(offset:)
end

Entry point of the pretty printer.

Parameters:

  • config (Config) (defaults to: Config.oppen)
  • space (String, Proc) (defaults to: ' ')

    could be a String or a callable. If it’s a string, spaces will be generated with the the lambda ‘->(n){ n * space }`, where `n` is the number of columns to indent. If it’s a callable, it will receive ‘n` and it needs to return a string.

  • margin (Integer) (defaults to: 80)

    maximum line width desired

  • new_line (String) (defaults to: "\n")

    the delimiter between lines

  • out (Object) (defaults to: StringIO.new)

    should have a write and string method

  • tokens (Array[Token]) (defaults to: [])

    the list of tokens to be printed

Returns:

  • (String)

    output of the pretty printer



27
28
29
30
31
32
33
34
# File 'lib/oppen.rb', line 27

def self.print(config: Config.oppen, space: ' ',
               margin: 80, new_line: "\n", out: StringIO.new, tokens: [])
  printer = Printer.new margin, new_line, config, space, out
  tokens.each do |token|
    printer.print token
  end
  printer.output
end

.string(value) ⇒ Oppen::Token::String

Returns a new String token.

Parameters:

  • value (String)

Returns:



102
103
104
# File 'lib/oppen.rb', line 102

def self.string(value)
  Token::String.new(value)
end