Таблица: ширина колонки — по самой длинной фамилии +3 пробела, разделители между парами
- w_name вычисляется динамически (max + 3, до 42) - Горизонтальная линия (───┼───┼───) между каждой парой
This commit is contained in:
parent
70ff9bfc4b
commit
6bb1d238aa
1 changed files with 30 additions and 8 deletions
|
|
@ -67,31 +67,45 @@ def _pad_col(s: str, width: int) -> str:
|
|||
def format_pairings(pairings_data: dict, tournament_name: str) -> str:
|
||||
pairings = pairings_data['pairings']
|
||||
rnd = pairings_data['round']
|
||||
w_name, w_pts = 28, 5
|
||||
border = '─┼─'.join('─' * w for w in [4, w_name, w_pts])
|
||||
|
||||
# Find the longest player name + 3 spaces padding
|
||||
max_name_w = 20
|
||||
for pairing in pairings:
|
||||
if len(pairing) == 3:
|
||||
for p in (pairing[0], pairing[1]):
|
||||
w = _display_width(p.name)
|
||||
if w > max_name_w:
|
||||
max_name_w = w
|
||||
max_name_w = min(max_name_w + 3, 42)
|
||||
|
||||
w_board, w_pts = 4, 5
|
||||
border = '─┼─'.join('─' * w for w in [w_board, max_name_w, w_pts])
|
||||
|
||||
lines = [
|
||||
f'*{_md_escape(tournament_name)}*',
|
||||
f'📋 *Тур {rnd}* — пары',
|
||||
'',
|
||||
'```',
|
||||
f'{_pad_col("#", 4)} │ {_pad_col("Игрок", w_name)} │ {_pad_col("О", w_pts)}',
|
||||
f'{_pad_col("#", w_board)} │ {_pad_col("Игрок", max_name_w)} │ '
|
||||
f'{_pad_col("О", w_pts)}',
|
||||
border,
|
||||
]
|
||||
|
||||
board = 1
|
||||
for pairing in pairings:
|
||||
for pi, pairing in enumerate(pairings):
|
||||
if len(pairing) != 3:
|
||||
continue
|
||||
p1, p2, color = pairing
|
||||
|
||||
if color == 'bye':
|
||||
lines.append(
|
||||
f'{_pad_col(str(board), 4)} │ {_pad_col(p1.name, w_name)} │ '
|
||||
f'{_pad_col(str(board), w_board)} │ '
|
||||
f'{_pad_col(p1.name, max_name_w)} │ '
|
||||
f'{_pad_col(str(p1.points), w_pts)}'
|
||||
)
|
||||
lines.append(
|
||||
f'{_pad_col("", 4)} │ {_pad_col("— BYE —", w_name)} │ '
|
||||
f'{_pad_col("", w_board)} │ '
|
||||
f'{_pad_col("— BYE —", max_name_w)} │ '
|
||||
f'{_pad_col("", w_pts)}'
|
||||
)
|
||||
board += 1
|
||||
|
|
@ -103,15 +117,23 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str:
|
|||
white, black = p2, p1
|
||||
|
||||
lines.append(
|
||||
f'{_pad_col(str(board), 4)} │ {_pad_col(white.name, w_name)} │ '
|
||||
f'{_pad_col(str(board), w_board)} │ '
|
||||
f'{_pad_col(white.name, max_name_w)} │ '
|
||||
f'{_pad_col(f"{white.points:.1f}", w_pts)}'
|
||||
)
|
||||
lines.append(
|
||||
f'{_pad_col("", 4)} │ {_pad_col(black.name, w_name)} │ '
|
||||
f'{_pad_col("", w_board)} │ '
|
||||
f'{_pad_col(black.name, max_name_w)} │ '
|
||||
f'{_pad_col(f"{black.points:.1f}", w_pts)}'
|
||||
)
|
||||
board += 1
|
||||
|
||||
# Separator between pairs
|
||||
if pi < len(pairings) - 1:
|
||||
next_p = pairings[pi + 1]
|
||||
if len(next_p) == 3 and next_p[2] != 'bye':
|
||||
lines.append(border)
|
||||
|
||||
lines.append('```')
|
||||
|
||||
source = pairings_data.get('source', 'algorithm')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue