var SyntaxError = require('./SyntaxError'); 
 | 
  
 | 
var TAB = 9; 
 | 
var N = 10; 
 | 
var F = 12; 
 | 
var R = 13; 
 | 
var SPACE = 32; 
 | 
  
 | 
var Tokenizer = function(str) { 
 | 
    this.str = str; 
 | 
    this.pos = 0; 
 | 
}; 
 | 
  
 | 
Tokenizer.prototype = { 
 | 
    charCodeAt: function(pos) { 
 | 
        return pos < this.str.length ? this.str.charCodeAt(pos) : 0; 
 | 
    }, 
 | 
    charCode: function() { 
 | 
        return this.charCodeAt(this.pos); 
 | 
    }, 
 | 
    nextCharCode: function() { 
 | 
        return this.charCodeAt(this.pos + 1); 
 | 
    }, 
 | 
    nextNonWsCode: function(pos) { 
 | 
        return this.charCodeAt(this.findWsEnd(pos)); 
 | 
    }, 
 | 
    findWsEnd: function(pos) { 
 | 
        for (; pos < this.str.length; pos++) { 
 | 
            var code = this.str.charCodeAt(pos); 
 | 
            if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) { 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return pos; 
 | 
    }, 
 | 
    substringToPos: function(end) { 
 | 
        return this.str.substring(this.pos, this.pos = end); 
 | 
    }, 
 | 
    eat: function(code) { 
 | 
        if (this.charCode() !== code) { 
 | 
            this.error('Expect `' + String.fromCharCode(code) + '`'); 
 | 
        } 
 | 
  
 | 
        this.pos++; 
 | 
    }, 
 | 
    peek: function() { 
 | 
        return this.pos < this.str.length ? this.str.charAt(this.pos++) : ''; 
 | 
    }, 
 | 
    error: function(message) { 
 | 
        throw new SyntaxError(message, this.str, this.pos); 
 | 
    } 
 | 
}; 
 | 
  
 | 
module.exports = Tokenizer; 
 |