Таблица: ширина колонки — по самой длинной фамилии +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:
|
def format_pairings(pairings_data: dict, tournament_name: str) -> str:
|
||||||
pairings = pairings_data['pairings']
|
pairings = pairings_data['pairings']
|
||||||
rnd = pairings_data['round']
|
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 = [
|
lines = [
|
||||||
f'*{_md_escape(tournament_name)}*',
|
f'*{_md_escape(tournament_name)}*',
|
||||||
f'📋 *Тур {rnd}* — пары',
|
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,
|
border,
|
||||||
]
|
]
|
||||||
|
|
||||||
board = 1
|
board = 1
|
||||||
for pairing in pairings:
|
for pi, pairing in enumerate(pairings):
|
||||||
if len(pairing) != 3:
|
if len(pairing) != 3:
|
||||||
continue
|
continue
|
||||||
p1, p2, color = pairing
|
p1, p2, color = pairing
|
||||||
|
|
||||||
if color == 'bye':
|
if color == 'bye':
|
||||||
lines.append(
|
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)}'
|
f'{_pad_col(str(p1.points), w_pts)}'
|
||||||
)
|
)
|
||||||
lines.append(
|
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)}'
|
f'{_pad_col("", w_pts)}'
|
||||||
)
|
)
|
||||||
board += 1
|
board += 1
|
||||||
|
|
@ -103,15 +117,23 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str:
|
||||||
white, black = p2, p1
|
white, black = p2, p1
|
||||||
|
|
||||||
lines.append(
|
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)}'
|
f'{_pad_col(f"{white.points:.1f}", w_pts)}'
|
||||||
)
|
)
|
||||||
lines.append(
|
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)}'
|
f'{_pad_col(f"{black.points:.1f}", w_pts)}'
|
||||||
)
|
)
|
||||||
board += 1
|
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('```')
|
lines.append('```')
|
||||||
|
|
||||||
source = pairings_data.get('source', 'algorithm')
|
source = pairings_data.get('source', 'algorithm')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue