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