Filter out control characters
This commit is contained in:
parent
8b0740778c
commit
50e5b594ad
1 changed files with 11 additions and 6 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import unicodedata
|
||||
from typing import Set
|
||||
|
||||
from ..cursor_rendering import CursorRenderer
|
||||
from ..element import Message, RenderedMessage
|
||||
|
|
@ -22,6 +23,7 @@ class EuphRenderer(CursorRenderer):
|
|||
def __init__(self,
|
||||
nick: str,
|
||||
replace_wide_unicode: bool = True,
|
||||
replace_character_categories: Set[str] = {"Cf"},
|
||||
unicode_placeholder: str = "<EFBFBD>",
|
||||
# Meta settings
|
||||
show_year: bool = False,
|
||||
|
|
@ -45,6 +47,7 @@ class EuphRenderer(CursorRenderer):
|
|||
|
||||
self.nick = nick
|
||||
self._replace_wide_unicode = replace_wide_unicode
|
||||
self._replace_character_categories = replace_character_categories
|
||||
self._unicode_placeholder = unicode_placeholder
|
||||
# Meta settings
|
||||
self._show_year = show_year
|
||||
|
|
@ -77,16 +80,18 @@ class EuphRenderer(CursorRenderer):
|
|||
|
||||
return width
|
||||
|
||||
def _filter_unicode(self, text: str) -> str:
|
||||
if not self._replace_wide_unicode:
|
||||
return text
|
||||
def _is_wide(self, char: str) -> bool:
|
||||
return unicodedata.east_asian_width(char) not in self.NORMAL_WIDTH
|
||||
|
||||
def _filter_unicode(self, text: str) -> str:
|
||||
new_chars = []
|
||||
for char in text:
|
||||
if unicodedata.east_asian_width(char) in self.NORMAL_WIDTH:
|
||||
new_chars.append(char)
|
||||
else:
|
||||
if self._replace_wide_unicode and self._is_wide(char):
|
||||
new_chars.append(self._unicode_placeholder)
|
||||
elif unicodedata.category(char) in self._replace_character_categories:
|
||||
pass
|
||||
else:
|
||||
new_chars.append(char)
|
||||
|
||||
return "".join(new_chars)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue