class NestedText::LineScanner

Public Class Methods

new(io) click to toggle source
# File lib/nestedtext/scanners.rb, line 7
def initialize(io)
  @io = io
  @next_line = nil
  prepare_next_line
end

Public Instance Methods

empty?() click to toggle source
# File lib/nestedtext/scanners.rb, line 13
def empty?
  @next_line.nil?
end
peek() click to toggle source
# File lib/nestedtext/scanners.rb, line 26
def peek
  @next_line
end
read_next() click to toggle source
# File lib/nestedtext/scanners.rb, line 17
def read_next
  raise Errors::AssertionLineScannerIsEmptyError if empty?

  line = @next_line
  prepare_next_line
  line.prev.prev = nil unless line.prev.nil? # GC: break the chain
  line
end

Private Instance Methods

prepare_next_line() click to toggle source
# File lib/nestedtext/scanners.rb, line 32
def prepare_next_line
  line = nil
  loop do
    linestr = @io.gets&.chomp
    lineno = @io.lineno - 1 # Be 0-based
    line = linestr.nil? ? nil : Line.new(linestr, lineno, @next_line)
    break if line.nil? || !%i[blank comment].include?(line.tag)
  end
  @next_line = line
end