termstr: Handle strings already containing zero-width chars
This commit is contained in:
parent
f0159eb6ff
commit
766956025d
2 changed files with 17 additions and 3 deletions
|
|
@ -173,8 +173,15 @@ _ZERO_WIDTH_SPACE = "\u200b"
|
|||
|
||||
|
||||
def _pad_wide_chars(str_):
|
||||
padded_str = "".join(f"{char}{_ZERO_WIDTH_SPACE}"
|
||||
if cwcwidth.wcwidth(char) == 2 else char for char in str_)
|
||||
parts = []
|
||||
last_width = None
|
||||
for char in str_:
|
||||
width = cwcwidth.wcwidth(char)
|
||||
parts.append(f"{_ZERO_WIDTH_SPACE}{char}" if width != 0 and last_width == 2 else char)
|
||||
last_width = width
|
||||
padded_str = "".join(parts)
|
||||
if len(padded_str) > 0 and cwcwidth.wcwidth(padded_str[-1]) == 2:
|
||||
padded_str += _ZERO_WIDTH_SPACE
|
||||
return str_ if len(padded_str) == len(str_) else padded_str
|
||||
|
||||
|
||||
|
|
@ -307,7 +314,7 @@ class TermStr(collections.UserString):
|
|||
if len(data) == 0:
|
||||
result = ""
|
||||
else:
|
||||
first_char = " " if data[0] == _ZERO_WIDTH_SPACE else data[0]
|
||||
first_char = " " if cwcwidth.wcwidth(data[0]) == 0 else data[0]
|
||||
if len(data) == 1:
|
||||
result = first_char
|
||||
else:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue