code: func (s *byteScanner) nextChar() error {
  	//println("--- nextChar(). Offset / len(s.buf): ", s.pos.Offset, len(s.buf))
  
  	if s.pos.Offset >= len(s.buf) {
  		s.ch = -1
  		return io.EOF
  	}
  	s.pos.Column++
  	if s.ch == '\n' {
  		s.pos.Line++
  		s.pos.Column = 1
  	}
  	r, w := rune(s.buf[s.pos.Offset]), 1
  	if r >= 0x80 {
  		r, w = utf8.DecodeRune(s.buf[s.pos.Offset:])
  		if r == utf8.RuneError && w == 1 {
  			s.error(s.pos, "illegal UTF-8 encoding")
  		}
  	}
  	s.pos.Column++
  	s.pos.Offset += w
  	s.ch = r
  	return nil
  }
docs: // Reads next Unicode char.