code: def read_args(src, args=None):
      r
      args = args or TexArgs()
  
      # Unlimited whitespace before first argument
      candidate_index = src.num_forward_until(lambda s: not s.isspace())
      while src.peek().isspace():
          args.append(read_tex(src))
  
      # Restricted to only one line break after first argument
      line_breaks = 0
      while src.peek() in ARG_START_TOKENS or \
              (src.peek().isspace() and line_breaks == 0):
          space_index = src.num_forward_until(lambda s: not s.isspace())
          if space_index > 0:
              line_breaks += 1
              if src.peek((0, space_index)).count("\n") <= 1 and src.peek(space_index) in ARG_START_TOKENS:
                  args.append(read_tex(src))
          else:
              line_breaks = 0
              tex_text = read_tex(src)
              args.append(tex_text)
  
      if not args:
          src.backward(candidate_index)
  
      return args
docs: r"""Read all arguments from buffer.
  
      Advances buffer until end of last valid arguments. There can be any number
      of whitespace characters between command and the first argument.
      However, after that first argument, the command can only tolerate one
      successive line break, before discontinuing the chain of arguments.
  
      :param TexArgs args: existing arguments to extend
      :return: parsed arguments
      :rtype: TexArgs