-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbibtex_to_refer.py
153 lines (108 loc) · 4.22 KB
/
bibtex_to_refer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 31 14:56:33 2019
@author: bdatko
"""
# Parse agruments from command line
import argparse
import bibtexparser
def main():
# Purpose transform BibTex database into a bib refer database
parser = argparse.ArgumentParser()
# Set up required arguments
parser.add_argument('filename', type=str)
args = parser.parse_args()
# get the bib database
with open(args.filename, encoding='utf8') as bibtex_file:
bib_database = bibtexparser.load(bibtex_file)
# initialize the dict
# create the keys
keys = ['%A', '%B', '%C',
'%D', '%E', '%G',
'%I', '%J', '%K',
'%L', '%N', '%O',
'%P', '%Q', '%R',
'%S', '%T', '%V', '%X']
refer_entry = dict.fromkeys(keys)
# create the switch case for refer
def author():
refer_entry['%A'] = bib_entry.get('author')
def booktitle():
refer_entry['%B'] = bib_entry.get('title')
def address():
refer_entry['%C'] = bib_entry.get('address')
def year():
date = bib_entry.get('year')
if "month" in bib_entry:
date = bib_entry.get('month') + " " + date
refer_entry['%D'] = date
else:
refer_entry['%D'] = date
def editor():
refer_entry['%C'] = bib_entry.get('editor')
def publisher():
refer_entry['%I'] = bib_entry.get('publisher')
def journal():
refer_entry['%J'] = bib_entry.get('journal')
def keyword():
refer_entry['%K'] = bib_entry.get('ID')
def label():
refer_entry['%L'] = bib_entry.get('ENTRYTYPE')
def number():
refer_entry['%N'] = bib_entry.get('number')
def other():
refer_entry['%O'] = bib_entry.get('howpublished')
def pages():
refer_entry['%P'] = bib_entry.get('pages')
def note():
refer_entry['%Q'] = bib_entry.get('note')
def report_number():
refer_entry['%R'] = bib_entry.get('number')
def series():
refer_entry['%S'] = bib_entry.get('series')
def title():
refer_entry['%T'] = bib_entry.get('title')
def volume():
refer_entry['%V'] = bib_entry.get('volume')
def annote():
refer_entry['%X'] = bib_entry.get('annote')
# map the inputs to the function blocks
refer = {'author' : author,
'booktitle' : booktitle,
'address' : address,
'year' : year,
'editor' : editor,
'publisher' : publisher,
'journal' : journal,
'keyword' : keyword,
'label' : label,
'number' : number,
'pages' : pages,
'note' : note,
'howpublished' : other,
'report_number' : report_number,
'series' : series,
'title' : title,
'volume' : volume,
'annote' : annote,
}
# parse the bib entry into the new dict
# goal is to loop over the newly made dict and print the bib file
for bib_entry in bib_database.entries:
refer['keyword']()
refer['label']()
for field_type in bib_entry:
if field_type in refer:
refer[field_type]()
for key,value in refer_entry.items():
if value is not None:
if key == '%A':
value = value.split(sep='and ')
for author in value:
print("{0} {1}".format(key, author))
else:
print("{0} {1}".format(key, value))
print("\n")
refer_entry = dict.fromkeys(keys)
if __name__ == '__main__':
main()