class ReVIEW::LineInput

Constants

INVALID_CHARACTER_PATTERN

Attributes

lineno[R]

Public Class Methods

new(f) click to toggle source
# File lib/review/lineinput.rb, line 16
def initialize(f)
  @input = f
  @buf = []
  @lineno = 0
  @eof_p = false
end

Public Instance Methods

each() { |line| ... } click to toggle source
# File lib/review/lineinput.rb, line 83
def each
  while line = gets
    yield line
  end
end
eof?() click to toggle source
# File lib/review/lineinput.rb, line 27
def eof?
  @eof_p
end
gets() click to toggle source
# File lib/review/lineinput.rb, line 43
def gets
  unless @buf.empty?
    @lineno += 1
    return @buf.pop
  end
  return nil if @eof_p # to avoid ARGF blocking.

  line = @input.gets
  @eof_p = true unless line
  @lineno += 1
  invalid_char = lookup_invalid_char(line)
  if invalid_char
    raise SyntaxError, "found invalid control-sequence character (#{sprintf('%#x', invalid_char.codepoints[0])})."
  end

  line
end
inspect() click to toggle source
# File lib/review/lineinput.rb, line 23
def inspect
  "#<#{self.class} file=#{@input.inspect} line=#{lineno}>"
end
next?() click to toggle source
# File lib/review/lineinput.rb, line 67
def next?
  peek ? true : false
end
peek() click to toggle source
# File lib/review/lineinput.rb, line 61
def peek
  line = gets
  ungets(line) if line
  line
end
skip_blank_lines() click to toggle source
# File lib/review/lineinput.rb, line 71
def skip_blank_lines
  n = 0
  while line = gets
    unless line.strip.empty?
      ungets(line)
      return n
    end
    n += 1
  end
  n
end
skip_comment_lines() click to toggle source
# File lib/review/lineinput.rb, line 31
def skip_comment_lines
  n = 0
  while line = gets
    unless /\A\#@/.match?(line.strip)
      ungets(line)
      return n
    end
    n += 1
  end
  n
end
until_match(re) { |line| ... } click to toggle source
# File lib/review/lineinput.rb, line 100
def until_match(re)
  while line = gets
    if re&.match?(line)
      ungets(line)
      return
    end
    yield line
  end
  nil
end
while_match(re) { |line| ... } click to toggle source
# File lib/review/lineinput.rb, line 89
def while_match(re)
  while line = gets
    unless re&.match?(line)
      ungets(line)
      return
    end
    yield line
  end
  nil
end

Private Instance Methods

lookup_invalid_char(line) click to toggle source
# File lib/review/lineinput.rb, line 121
def lookup_invalid_char(line)
  if line =~ INVALID_CHARACTER_PATTERN
    $&
  end
end
ungets(line) click to toggle source
# File lib/review/lineinput.rb, line 113
def ungets(line)
  return unless line

  @lineno -= 1
  @buf.push(line)
  line
end