You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.2 KiB

AUTOFILL_TPL = '\\autofill{FIELD}{INFO}'
def get_autofill_pattern(field):
return AUTOFILL_TPL.replace('FIELD', field)
def autofill(text, paper):
for field, info in get_autofill_info(paper):
print find_pattern(text, get_autofill_pattern(field))
print fill_pattern(get_autofill_pattern(field), info)
text = replace_pattern(text,
get_autofill_pattern(field),
info)
return text
def get_autofill_info(paper):
fields = paper.bibentry.fields
info = []
if 'year' in fields:
info.append(('YEAR', fields['year']))
if 'title' in fields:
info.append(('TITLE', fields['title']))
if 'abstract' in fields:
info.append(('ABSTRACT', fields['abstract']))
info.append(('AUTHOR', get_author_as_str(paper)))
return info
def fill_pattern(pattern, info):
return pattern.replace('INFO', info)
def find_pattern(text, pattern):
pattern = pattern.replace('INFO}', '')
start = text.find(pattern)
after = start + len(pattern)
info_length = text[after:].find('}')
end = start + len(pattern) + info_length + 1
return text[start:end]
def replace_pattern(text, pattern, info):
return text.replace(find_pattern(text, pattern),
fill_pattern(pattern, info))
##### ugly replace by proper #####
def get_author_as_str(paper):
persons = paper.bibentry.persons
authors = []
if 'author' in persons:
for author in persons['author']:
authors.append(format_author(author))
return concatenate_authors(authors)
def format_author(author):
first = author.first()
middle = author.middle()
last = author.last()
formatted = ''
if first:
formatted += first[0]
if middle:
formatted += ' ' + middle[0] + '.'
if last:
formatted += ' ' + last[0]
return formatted
def concatenate_authors(authors):
concatenated = ''
for a in range(len(authors)):
if len(authors) > 1 and a > 0:
if a == len(authors) - 1:
concatenated += ' and '
else:
concatenated += ', '
concatenated += authors[a]
return concatenated
#####