BibTeX block splitting and parsing utilities.
This module provides classes for splitting BibTeX data into blocks based on entry markers and organizing them into structured dictionaries for further processing.
Classes:
| Name | Description |
SplitBibAccordingToMark | Splits BibTeX data into blocks based on entry type markers (e.g., @article, @book). |
ObtainMarkBlocksDict | Parses split blocks and organizes them into a dictionary structure with implicit comment handling. |
Classes
ObtainMarkBlocksDict
Source code in pybibtexer/bib/bibtexbase/standardize/do_on_bib.py
| def __init__(self) -> None:
pass
|
Functions
obtain_dict
obtain_dict(data_list, is_lower_mark=True)
Generate blocks.
Parameters:
| Name | Type | Description | Default |
data_list | list[str] | | required |
Returns:
| Type | Description |
tuple[dict[str, list[list[str]]], list[list[str]]] | tuple[dict[str, list[list[str]]], list[str]]: dict and implicit comments. |
Source code in pybibtexer/bib/bibtexbase/standardize/do_on_bib.py
| def obtain_dict(
self, data_list: list[str], is_lower_mark: bool = True
) -> tuple[dict[str, list[list[str]]], list[list[str]]]:
r"""Generate blocks.
Args:
data_list (list[str]): data list.
Returns:
tuple[dict[str, list[list[str]]], list[str]]: dict and implicit comments.
"""
regex_mark = re.compile(r"@([a-zA-Z]+){")
line_index, len_data, implicit_comment_list = 0, len(data_list), []
mark_patch_bib_list_dict: dict[str, list[list[str]]] = {}
while line_index < len_data:
line = data_list[line_index]
line_index += 1
if mch := regex_mark.match(line):
mark = mch.group(1)
temp = [line]
while line_index < len_data:
line = data_list[line_index]
if regex_mark.match(line):
break
temp.append(line)
line_index += 1
if is_lower_mark:
mark = mark.lower()
mark_patch_bib_list_dict.setdefault(mark, []).append(temp)
else:
implicit_comment_list.append([line, __class__.__name__])
return mark_patch_bib_list_dict, implicit_comment_list
|
Functions