| 
							- 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)]
 
 
  |