Ë
    äš¾jX/  ã            	       ó  — U d Z ddlmZmZmZmZmZmZ ddlm	Z	 g d¢Z
dZi Zeeef   ed<    G d„ d«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Zdededee   fd„Zdee   dededee   fd„Zdeeef   fd„Zy)z]
emoji.tokenizer
~~~~~~~~~~~~~~~

Components for detecting and tokenizing emoji in strings.

é    )ÚListÚ
NamedTupleÚDictÚUnionÚIteratorÚAny)Úunicode_codes)Ú
EmojiMatchÚEmojiMatchZWJÚEmojiMatchZWJNonRGIÚTokenÚtokenizeÚfilter_tokensu   â€�Ú_SEARCH_TREEc                   ó€   — e Zd ZdZdZdedededeeee	f   df   fd„Z
d	eee	f   fd
„Zd	efd„Zd	ed   fd„Zd	efd„Zy)r
   zd
    Represents a match of a "recommended for general interchange" (RGI)
    emoji in a string.
    ©ÚemojiÚstartÚendÚdatar   r   r   r   Nc                 óB   — || _         	 || _        	 || _        	 || _        y ©Nr   )Úselfr   r   r   r   s        úY/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/emoji/tokenizer.pyÚ__init__zEmojiMatch.__init__"   s,   € ð ˆŒ
Ø!àˆŒ
Ø8àˆŒØ6àˆŒ	Øbó    Úreturnc                 óÀ   — | j                   r:| j                   j                  «       }| j                  |d<   | j                  |d<   |S | j                  | j                  dœS )z—
        Returns a copy of the data from :data:`EMOJI_DATA` for this match
        with the additional keys ``match_start`` and ``match_end``.
        Úmatch_startÚ	match_end)r   r    )r   Úcopyr   r   )r   Úemj_datas     r   Ú	data_copyzEmojiMatch.data_copy1   sO   € ð
 �9Š9Ø—y‘y—~‘~Ó'ˆHØ&*§j¡jˆH�]Ñ#Ø$(§H¡HˆH�[Ñ!ØˆOà#'§:¡:¸D¿H¹HÑEÐEr   c                 ó&   — t         | j                  v S )zp
        Checks if this is a ZWJ-emoji.

        :returns: True if this is a ZWJ-emoji, False otherwise
        )Ú_ZWJr   ©r   s    r   Úis_zwjzEmojiMatch.is_zwj>   s   € ô �t—z‘zÐ!Ð!r   )r   r
   c                 ó<   — | j                  «       rt        | «      S | S )zª
        Splits a ZWJ-emoji into its constituents.

        :returns: An :class:`EmojiMatchZWJ` containing the "sub-emoji" if this is a ZWJ-emoji, otherwise self
        )r'   r   r&   s    r   ÚsplitzEmojiMatch.splitG   s   € ð �;‰;Œ=Ü  Ó&Ð&àˆKr   c                 ó‚   — | j                   j                  › d| j                  › d| j                  › d| j                  › d�S ©Nú(z, ú:ú))Ú	__class__Ú__name__r   r   r   r&   s    r   Ú__repr__zEmojiMatch.__repr__S   s9   € Ø—.‘.×)Ñ)Ð*¨!¨D¯J©J¨<°r¸$¿*¹*¸ÀQÀtÇxÁxÀjÐPQÐRÐRr   )r0   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__ÚstrÚintr   r   r   r   r#   Úboolr'   r)   r1   © r   r   r
   r
      sŒ   „ ñð
 2€IðcØðcØ!$ðcØ+.ðcØ6;¸DÀÀcÀ¹NÈDÐ<PÑ6QócðF˜4  S ™>ó Fð"˜ó "ð
�uÐ:Ñ;ó 
ðS˜#ô Sr   r
   c                   óX   ‡ — e Zd ZdZdZdefˆ fd„Zdefd„Zde	fd„Z
d
d„Zdefd	„Zˆ xZS )r   zr
    Represents a match of multiple emoji in a string that were joined by
    zero-width-joiners (ZWJ/``\u200D``).)ÚemojisÚmatchc           
      ó²  •— t         ‰| �  |j                  |j                  |j                  |j
                  «       g | _        	 |j                  }|j                  j                  t        «      D ]f  }t        |||t        |«      z   t        j                  j                  |d «      «      }| j                  j                  |«       |t        |«      dz   z  }Œh y )Né   )Úsuperr   r   r   r   r   r;   r)   r%   r
   Úlenr	   Ú
EMOJI_DATAÚgetÚappend)r   r<   ÚiÚeÚmr/   s        €r   r   zEmojiMatchZWJ.__init__^   s¥   ø€ Ü‰Ñ˜Ÿ™ e§k¡k°5·9±9¸e¿j¹jÔIà(*ˆŒØ5à�K‰KˆØ—‘×"Ñ"¤4Ó(ò 	ˆAÜ˜1˜a ¤S¨£V¡¬]×-EÑ-E×-IÑ-IÈ!ÈTÓ-RÓSˆAØ�K‰K×Ñ˜qÔ!Ø”�Q“˜!‘‰O‰Añ	r   r   c                 óN   — t         j                  d„ | j                  D «       «      S )z1
        Joins a ZWJ-emoji into a string
        c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   ©r   ©Ú.0rE   s     r   ú	<genexpr>z%EmojiMatchZWJ.join.<locals>.<genexpr>o   s   è ø€ Ò6 Q˜Ÿ�Ñ6ùó   ‚)r%   Újoinr;   r&   s    r   rN   zEmojiMatchZWJ.joinj   s   € ô
 �y‰yÑ6¨$¯+©+Ô6Ó6Ð6r   c                  ó   — y)NTr9   r&   s    r   r'   zEmojiMatchZWJ.is_zwjq   s   € Ør   c                 ó   — | S r   r9   r&   s    r   r)   zEmojiMatchZWJ.splitt   s   € Øˆr   c                 óŠ   — | j                   j                  › d| j                  «       › d| j                  › d| j                  › d�S r+   )r/   r0   rN   r   r   r&   s    r   r1   zEmojiMatchZWJ.__repr__w   s;   € Ø—.‘.×)Ñ)Ð*¨!¨D¯I©I«K¨=¸¸4¿:¹:¸,ÀaÈÏÉÀzÐQRÐSÐSr   )r   r   )r0   r2   r3   r4   r5   r
   r   r6   rN   r8   r'   r)   r1   Ú__classcell__)r/   s   @r   r   r   W   sF   ø„ ñ-ð €Ið
˜jõ 
ð7�có 7ð˜ó óðT˜#÷ Tr   r   c                   ó2   — e Zd ZdZdedefd„Zd„ Zdefd„Zy)	r   a  
    Represents a match of multiple emoji in a string that were joined by
    zero-width-joiners (ZWJ/``\u200D``). This class is only used for emoji
    that are not "recommended for general interchange" (non-RGI) by Unicode.org.
    The data property of this class is always None.
    Úfirst_emoji_matchÚsecond_emoji_matchc                 ó8   — ||g| _         	 | j                  «        y r   )r;   Ú_update)r   rT   rU   s      r   r   zEmojiMatchZWJNonRGI.__init__ƒ   s   € Ø(Ð*<Ð=ˆŒØ5à�‰�r   c                 óà   — t         j                  d„ | j                  D «       «      | _        | j                  d   j                  | _        | j                  d   j
                  | _        d | _        y )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   rI   rJ   s     r   rL   z.EmojiMatchZWJNonRGI._update.<locals>.<genexpr>Š   s   è ø€ Ò<¨1˜qŸw�wÑ<ùrM   r   éÿÿÿÿ)r%   rN   r;   r   r   r   r   r&   s    r   rW   zEmojiMatchZWJNonRGI._update‰   sM   € Ü—Y‘YÑ<°·±Ô<Ó<ˆŒ
Ø—[‘[ ‘^×)Ñ)ˆŒ
Ø—;‘;˜r‘?×&Ñ&ˆŒØˆ�	r   Únext_emoji_matchc                 óZ   — | j                   j                  |«       | j                  «        y r   )r;   rC   rW   )r   r[   s     r   Ú_addzEmojiMatchZWJNonRGI._add�   s   € Ø�‰×ÑÐ+Ô,Ø�‰�r   N)r0   r2   r3   r4   r
   r   rW   r]   r9   r   r   r   r   {   s+   „ ñð¨*ð È*ó òð Zô r   r   c                   ó0   — e Zd ZU dZeed<   eeef   ed<   y)r   z¡
    A named tuple containing the matched string and its :class:`EmojiMatch` object if it is an emoji
    or a single character that is not a unicode emoji.
    ÚcharsÚvalueN)r0   r2   r3   r4   r6   Ú__annotations__r   r
   r9   r   r   r   r   ”   s   … ñð
 ƒJØ��j�Ñ!Ô!r   r   ÚstringÚkeep_zwjr   c              #   óÜ  K  — t        «       }t        j                  }g }d}t        | «      }g }||k  �r©d}| |   }	||v r,|dz  }|	t        k(  r|r|j                  t        |	|	«      «       Œ=|	|v ru|dz   }
||	   }|
|k  r&| |
   |v r|
|v rn|| |
      }|
dz  }
|
|k  r| |
   |v rŒd|v �r|d   }| ||
 }t        |||
|«      }|
dz
  }d}|j                  t        ||«      «       nÆ|	t        k(  r¯|r­|d   j                  |v rœ|dkD  r—| |dz
     |v r�|j                  |«       ||d   j                     d   t        j                  d   k(  r3|t        d	„ |d
d D «       «      z
  }| |   t        k(  r	|dz  }|d= n$|d
d…= n|t        |d   j                  «      z
  }|d= �Œn|r|E d{  –—†  g }|s%|	dk7  r |	dk7  r|j                  t        |	|	«      «       |dz  }||k  r�Œ©|E d{  –—†  y7 ŒD7 Œ­w)aø  
    Finds unicode emoji in a string. Yields all normal characters as a named
    tuple :class:`Token` ``(char, char)`` and all emoji as :class:`Token` ``(chars, EmojiMatch)``.

    :param string: String contains unicode characters. MUST BE UNICODE.
    :param keep_zwj: Should ZWJ-characters (``\u200D``) that join non-RGI emoji be
        skipped or should be yielded as normal characters
    :return: An iterable of tuples :class:`Token` ``(char, char)`` or :class:`Token` ``(chars, EmojiMatch)``
    r   Fr>   r   TrZ   ÚstatusÚ	componentc              3   óF   K  — | ]  }t        |j                  «      –— Œ y ­wr   )r@   r_   )rK   Úts     r   rL   ztokenize.<locals>.<genexpr>ß   s   è ø€ Ò>¨QœC §¡ŸLÑ>ùs   ‚!éþÿÿÿNu   ï¸Žu   ï¸�)Úget_search_treer	   rA   r@   r%   rC   r   r
   r_   ÚSTATUSÚsum)rb   rc   ÚtreerA   ÚresultrD   ÚlengthÚignoreÚconsumedÚcharÚjÚsub_treer"   Úcode_pointsÚ	match_objs                  r   r   r   ž   se  è ø€ ô Ó€DÜ×)Ñ)€Jà€FØ	€AÜ�‹[€Fð 	ð ð ˆf‹*ØˆØ�a‰yˆØ�‰;Ø�‰FˆAØ”tŠ|¡Ø—‘œe D¨$Ó/Ô0Øà�T‰\Ø�A‘ˆAØ˜D‘zˆHØ�f’* ¨¡¨hÑ!6Ø˜‘;ØØ# F¨1¡IÑ.�Ø�Q‘�ð	 �f’* ¨¡¨hÒ!6ð
 ˜Ò!Ø# FÑ+�Ø$ Q q˜k�ô
 ' {°A°q¸(ÓC�	à˜‘E�Ø�Ø—‘œe K°Ó;Õ<ð ”DŠLÙØ�r‘
× Ñ  JÑ.Ø�A’Ø�q˜1‘u‘ Ñ%ð �M‰M˜!Ôà˜6 "™:×+Ñ+Ñ,¨XÑ6Ü ×'Ñ'¨Ñ4ò5ð
 œÑ>°&¸¸°+Ô>Ó>Ñ>�Ø˜!‘9¤Ò$à˜‘F�AØ˜r™
ð ˜r™s™ð œ˜F 2™J×,Ñ,Ó-Ñ-�Ø˜2�JÙáØ×ÐØˆFá˜D HÒ,°¸Ò1AØ�M‰Mœ%  dÓ+Ô,Ø	ˆQ‰ˆðE ˆfŒ*ðH ×Ñð øð ús1   ‚B!G,Â$C?G,Æ#G(Æ$7G,ÇG,Ç"G*Ç#G,Ç*G,ÚmatchesÚ
emoji_onlyÚ
join_emojic           
   #   ó�  K  — |s|s| E d{  –—†  y|s | D ]  }|j                   t        k7  sŒ|–— Œ yd}d}d}g }| D �]r  }|}|r|j                  t        k(  rd}Œt        |j                  t        «      �r$|�r
|�rt        |d   j                  t
        «      rf|d   j                  j                  |j                  «       t        |d   j                   t        z   |j                   z   |d   j                  «      |d<   n•|j                  «       }t        |j                  t        «      sJ ‚|j                  t        |j                   t        z   |j                   z   t        |j                  |j                  «      «      «       n|j                  |«       d}d}�Œ]d}d}|E d{  –—†  |s|–— g }�Œu |E d{  –—†  y7 �Œ³7 Œ7 Œ
­w)ap  
    Filters the output of `tokenize()`

    :param matches: An iterable of tuples of the form ``(match_str, result)``
        where ``result`` is either an EmojiMatch or a string.
    :param emoji_only: If True, only EmojiMatch are returned in the output.
        If False all characters are returned
    :param join_emoji: If True, multiple EmojiMatch are merged into
        a single :class:`EmojiMatchZWJNonRGI` if they are separated only by a ZWJ.

    :return: An iterable of tuples :class:`Token` ``(char, char)``,
        :class:`Token` ``(chars, EmojiMatch)`` or :class:`Token` ``(chars, EmojiMatchZWJNonRGI)``
    NFTrZ   )
r_   r%   r`   Ú
isinstancer
   r   r]   r   ÚpoprC   )	rw   rx   ry   ÚtokenÚprevious_is_emojiÚprevious_is_zwjÚpre_previous_is_emojiÚaccumulatorÚprevs	            r   r   r   ù   s¸  è ø€ ñ" ™jØ×ÐØáØò 	ˆEØ�{‰{œdÓ"Ø“ð	ð 	ð ÐØ€OØ!ÐØ!€KØó  ˆØ 1ÐÙ §¡´Ò!4Ø"‰OÜ˜Ÿ™¤ZÕ0Ú$ªÜ˜k¨"™o×3Ñ3Ô5HÔIØ ‘O×)Ñ)×.Ñ.¨u¯{©{Ô;Ü&+Ø# B™×-Ñ-´Ñ4°u·{±{ÑBØ# B™×-Ñ-ó'�K ’Oð
 'Ÿ?™?Ó,�DÜ% d§j¡j´*Ô=Ð=Ð=Ø×&Ñ&ÜØ ŸJ™J¬Ñ-°·±Ñ;Ü/°·
±
¸E¿K¹KÓHóõð ×"Ñ" 5Ô)Ø $ÐØ#ŠOð !&ÐØ#ˆOØ"×"Ð"ÙØ’ØŠKðA ðB ×Ñða 	ùðX #øð ús9   ‚
GŒF?�G­E7GÆ$GÆ%GÆ9GÆ:GÇGÇGc                  óæ   — t         sft        j                  D ]S  } t         }t        | «      dz
  }t	        | «      D ]/  \  }}||vri ||<   ||   }||k(  sŒt        j                  |    |d<   Œ1 ŒU t         S )uÈ  
    Generate a search tree for demojize().
    Example of a search tree::

        EMOJI_DATA =
        {'a': {'en': ':Apple:'},
        'b': {'en': ':Bus:'},
        'ba': {'en': ':Bat:'},
        'band': {'en': ':Beatles:'},
        'bandit': {'en': ':Outlaw:'},
        'bank': {'en': ':BankOfEngland:'},
        'bb': {'en': ':BB-gun:'},
        'c': {'en': ':Car:'}}

        _SEARCH_TREE =
        {'a': {'data': {'en': ':Apple:'}},
        'b': {'a': {'data': {'en': ':Bat:'},
                    'n': {'d': {'data': {'en': ':Beatles:'},
                                'i': {'t': {'data': {'en': ':Outlaw:'}}}},
                        'k': {'data': {'en': ':BankOfEngland:'}}}},
            'b': {'data': {'en': ':BB-gun:'}},
            'data': {'en': ':Bus:'}},
        'c': {'data': {'en': ':Car:'}}}

                   _SEARCH_TREE
                 /     |        â§µ
               /       |          â§µ
            a          b             c
            |        / |  â§µ          |
            |       /  |    â§µ        |
        :Apple:   ba  :Bus:  bb     :Car:
                 /  â§µ         |
                /    â§µ        |
              :Bat:    ban     :BB-gun:
                     /     â§µ
                    /       â§µ
                 band       bank
                /   â§µ         |
               /     â§µ        |
            bandi :Beatles:  :BankOfEngland:
               |
            bandit
               |
           :Outlaw:


    r>   r   )r   r	   rA   r@   Ú	enumerate)Úemjrt   ÚlastidxrD   rr   s        r   rj   rj   >  sˆ   € õ` Ü ×+Ñ+ò 	EˆCÜ#ˆHÜ˜#“h ‘lˆGÜ$ S›>ò E‘��4Ø˜xÑ'Ø%'�H˜T‘NØ# D™>�Ø˜“<Ü'4×'?Ñ'?ÀÑ'D�H˜VÒ$ñEð	Eô Ðr   N)r4   Útypingr   r   r   r   r   r   r   r	   Ú__all__r%   r   r6   ra   r
   r   r   r   r8   r   r   rj   r9   r   r   ú<module>r‰      sÔ   ðò÷ @× ?Ý ò€ð €Ø!€ˆd�3˜�8‰nÓ !÷:Sñ :Sôz!T�Jô !TôH˜-ô ô2"ˆJô "ðX�Sð X Dð X¨X°e©_ó XðvBØ�e‰_ðBØ*.ðBØ<@ðBàˆe�_óBðJ:˜˜c 3˜h™ô :r   