Починено выравнивание: обрезанные имена теперь добиваются пробелами до ширины колонки
- _pad_col: после truncate + pad до точной ширины (не оставлял хвост) - _display_width: добавлены U+2026 (…) и U+2116 (№) в wide-символы
This commit is contained in:
parent
c6d799e82f
commit
755290e43b
1 changed files with 5 additions and 3 deletions
|
|
@ -50,7 +50,7 @@ def _display_width(s: str) -> int:
|
||||||
cp = ord(ch)
|
cp = ord(ch)
|
||||||
if (0x0400 <= cp <= 0x04FF or 0x0500 <= cp <= 0x052F or
|
if (0x0400 <= cp <= 0x04FF or 0x0500 <= cp <= 0x052F or
|
||||||
0x2E80 <= cp <= 0x9FFF or 0xF900 <= cp <= 0xFAFF or
|
0x2E80 <= cp <= 0x9FFF or 0xF900 <= cp <= 0xFAFF or
|
||||||
0xFE30 <= cp <= 0xFE4F):
|
0xFE30 <= cp <= 0xFE4F or cp in (0x2026, 0x2116)):
|
||||||
w += 2
|
w += 2
|
||||||
else:
|
else:
|
||||||
w += 1
|
w += 1
|
||||||
|
|
@ -60,7 +60,7 @@ def _display_width(s: str) -> int:
|
||||||
def _pad_col(s: str, width: int) -> str:
|
def _pad_col(s: str, width: int) -> str:
|
||||||
cur = _display_width(s)
|
cur = _display_width(s)
|
||||||
if cur > width:
|
if cur > width:
|
||||||
# Truncate to fit: cut chars until it fits, add "…"
|
# Truncate to fit, then pad to exactly width
|
||||||
result = []
|
result = []
|
||||||
w = 0
|
w = 0
|
||||||
for ch in s:
|
for ch in s:
|
||||||
|
|
@ -69,7 +69,9 @@ def _pad_col(s: str, width: int) -> str:
|
||||||
break
|
break
|
||||||
result.append(ch)
|
result.append(ch)
|
||||||
w += cw
|
w += cw
|
||||||
return ''.join(result) + '…'
|
truncated = ''.join(result) + '…'
|
||||||
|
pad_to = width - _display_width(truncated)
|
||||||
|
return truncated + ' ' * max(0, pad_to)
|
||||||
return s + ' ' * (width - cur)
|
return s + ' ' * (width - cur)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue