code: func (l *lexer) unread(r ...rune) {
  	// ignore EOF runes
  	_r := make([]rune, 0)
  	for _, _rune := range r {
  		if _rune != _EOF {
  			_r = append(_r, _rune)
  		}
  	}
  
  	// initialise the unread rune list if necessary
  	if l._unread == nil {
  		l._unread = make([]rune, 0)
  	}
  	if len(_r) != 0 {
  		l._unread = append(l._unread, _r...)
  	}
  
  	// decrement the offset and column counts
  	//      - we have to take care of column being 0
  	//      - at present we can only unwind across a single line boundary
  	_length := len(_r)
  	for ; _length > 0; _length-- {
  		l._offset--
  		if l._column == 1 {
  			_length := len(l._previous)
  			if _length > 0 {
  				l._column = l._previous[_length-1]
  				l._previous = l._previous[:_length-1]
  				l._line--
  			}
  		} else {
  			l._column--
  		}
  	}
  }
docs: // unread returns the given runes to the stream, making them eligible to be
  // read again. The runes are returned in the order given, so the last rune
  // specified will be the next rune read from the stream.