class StringScanner

def check(regex)

def check(regex)
  %x{
    var regexp = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)),
        result = regexp.exec(#@working);
    if (result == null) {
      return this.matched = nil;
    }
    return this.matched = result[0];
  }
end

def eos?

def eos?
  `#@working.length === 0`
end

def initialize(string)

def initialize(string)
  @string  = string
  @pos     = 0
  @matched = ''
  @working = string
end

def peek(length)

def peek(length)
  `#@working.substring(0, length)`
end

def scan(regex)

def scan(regex)
  %x{
    var regex  = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)),
        result = regex.exec(#@working);
    if (result == null) {
      #@matched = '';
      return nil;
    }
    else if (typeof(result) === 'object') {
      #@pos      += result[0].length;
      #@working  = #@working.substring(result[0].length);
      #@matched  = result[0];
      return result[0];
    }
    else if (typeof(result) === 'string') {
      #@pos     += result.length;
      #@working  = #@working.substring(result.length);
      return result;
    }
    else {
      return nil;
    }
  }
end