index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Wu Xiaotian <yetist@gmail.com> | 2023-07-31 15:39:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-31 09:39:06 +0200 |
commit | d878496a2fb9e3c7f48261f866cb285dfa987298 (patch) | |
tree | 945264d17e5caf012ca3406b7cdfbdf46ecd2e9e /archinstall/lib/menu | |
parent | 9cbb2b75940e3aad1a0236662c45437d70eac1af (diff) |
-rw-r--r-- | archinstall/lib/menu/abstract_menu.py | 19 |
diff --git a/archinstall/lib/menu/abstract_menu.py b/archinstall/lib/menu/abstract_menu.py index eee99747..f12d2b73 100644 --- a/archinstall/lib/menu/abstract_menu.py +++ b/archinstall/lib/menu/abstract_menu.py @@ -1,4 +1,5 @@ from __future__ import annotations +import unicodedata from typing import Callable, Any, List, Iterator, Tuple, Optional, Dict, TYPE_CHECKING @@ -9,6 +10,22 @@ from ..translationhandler import TranslationHandler, Language if TYPE_CHECKING: _: Any +def count_cjk_chars(string): + "Count the total number of CJK characters contained in a string" + return sum(unicodedata.east_asian_width(c) in 'FW' for c in string) + +def cjkljust(string, width, fillbyte=' '): + """Support left alignment of Chinese, Japanese, Korean text + >>> cjkljust('Hello', 15, '*') + 'Hello**********' + >>> cjkljust('你好', 15, '*') + '你好***********' + >>> cjkljust('안녕하세요', 15, '*') + '안녕하세요*****' + >>> cjkljust('こんにちは', 15, '*') + 'こんにちは*****' + """ + return string.ljust(width - count_cjk_chars(string), fillbyte) class Selector: def __init__( @@ -128,7 +145,7 @@ class Selector: if current: padding += 5 - description = str(self._description).ljust(padding, ' ') + description = cjkljust(str(self._description), padding, ' ') current = current else: description = self._description |