code: def parse_name(self):
          
          name = []
          while True:
              # Match the current char until it doesnt match the given pattern:
              # first char must be an uppercase alpha and the rest must be lower
              # cased alphas.
              part = self.match_string_pattern(spat.alphau, spat.alphal)
              if part == '':
                  break  # There is no more matchable strings.
              self.eat_string(part)  # Eat the found string
              name.append(part)  # Store this name part
              if self.get_char() == ' ':  # if the current char is a single space
                  # eat it. This allows one space between parts
                  self.eat_length(1)
  
          if not len(name):  # if no name parts where detected raise an expection.
              raise PartpyError(self, 'Expecting a title cased name')
          return ' '.join(name)
docs: This function uses string patterns to match a title cased name.
          This is done in a loop until there are no more names to match so as
          to be able to include surnames etc. in the output.