docs: def new_from_tokens(self, *args, **kwargs):
          """
              Takes in a name that has been split by spaces.
              Names which are in [last, first] format need to be preprocessed.
              The nickname must be in double quotes to be recognized as such.
  
              This can take name parts in in these orders:
              first, middle, last, nick, suffix, honorific
              first, middle, last, nick, suffix
              first, middle, last, suffix, honorific
              first, middle, last, honorific
              first, middle, last, suffix
              first, middle, last, nick
              first, last, honorific
              first, last, suffix
              first, last, nick
              first, middle, last
              first, last
              last
          """
  
          if kwargs.get('allow_quoted_nicknames'):
              args = [ x.strip() for x in args if not re.match(r'^[(]', x) ]
          else:
              args = [ x.strip() for x in args if not re.match(r'^[("]', x) ]
  
          if len(args) > 2:
              self.detect_and_fix_two_part_surname(args)
  
          # set defaults
          self.first = ''
          self.last = ''
  
          # the final few tokens should always be detectable, otherwise a last name
          if len(args):
              if self.is_an_honorific(args[-1]):
                  self.honorific = args.pop()
                  if not self.honorific[-1] == '.':
                      self.honorific += '.'
              if self.is_a_suffix(args[-1]):
                  self.suffix = args.pop()
                  if re.match(r'[js]r(?!\.)', self.suffix, re.IGNORECASE):
                      self.suffix += '.'
              if self.is_a_nickname(args[-1]):
                  self.nick = args.pop()
              self.last = args.pop()
  
          num_remaining_parts = len(args)
  
          if num_remaining_parts == 3:
              # if we've still got this many parts, we'll consider what's left as first name
              # plus multi-part middle name
              self.first = args[0]
              self.middle = ' '.join(args[1:3])
  
          elif num_remaining_parts == 2:
              self.first, self.middle = args
              if len(self.middle) == 1:
                  self.middle += '.'
  
          elif num_remaining_parts == 1:
              self.first = ' '.join(args)
  
          if self.first and len(self.first) == 1:
              self.first += '.'
  
          return self