Source code for tablate.library.formatters.console.row_line_divider

from typing import List

from tablate.library.ascii.chars.line_h import h_line
from tablate.library.ascii.chars.matrix_cross import cross_matrix
from tablate.type.primitives import FrameDivider
from tablate.type.type_input import BaseColumnInput


[docs] def row_line_divider(column_list_top: List[BaseColumnInput], column_list_bottom: List[BaseColumnInput], divider: FrameDivider) -> str: # todo: fix this! # are both the 'col_width' and the 'sum_width' needed ?? # (sum_width is used for if checks... col_width are used for iterative calculations..) return_string = "" upper_frame_sum_width = 0 upper_frame = [] for v_line_index in range(0, len(column_list_top)): upper_frame_sum_width += column_list_top[v_line_index]["width"] upper_frame.append({ "col_width": column_list_top[v_line_index]["width"], "sum_width": upper_frame_sum_width, "divider": column_list_top[v_line_index]["divider"] }) upper_frame.reverse() lower_frame_sum_width = 0 lower_frame = [] for v_line_index in range(0, len(column_list_bottom)): lower_frame_sum_width += column_list_bottom[v_line_index]["width"] lower_frame.append({ "col_width": column_list_bottom[v_line_index]["width"], "sum_width": lower_frame_sum_width, "divider": column_list_bottom[v_line_index]["divider"] }) lower_frame.reverse() current_v_line_index = len(column_list_top) + len(column_list_bottom) while current_v_line_index > 0: if len(upper_frame) > 0 and len(lower_frame) > 0: if upper_frame[-1]["sum_width"] > lower_frame[-1]["sum_width"]: return_string += f"{h_line[divider] * lower_frame[-1]['col_width']}{cross_matrix['blank'][divider][lower_frame[-1]['divider']]}" upper_frame[-1]["col_width"] = upper_frame[-1]["col_width"] - lower_frame[-1]["col_width"] - 1 lower_frame.pop() elif upper_frame[-1]["sum_width"] == lower_frame[-1]["sum_width"]: return_string += f"{h_line[divider] * lower_frame[-1]['col_width']}{cross_matrix[upper_frame[-1]['divider']][divider][lower_frame[-1]['divider']]}" upper_frame.pop() lower_frame.pop() elif upper_frame[-1]["sum_width"] < lower_frame[-1]["sum_width"]: return_string += f"{h_line[divider] * upper_frame[-1]['col_width']}{cross_matrix[upper_frame[-1]['divider']][divider]['blank']}" lower_frame[-1]["col_width"] = lower_frame[-1]["col_width"] - upper_frame[-1]["col_width"] - 1 upper_frame.pop() else: if len(upper_frame) > 0: return_string += f"{h_line[divider] * upper_frame[-1]['col_width']}{cross_matrix[upper_frame[-1]['divider']][divider]['blank']}" if upper_frame[-1]["col_width"] < 0: return_string = return_string[0:upper_frame[-1]["col_width"]] upper_frame.pop() if len(lower_frame) > 0: return_string += f"{h_line[divider] * lower_frame[-1]['col_width']}{cross_matrix['blank'][divider][lower_frame[-1]['divider']]}" if lower_frame[-1]["col_width"] < 0: return_string = return_string[0:lower_frame[-1]["col_width"]] lower_frame.pop() current_v_line_index -= 1 return return_string[0:-1]