43 lines
1.2 KiB
Python
Executable File
43 lines
1.2 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import re
|
|
import sys
|
|
import os
|
|
import copy
|
|
|
|
ISPIPE = re.compile(r'(?<!\\)\|')
|
|
|
|
def calc_colnums(rows):
|
|
colsizes = [0]
|
|
for row in rows:
|
|
for ind,cell in enumerate(row):
|
|
if (len(colsizes) -1) < ind:
|
|
colsizes.append(0)
|
|
cell_size = len(cell.strip())
|
|
if cell_size > colsizes[ind]:
|
|
colsizes[ind] = cell_size
|
|
return colsizes
|
|
|
|
def pad_cells_and_center(rows):
|
|
pad = 1
|
|
cells_to_pad = copy.deepcopy(rows)
|
|
colsizes = calc_colnums(rows)
|
|
for row_id,row in enumerate(cells_to_pad):
|
|
for col_ind,cell in enumerate(row):
|
|
cell_size = len(cell.strip())
|
|
numspaces = (colsizes[col_ind] - cell_size) + pad
|
|
if row_id == 1:
|
|
cells_to_pad[row_id][col_ind] = ' ' * pad + '-' * colsizes[col_ind] + ' ' * pad
|
|
continue
|
|
cells_to_pad[row_id][col_ind] = ' ' * pad + cell.strip() + ' '* numspaces
|
|
return(cells_to_pad)
|
|
|
|
if __name__ == "__main__":
|
|
table = []
|
|
for row_string in sys.stdin:
|
|
table.append(ISPIPE.split(row_string.strip())[1:-1])
|
|
table = pad_cells_and_center(table)
|
|
for row in ['|' + '|'.join(r) + '|' for r in table]:
|
|
print(row)
|
|
|