Source code for emoji_data_python.emoji_char

from typing import Optional, List, Dict

from .conversion import unified_to_char


# pylint: disable=too-many-instance-attributes
[docs]class EmojiChar: """Represents an emoji character as parsed from the json data""" def __init__(self, data_blob: dict) -> None: """Parse data into EmojiChar :param data_blob: Dictionary of values loaded from the json format in `emoji.json` >>> emoji.__dict__ { 'name': 'BLACK HEART SUIT', 'unified': '2665', 'variations': ['2665-FE0F'], 'docomo': 'E68D', 'au': 'EAA5', 'softbank': 'E20C', 'google': 'FEB1A', 'image': '2665.png', 'sheet_x': 1, 'sheet_y': 34, 'short_name': 'hearts', 'short_names': ['hearts'], 'text': None, 'texts': None, 'category': 'Symbols', 'sort_order': 245, 'added_in': '1.1', 'has_img_apple': True, 'has_img_google': True, 'has_img_twitter': True, 'has_img_emojione': True, 'has_img_facebook': True, 'has_img_messenger': True, 'skin_variations': {}, 'obsoletes': None, 'obsoleted_by': None } """ self.name = data_blob.get("name") # type: Optional[str] self.unified = data_blob.get("unified") # type: str self.variations = data_blob.get("variations", []) # type: List[str] self.docomo = data_blob.get("docomo") # type: Optional[str] # pylint: disable=invalid-name self.au = data_blob.get("au") # type: Optional[str] self.softbank = data_blob.get("softbank") # type: Optional[str] self.google = data_blob.get("google") # type: Optional[str] self.image = data_blob.get("image") # type: Optional[str] self.sheet_x = data_blob.get("sheet_x") # type: int self.sheet_y = data_blob.get("sheet_y") # type: int self.short_name = data_blob.get("short_name") # type: Optional[str] self.short_names = data_blob.get("short_names") # type: List[str] self.text = data_blob.get("text") # type: Optional[str] self.texts = data_blob.get("texts") # type: List[str] self.category = data_blob.get("category") # type: Optional[str] self.sort_order = data_blob.get("sort_order") # type: int self.added_in = data_blob.get("added_in") # type: str self.has_img_apple = data_blob.get("has_img_apple") # type: bool self.has_img_google = data_blob.get("has_img_google") # type: bool self.has_img_twitter = data_blob.get("has_img_twitter") # type: bool self.has_img_emojione = data_blob.get("has_img_emojione") # type: bool self.has_img_facebook = data_blob.get("has_img_facebook") # type: bool self.has_img_messenger = data_blob.get("has_img_messenger") # type: bool variations = data_blob.get("skin_variations", {}) self.skin_variations = { code: EmojiChar(variation) for code, variation in variations.items() } # type: Dict[str, EmojiChar] self.obsoletes = data_blob.get("obsoletes") # type: Optional[str] self.obsoleted_by = data_blob.get("obsoleted_by") # type: Optional[str] @property def all_variations(self) -> List[str]: """Lists all possible codepoint variations for given emoji. See :mod:`emoji_data_python.EmojiChar.chars` for a rendered version >>> emoji.all_variations ['261D', '261D-FE0F', '261D-1F3FB'] """ return ( [self.unified] + self.variations + [self.unified + "-" + variation for variation in self.skin_variations.keys()] ) @property def char(self) -> str: """Returns rendered char for emoji >>> emoji.char '👋' """ return unified_to_char(self.unified) @property def chars(self) -> List[str]: """Lists all possible *rendered* codepoint variations for given emoji. This is useful when trying to find this particular emoji in a string by looking for any variation. >>> emoji.chars ['👋', '👋🏻', '👋🏼', '👋🏽', '👋🏾', '👋🏿'] """ return list(map(unified_to_char, self.all_variations)) @property def is_doublebyte(self) -> bool: """`True` if emoji is coded on two or more bytes""" return "-" in self.unified def __str__(self): return self.name or self.short_name or self.unified def __repr__(self): return f'EmojiChar("{self!s}")'