bib-optimizer 0.3.6__tar.gz → 0.4.0__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bib_optimizer
3
- Version: 0.3.6
3
+ Version: 0.4.0
4
4
  Summary: Clean and optimize bib file.
5
5
  Author-email: Ka Wa Yip <yipkawa@gmail.com>
6
6
  License: MIT License
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "bib_optimizer"
9
- version = "0.3.6"
9
+ version = "0.4.0"
10
10
  description = "Clean and optimize bib file."
11
11
  authors = [
12
12
  { name="Ka Wa Yip", email="yipkawa@gmail.com" },
@@ -40,7 +40,7 @@ dev = ["black", "bumpver", "isort", "mypy", "pytest"]
40
40
  bibopt = "bib_optimizer.__main__:main"
41
41
 
42
42
  [tool.bumpver]
43
- current_version = "0.3.6"
43
+ current_version = "0.4.0"
44
44
  version_pattern = "MAJOR.MINOR.PATCH"
45
45
  commit_message = "bump version {old_version} -> {new_version}"
46
46
  commit = true
@@ -0,0 +1,2 @@
1
+ # Version
2
+ __version__ = "0.4.0"
@@ -1,7 +1,7 @@
1
1
  """Version:
2
2
  --------
3
3
 
4
- - bib_optimizer v0.3.6
4
+ - bib_optimizer v0.4.0
5
5
  """
6
6
  import sys
7
7
  from bib_optimizer import helpers
@@ -0,0 +1,68 @@
1
+ import bibtexparser
2
+ import re
3
+ from bibtexparser.bwriter import BibTexWriter
4
+
5
+ def _augment_func(filecontent, all_keys, temp_citations):
6
+ for e in re.findall(r'\\cite[tp]?\{([^}]+)\}', filecontent):
7
+ for c in e.split(','):
8
+ c = c.strip()
9
+ if c not in temp_citations:
10
+ all_keys.append(c)
11
+ temp_citations.add(c)
12
+
13
+ return all_keys, temp_citations
14
+
15
+ def bib_opt(filename, input_bib, output_bib):
16
+ with open(filename, 'r', encoding='utf-8') as file:
17
+ lines = file.readlines()
18
+ filtered_lines = [line for line in lines if not line.lstrip().startswith('%')]
19
+ filecontent = ''.join(filtered_lines)
20
+
21
+ with open(input_bib, 'r', encoding='utf-8') as bibfile:
22
+ bib_database = bibtexparser.load(bibfile)
23
+
24
+ allowed_keys = []
25
+ all_keys = []
26
+ temp_citations = set()
27
+
28
+ split_pattern = r'(.*?)(\\input[^\n]*\n)(.*?)((?=\\input)|\Z)'
29
+ matches = re.findall(split_pattern, filecontent, flags=re.DOTALL)
30
+ split_results = [(before, after.strip()) for before, input_line, after, _ in matches]
31
+
32
+ input_pattern_extended = r'\\input\s*(?:{([^}]+)}|([^\s\n]+))'
33
+ matches = re.findall(input_pattern_extended, filecontent)
34
+ input_files_extended = [m[0] if m[0] else m[1] for m in matches]
35
+
36
+ if not split_results:
37
+ all_keys, temp_citations = _augment_func(filecontent, all_keys, temp_citations)
38
+ else:
39
+ for split_result, input_file_extended in zip(split_results, input_files_extended):
40
+ all_keys, temp_citations = _augment_func(split_result[0], all_keys, temp_citations)
41
+
42
+ if ".tex" not in input_file_extended:
43
+ input_file_extended += ".tex"
44
+
45
+ with open(input_file_extended, 'r', encoding='utf-8') as file:
46
+ _lines = file.readlines()
47
+
48
+ _filtered_lines = [line for line in _lines if not line.lstrip().startswith('%')]
49
+ _filecontent = ''.join(_filtered_lines)
50
+
51
+ all_keys, temp_citations = _augment_func(_filecontent, all_keys, temp_citations)
52
+ all_keys, temp_citations = _augment_func(split_result[1], all_keys, temp_citations)
53
+
54
+ for k in all_keys:
55
+ allowed_keys.append(k)
56
+
57
+ entry_dict = {entry.get('ID'): entry for entry in bib_database.entries}
58
+ filtered_entries = [entry_dict[key] for key in allowed_keys if key in entry_dict]
59
+
60
+ writer = BibTexWriter()
61
+ writer.indent = ' '
62
+ writer.order_entries_by = None
63
+
64
+ new_bib_database = bibtexparser.bibdatabase.BibDatabase()
65
+ new_bib_database.entries = filtered_entries
66
+
67
+ with open(output_bib, 'w', encoding='utf-8') as bibfile:
68
+ bibfile.write(writer.write(new_bib_database))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bib_optimizer
3
- Version: 0.3.6
3
+ Version: 0.4.0
4
4
  Summary: Clean and optimize bib file.
5
5
  Author-email: Ka Wa Yip <yipkawa@gmail.com>
6
6
  License: MIT License
@@ -5,6 +5,7 @@ pyproject.toml
5
5
  src/bib_optimizer/__init__.py
6
6
  src/bib_optimizer/__main__.py
7
7
  src/bib_optimizer/helpers.py
8
+ src/bib_optimizer/helpers_old.py
8
9
  src/bib_optimizer.egg-info/PKG-INFO
9
10
  src/bib_optimizer.egg-info/SOURCES.txt
10
11
  src/bib_optimizer.egg-info/dependency_links.txt
@@ -1,2 +0,0 @@
1
- # Version
2
- __version__ = "0.3.6"
File without changes
File without changes
File without changes
File without changes