Заменил box-drawing юникод на ASCII (│→|, ─→-, ┼→+, …→...) — гарантированное выравнивание на всех платформах
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 8s

This commit is contained in:
vrubel 2026-06-15 17:44:38 +00:00
parent bc6e57b91d
commit 14d5a13afb

View file

@ -64,11 +64,11 @@ def _pad_col(s: str, width: int) -> str:
w = 0 w = 0
for ch in s: for ch in s:
cw = 2 if _display_width(ch) == 2 else 1 cw = 2 if _display_width(ch) == 2 else 1
if w + cw + 1 > width: # +1 for "…" if w + cw + 3 > width: # +3 for "..."
break break
result.append(ch) result.append(ch)
w += cw w += cw
truncated = ''.join(result) + '' truncated = ''.join(result) + '...'
pad_to = width - _display_width(truncated) pad_to = width - _display_width(truncated)
return truncated + ' ' * max(0, pad_to) return truncated + ' ' * max(0, pad_to)
return s + ' ' * (width - cur) return s + ' ' * (width - cur)
@ -79,9 +79,9 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str:
rnd = pairings_data['round'] rnd = pairings_data['round']
w_board, w_name, w_pts = 2, 17, 4 w_board, w_name, w_pts = 2, 17, 4
border = ''.join('' * w for w in [w_board, w_name, w_pts]) border = '+'.join('-' * w for w in [w_board, w_name, w_pts])
header = f'{_pad_col("#", w_board)}{_pad_col("Игрок", w_name)}{_pad_col("О", w_pts)}' header = f'{_pad_col("#", w_board)}|{_pad_col("Игрок", w_name)}|{_pad_col("О", w_pts)}'
table_header = f'```\n{header}\n{border}\n' table_header = f'```\n{header}\n{border}\n'
source = pairings_data.get('source', 'algorithm') source = pairings_data.get('source', 'algorithm')
@ -107,13 +107,13 @@ def _build_table_rows(pairings: list, w_board: int, w_name: int, w_pts: int,
if color == 'bye': if color == 'bye':
rows.append( rows.append(
f'{_pad_col(str(board), w_board)}' f'{_pad_col(str(board), w_board)}|'
f'{_pad_col(p1.name, w_name)}' f'{_pad_col(p1.name, w_name)}|'
f'{_pad_col(f"{p1.points:.1f}", w_pts)}' f'{_pad_col(f"{p1.points:.1f}", w_pts)}'
) )
rows.append( rows.append(
f'{_pad_col("", w_board)}' f'{_pad_col("", w_board)}|'
f'{_pad_col("— BYE —", w_name)}' f'{_pad_col("— BYE —", w_name)}|'
f'{_pad_col("", w_pts)}' f'{_pad_col("", w_pts)}'
) )
board += 1 board += 1
@ -127,13 +127,13 @@ def _build_table_rows(pairings: list, w_board: int, w_name: int, w_pts: int,
white, black = p2, p1 white, black = p2, p1
rows.append( rows.append(
f'{_pad_col(str(board), w_board)}' f'{_pad_col(str(board), w_board)}|'
f'{_pad_col(white.name, w_name)}' f'{_pad_col(white.name, w_name)}|'
f'{_pad_col(f"{white.points:.1f}", w_pts)}' f'{_pad_col(f"{white.points:.1f}", w_pts)}'
) )
rows.append( rows.append(
f'{_pad_col("", w_board)}' f'{_pad_col("", w_board)}|'
f'{_pad_col(black.name, w_name)}' f'{_pad_col(black.name, w_name)}|'
f'{_pad_col(f"{black.points:.1f}", w_pts)}' f'{_pad_col(f"{black.points:.1f}", w_pts)}'
) )
board += 1 board += 1