Таблица в code-блоке: 3 колонки, 2 строки на пару, влезает на телефон
Формат: # │ Игрок │ О ───┼────────────────────────┼──── 1 │ Мармылев Александр Д. │ 4.0 │ Нестеров Мирон А. │ 4.0 Внутри code-блока MarkdownV2 не нужен (literal text).
This commit is contained in:
parent
a17e21c983
commit
70ff9bfc4b
1 changed files with 39 additions and 5 deletions
|
|
@ -44,14 +44,39 @@ def _md_escape(text: str) -> str:
|
||||||
return ''.join(result)
|
return ''.join(result)
|
||||||
|
|
||||||
|
|
||||||
|
def _display_width(s: str) -> int:
|
||||||
|
w = 0
|
||||||
|
for ch in s:
|
||||||
|
cp = ord(ch)
|
||||||
|
if (0x0400 <= cp <= 0x04FF or 0x0500 <= cp <= 0x052F or
|
||||||
|
0x2E80 <= cp <= 0x9FFF or 0xF900 <= cp <= 0xFAFF or
|
||||||
|
0xFE30 <= cp <= 0xFE4F):
|
||||||
|
w += 2
|
||||||
|
else:
|
||||||
|
w += 1
|
||||||
|
return w
|
||||||
|
|
||||||
|
|
||||||
|
def _pad_col(s: str, width: int) -> str:
|
||||||
|
cur = _display_width(s)
|
||||||
|
if cur >= width:
|
||||||
|
return s
|
||||||
|
return s + ' ' * (width - cur)
|
||||||
|
|
||||||
|
|
||||||
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])
|
||||||
|
|
||||||
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)}',
|
||||||
|
border,
|
||||||
]
|
]
|
||||||
|
|
||||||
board = 1
|
board = 1
|
||||||
|
|
@ -61,7 +86,14 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str:
|
||||||
p1, p2, color = pairing
|
p1, p2, color = pairing
|
||||||
|
|
||||||
if color == 'bye':
|
if color == 'bye':
|
||||||
lines.append(f'{board}\\. {_md_escape(p1.name)} — BYE')
|
lines.append(
|
||||||
|
f'{_pad_col(str(board), 4)} │ {_pad_col(p1.name, w_name)} │ '
|
||||||
|
f'{_pad_col(str(p1.points), w_pts)}'
|
||||||
|
)
|
||||||
|
lines.append(
|
||||||
|
f'{_pad_col("", 4)} │ {_pad_col("— BYE —", w_name)} │ '
|
||||||
|
f'{_pad_col("", w_pts)}'
|
||||||
|
)
|
||||||
board += 1
|
board += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
@ -71,15 +103,17 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str:
|
||||||
white, black = p2, p1
|
white, black = p2, p1
|
||||||
|
|
||||||
lines.append(
|
lines.append(
|
||||||
f'{board}\\. {_md_escape(white.name)} '
|
f'{_pad_col(str(board), 4)} │ {_pad_col(white.name, w_name)} │ '
|
||||||
f'\\({_md_escape(f"{white.points:.1f}")}\\)'
|
f'{_pad_col(f"{white.points:.1f}", w_pts)}'
|
||||||
)
|
)
|
||||||
lines.append(
|
lines.append(
|
||||||
f' {_md_escape(black.name)} '
|
f'{_pad_col("", 4)} │ {_pad_col(black.name, w_name)} │ '
|
||||||
f'\\({_md_escape(f"{black.points:.1f}")}\\)'
|
f'{_pad_col(f"{black.points:.1f}", w_pts)}'
|
||||||
)
|
)
|
||||||
board += 1
|
board += 1
|
||||||
|
|
||||||
|
lines.append('```')
|
||||||
|
|
||||||
source = pairings_data.get('source', 'algorithm')
|
source = pairings_data.get('source', 'algorithm')
|
||||||
if source == 'bbp_pairings_fide_2025':
|
if source == 'bbp_pairings_fide_2025':
|
||||||
lines.append('\n_FIDE 2025 \(bbpPairings\)_')
|
lines.append('\n_FIDE 2025 \(bbpPairings\)_')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue