pyeasyphd 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyeasyphd might be problematic. Click here for more details.
- pyeasyphd/.python-version +1 -1
- pyeasyphd/main/__init__.py +0 -4
- pyeasyphd/main/basic_input.py +7 -63
- pyeasyphd/main/python_run_md.py +3 -3
- pyeasyphd/main/python_run_tex.py +1 -1
- pyeasyphd/pyeasyphd.sublime-settings +2 -160
- pyeasyphd/tools/__init__.py +1 -16
- pyeasyphd/tools/generate/generate_from_bibs.py +54 -330
- pyeasyphd/tools/generate/generate_html.py +122 -0
- pyeasyphd/tools/generate/generate_library.py +188 -0
- pyeasyphd/tools/generate/generate_links.py +13 -4
- pyeasyphd/tools/py_run_bib_md_tex.py +12 -13
- pyeasyphd/tools/search/search_base.py +8 -5
- pyeasyphd/tools/search/search_core.py +4 -3
- pyeasyphd/tools/search/search_keywords.py +1 -1
- pyeasyphd/tools/search/search_writers.py +8 -5
- {pyeasyphd-0.1.0.dist-info → pyeasyphd-0.1.2.dist-info}/METADATA +3 -6
- pyeasyphd-0.1.2.dist-info/RECORD +27 -0
- pyeasyphd/bib/__init__.py +0 -1
- pyeasyphd/bib/bibtexbase/__init__.py +0 -7
- pyeasyphd/bib/bibtexbase/standardize/_base.py +0 -36
- pyeasyphd/bib/bibtexbase/standardize/default_data.py +0 -97
- pyeasyphd/bib/bibtexbase/standardize/do_on_bib.py +0 -54
- pyeasyphd/bib/bibtexbase/standardize/do_on_comment_block.py +0 -38
- pyeasyphd/bib/bibtexbase/standardize/do_on_entry_block.py +0 -310
- pyeasyphd/bib/bibtexbase/standardize/do_on_preamble_block.py +0 -35
- pyeasyphd/bib/bibtexbase/standardize/do_on_string_block.py +0 -34
- pyeasyphd/bib/bibtexbase/standardize_bib.py +0 -75
- pyeasyphd/bib/bibtexparser/__init__.py +0 -47
- pyeasyphd/bib/bibtexparser/bibtex_format.py +0 -87
- pyeasyphd/bib/bibtexparser/exceptions.py +0 -64
- pyeasyphd/bib/bibtexparser/library.py +0 -207
- pyeasyphd/bib/bibtexparser/middlewares/block/add.py +0 -94
- pyeasyphd/bib/bibtexparser/middlewares/block/authors.py +0 -22
- pyeasyphd/bib/bibtexparser/middlewares/block/doi_url.py +0 -62
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_field_keys_normalize.py +0 -47
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_field_keys_replace.py +0 -31
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_field_values_normalize.py +0 -222
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_fields_delete.py +0 -34
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_fields_keep.py +0 -33
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_fields_sort.py +0 -70
- pyeasyphd/bib/bibtexparser/middlewares/block/entry_types.py +0 -15
- pyeasyphd/bib/bibtexparser/middlewares/block/journal_booktitle.py +0 -113
- pyeasyphd/bib/bibtexparser/middlewares/block/month_year.py +0 -34
- pyeasyphd/bib/bibtexparser/middlewares/block/number_volume.py +0 -21
- pyeasyphd/bib/bibtexparser/middlewares/block/pages.py +0 -28
- pyeasyphd/bib/bibtexparser/middlewares/block/title.py +0 -20
- pyeasyphd/bib/bibtexparser/middlewares/library/generating_entrykeys.py +0 -98
- pyeasyphd/bib/bibtexparser/middlewares/library/keeping_blocks.py +0 -29
- pyeasyphd/bib/bibtexparser/middlewares/library/sorting_blocks.py +0 -124
- pyeasyphd/bib/bibtexparser/middlewares/middleware.py +0 -222
- pyeasyphd/bib/bibtexparser/middlewares/parsestack.py +0 -13
- pyeasyphd/bib/bibtexparser/middlewares/utils.py +0 -226
- pyeasyphd/bib/bibtexparser/middlewares_library_to_library.py +0 -414
- pyeasyphd/bib/bibtexparser/middlewares_library_to_str.py +0 -42
- pyeasyphd/bib/bibtexparser/middlewares_str_to_library.py +0 -35
- pyeasyphd/bib/bibtexparser/middlewares_str_to_str.py +0 -29
- pyeasyphd/bib/bibtexparser/model.py +0 -481
- pyeasyphd/bib/bibtexparser/splitter.py +0 -151
- pyeasyphd/bib/core/__init__.py +0 -18
- pyeasyphd/bib/core/convert_library_to_library.py +0 -31
- pyeasyphd/bib/core/convert_library_to_str.py +0 -199
- pyeasyphd/bib/core/convert_str_to_library.py +0 -34
- pyeasyphd/bib/core/convert_str_to_str.py +0 -27
- pyeasyphd/main/python_run_bib.py +0 -73
- pyeasyphd/main/python_writers.py +0 -212
- pyeasyphd/tools/compare/compare_bibs.py +0 -234
- pyeasyphd/tools/experiments_base.py +0 -203
- pyeasyphd/tools/format_save_bibs.py +0 -178
- pyeasyphd/tools/replace/replace.py +0 -81
- pyeasyphd/tools/spider/process_spider_bib.py +0 -247
- pyeasyphd/tools/spider/process_spider_url.py +0 -75
- pyeasyphd/tools/spider/process_spider_url_bib.py +0 -62
- pyeasyphd-0.1.0.dist-info/RECORD +0 -80
- {pyeasyphd-0.1.0.dist-info → pyeasyphd-0.1.2.dist-info}/WHEEL +0 -0
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
from typing import Any, Dict
|
|
3
|
-
|
|
4
|
-
from ...bibtexbase.standardize_bib import MARKS_FLAGS
|
|
5
|
-
from ..model import Entry
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def generate_cite_key_prefix(
|
|
9
|
-
entry: Entry,
|
|
10
|
-
full_abbr_article_dict: Dict[str, Any],
|
|
11
|
-
full_abbr_inproceedings_dict: Dict[str, Any],
|
|
12
|
-
full_names_in_json: str,
|
|
13
|
-
abbr_names_in_json: str,
|
|
14
|
-
) -> str:
|
|
15
|
-
prefix = generate_entry_abbr(entry.entry_type)
|
|
16
|
-
|
|
17
|
-
if prefix.upper() in ["C", "J"]:
|
|
18
|
-
prefix = generate_cite_key_prefix_c_j(
|
|
19
|
-
entry, full_abbr_article_dict, full_abbr_inproceedings_dict, full_names_in_json, abbr_names_in_json
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
elif prefix == "D":
|
|
23
|
-
if "url" in entry:
|
|
24
|
-
if re.search(r"arxiv\.org", entry["url"]):
|
|
25
|
-
prefix = "arXiv"
|
|
26
|
-
elif re.search(r"biorxiv\.org", entry["url"]):
|
|
27
|
-
prefix = "bioRxiv"
|
|
28
|
-
elif re.search(r"ssrn\.", entry["url"]):
|
|
29
|
-
prefix = "SSRN"
|
|
30
|
-
return prefix
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def generate_cite_key_prefix_c_j(
|
|
34
|
-
entry: Entry,
|
|
35
|
-
full_abbr_article_dict: Dict[str, Any],
|
|
36
|
-
full_abbr_inproceedings_dict: Dict[str, Any],
|
|
37
|
-
full_names_in_json: str,
|
|
38
|
-
abbr_names_in_json: str,
|
|
39
|
-
) -> str:
|
|
40
|
-
if entry.entry_type.lower() == "article":
|
|
41
|
-
full_abbr_dict = full_abbr_article_dict
|
|
42
|
-
field_key = "journal"
|
|
43
|
-
prefix = "J"
|
|
44
|
-
elif entry.entry_type.lower() == "inproceedings":
|
|
45
|
-
full_abbr_dict = full_abbr_inproceedings_dict
|
|
46
|
-
field_key = "booktitle"
|
|
47
|
-
prefix = "C"
|
|
48
|
-
else:
|
|
49
|
-
return ""
|
|
50
|
-
|
|
51
|
-
abbr_dict_dict = {}
|
|
52
|
-
for publisher in full_abbr_dict:
|
|
53
|
-
abbr_dict_dict.update({abbr: full_abbr_dict[publisher][abbr] for abbr in full_abbr_dict[publisher]})
|
|
54
|
-
|
|
55
|
-
field_content = entry[field_key] if field_key in entry else ""
|
|
56
|
-
|
|
57
|
-
# 2024 IEEE congress on evolutionary computation (CEC)
|
|
58
|
-
# 2024 IEEE congress on evolutionary computation
|
|
59
|
-
field_content = re.sub(r"\(.*\)", "", field_content).strip()
|
|
60
|
-
|
|
61
|
-
if not field_content:
|
|
62
|
-
return prefix
|
|
63
|
-
|
|
64
|
-
# match
|
|
65
|
-
abbr_list = []
|
|
66
|
-
for abbr in abbr_dict_dict:
|
|
67
|
-
full_name_list = abbr_dict_dict[abbr].get(full_names_in_json, [])
|
|
68
|
-
long_abbr_name_list = abbr_dict_dict[abbr].get(abbr_names_in_json, [])
|
|
69
|
-
|
|
70
|
-
# [full, long_abbr, abbr]
|
|
71
|
-
full_abbr = []
|
|
72
|
-
full_abbr.extend(full_name_list)
|
|
73
|
-
full_abbr.extend(long_abbr_name_list)
|
|
74
|
-
full_abbr.append(abbr)
|
|
75
|
-
|
|
76
|
-
# completely match
|
|
77
|
-
if re.match("^{" + rf'({"|".join(full_abbr)})' + "}$", "{" + field_content + "}", flags=re.I):
|
|
78
|
-
abbr_list.append(abbr)
|
|
79
|
-
|
|
80
|
-
# check
|
|
81
|
-
abbr_list = list(set(abbr_list))
|
|
82
|
-
if len(abbr_list) > 1:
|
|
83
|
-
print(f"Multiple match: {abbr_list} for {field_content}.")
|
|
84
|
-
elif len(abbr_list) == 1:
|
|
85
|
-
prefix = prefix + "_" + abbr_list[0]
|
|
86
|
-
return prefix
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def generate_entry_abbr(entry_type: str) -> str:
|
|
90
|
-
"""Generate abbr according to entry type.
|
|
91
|
-
|
|
92
|
-
zotero item type:
|
|
93
|
-
['Journal Article', 'Conference Paper', 'Book', 'Book Section', 'Document', 'Manuscript', 'Report', 'Thesis',
|
|
94
|
-
'Thesis']
|
|
95
|
-
zotero export:
|
|
96
|
-
['article', 'inproceedings','book', 'incollection', 'misc', 'unpublished', 'techreport', 'phdthesis',
|
|
97
|
-
'masterthesis']
|
|
98
|
-
"""
|
|
99
|
-
entries = {k[0]: k[2] for k in MARKS_FLAGS if k[1] == "entry"}
|
|
100
|
-
return entries.get(entry_type.lower(), "")
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
SKIP_WORD_IN_CITATION_KEY = [
|
|
104
|
-
"a",
|
|
105
|
-
"ab",
|
|
106
|
-
"aboard",
|
|
107
|
-
"about",
|
|
108
|
-
"above",
|
|
109
|
-
"across",
|
|
110
|
-
"after",
|
|
111
|
-
"against",
|
|
112
|
-
"al",
|
|
113
|
-
"along",
|
|
114
|
-
"amid",
|
|
115
|
-
"among",
|
|
116
|
-
"an",
|
|
117
|
-
"and",
|
|
118
|
-
"anti",
|
|
119
|
-
"around",
|
|
120
|
-
"as",
|
|
121
|
-
"at",
|
|
122
|
-
"before",
|
|
123
|
-
"behind",
|
|
124
|
-
"below",
|
|
125
|
-
"beneath",
|
|
126
|
-
"beside",
|
|
127
|
-
"besides",
|
|
128
|
-
"between",
|
|
129
|
-
"beyond",
|
|
130
|
-
"but",
|
|
131
|
-
"by",
|
|
132
|
-
"d",
|
|
133
|
-
"da",
|
|
134
|
-
"das",
|
|
135
|
-
"de",
|
|
136
|
-
"del",
|
|
137
|
-
"dell",
|
|
138
|
-
"dello",
|
|
139
|
-
"dei",
|
|
140
|
-
"degli",
|
|
141
|
-
"della",
|
|
142
|
-
"dell",
|
|
143
|
-
"delle",
|
|
144
|
-
"dem",
|
|
145
|
-
"den",
|
|
146
|
-
"der",
|
|
147
|
-
"des",
|
|
148
|
-
"despite",
|
|
149
|
-
"die",
|
|
150
|
-
"do",
|
|
151
|
-
"down",
|
|
152
|
-
"du",
|
|
153
|
-
"during",
|
|
154
|
-
"ein",
|
|
155
|
-
"eine",
|
|
156
|
-
"einem",
|
|
157
|
-
"einen",
|
|
158
|
-
"einer",
|
|
159
|
-
"eines",
|
|
160
|
-
"el",
|
|
161
|
-
"en",
|
|
162
|
-
"et",
|
|
163
|
-
"except",
|
|
164
|
-
"for",
|
|
165
|
-
"from",
|
|
166
|
-
"gli",
|
|
167
|
-
"i",
|
|
168
|
-
"il",
|
|
169
|
-
"in",
|
|
170
|
-
"inside",
|
|
171
|
-
"into",
|
|
172
|
-
"is",
|
|
173
|
-
"l",
|
|
174
|
-
"la",
|
|
175
|
-
"las",
|
|
176
|
-
"le",
|
|
177
|
-
"les",
|
|
178
|
-
"like",
|
|
179
|
-
"lo",
|
|
180
|
-
"los",
|
|
181
|
-
"near",
|
|
182
|
-
"nor",
|
|
183
|
-
"of",
|
|
184
|
-
"off",
|
|
185
|
-
"on",
|
|
186
|
-
"onto",
|
|
187
|
-
"or",
|
|
188
|
-
"over",
|
|
189
|
-
"past",
|
|
190
|
-
"per",
|
|
191
|
-
"plus",
|
|
192
|
-
"round",
|
|
193
|
-
"save",
|
|
194
|
-
"since",
|
|
195
|
-
"so",
|
|
196
|
-
"some",
|
|
197
|
-
"sur",
|
|
198
|
-
"than",
|
|
199
|
-
"the",
|
|
200
|
-
"through",
|
|
201
|
-
"to",
|
|
202
|
-
"toward",
|
|
203
|
-
"towards",
|
|
204
|
-
"un",
|
|
205
|
-
"una",
|
|
206
|
-
"unas",
|
|
207
|
-
"under",
|
|
208
|
-
"underneath",
|
|
209
|
-
"une",
|
|
210
|
-
"unlike",
|
|
211
|
-
"uno",
|
|
212
|
-
"unos",
|
|
213
|
-
"until",
|
|
214
|
-
"up",
|
|
215
|
-
"upon",
|
|
216
|
-
"versus",
|
|
217
|
-
"via",
|
|
218
|
-
"von",
|
|
219
|
-
"while",
|
|
220
|
-
"with",
|
|
221
|
-
"within",
|
|
222
|
-
"without",
|
|
223
|
-
"yet",
|
|
224
|
-
"zu",
|
|
225
|
-
"zum",
|
|
226
|
-
]
|
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
import copy
|
|
2
|
-
from typing import Any, Dict, Tuple
|
|
3
|
-
|
|
4
|
-
from .library import Library
|
|
5
|
-
from .middlewares.block.add import AddArchive, AddJournalLongAbbr
|
|
6
|
-
from .middlewares.block.authors import ConstrainNumberOfAuthors
|
|
7
|
-
from .middlewares.block.doi_url import (
|
|
8
|
-
ChangeDoiToUrlInEntry,
|
|
9
|
-
ChooseDoiOrUrlInEntry,
|
|
10
|
-
HttpsUrlInEntry,
|
|
11
|
-
SimplifyDoiInEntry,
|
|
12
|
-
)
|
|
13
|
-
from .middlewares.block.entry_field_keys_normalize import NormalizeEntryFieldKeys
|
|
14
|
-
from .middlewares.block.entry_field_keys_replace import ReplaceFieldKeyInEntry
|
|
15
|
-
from .middlewares.block.entry_field_values_normalize import (
|
|
16
|
-
AddUrlToFieldValueInEntry,
|
|
17
|
-
NormalizeFieldValuesInEntry,
|
|
18
|
-
)
|
|
19
|
-
from .middlewares.block.entry_fields_delete import DeleteFieldsInEntry
|
|
20
|
-
from .middlewares.block.entry_fields_keep import KeepFieldsInEntry
|
|
21
|
-
from .middlewares.block.entry_fields_sort import SortFieldsAlphabeticallyMiddleware
|
|
22
|
-
from .middlewares.block.entry_types import NormalizeEntryTypes
|
|
23
|
-
from .middlewares.block.journal_booktitle import (
|
|
24
|
-
AbbreviateJournalBooktitle,
|
|
25
|
-
DeleteRedundantInJournalBooktitle,
|
|
26
|
-
)
|
|
27
|
-
from .middlewares.block.month_year import ConvertStrMonthToInt, ExtractYear
|
|
28
|
-
from .middlewares.block.number_volume import ConvertStrNumberVolumeToInt
|
|
29
|
-
from .middlewares.block.pages import NormalizePagesInEntry
|
|
30
|
-
from .middlewares.block.title import NormalizeTitleInEntry
|
|
31
|
-
from .middlewares.library.generating_entrykeys import GenerateEntriesCiteKey
|
|
32
|
-
from .middlewares.library.keeping_blocks import KeepEntriesByCiteKey
|
|
33
|
-
from .middlewares.library.sorting_blocks import SortBlocksByTypeAndUserSortKeyMiddleware
|
|
34
|
-
|
|
35
|
-
keep_entry_list = [
|
|
36
|
-
"article",
|
|
37
|
-
"inproceedings",
|
|
38
|
-
"incollection",
|
|
39
|
-
"misc",
|
|
40
|
-
"book",
|
|
41
|
-
"phdthesis",
|
|
42
|
-
"mastersthesis",
|
|
43
|
-
"techreport",
|
|
44
|
-
]
|
|
45
|
-
common_field_list = ["author", "title", "year", "month", "doi", "url", "annotation"]
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def keep_for_abbr():
|
|
49
|
-
keep_field_list_list_temp = [
|
|
50
|
-
["journal", "pages", "volume", "number"], # 'article'
|
|
51
|
-
["booktitle", "pages"], # 'inproceedings'
|
|
52
|
-
["booktitle", "pages", "publisher"], # 'incollection'
|
|
53
|
-
["publisher", "howpublished", "pages"], # 'misc'
|
|
54
|
-
["publisher", "edition"], # 'book'
|
|
55
|
-
["type", "school", "address", "pages"], # 'phdthesis'
|
|
56
|
-
["type", "school", "address", "pages"], # 'mastersthesis'
|
|
57
|
-
["type", "institution", "address", "pages"], # 'techreport'
|
|
58
|
-
]
|
|
59
|
-
|
|
60
|
-
common_field_list_temp = []
|
|
61
|
-
common_field_list_temp.extend(common_field_list)
|
|
62
|
-
|
|
63
|
-
keep_field_list_list = []
|
|
64
|
-
for i in keep_field_list_list_temp:
|
|
65
|
-
i.extend(common_field_list_temp)
|
|
66
|
-
keep_field_list_list.append(i)
|
|
67
|
-
return keep_entry_list, keep_field_list_list
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def keep_for_zotero():
|
|
71
|
-
keep_field_list_list_temp = [
|
|
72
|
-
["journal", "pages", "volume", "number"], # 'article'
|
|
73
|
-
["booktitle", "pages"], # 'inproceedings'
|
|
74
|
-
["booktitle", "pages", "publisher"], # 'incollection'
|
|
75
|
-
["publisher", "pages"], # 'misc' (no howpublished)
|
|
76
|
-
["publisher", "edition"], # 'book'
|
|
77
|
-
["type", "school", "address", "pages"], # 'phdthesis'
|
|
78
|
-
["type", "school", "address", "pages"], # 'mastersthesis'
|
|
79
|
-
["type", "institution", "address", "pages"], # 'techreport'
|
|
80
|
-
]
|
|
81
|
-
|
|
82
|
-
common_field_list_temp = ["abstract"]
|
|
83
|
-
common_field_list_temp.extend(common_field_list)
|
|
84
|
-
|
|
85
|
-
keep_field_list_list = []
|
|
86
|
-
for i in keep_field_list_list_temp:
|
|
87
|
-
i.extend(common_field_list_temp)
|
|
88
|
-
keep_field_list_list.append(i)
|
|
89
|
-
return keep_entry_list, keep_field_list_list
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
class MiddlewaresLibraryToLibrary(object):
|
|
93
|
-
"""Middlewares for converting a library to a library.
|
|
94
|
-
|
|
95
|
-
Args:
|
|
96
|
-
options (dict): Options for the middlewares.
|
|
97
|
-
|
|
98
|
-
Attributes:
|
|
99
|
-
function_common_again (bool): Run common middlewares again. Default is True.
|
|
100
|
-
|
|
101
|
-
lower_entry_type (bool): Lower Entry type. Default is True.
|
|
102
|
-
lower_entry_field_key (bool): Lower Entry field keys. Default is True.
|
|
103
|
-
keep_entries_by_cite_keys (list): List of keys to keep entries in the order of cite keys. Default is [].
|
|
104
|
-
update_month (bool): Convert str month to int month. Default is True.
|
|
105
|
-
update_number_volume (bool): Update number and volume. Default is True.
|
|
106
|
-
update_pages (bool): Update pages. Default is True.
|
|
107
|
-
update_title (bool): Update title. Default is True.
|
|
108
|
-
sentence_title_case (bool): Sentence title case. Default is True.
|
|
109
|
-
generate_entry_cite_keys (bool): Generate Entry keys (cite keys). Default is False.
|
|
110
|
-
full_abbr_article_dict (dict): Full to abbreviation dictionary for article. Default is {}.
|
|
111
|
-
full_abbr_inproceedings_dict (dict): Full to abbreviation dictionary for inproceedings. Default is {}.
|
|
112
|
-
full_names_in_json (str): Full names in json format. Default is "".
|
|
113
|
-
abbr_names_in_json (str): Abbreviated names in json format. Default is "".
|
|
114
|
-
|
|
115
|
-
full_to_abbr_for_abbr (bool): Full to abbreviation for abbreviate. Default is True.
|
|
116
|
-
abbr_index_article_for_abbr (int): Index for abbreviation in article. Default is 1.
|
|
117
|
-
abbr_index_inproceedings_for_abbr (int): Index for abbreviation in inproceedings. Default is 2.
|
|
118
|
-
doi_or_url_for_abbr (bool): Keep only doi or url. Default is True.
|
|
119
|
-
doi_to_url_for_abbr (bool): Change doi to url and delete original doi. Default is True.
|
|
120
|
-
add_link_to_fields_for_abbr (Optional[list[str]] = None): Add link to fields. Default is None.
|
|
121
|
-
keep_fields_for_abbr (bool): Keep fields for abbreviate. Default is True.
|
|
122
|
-
keep_entry_list_for_abbr (list): Entry list for keep fields. Default is keep_for_abbr()[0].
|
|
123
|
-
keep_field_list_list_for_abbr (list): Field list list for keep fields. Default is keep_for_abbr()[1].
|
|
124
|
-
delete_fields_list_for_abbr (list): Delete fields list for abbreviate. Default is [].
|
|
125
|
-
replace_fields_for_abbr (bool): Replace fields for abbreviate. Default is True.
|
|
126
|
-
replace_old_field_list_for_abbr (list): Old field list for replace. Default is [["publisher"]].
|
|
127
|
-
replace_new_field_list_for_abbr (list): New field list for replace. Default is [["howpublished"]].
|
|
128
|
-
replace_entry_list_for_abbr (list): Entry list for replace. Default is ["misc"].
|
|
129
|
-
maximum_authors_for_abbr (int): Maximum number of authors. Default is 0.
|
|
130
|
-
|
|
131
|
-
doi_or_url_for_zotero (bool): Keep only doi or url. Default is True.
|
|
132
|
-
keep_fields_for_zotero (bool): Keep fields for zotero. Default is True.
|
|
133
|
-
keep_entry_list_for_zotero (list): Entry list for keep fields. Default is keep_for_zotero()[0].
|
|
134
|
-
keep_field_list_list_for_zotero (list): Field list list for keep fields. Default is keep_for_zotero()[1].
|
|
135
|
-
delete_fields_list_for_zotero (list): Delete fields list for zotero. Default is [].
|
|
136
|
-
delete_redundant_in_journal_booktitle (bool): Delete redundant parts in journal and booktitle. Default is True.
|
|
137
|
-
title_journal_booktitle_for_zotero (bool): Title journal and booktitle contents. Default is True.
|
|
138
|
-
add_archive_for_zotero (bool): Add field 'archive'. Default is True.
|
|
139
|
-
add_journal_abbr_for_zotero (bool): Add 'journal/booktitle abbreviation'. Default is True.
|
|
140
|
-
|
|
141
|
-
delete_fields_list_for_save (list): Delete fields list for save. Default is [].
|
|
142
|
-
|
|
143
|
-
is_sort_entry_fields (bool): Sort entry fields alphabetically. Default is True.
|
|
144
|
-
is_sort_blocks (bool): Sort entries by type and user sort key. Default is True.
|
|
145
|
-
sort_entries_by_cite_keys (list): List of keys to sort entries in the order of cite keys. Default is [].
|
|
146
|
-
sort_entries_by_field_keys (list): List of keys to sort entries in the order of field keys. Default is
|
|
147
|
-
["year", "volume", "number", "month", "pages"].
|
|
148
|
-
sort_entries_by_field_keys_reverse (bool): Reverse the sorting of the field keys. Default is True.
|
|
149
|
-
|
|
150
|
-
"""
|
|
151
|
-
|
|
152
|
-
def __init__(self, options: Dict[str, Any]):
|
|
153
|
-
self.function_common_again = options.get("function_common_again", True)
|
|
154
|
-
self.function_common_again_abbr = options.get("function_common_again_abbr", True)
|
|
155
|
-
self.function_common_again_zotero = options.get("function_common_again_zotero", True)
|
|
156
|
-
self.function_common_again_save = options.get("function_common_again_save", True)
|
|
157
|
-
self._initialize_function_sort(options)
|
|
158
|
-
|
|
159
|
-
self._initialize_function_common(options)
|
|
160
|
-
self._initialize_function_abbr(options)
|
|
161
|
-
self._initialize_function_zotero(options)
|
|
162
|
-
self._initialize_function_save(options)
|
|
163
|
-
|
|
164
|
-
def functions(self, library: Library) -> Tuple[Library, Library, Library]:
|
|
165
|
-
if self.function_common_again:
|
|
166
|
-
library = self._function_common(library)
|
|
167
|
-
|
|
168
|
-
abbr_library = self._function_abbr(copy.deepcopy(library))
|
|
169
|
-
zotero_library = self._function_zotero(copy.deepcopy(library))
|
|
170
|
-
save_library = self._function_save(copy.deepcopy(library))
|
|
171
|
-
return abbr_library, zotero_library, save_library
|
|
172
|
-
|
|
173
|
-
def function_abbr(self, library: Library) -> Library:
|
|
174
|
-
if self.function_common_again_abbr:
|
|
175
|
-
library = self._function_common(library)
|
|
176
|
-
return self._function_abbr(library)
|
|
177
|
-
|
|
178
|
-
def function_zotero(self, library: Library) -> Library:
|
|
179
|
-
if self.function_common_again_zotero:
|
|
180
|
-
library = self._function_common(library)
|
|
181
|
-
return self._function_zotero(library)
|
|
182
|
-
|
|
183
|
-
def function_save(self, library: Library) -> Library:
|
|
184
|
-
if self.function_common_again_save:
|
|
185
|
-
library = self._function_common(library)
|
|
186
|
-
return self._function_save(library)
|
|
187
|
-
|
|
188
|
-
def _initialize_function_common(self, options: Dict[str, Any]) -> None:
|
|
189
|
-
self.lower_entry_type = options.get("lower_entry_type", True)
|
|
190
|
-
self.lower_entry_field_key = options.get("lower_entry_field_key", True)
|
|
191
|
-
self.keep_entries_by_cite_keys = options.get("keep_entries_by_cite_keys", [])
|
|
192
|
-
self.update_month_year = options.get("update_month_year", True)
|
|
193
|
-
self.update_number_volume = options.get("update_number_volume", True)
|
|
194
|
-
self.update_pages = options.get("update_pages", True)
|
|
195
|
-
self.update_title = options.get("update_title", True)
|
|
196
|
-
self.sentence_title_case = options.get("sentence_title_case", True)
|
|
197
|
-
|
|
198
|
-
self.generate_entry_cite_keys = options.get("generate_entry_cite_keys", False)
|
|
199
|
-
self.full_abbr_article_dict = options.get("full_abbr_article_dict", {})
|
|
200
|
-
self.full_abbr_inproceedings_dict = options.get("full_abbr_inproceedings_dict", {})
|
|
201
|
-
self.full_names_in_json = options.get("full_names_in_json", "")
|
|
202
|
-
self.abbr_names_in_json = options.get("abbr_names_in_json", "")
|
|
203
|
-
|
|
204
|
-
def _function_common(self, library: Library) -> Library:
|
|
205
|
-
# Lower Entry types
|
|
206
|
-
if self.lower_entry_type:
|
|
207
|
-
library = NormalizeEntryTypes().transform(library)
|
|
208
|
-
|
|
209
|
-
# Lower Entry Field keys
|
|
210
|
-
if self.lower_entry_field_key:
|
|
211
|
-
library = NormalizeEntryFieldKeys().transform(library)
|
|
212
|
-
|
|
213
|
-
# Keep entries according to cite key
|
|
214
|
-
if self.keep_entries_by_cite_keys:
|
|
215
|
-
library = KeepEntriesByCiteKey(self.keep_entries_by_cite_keys).transform(library)
|
|
216
|
-
|
|
217
|
-
# Convert str month to int month ("Feb" to "2")
|
|
218
|
-
if self.update_month_year:
|
|
219
|
-
library = ConvertStrMonthToInt().transform(library)
|
|
220
|
-
library = ExtractYear().transform(library)
|
|
221
|
-
|
|
222
|
-
# Update number and volume
|
|
223
|
-
if self.update_number_volume:
|
|
224
|
-
library = ConvertStrNumberVolumeToInt().transform(library)
|
|
225
|
-
|
|
226
|
-
# Update pages
|
|
227
|
-
if self.update_pages:
|
|
228
|
-
library = NormalizePagesInEntry().transform(library)
|
|
229
|
-
|
|
230
|
-
# Update doi
|
|
231
|
-
library = SimplifyDoiInEntry().transform(library)
|
|
232
|
-
|
|
233
|
-
# Update url
|
|
234
|
-
library = HttpsUrlInEntry().transform(library)
|
|
235
|
-
|
|
236
|
-
# Update title (by deleting \href{}{})
|
|
237
|
-
if self.update_title:
|
|
238
|
-
library = NormalizeTitleInEntry().transform(library)
|
|
239
|
-
|
|
240
|
-
# Must set before self.add_link_to_fields_for_abbr
|
|
241
|
-
if self.sentence_title_case:
|
|
242
|
-
library = NormalizeFieldValuesInEntry("title", "sentence").transform(library)
|
|
243
|
-
|
|
244
|
-
# Generate Entry keys (cite keys)
|
|
245
|
-
if self.generate_entry_cite_keys:
|
|
246
|
-
library = GenerateEntriesCiteKey(
|
|
247
|
-
self.full_abbr_article_dict,
|
|
248
|
-
self.full_abbr_inproceedings_dict,
|
|
249
|
-
self.full_names_in_json,
|
|
250
|
-
self.abbr_names_in_json,
|
|
251
|
-
).transform(library)
|
|
252
|
-
return library
|
|
253
|
-
|
|
254
|
-
def _initialize_function_abbr(self, options: Dict[str, Any]) -> None:
|
|
255
|
-
self.full_to_abbr_for_abbr = options.get("full_to_abbr_for_abbr", True)
|
|
256
|
-
self.abbr_index_article_for_abbr = options.get("abbr_index_article_for_abbr", 1) # 0, 1, 2
|
|
257
|
-
self.abbr_index_inproceedings_for_abbr = options.get("abbr_index_inproceedings_for_abbr", 2) # 0, 1, 2
|
|
258
|
-
|
|
259
|
-
self.doi_or_url_for_abbr = options.get("doi_or_url_for_abbr", True) # keep only doi or url
|
|
260
|
-
self.doi_to_url_for_abbr = options.get("doi_to_url_for_abbr", True) # change (https://doi.org/xxx) to doi
|
|
261
|
-
self.add_link_to_fields_for_abbr = options.get("add_link_to_fields_for_abbr", None) # add link to fields
|
|
262
|
-
|
|
263
|
-
self.keep_fields_for_abbr = options.get("keep_fields_for_abbr", True)
|
|
264
|
-
self.keep_entry_list_for_abbr = options.get("keep_entry_list_for_abbr", keep_for_abbr()[0])
|
|
265
|
-
self.keep_field_list_list_for_abbr = options.get("keep_field_list_list_for_abbr", keep_for_abbr()[1])
|
|
266
|
-
|
|
267
|
-
self.delete_fields_list_for_abbr = options.get("delete_fields_list_for_abbr", [])
|
|
268
|
-
|
|
269
|
-
self.replace_fields_for_abbr = options.get("replace_fields_for_abbr", True)
|
|
270
|
-
self.replace_old_field_list_for_abbr = options.get("replace_old_field_list_for_abbr", [["publisher"]])
|
|
271
|
-
self.replace_new_field_list_for_abbr = options.get("replace_new_field_list_for_abbr", [["howpublished"]])
|
|
272
|
-
self.replace_entry_list_for_abbr = options.get("replace_entry_list_for_abbr", ["misc"])
|
|
273
|
-
|
|
274
|
-
self.maximum_authors_for_abbr = options.get("maximum_authors_for_abbr", 0)
|
|
275
|
-
|
|
276
|
-
def _function_abbr(self, library: Library) -> Library:
|
|
277
|
-
# abbreviate
|
|
278
|
-
if self.full_to_abbr_for_abbr:
|
|
279
|
-
library = AbbreviateJournalBooktitle(
|
|
280
|
-
self.full_abbr_article_dict,
|
|
281
|
-
self.full_abbr_inproceedings_dict,
|
|
282
|
-
self.abbr_index_article_for_abbr,
|
|
283
|
-
self.abbr_index_inproceedings_for_abbr,
|
|
284
|
-
self.full_names_in_json,
|
|
285
|
-
self.abbr_names_in_json,
|
|
286
|
-
).transform(library)
|
|
287
|
-
|
|
288
|
-
# Just keep doi or url (doi > url)
|
|
289
|
-
if self.doi_or_url_for_abbr:
|
|
290
|
-
library = ChooseDoiOrUrlInEntry().transform(library)
|
|
291
|
-
|
|
292
|
-
# Change doi to url and delete original doi
|
|
293
|
-
if self.doi_to_url_for_abbr:
|
|
294
|
-
library = ChangeDoiToUrlInEntry().transform(library)
|
|
295
|
-
|
|
296
|
-
# Add link to field content
|
|
297
|
-
if self.add_link_to_fields_for_abbr is not None:
|
|
298
|
-
for field in self.add_link_to_fields_for_abbr:
|
|
299
|
-
library = AddUrlToFieldValueInEntry(field).transform(library)
|
|
300
|
-
|
|
301
|
-
# Must set after self.add_link_to_title_for_abbr
|
|
302
|
-
if self.keep_fields_for_abbr:
|
|
303
|
-
for i, j in zip(self.keep_entry_list_for_abbr, self.keep_field_list_list_for_abbr):
|
|
304
|
-
library = KeepFieldsInEntry(i, j).transform(library)
|
|
305
|
-
|
|
306
|
-
# Delete some fields for all entrys
|
|
307
|
-
if self.delete_fields_list_for_abbr:
|
|
308
|
-
library = DeleteFieldsInEntry(self.delete_fields_list_for_abbr).transform(library)
|
|
309
|
-
|
|
310
|
-
# Replace some fields for all entrys
|
|
311
|
-
if self.replace_fields_for_abbr:
|
|
312
|
-
for entry in self.replace_entry_list_for_abbr:
|
|
313
|
-
for old, new in zip(self.replace_old_field_list_for_abbr, self.replace_new_field_list_for_abbr):
|
|
314
|
-
library = ReplaceFieldKeyInEntry(entry, old, new).transform(library)
|
|
315
|
-
|
|
316
|
-
# Constrain the number of authors
|
|
317
|
-
if self.maximum_authors_for_abbr:
|
|
318
|
-
library = ConstrainNumberOfAuthors(self.maximum_authors_for_abbr).transform(library)
|
|
319
|
-
|
|
320
|
-
library = self._function_sort(library)
|
|
321
|
-
return library
|
|
322
|
-
|
|
323
|
-
def _initialize_function_zotero(self, options: Dict[str, Any]) -> None:
|
|
324
|
-
self.doi_or_url_for_zotero = options.get("doi_or_url_for_zotero", True) # keep only doi or url
|
|
325
|
-
|
|
326
|
-
self.keep_fields_for_zotero = options.get("keep_fields_for_zotero", True)
|
|
327
|
-
self.keep_entry_list_for_zotero = options.get("keep_entry_list_for_zotero", keep_for_zotero()[0])
|
|
328
|
-
self.keep_field_list_list_for_zotero = options.get("keep_field_list_list_for_zotero", keep_for_zotero()[1])
|
|
329
|
-
|
|
330
|
-
self.delete_fields_list_for_zotero = options.get("delete_fields_list_for_zotero", [])
|
|
331
|
-
|
|
332
|
-
self.delete_redundant_in_journal_booktitle = options.get("delete_redundant_in_journal_booktitle", True)
|
|
333
|
-
|
|
334
|
-
self.title_journal_booktitle_for_zotero = options.get("title_journal_booktitle_for_zotero", True)
|
|
335
|
-
|
|
336
|
-
self.add_archive_for_zotero = options.get("add_archive_for_zotero", True)
|
|
337
|
-
self.add_journal_abbr_for_zotero = options.get("add_journal_abbr_for_zotero", True)
|
|
338
|
-
|
|
339
|
-
def _function_zotero(self, library: Library) -> Library:
|
|
340
|
-
# Just keep doi or url (doi > url)
|
|
341
|
-
if self.doi_or_url_for_zotero:
|
|
342
|
-
library = ChooseDoiOrUrlInEntry().transform(library)
|
|
343
|
-
|
|
344
|
-
# Must set after self.add_link_to_title_for_abbr
|
|
345
|
-
if self.keep_fields_for_zotero:
|
|
346
|
-
for i, j in zip(self.keep_entry_list_for_zotero, self.keep_field_list_list_for_zotero):
|
|
347
|
-
library = KeepFieldsInEntry(i, j).transform(library)
|
|
348
|
-
|
|
349
|
-
# Delete some fields for all entrys
|
|
350
|
-
if self.delete_fields_list_for_zotero:
|
|
351
|
-
library = DeleteFieldsInEntry(self.delete_fields_list_for_zotero).transform(library)
|
|
352
|
-
|
|
353
|
-
# Delete redundant parts in journal and booktitle such as `CEC`
|
|
354
|
-
if self.delete_redundant_in_journal_booktitle:
|
|
355
|
-
library = DeleteRedundantInJournalBooktitle().transform(library)
|
|
356
|
-
|
|
357
|
-
# Title `journal` and `booktitle` contents
|
|
358
|
-
if self.title_journal_booktitle_for_zotero:
|
|
359
|
-
library = NormalizeFieldValuesInEntry("journal", "title").transform(library)
|
|
360
|
-
library = NormalizeFieldValuesInEntry("booktitle", "title").transform(library)
|
|
361
|
-
|
|
362
|
-
# Add field 'archive'
|
|
363
|
-
if self.add_archive_for_zotero:
|
|
364
|
-
library = AddArchive(
|
|
365
|
-
self.full_abbr_article_dict,
|
|
366
|
-
self.full_abbr_inproceedings_dict,
|
|
367
|
-
self.full_names_in_json,
|
|
368
|
-
self.abbr_names_in_json,
|
|
369
|
-
).transform(library)
|
|
370
|
-
|
|
371
|
-
# Add field 'journal abbreviation'
|
|
372
|
-
if self.add_journal_abbr_for_zotero:
|
|
373
|
-
library = AddJournalLongAbbr(
|
|
374
|
-
self.full_abbr_article_dict,
|
|
375
|
-
self.full_names_in_json,
|
|
376
|
-
self.abbr_names_in_json,
|
|
377
|
-
).transform(library)
|
|
378
|
-
|
|
379
|
-
library = self._function_sort(library)
|
|
380
|
-
return library
|
|
381
|
-
|
|
382
|
-
def _initialize_function_save(self, options: Dict[str, Any]) -> None:
|
|
383
|
-
self.delete_fields_list_for_save = options.get("delete_fields_list_for_save", [])
|
|
384
|
-
|
|
385
|
-
def _function_save(self, library: Library) -> Library:
|
|
386
|
-
# Delete some fields for all entrys
|
|
387
|
-
if self.delete_fields_list_for_save:
|
|
388
|
-
library = DeleteFieldsInEntry(self.delete_fields_list_for_save).transform(library)
|
|
389
|
-
|
|
390
|
-
library = self._function_sort(library)
|
|
391
|
-
return library
|
|
392
|
-
|
|
393
|
-
def _initialize_function_sort(self, options: Dict[str, Any]) -> None:
|
|
394
|
-
self.is_sort_entry_fields = options.get("is_sort_entry_fields", False)
|
|
395
|
-
self.is_sort_blocks = options.get("is_sort_blocks", False)
|
|
396
|
-
self.sort_entries_by_cite_keys = options.get("sort_entries_by_cite_keys", [])
|
|
397
|
-
self.sort_entries_by_field_keys = options.get(
|
|
398
|
-
"sort_entries_by_field_keys", ["year", "volume", "number", "month", "pages"]
|
|
399
|
-
)
|
|
400
|
-
self.sort_entries_by_field_keys_reverse = options.get("sort_entries_by_field_keys_reverse", False)
|
|
401
|
-
|
|
402
|
-
def _function_sort(self, library: Library) -> Library:
|
|
403
|
-
# Sort fields alphabetically
|
|
404
|
-
if self.is_sort_entry_fields:
|
|
405
|
-
library = SortFieldsAlphabeticallyMiddleware().transform(library)
|
|
406
|
-
|
|
407
|
-
# Sort blocks by type and user sort key
|
|
408
|
-
if self.is_sort_blocks:
|
|
409
|
-
library = SortBlocksByTypeAndUserSortKeyMiddleware(
|
|
410
|
-
self.sort_entries_by_cite_keys,
|
|
411
|
-
self.sort_entries_by_field_keys,
|
|
412
|
-
self.sort_entries_by_field_keys_reverse,
|
|
413
|
-
).transform(library)
|
|
414
|
-
return library
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict
|
|
2
|
-
|
|
3
|
-
from .middlewares.block.entry_fields_sort import SortFieldsAlphabeticallyMiddleware
|
|
4
|
-
from .middlewares.library.sorting_blocks import SortBlocksByTypeAndUserSortKeyMiddleware
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class MiddlewaresLibraryToStr(object):
|
|
8
|
-
"""Middlewares for converting a library to a string.
|
|
9
|
-
|
|
10
|
-
Args:
|
|
11
|
-
options (dict): Options for the middlewares.
|
|
12
|
-
|
|
13
|
-
Attributes:
|
|
14
|
-
is_sort_entry_fields (bool): Sort entry fields alphabetically. Default is True.
|
|
15
|
-
is_sort_blocks (bool): Sort entries by type and user sort key. Default is True.
|
|
16
|
-
sort_entries_by_cite_keys (list): List of keys to sort entries in the order of cite keys. Default is [].
|
|
17
|
-
sort_entries_by_field_keys (list): List of keys to sort entries in the order of field keys. Default is
|
|
18
|
-
["year", "volume", "number", "month", "pages"].
|
|
19
|
-
sort_entries_by_field_keys_reverse (bool): Reverse the sorting of the field keys. Default is True.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
def __init__(self, options: Dict[str, Any]):
|
|
23
|
-
self.is_sort_entry_fields = options.get("is_sort_entry_fields", True)
|
|
24
|
-
self.is_sort_blocks = options.get("is_sort_blocks", True)
|
|
25
|
-
self.sort_entries_by_cite_keys = options.get("sort_entries_by_cite_keys", [])
|
|
26
|
-
self.sort_entries_by_field_keys = options.get(
|
|
27
|
-
"sort_entries_by_field_keys", ["year", "volume", "number", "month", "pages"]
|
|
28
|
-
)
|
|
29
|
-
self.sort_entries_by_field_keys_reverse = options.get("sort_entries_by_field_keys_reverse", True)
|
|
30
|
-
|
|
31
|
-
def functions(self, library):
|
|
32
|
-
# Sort fields alphabetically
|
|
33
|
-
if self.is_sort_entry_fields:
|
|
34
|
-
library = SortFieldsAlphabeticallyMiddleware().transform(library)
|
|
35
|
-
|
|
36
|
-
# Sort blocks by type and user sort key
|
|
37
|
-
if self.is_sort_blocks:
|
|
38
|
-
library = SortBlocksByTypeAndUserSortKeyMiddleware(
|
|
39
|
-
self.sort_entries_by_cite_keys, self.sort_entries_by_field_keys, self.sort_entries_by_field_keys_reverse
|
|
40
|
-
).transform(library)
|
|
41
|
-
|
|
42
|
-
return library
|