docs: def read(self, stream):
          """
          Will parse the stream until a complete sexp has been read.
          Returns True until state is complete.
          """
          stack = self.stack
          while True:
              if stack[0]:  # will be true once one sexp has been parsed
                  self.rest_string = stream
                  return False
              c = stream.read(1)
              if not c:
                  # no more stream and no complete sexp
                  return True
              reading = type(stack[-1])
              self.sexp_string.write(c)
  
              if reading == tuple:
                  if c in atom_end:
                      atom = stack.pop()
                      stack[-1].append(atom)
                      reading = type(stack[-1])
              if reading == list:
                  if c == '(':
                      stack.append([])
                  elif c == ')':
                      stack[-2].append(stack.pop())
                  elif c == '"':
                      stack.append('')
                  elif c == "'":
                      continue
                  elif c in whitespace:
                      continue
                  else:
                      stack.append(tuple())
              elif reading == str:
                  if c == '"':
                      stack.pop()
                  # escaped char coming up, so read ahead
                  elif c == '\\':
                      self.sexp_string.write(stream.read(1))