code: def read_item(src):
      r
      def stringify(s):
          return TokenWithPosition.join(s.split(' '), glue=' ')
  
      def forward_until_new(s):
          """Catch the first non-whitespace character"""
          t = TokenWithPosition('', s.peek().position)
          while (s.hasNext() and
                  any([s.peek().startswith(substr) for substr in string.whitespace]) and
                  not t.strip(" ").endswith('\n')):
              t += s.forward(1)
          return t
  
      # Item argument such as in description environment
      arg = []
      extra = []
  
      if src.peek() in ARG_START_TOKENS:
          c = next(src)
          a = read_arg(src, c)
          arg.append(a)
  
      if not src.hasNext():
          return extra, arg
  
      last = stringify(forward_until_new(src))
      extra.append(last.lstrip(" "))
  
      while (src.hasNext() and not str(src).strip(" ").startswith('\n\n') and
              not src.startswith('\item') and
              not src.startswith('\end') and
              not (isinstance(last, TokenWithPosition) and last.strip(" ").endswith('\n\n') and len(extra) > 1)):
          last = read_tex(src)
          extra.append(last)
      return extra, arg
docs: r"""Read the item content.
  
      There can be any number of whitespace characters between \item and the first
      non-whitespace character. However, after that first non-whitespace
      character, the item can only tolerate one successive line break at a time.
  
      \item can also take an argument.
  
      :param Buffer src: a buffer of tokens
      :return: contents of the item and any item arguments