32 行
826 B
Python
32 行
826 B
Python
import unicodedata
|
|
|
|
|
|
class CommonModule:
|
|
@staticmethod
|
|
def is_wide (c: str) -> bool:
|
|
return unicodedata.east_asian_width (c) in ['F', 'W', 'A']
|
|
|
|
@classmethod
|
|
def len_by_full (cls, string: str) -> float:
|
|
return sum (1 if cls.is_wide (c) else .5 for c in string)
|
|
|
|
@classmethod
|
|
def index_by_f2c (cls, string: str, index: float) -> int:
|
|
i: int = 0
|
|
work: str = ''
|
|
for c in string:
|
|
work += c
|
|
if cls.len_by_full (work) > index:
|
|
break
|
|
else:
|
|
i += 1
|
|
|
|
return i
|
|
|
|
@classmethod
|
|
def mid_by_full (cls, string: str, start: float, length: float) -> str:
|
|
trimmed_left: str = string[cls.index_by_f2c (string, start):]
|
|
|
|
return trimmed_left[:cls.index_by_f2c (trimmed_left, length)]
|
|
|