class Parser::Lexer::Dedenter
Public Class Methods
new(dedent_level)
click to toggle source
# File lib/parser/lexer/dedenter.rb, line 4 def initialize(dedent_level) @dedent_level = dedent_level @at_line_begin = true @indent_level = 0 end
Public Instance Methods
dedent(string)
click to toggle source
# File lib/parser/lexer/dedenter.rb, line 10 def dedent(string) space_begin = space_end = offset = 0 last_index = string.length - 1 string.chars.each_with_index do |char, index| if @at_line_begin if char == ?\n || @indent_level >= @dedent_level string.slice!(space_begin...space_end) offset += space_end - space_begin - 1 @at_line_begin = false redo if char == ?\n end case char when ?\s @indent_level += 1 space_end += 1 when ?\t @indent_level += 8 - @indent_level % 8 space_end += 1 end elsif char == ?\n && index == last_index @at_line_begin = true @indent_level = 0 space_begin = space_end = index - offset + 1 end end if @at_line_begin string.slice!(space_begin..space_end) end nil end
interrupt()
click to toggle source
# File lib/parser/lexer/dedenter.rb, line 44 def interrupt @at_line_begin = false end