pyeasyphd 0.0.9__py3-none-any.whl → 0.1.1__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.

Files changed (74) hide show
  1. pyeasyphd/.python-version +1 -1
  2. pyeasyphd/main/__init__.py +0 -4
  3. pyeasyphd/main/basic_input.py +7 -63
  4. pyeasyphd/main/python_run_md.py +3 -3
  5. pyeasyphd/pyeasyphd.sublime-settings +1 -159
  6. pyeasyphd/tools/__init__.py +1 -16
  7. pyeasyphd/tools/generate/generate_from_bibs.py +54 -330
  8. pyeasyphd/tools/generate/generate_html.py +122 -0
  9. pyeasyphd/tools/generate/generate_library.py +188 -0
  10. pyeasyphd/tools/generate/generate_links.py +13 -6
  11. pyeasyphd/tools/py_run_bib_md_tex.py +11 -12
  12. pyeasyphd/tools/search/search_base.py +8 -5
  13. pyeasyphd/tools/search/search_core.py +4 -3
  14. pyeasyphd/tools/search/search_keywords.py +1 -1
  15. pyeasyphd/tools/search/search_writers.py +8 -5
  16. {pyeasyphd-0.0.9.dist-info → pyeasyphd-0.1.1.dist-info}/METADATA +3 -6
  17. pyeasyphd-0.1.1.dist-info/RECORD +27 -0
  18. pyeasyphd/bib/__init__.py +0 -1
  19. pyeasyphd/bib/bibtexbase/__init__.py +0 -7
  20. pyeasyphd/bib/bibtexbase/standardize/_base.py +0 -36
  21. pyeasyphd/bib/bibtexbase/standardize/default_data.py +0 -97
  22. pyeasyphd/bib/bibtexbase/standardize/do_on_bib.py +0 -54
  23. pyeasyphd/bib/bibtexbase/standardize/do_on_comment_block.py +0 -38
  24. pyeasyphd/bib/bibtexbase/standardize/do_on_entry_block.py +0 -310
  25. pyeasyphd/bib/bibtexbase/standardize/do_on_preamble_block.py +0 -35
  26. pyeasyphd/bib/bibtexbase/standardize/do_on_string_block.py +0 -34
  27. pyeasyphd/bib/bibtexbase/standardize_bib.py +0 -75
  28. pyeasyphd/bib/bibtexparser/__init__.py +0 -47
  29. pyeasyphd/bib/bibtexparser/bibtex_format.py +0 -87
  30. pyeasyphd/bib/bibtexparser/exceptions.py +0 -64
  31. pyeasyphd/bib/bibtexparser/library.py +0 -207
  32. pyeasyphd/bib/bibtexparser/middlewares/block/add.py +0 -94
  33. pyeasyphd/bib/bibtexparser/middlewares/block/authors.py +0 -22
  34. pyeasyphd/bib/bibtexparser/middlewares/block/doi_url.py +0 -62
  35. pyeasyphd/bib/bibtexparser/middlewares/block/entry_field_keys_normalize.py +0 -47
  36. pyeasyphd/bib/bibtexparser/middlewares/block/entry_field_keys_replace.py +0 -31
  37. pyeasyphd/bib/bibtexparser/middlewares/block/entry_field_values_normalize.py +0 -222
  38. pyeasyphd/bib/bibtexparser/middlewares/block/entry_fields_delete.py +0 -34
  39. pyeasyphd/bib/bibtexparser/middlewares/block/entry_fields_keep.py +0 -33
  40. pyeasyphd/bib/bibtexparser/middlewares/block/entry_fields_sort.py +0 -70
  41. pyeasyphd/bib/bibtexparser/middlewares/block/entry_types.py +0 -15
  42. pyeasyphd/bib/bibtexparser/middlewares/block/journal_booktitle.py +0 -113
  43. pyeasyphd/bib/bibtexparser/middlewares/block/month_year.py +0 -34
  44. pyeasyphd/bib/bibtexparser/middlewares/block/number_volume.py +0 -21
  45. pyeasyphd/bib/bibtexparser/middlewares/block/pages.py +0 -28
  46. pyeasyphd/bib/bibtexparser/middlewares/block/title.py +0 -20
  47. pyeasyphd/bib/bibtexparser/middlewares/library/generating_entrykeys.py +0 -98
  48. pyeasyphd/bib/bibtexparser/middlewares/library/keeping_blocks.py +0 -29
  49. pyeasyphd/bib/bibtexparser/middlewares/library/sorting_blocks.py +0 -124
  50. pyeasyphd/bib/bibtexparser/middlewares/middleware.py +0 -222
  51. pyeasyphd/bib/bibtexparser/middlewares/parsestack.py +0 -13
  52. pyeasyphd/bib/bibtexparser/middlewares/utils.py +0 -226
  53. pyeasyphd/bib/bibtexparser/middlewares_library_to_library.py +0 -414
  54. pyeasyphd/bib/bibtexparser/middlewares_library_to_str.py +0 -42
  55. pyeasyphd/bib/bibtexparser/middlewares_str_to_library.py +0 -35
  56. pyeasyphd/bib/bibtexparser/middlewares_str_to_str.py +0 -29
  57. pyeasyphd/bib/bibtexparser/model.py +0 -481
  58. pyeasyphd/bib/bibtexparser/splitter.py +0 -151
  59. pyeasyphd/bib/core/__init__.py +0 -18
  60. pyeasyphd/bib/core/convert_library_to_library.py +0 -31
  61. pyeasyphd/bib/core/convert_library_to_str.py +0 -199
  62. pyeasyphd/bib/core/convert_str_to_library.py +0 -34
  63. pyeasyphd/bib/core/convert_str_to_str.py +0 -27
  64. pyeasyphd/main/python_run_bib.py +0 -73
  65. pyeasyphd/main/python_writers.py +0 -212
  66. pyeasyphd/tools/compare/compare_bibs.py +0 -234
  67. pyeasyphd/tools/experiments_base.py +0 -203
  68. pyeasyphd/tools/format_save_bibs.py +0 -178
  69. pyeasyphd/tools/replace/replace.py +0 -81
  70. pyeasyphd/tools/spider/process_spider_bib.py +0 -247
  71. pyeasyphd/tools/spider/process_spider_url.py +0 -75
  72. pyeasyphd/tools/spider/process_spider_url_bib.py +0 -62
  73. pyeasyphd-0.0.9.dist-info/RECORD +0 -80
  74. {pyeasyphd-0.0.9.dist-info → pyeasyphd-0.1.1.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