Skip to content

Commit

Permalink
Improve the Chinese, Japanese and Korean text menu layout (#1945)
Browse files Browse the repository at this point in the history
Before this patch, menus in Korean language would not be aligned:

```
  Archinstall 언어            Korean (71%)
> Mirrors
  Locales                   Defined
  Disk configuration
  부트로더                      Systemd-boot
  스왑                        True
```

After apply this patch, menus in Korean language are aligned:

```
  Archinstall 언어          Korean (71%)
> Mirrors
  Locales                   Defined
  Disk configuration
  부트로더                  Systemd-boot
  스왑                      True
```
  • Loading branch information
yetist authored Jul 31, 2023
1 parent 9cbb2b7 commit d878496
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion archinstall/lib/menu/abstract_menu.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from __future__ import annotations
import unicodedata

from typing import Callable, Any, List, Iterator, Tuple, Optional, Dict, TYPE_CHECKING

Expand All @@ -9,6 +10,22 @@
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__(
Expand Down Expand Up @@ -128,7 +145,7 @@ def menu_text(self, padding: int = 0) -> str:

if current:
padding += 5
description = str(self._description).ljust(padding, ' ')
description = cjkljust(str(self._description), padding, ' ')
current = current
else:
description = self._description
Expand Down

0 comments on commit d878496

Please sign in to comment.