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
|
import unicodedata
|
||||||
|
from typing import Set
|
||||||
|
|
||||||
from ..cursor_rendering import CursorRenderer
|
from ..cursor_rendering import CursorRenderer
|
||||||
from ..element import Message, RenderedMessage
|
from ..element import Message, RenderedMessage
|
||||||
|
|
@ -22,6 +23,7 @@ class EuphRenderer(CursorRenderer):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
nick: str,
|
nick: str,
|
||||||
replace_wide_unicode: bool = True,
|
replace_wide_unicode: bool = True,
|
||||||
|
replace_character_categories: Set[str] = {"Cf"},
|
||||||
unicode_placeholder: str = "<EFBFBD>",
|
unicode_placeholder: str = "<EFBFBD>",
|
||||||
# Meta settings
|
# Meta settings
|
||||||
show_year: bool = False,
|
show_year: bool = False,
|
||||||
|
|
@ -45,6 +47,7 @@ class EuphRenderer(CursorRenderer):
|
||||||
|
|
||||||
self.nick = nick
|
self.nick = nick
|
||||||
self._replace_wide_unicode = replace_wide_unicode
|
self._replace_wide_unicode = replace_wide_unicode
|
||||||
|
self._replace_character_categories = replace_character_categories
|
||||||
self._unicode_placeholder = unicode_placeholder
|
self._unicode_placeholder = unicode_placeholder
|
||||||
# Meta settings
|
# Meta settings
|
||||||
self._show_year = show_year
|
self._show_year = show_year
|
||||||
|
|
@ -77,16 +80,18 @@ class EuphRenderer(CursorRenderer):
|
||||||
|
|
||||||
return width
|
return width
|
||||||
|
|
||||||
def _filter_unicode(self, text: str) -> str:
|
def _is_wide(self, char: str) -> bool:
|
||||||
if not self._replace_wide_unicode:
|
return unicodedata.east_asian_width(char) not in self.NORMAL_WIDTH
|
||||||
return text
|
|
||||||
|
|
||||||
|
def _filter_unicode(self, text: str) -> str:
|
||||||
new_chars = []
|
new_chars = []
|
||||||
for char in text:
|
for char in text:
|
||||||
if unicodedata.east_asian_width(char) in self.NORMAL_WIDTH:
|
if self._replace_wide_unicode and self._is_wide(char):
|
||||||
new_chars.append(char)
|
|
||||||
else:
|
|
||||||
new_chars.append(self._unicode_placeholder)
|
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)
|
return "".join(new_chars)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue