code: func (l *lexer) read() (rune, Error) {
  	var _r rune
  	var _err error
  
  	// do we have any unread runes to read?
  	_length := len(l._unread)
  	if _length > 0 {
  		_r = l._unread[_length-1]
  		l._unread = l._unread[:_length-1]
  
  		// otherwise, attempt to read a new rune
  	} else {
  		_r, _, _err = l._r.ReadRune()
  		if _err == io.EOF {
  			return _EOF, nil
  		}
  	}
  
  	// increment the offset and column counts
  	l._offset++
  	l._column++
  
  	return _r, l.err(_err)
  }
docs: //
  // private methods
  //
  // read the next rune from the stream. Return an Error if there is a problem
  // reading from the stream. If the end of stream is reached, return the EOF
  // Token.