code: func (l *lexer) eol() ([]rune, Error) {
  	// read the to the end of the line
  	//      - we should only be called here when we encounter an end of line
  	//        sequence
  	_line := make([]rune, 0, 1)
  
  	// loop until there's nothing more to do
  	for {
  		_next, _err := l.read()
  		if _err != nil {
  			return _line, _err
  		}
  
  		// read until we have a newline or we're at end of file
  		switch _next {
  		// end of file
  		case _EOF:
  			return _line, nil
  
  		// carriage return - we expect to see a newline next
  		case _CR:
  			_line = append(_line, _next)
  			_next, _err = l.read()
  			if _err != nil {
  				return _line, _err
  			} else if _next != _NEWLINE {
  				l.unread(_next)
  				return _line, l.err(CarriageReturnError)
  			}
  			fallthrough
  
  		// newline
  		case _NEWLINE:
  			_line = append(_line, _next)
  			return _line, nil
  		}
  	}
  }
docs: // eol returns all runes from the current position to the end of the line. An
  // error is returned if there is a problem reading from the stream, or if a
  // carriage return character '\r' is encountered that is not followed by a
  // newline '\n'.