def get_names(contents): u''' Work-horse function to extract all the names defined in the current bib file. ''' names = [] in_entry = False pos = 0 contents_length = len(contents) while True: if not in_entry: matcher = re.search(NAME_FIELD_REGEX, contents[pos:]) # no more `name =` fields if not matcher: break pos += matcher.end() in_entry = True else: chars = [] bracket_depth = 1 for c in contents[pos:]: if c == '}': bracket_depth -= 1 if bracket_depth == 0: break if c == '{': bracket_depth += 1 chars.append(c) names.extend([ unicode(Name(s)) for s in tokenize_list(u''.join(chars)) ]) pos += len(chars) if pos >= contents_length: break in_entry = False return sorted(set(names))
def __getitem__(self, key): if not key: return u'' key = key.lower() result = None short = False if key.endswith('_short'): short = True key = key[:-6] if key == 'keyword' or key == 'citekey': return self.entry.cite_key if key in Name.NAME_FIELDS: people = [] for x in tokenize_list(self.entry[key]): if x.strip() == '': continue try: people.append(Name(x)) except: print(u'Error handling field "{0}" with value "{1}"'.format( key, x )) traceback.print_exc() if len(people) == 0: return u'' if short: result = _get_people_short(people) else: result = _get_people_long(people) if not result: result = self.entry[key] return remove_latex_commands(codecs.decode(result, 'latex'))
def __getitem__(self, key): if not key: return u'' key = key.lower() result = None short = False if key.endswith('_short'): short = True key = key[:-6] if key == 'keyword' or key == 'citekey': return self.entry.cite_key if key in Name.NAME_FIELDS: people = [] for x in tokenize_list(self.entry[key]): if x.strip() == '': continue try: people.append(Name(x)) except: print( u'Error handling field "{0}" with value "{1}"'.format( key, x)) traceback.print_exc() if len(people) == 0: return u'' if short: result = _get_people_short(people) else: result = _get_people_long(people) if not result: result = self.entry[key] return remove_latex_commands(codecs.decode(result, 'latex'))