mirror of
https://github.com/morpheus65535/bazarr
synced 2024-12-22 15:54:26 +00:00
32 lines
1 KiB
Python
32 lines
1 KiB
Python
from typing import Callable, Match, Optional
|
|
import re
|
|
|
|
from ._emoji_codes import EMOJI
|
|
|
|
|
|
_ReStringMatch = Match[str] # regex match object
|
|
_ReSubCallable = Callable[[_ReStringMatch], str] # Callable invoked by re.sub
|
|
_EmojiSubMethod = Callable[[_ReSubCallable, str], str] # Sub method of a compiled re
|
|
|
|
|
|
def _emoji_replace(
|
|
text: str,
|
|
default_variant: Optional[str] = None,
|
|
_emoji_sub: _EmojiSubMethod = re.compile(r"(:(\S*?)(?:(?:\-)(emoji|text))?:)").sub,
|
|
) -> str:
|
|
"""Replace emoji code in text."""
|
|
get_emoji = EMOJI.__getitem__
|
|
variants = {"text": "\uFE0E", "emoji": "\uFE0F"}
|
|
get_variant = variants.get
|
|
default_variant_code = variants.get(default_variant, "") if default_variant else ""
|
|
|
|
def do_replace(match: Match[str]) -> str:
|
|
emoji_code, emoji_name, variant = match.groups()
|
|
try:
|
|
return get_emoji(emoji_name.lower()) + get_variant(
|
|
variant, default_variant_code
|
|
)
|
|
except KeyError:
|
|
return emoji_code
|
|
|
|
return _emoji_sub(do_replace, text)
|