def splitter(self, data_list: list[str], implicit_coments: list[list[str]]):
"""Split standardizing bib data list to library."""
_blocks = []
_blocks.extend([ImplicitComment(i[0]) for i in implicit_coments if i])
implicit_comment_blocks = []
explicit_comment_blocks = []
string_blocks = []
preamble_blocks = []
entry_blocks = []
# Initialize
data_list = "".join(data_list).splitlines(keepends=True)
data_list = [line for line in data_list if line.strip()]
line_index, len_data = 0, len(data_list)
while line_index < len_data:
line = data_list[line_index]
line_index += 1
if not (mch_block := self.regex_block_type.search(line)):
implicit_comment_blocks.append(ImplicitComment(line, line_index))
continue
block_type = mch_block.group(1)
if block_type == "comment":
block, line_index = self._splitter_comment(block_type, line, line_index, len_data, data_list)
if isinstance(block, Block):
explicit_comment_blocks.append(block)
elif isinstance(block, str):
implicit_comment_blocks.append(ImplicitComment(block, line_index - 1))
elif block_type == "string":
block, line_index = self._splitter_string(block_type, line, line_index, len_data, data_list)
if isinstance(block, Block):
string_blocks.append(block)
elif isinstance(block, str):
implicit_comment_blocks.append(ImplicitComment(block, line_index - 1))
elif block_type == "preamble":
block, line_index = self._splitter_preamble(block_type, line, line_index, len_data, data_list)
if isinstance(block, Block):
preamble_blocks.append(block)
elif isinstance(block, str):
implicit_comment_blocks.append(ImplicitComment(block, line_index - 1))
else:
block, line_index, temp = self._splitter_entry(block_type, line, line_index, len_data, data_list)
entry_blocks.append(block)
implicit_comment_blocks.extend(temp)
_blocks.extend(implicit_comment_blocks)
_blocks.extend(explicit_comment_blocks)
_blocks.extend(string_blocks)
_blocks.extend(preamble_blocks)
_blocks.extend(entry_blocks)
return Library(_blocks)