docs: function(channel) {
  
          var tokenInfo   = this._tokenData,
              i           =0,
              token,
              info;
  
          //check the lookahead buffer first
          if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length) {
  
              i++;
              this._token = this._lt[this._ltIndex++];
              info = tokenInfo[this._token.type];
  
              //obey channels logic
              while ((info.channel !== undefined && channel !== info.channel) &&
                      this._ltIndex < this._lt.length) {
                  this._token = this._lt[this._ltIndex++];
                  info = tokenInfo[this._token.type];
                  i++;
              }
  
              //here be dragons
              if ((info.channel === undefined || channel === info.channel) &&
                      this._ltIndex <= this._lt.length) {
                  this._ltIndexCache.push(i);
                  return this._token.type;
              }
          }
  
          //call token retriever method
          token = this._getToken();
  
          //if it should be hidden, don't save a token
          if (token.type > -1 && !tokenInfo[token.type].hide) {
  
              //apply token channel
              token.channel = tokenInfo[token.type].channel;
  
              //save for later
              this._token = token;
              this._lt.push(token);
  
              //save space that will be moved (must be done before array is truncated)
              this._ltIndexCache.push(this._lt.length - this._ltIndex + i);
  
              //keep the buffer under 5 items
              if (this._lt.length > 5) {
                  this._lt.shift();
              }
  
              //also keep the shift buffer under 5 items
              if (this._ltIndexCache.length > 5) {
                  this._ltIndexCache.shift();
              }
  
              //update lookahead index
              this._ltIndex = this._lt.length;
          }
  
          /*
           * Skip to the next token if:
           * 1. The token type is marked as hidden.
           * 2. The token type has a channel specified and it isn't the current channel.
           */
          info = tokenInfo[token.type];
          if (info &&
                  (info.hide ||
                  (info.channel !== undefined && channel !== info.channel))) {
              return this.get(channel);
          } else {
              //return just the type
              return token.type;
          }
      }