def format(self, person): names = person.get_part(self.types[self.format_char]) if self.format_char else [] if self.format_char and not names: return '' if self.abbreviate: names = [bibtex_abbreviate(name, self.delimiter) for name in names] if self.delimiter is None: if self.abbreviate: names = join(names, '.~', '. ') else: names = join(names) else: names = self.delimiter.join(names) formatted_part = self.pre_text + names + self.post_text if self.tie == '~': discretionary = tie_or_space(formatted_part) elif self.tie == '~~': discretionary = '~' else: discretionary = '' return formatted_part + discretionary