Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
emoji.py94 linesDownload Raw Back to rich
1import sys2from typing import TYPE_CHECKING, Literal, Optional, Union3 4from ._emoji_replace import _emoji_replace5from .jupyter import JupyterMixin6from .segment import Segment7from .style import Style8 9if TYPE_CHECKING:10    from .console import Console, ConsoleOptions, RenderResult11 12 13EmojiVariant = Literal["emoji", "text"]14 15 16class NoEmoji(Exception):17    """No emoji by that name."""18 19 20class Emoji(JupyterMixin):21    __slots__ = ["name", "style", "_char", "variant"]22 23    VARIANTS = {"text": "\ufe0e", "emoji": "\ufe0f"}24 25    def __init__(26        self,27        name: str,28        style: Union[str, Style] = "none",29        variant: Optional[EmojiVariant] = None,30    ) -> None:31        """A single emoji character.32 33        Args:34            name (str): Name of emoji.35            style (Union[str, Style], optional): Optional style. Defaults to None.36 37        Raises:38            NoEmoji: If the emoji doesn't exist.39        """40        from ._emoji_codes import EMOJI41 42        self.name = name43        self.style = style44        self.variant = variant45        try:46            self._char = EMOJI[name]47        except KeyError:48            raise NoEmoji(f"No emoji called {name!r}")49        if variant is not None:50            self._char += self.VARIANTS.get(variant, "")51 52    @classmethod53    def replace(cls, text: str) -> str:54        """Replace emoji markup with corresponding unicode characters.55 56        Args:57            text (str): A string with emojis codes, e.g. "Hello :smiley:!"58 59        Returns:60            str: A string with emoji codes replaces with actual emoji.61        """62        return _emoji_replace(text)63 64    def __repr__(self) -> str:65        return f"<emoji {self.name!r}>"66 67    def __str__(self) -> str:68        return self._char69 70    def __rich_console__(71        self, console: "Console", options: "ConsoleOptions"72    ) -> "RenderResult":73        yield Segment(self._char, console.get_style(self.style))74 75 76if __name__ == "__main__":  # pragma: no cover77    import sys78 79    from rich.columns import Columns80    from rich.console import Console81 82    console = Console(record=True)83 84    from ._emoji_codes import EMOJI85 86    columns = Columns(87        (f":{name}: {name}" for name in sorted(EMOJI.keys()) if "\u200d" not in name),88        column_first=True,89    )90 91    console.print(columns)92    if len(sys.argv) > 1:93        console.save_html(sys.argv[1])94 
codekingpro/portable-devtools · Team Ai