class EDN::CharStream

Public Class Methods

new(io=$stdin) click to toggle source
# File lib/edn/char_stream.rb, line 6
def initialize(io=$stdin)
  @io = io
  @current = nil
end

Public Instance Methods

advance() click to toggle source
# File lib/edn/char_stream.rb, line 16
def advance
  return @current if @current == :eof
  @current = @io.getc || :eof
end
alpha?(c=current) click to toggle source
# File lib/edn/char_stream.rb, line 25
def alpha?(c=current)
  /[a-zA-Z]/ =~ c
end
current() click to toggle source
# File lib/edn/char_stream.rb, line 11
def current
  return @current if @current
  advance
end
digit?(c=current) click to toggle source
# File lib/edn/char_stream.rb, line 21
def digit?(c=current)
  /[0-9]/ =~ c
end
eof?(c=current) click to toggle source
# File lib/edn/char_stream.rb, line 29
def eof?(c=current)
  c == :eof
end
gather(pattern) click to toggle source
# File lib/edn/char_stream.rb, line 50
def gather(pattern)
  repeat(pattern) do |result, ch|
    result << ch
  end
end
newline?(c=current) click to toggle source
# File lib/edn/char_stream.rb, line 37
def newline?(c=current)
  /[\n\r]/ =~ c
end
repeat(pattern, &block) click to toggle source
# File lib/edn/char_stream.rb, line 41
def repeat(pattern, &block)
  result = nil
  while current =~ pattern
    result ||= ''
    result = block.call(result, current)
  end
  result
end
skip_past(expected, error_message=nil) click to toggle source
# File lib/edn/char_stream.rb, line 56
def skip_past(expected, error_message=nil)
  if current == expected
    advance
    return expected
  elsif error_message
    raise error_message
  end
  nil
end
skip_to_eol() click to toggle source
# File lib/edn/char_stream.rb, line 66
def skip_to_eol
  until current == :eof || newline?
    advance
  end
end
skip_ws() click to toggle source
# File lib/edn/char_stream.rb, line 72
def skip_ws
  while current != :eof
    if ws?(current)
      advance
    elsif current == ';'
      skip_to_eol
    else
      break
    end
  end
end
ws?(c=current) click to toggle source
# File lib/edn/char_stream.rb, line 33
def ws?(c=current)
  /[ \t\r\n,]/ =~ c
end