1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #!/usr/bin/python
- import sys
- import bibtexparser
- import bibtexparser.bparser
- def remove_newlines(d):
- for key, value in d.items():
- d[key] = value.replace('\n', ' ')
- return d
- class AlignedWriter(bibtexparser.bwriter.BibTexWriter):
- def __init__(self):
- super(AlignedWriter, self).__init__()
- self.order_entries_by = None
- def _entry_to_bibtex(self, entry):
- bibtex = u'@{}{{{}'.format(entry['type'], entry['id'])
- for field in [i for i in sorted(entry) if i not in ['type', 'id']]:
- try:
- bibtex += u",\n {:<12}= {{{}}}".format(field, entry[field])
- except TypeError:
- raise TypeError("The field %s in entry %s must be a string" % (field, entry['id']))
- bibtex += u"\n}}\n{}".format(self.entry_separator)
- return bibtex.encode('UTF-8')
- def main():
- if len(sys.argv) < 2:
- sys.exit("Usage: clean.py file.bib")
- with open(sys.argv[1]) as f:
- parser = bibtexparser.bparser.BibTexParser()
- parser.customization = remove_newlines
- db = bibtexparser.loads(f.read(), parser)
- writer = AlignedWriter()
- print(bibtexparser.dumps(db, writer))
- if __name__ == '__main__':
- main()
|