]> jfr.im git - dlqueue.git/blame - venv/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_replace.py
init: venv aand flask
[dlqueue.git] / venv / lib / python3.11 / site-packages / pip / _vendor / rich / _emoji_replace.py
CommitLineData
e0df8241
JR
1from typing import Callable, Match, Optional
2import re
3
4from ._emoji_codes import EMOJI
5
6
7_ReStringMatch = Match[str] # regex match object
8_ReSubCallable = Callable[[_ReStringMatch], str] # Callable invoked by re.sub
9_EmojiSubMethod = Callable[[_ReSubCallable, str], str] # Sub method of a compiled re
10
11
12def _emoji_replace(
13 text: str,
14 default_variant: Optional[str] = None,
15 _emoji_sub: _EmojiSubMethod = re.compile(r"(:(\S*?)(?:(?:\-)(emoji|text))?:)").sub,
16) -> str:
17 """Replace emoji code in text."""
18 get_emoji = EMOJI.__getitem__
19 variants = {"text": "\uFE0E", "emoji": "\uFE0F"}
20 get_variant = variants.get
21 default_variant_code = variants.get(default_variant, "") if default_variant else ""
22
23 def do_replace(match: Match[str]) -> str:
24 emoji_code, emoji_name, variant = match.groups()
25 try:
26 return get_emoji(emoji_name.lower()) + get_variant(
27 variant, default_variant_code
28 )
29 except KeyError:
30 return emoji_code
31
32 return _emoji_sub(do_replace, text)