Sha256: 3c74dd5359cda305033d19069c3e0a5b26a1c670cf76f96471bd3d0aae2a9d7e

Contents?: true

Size: 1.08 KB

Versions: 13

Compression:

Stored size: 1.08 KB

Contents

class StringParser

  attr_reader :line, :eos, :i, :len

  def initialize(line)
    raise NilValue if line.nil?
    raise ExpectedString unless String === line
    @line = line
    @len = @line.length
    @eos = @len == 0 ? true : false
    @i = 0
  end

  def grab(n = 1)
    raise "n <= 0 for #grab" if n <= 0
    return nil if @eos
    i2 = @i + n - 1
    char = @line[@i..i2]
    @i += n
    check_eos
    char
  end

  def ungrab
    @i -= 1
    check_eos
  end

  def lookahead
    # Get rid of this?
    @line[@i + 1]
  end

  def remainder
    @line[@i..-1]
  end

  def prev
    return nil if @i <= 0
    @line[@i-1]
  end

  def eos?
    @eos
  end

  def peek(n = 1)
    raise "n <= 0 for #grab" if n <= 0
    return nil if @eos
    i2 = @i + n - 1
    @line[@i..i2]
  end

  def skip_spaces
    char = nil
    loop do
      char = peek
      break if eos?
      break if char != " "
      char = grab
    end
    char
  end

  private

  def check_eos
    @eos = @i >= @len
  end
end

=begin
  skip
  lookahead skip! peek!(?)
  expect_alpha
  expect_number
  skip_spaces
  expect_eos
=end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
livetext-0.9.42 lib/livetext/parser/string.rb
livetext-0.9.41 lib/livetext/parser/string.rb
livetext-0.9.40 lib/livetext/parser/string.rb
livetext-0.9.39 lib/livetext/parser/string.rb
livetext-0.9.38 lib/livetext/parser/string.rb
livetext-0.9.37 lib/livetext/parser/string.rb
livetext-0.9.36 lib/livetext/parser/string.rb
livetext-0.9.35 lib/livetext/parser/string.rb
livetext-0.9.33 lib/livetext/parser/string.rb
livetext-0.9.32 lib/livetext/parser/string.rb
livetext-0.9.31 lib/livetext/parser/string.rb
livetext-0.9.30 lib/livetext/parser/string.rb
livetext-0.9.27 lib/livetext/parser/string.rb