docs: def _parse(self, fullname):
          """Perform the parsing."""
          n = ' '.join(fullname.split()).strip(',')
          if not n:
              return
          comps = [p.strip() for p in n.split(',')]
          if len(comps) > 1 and not all([self._is_suffix(comp) for comp in comps[1:]]):
              vlj = []
              while True:
                  vlj.append(comps.pop(0))
                  if not self._is_suffix(comps[0]):
                      break
              ltokens = self._tokenize(vlj)
              ltokens = self._strip(ltokens, self._is_prefix, 'prefix')
              ltokens = self._strip(ltokens, self._is_suffix, 'suffix', True)
              self['lastname'] = self._clean(' '.join(ltokens), capitalize='name')
          tokens = self._tokenize(comps)
          tokens = self._strip(tokens, self._is_title, 'title')
          if not 'lastname' in self:
              tokens = self._strip(tokens, self._is_suffix, 'suffix', True)
          voni = []
          end = len(tokens) - 1
          if not 'prefix' in self:
              for i, token in enumerate(reversed(tokens)):
                  if self._is_prefix(token):
                      if (i == 0 and end > 0) or (not 'lastname' in self and not i == end):
                          voni.append(end - i)
                  else:
                      if (i == 0 and 'lastname' in self) or voni:
                          break
          if voni:
              if not 'lastname' in self:
                  self['lastname'] = self._clean(' '.join(tokens[voni[0]+1:]), capitalize='name')
              self['prefix'] = self._clean(' '.join(tokens[voni[-1]:voni[0]+1]))
              tokens = tokens[:voni[-1]]
          else:
              if not 'lastname' in self:
                  self['lastname'] = self._clean(tokens.pop(), capitalize='name')
          if tokens:
              self['firstname'] = self._clean(tokens.pop(0), capitalize='name')
          if tokens:
              nicki = []
              for i, token in enumerate(tokens):
                  if token[0] in QUOTES:
                      for j, token2 in enumerate(tokens[i:]):
                          if token2[-1] in QUOTES:
                              nicki = range(i, i+j+1)
                              break
              if nicki:
                  self['nickname'] = self._clean(' '.join(tokens[nicki[0]:nicki[-1]+1]).strip(''.join(QUOTES)),
                                                       capitalize='name')
                  tokens[nicki[0]:nicki[-1]+1] = []
          if tokens:
              self['middlename'] = self._clean(' '.join(tokens), capitalize='name')
          namelist = []
          for attr in ['title', 'firstname', 'middlename', 'nickname', 'prefix', 'lastname', 'suffix']:
              if attr in self:
                  namelist.append('"%s"' % self[attr] if attr == 'nickname' else self[attr])
          self['fullname'] = ' '.join(namelist)