Source code for tablate.library.formatters.console.cell_string
import math
from typing import List, Optional
from tablate.library.formatters.console.ascii_styler import ascii_background_styler, \
ascii_text_styler, ascii_terminator
from tablate.library.formatters.console.concat_string import concat_string
from tablate.type.type_input import BaseColumnInput
from tablate.type.type_style import ColumnStyles
[docs]
def cell_string_single_line(string: str,
column_item: BaseColumnInput,
column_styles: ColumnStyles,
trunc_value: str = "...") -> str:
string = str(string)
string = string.split("\n")[0]
string = " ".join(string.split("\t"))
padding = column_item["padding"]
if hasattr(column_styles, "background_padding") and "background" in column_item \
and column_styles.background_padding is not None and column_item["background"] is not None:
padding = padding + column_styles.background_padding
string, white_space = concat_string(string=string,
width=column_item["width"],
padding=padding,
trunc_value=trunc_value)
if hasattr(column_styles, "background_padding") and "background" in column_item \
and column_styles.background_padding is not None and column_item["background"] is not None:
string = f"{' ' * column_styles.background_padding}{string}{' ' * column_styles.background_padding}"
return_string = ""
if column_item["text_color"] is not None or column_item["text_style"] is not None:
if len(string.strip()) > 0:
fore_space = len(string) - len(string.lstrip())
back_space = len(string) - len(string.rstrip())
string = (" " * fore_space) + ascii_text_styler(string=string.strip(), column_dict=column_item) + (
" " * back_space)
if column_item["text_align"] == "left":
return_string += string
return_string += " " * white_space
if column_item["text_align"] == "center":
if white_space % 2 != 0:
left_space = int(math.floor(white_space / 2))
right_space = int(math.floor(white_space / 2) + 1)
else:
left_space = int(white_space / 2)
right_space = int(white_space / 2)
return_string += " " * left_space
return_string += string
return_string += " " * right_space
if column_item["text_align"] == "right":
return_string += " " * white_space
return_string += string
if column_item["background"] is not None:
return_string = ascii_background_styler(string=return_string, column_dict=column_item)
padding = " " * column_item["padding"]
return_string = f"{padding}{return_string}{ascii_terminator()}{padding}"
return return_string
[docs]
def cell_string_multi_line(string: str,
column_item: BaseColumnInput,
column_styles: ColumnStyles,
max_lines: Optional[int] = None,
trunc_value: str = "...") -> List[str]:
return_string_array = []
string = str(string)
clean_string = " ".join(string.split("\t"))
initial_string_array = clean_string.split("\n")
reached_max_lines = False
for initial_string_item in initial_string_array:
word_string_array = initial_string_item.split(" ")
character_count = 0
current_line_array = []
for word_string_index, word_string_item in enumerate(word_string_array):
last_line = max_lines is not None and len(return_string_array) == max_lines - 1
character_count += len(word_string_item)
if (character_count + (column_item["padding"] * 2) < column_item["width"]) or (
last_line and character_count + (column_item["padding"] * 2) < column_item["width"] + len(
trunc_value)):
current_line_array.append(word_string_item)
else:
if last_line:
current_line_array.append(word_string_item)
current_line_string = " ".join(current_line_array)
return_string_array.append(cell_string_single_line(string=current_line_string,
column_item=column_item,
column_styles=column_styles,
trunc_value=trunc_value))
reached_max_lines = True
break
else:
current_line_string = " ".join(current_line_array)
return_string_array.append(cell_string_single_line(string=current_line_string,
column_item=column_item,
column_styles=column_styles,
trunc_value=trunc_value))
current_line_array = [word_string_item]
character_count = len(word_string_item)
character_count += 1
if reached_max_lines:
break
current_line_string = " ".join(current_line_array)
return_string_array.append(cell_string_single_line(string=current_line_string,
column_item=column_item,
column_styles=column_styles,
trunc_value=trunc_value))
return return_string_array