Split out unicode_ljust and unicode_rjust to break import cycle (#3388)
* Split out unicode_ljust and unicode_rjust to break import cycle Previously, there was an import cycle between tui.menu_item and lib.output. * Move unicode.py from lib/ to lib/utils/
This commit is contained in:
parent
e281c2fa6a
commit
130d1a6ff8
|
|
@ -1,16 +1,15 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import unicodedata
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import asdict, is_dataclass
|
from dataclasses import asdict, is_dataclass
|
||||||
from datetime import UTC, datetime
|
from datetime import UTC, datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from functools import lru_cache
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING, Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
from .storage import storage
|
from .storage import storage
|
||||||
|
from .utils.unicode import unicode_ljust, unicode_rjust
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from _typeshed import DataclassInstance
|
from _typeshed import DataclassInstance
|
||||||
|
|
@ -335,41 +334,3 @@ def log(
|
||||||
if level != logging.DEBUG:
|
if level != logging.DEBUG:
|
||||||
from archinstall.tui.curses_menu import Tui
|
from archinstall.tui.curses_menu import Tui
|
||||||
Tui.print(text)
|
Tui.print(text)
|
||||||
|
|
||||||
|
|
||||||
@lru_cache(maxsize=128)
|
|
||||||
def _is_wide_character(char: str) -> bool:
|
|
||||||
return unicodedata.east_asian_width(char) in 'FW'
|
|
||||||
|
|
||||||
|
|
||||||
def _count_wchars(string: str) -> int:
|
|
||||||
"Count the total number of wide characters contained in a string"
|
|
||||||
return sum(_is_wide_character(c) for c in string)
|
|
||||||
|
|
||||||
|
|
||||||
def unicode_ljust(string: str, width: int, fillbyte: str = ' ') -> str:
|
|
||||||
"""Return a left-justified unicode string of length width.
|
|
||||||
>>> unicode_ljust('Hello', 15, '*')
|
|
||||||
'Hello**********'
|
|
||||||
>>> unicode_ljust('你好', 15, '*')
|
|
||||||
'你好***********'
|
|
||||||
>>> unicode_ljust('안녕하세요', 15, '*')
|
|
||||||
'안녕하세요*****'
|
|
||||||
>>> unicode_ljust('こんにちは', 15, '*')
|
|
||||||
'こんにちは*****'
|
|
||||||
"""
|
|
||||||
return string.ljust(width - _count_wchars(string), fillbyte)
|
|
||||||
|
|
||||||
|
|
||||||
def unicode_rjust(string: str, width: int, fillbyte: str = ' ') -> str:
|
|
||||||
"""Return a right-justified unicode string of length width.
|
|
||||||
>>> unicode_rjust('Hello', 15, '*')
|
|
||||||
'**********Hello'
|
|
||||||
>>> unicode_rjust('你好', 15, '*')
|
|
||||||
'***********你好'
|
|
||||||
>>> unicode_rjust('안녕하세요', 15, '*')
|
|
||||||
'*****안녕하세요'
|
|
||||||
>>> unicode_rjust('こんにちは', 15, '*')
|
|
||||||
'*****こんにちは'
|
|
||||||
"""
|
|
||||||
return string.rjust(width - _count_wchars(string), fillbyte)
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
import unicodedata
|
||||||
|
from functools import lru_cache
|
||||||
|
|
||||||
|
|
||||||
|
@lru_cache(maxsize=128)
|
||||||
|
def _is_wide_character(char: str) -> bool:
|
||||||
|
return unicodedata.east_asian_width(char) in 'FW'
|
||||||
|
|
||||||
|
|
||||||
|
def _count_wchars(string: str) -> int:
|
||||||
|
"Count the total number of wide characters contained in a string"
|
||||||
|
return sum(_is_wide_character(c) for c in string)
|
||||||
|
|
||||||
|
|
||||||
|
def unicode_ljust(string: str, width: int, fillbyte: str = ' ') -> str:
|
||||||
|
"""Return a left-justified unicode string of length width.
|
||||||
|
>>> unicode_ljust('Hello', 15, '*')
|
||||||
|
'Hello**********'
|
||||||
|
>>> unicode_ljust('你好', 15, '*')
|
||||||
|
'你好***********'
|
||||||
|
>>> unicode_ljust('안녕하세요', 15, '*')
|
||||||
|
'안녕하세요*****'
|
||||||
|
>>> unicode_ljust('こんにちは', 15, '*')
|
||||||
|
'こんにちは*****'
|
||||||
|
"""
|
||||||
|
return string.ljust(width - _count_wchars(string), fillbyte)
|
||||||
|
|
||||||
|
|
||||||
|
def unicode_rjust(string: str, width: int, fillbyte: str = ' ') -> str:
|
||||||
|
"""Return a right-justified unicode string of length width.
|
||||||
|
>>> unicode_rjust('Hello', 15, '*')
|
||||||
|
'**********Hello'
|
||||||
|
>>> unicode_rjust('你好', 15, '*')
|
||||||
|
'***********你好'
|
||||||
|
>>> unicode_rjust('안녕하세요', 15, '*')
|
||||||
|
'*****안녕하세요'
|
||||||
|
>>> unicode_rjust('こんにちは', 15, '*')
|
||||||
|
'*****こんにちは'
|
||||||
|
"""
|
||||||
|
return string.rjust(width - _count_wchars(string), fillbyte)
|
||||||
|
|
@ -5,7 +5,7 @@ from dataclasses import dataclass, field
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import TYPE_CHECKING, Any, ClassVar
|
from typing import TYPE_CHECKING, Any, ClassVar
|
||||||
|
|
||||||
from ..lib.output import unicode_ljust
|
from ..lib.utils.unicode import unicode_ljust
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from archinstall.lib.translationhandler import DeferredTranslation
|
from archinstall.lib.translationhandler import DeferredTranslation
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue