
    MiX/              	       
   % S r SSKJrJrJrJrJrJr  SSKJ	r	  / SQr
Sr0 r\\\4   \S'    " S S5      r " S	 S
\5      r " S S\5      r " S S\5      rS\S\S\\   4S jrS\\   S\S\S\\   4S jrS\\\4   4S jrg)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                       \ rS rSrSrSrS\S\S\S\\	\\
4   S4   4S	 jrS
\	\\
4   4S jrS
\4S jrS
\S   4S jrS
\4S jrSrg)r
      zX
Represents a match of a "recommended for general interchange" (RGI)
emoji in a string.
emojistartenddatar   r   r   r   Nc                 :    Xl          X l         X0l         X@l        g Nr   )selfr   r   r   r   s        i/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/emoji/tokenizer.py__init__EmojiMatch.__init__"   s$     
!
86	b    returnc                     U R                   (       a:  U R                   R                  5       nU R                  US'   U R                  US'   U$ U R                  U R                  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_copyEmojiMatch.data_copy1   sO    
 99yy~~'H&*jjH]#$(HHH[!O#'::DHHEEr   c                 (    [         U R                  ;   $ )zX
Checks if this is a ZWJ-emoji.

:returns: True if this is a ZWJ-emoji, False otherwise
)_ZWJr   r   s    r   is_zwjEmojiMatch.is_zwj>   s     tzz!!r   )r   r
   c                 F    U R                  5       (       a  [        U 5      $ U $ )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   splitEmojiMatch.splitG   s     ;;== &&Kr   c                     U R                   R                   SU R                   SU R                   SU R                   S3$ N(z, :))	__class____name__r   r   r   r)   s    r   __repr__EmojiMatch.__repr__S   s9    ..))*!DJJ<r$**QtxxjPQRRr   )r   r   r   r   )r5   
__module____qualname____firstlineno____doc__	__slots__strintr   r   r   r   r%   boolr*   r-   r6   __static_attributes__ r   r   r
   r
      s    
 2Icc!$c+.c6;DcND<P6QcF4S> F" "
u:; 
S# Sr   r
   c                   l   ^  \ rS rSrSrSrS\4U 4S jjrS\4S jr	S\
4S jrSS	 jrS\4S
 jrSrU =r$ )r   W   zj
Represents a match of multiple emoji in a string that were joined by
zero-width-joiners (ZWJ/``\u200D``).)emojismatchc           
        > [         TU ]  UR                  UR                  UR                  UR
                  5        / U l         UR                  nUR                  R                  [        5       Hf  n[        X2U[        U5      -   [        R                  R                  US 5      5      nU R                  R                  U5        U[        U5      S-   -  nMh     g )N   )superr   r   r   r   r   rD   r-   r(   r
   lenr	   
EMOJI_DATAgetappend)r   rE   iemr4   s        r   r   EmojiMatchZWJ.__init__^   s    ekk599ejjI(*5KK""4(A1SV]-E-E-I-I!T-RSAKKq!Q!OA )r   r   c                 N    [         R                  S U R                   5       5      $ )z!
Joins a ZWJ-emoji into a string
c              3   8   #    U  H  oR                   v   M     g 7fr   r   .0rN   s     r   	<genexpr>%EmojiMatchZWJ.join.<locals>.<genexpr>o   s     6+Q+   )r(   joinrD   r)   s    r   rY   EmojiMatchZWJ.joinj   s    
 yy6$++666r   c                     g)NTrA   r)   s    r   r*   EmojiMatchZWJ.is_zwjq   s    r   c                     U $ r   rA   r)   s    r   r-   EmojiMatchZWJ.splitt   s    r   c                     U R                   R                   SU R                  5        SU R                   SU R                   S3$ r0   )r4   r5   rY   r   r   r)   s    r   r6   EmojiMatchZWJ.__repr__w   s;    ..))*!DIIK=4::,azQRSSr   )r   r   )r5   r8   r9   r:   r;   r<   r
   r   r=   rY   r?   r*   r-   r6   r@   __classcell__)r4   s   @r   r   r   W   sL    - I
j 
7c 7 T# T Tr   r   c                   >    \ rS rSrSrS\S\4S jrS rS\4S jrS	r	g
)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                 6    X/U l          U R                  5         g r   )rD   _update)r   rd   re   s      r   r   EmojiMatchZWJNonRGI.__init__   s    (=5r   c                     [         R                  S U R                   5       5      U l        U R                  S   R                  U l        U R                  S   R
                  U l        S U l        g )Nc              3   8   #    U  H  oR                   v   M     g 7fr   rS   rT   s     r   rV   .EmojiMatchZWJNonRGI._update.<locals>.<genexpr>   s     <1wwrX   r   )r(   rY   rD   r   r   r   r   r)   s    r   rg   EmojiMatchZWJNonRGI._update   sM    YY<<<
[[^))
;;r?&&	r   next_emoji_matchc                 Z    U R                   R                  U5        U R                  5         g r   )rD   rL   rg   )r   rn   s     r   _addEmojiMatchZWJNonRGI._add   s    +,r   )r   r   rD   r   r   N)
r5   r8   r9   r:   r;   r
   r   rg   rp   r@   rA   r   r   r   r   {   s+    * * Z r   r   c                   8    \ rS rSr% Sr\\S'   \\\4   \S'   Sr	g)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valuerA   N)
r5   r8   r9   r:   r;   r=   __annotations__r   r
   r@   rA   r   r   r   r      s    
 Jj!!r   r   stringkeep_zwjr   c              #     #    [        5       n[        R                  n/ nSn[        U 5      n/ nXV:  Ga  SnX   n	XW;   a2  US-  nU	[        :X  a!  U(       a  UR                  [        X5      5        MC  X;   at  US-   n
X)   nX:  a)  X
   U;   a!  X;   a  OXU
      nU
S-  n
X:  a
  X
   U;   a  M!  SU;   a6  US   nXU
 n[        XX5      nU
S-
  nSnUR                  [        X5      5        OU	[        :X  a  U(       a  US   R                  U;   a  US:  a  XS-
     U;   a  UR                  U5        X4S   R                     S   [        R                  S   :X  a3  U[        S	 US
S  5       5      -
  nX   [        :X  a	  US-  nUS	 O$US
S2	 OU[        US   R                  5      -
  nUS	 GM  U(       a  U Sh  vN   / nU(       d&  U	S:w  a   U	S:w  a  UR                  [        X5      5        US-  nXV:  a  GM  U Sh  vN   g NK N7f)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   FrG   r   Trl   status	componentc              3   L   #    U  H  n[        UR                  5      v   M     g 7fr   )rI   rt   )rU   ts     r   rV   tokenize.<locals>.<genexpr>   s     >+QCLL+s   "$Nu   ︎u   ️)get_search_treer	   rJ   rI   r(   rL   r   r
   rt   STATUSsum)rw   rx   treerJ   resultrM   lengthignoreconsumedcharjsub_treer$   code_points	match_objs                  r   r   r      s:     D))JF	A[F 	  *y;FAt|eD/0\AAzH*h!6;#1I.Q	 *h!6
 !#F+$qk
 '{qC	EeK;< DLr
  J.A1u% MM!":++,X6 ''45
 >&+>>>9$FAr
 rs F2J,,--2JFDH,1AMM%+,	QE *H   s1   B)H	-DH	9H:=H	:H	?H H	H	matches
emoji_only
join_emojic           
   #     #    U(       d  U(       d  U  Sh  vN   gU(       d$  U  H  nUR                   [        :w  d  M  Uv   M     gSnSnSn/ nU  GH  nUnU(       a  UR                  [        :X  a  SnM%  [        UR                  [        5      (       Ga9  U(       Ga  U(       Ga  [        US   R                  [
        5      (       af  US   R                  R                  UR                  5        [        US   R                   [        -   UR                   -   US   R                  5      US'   OUR                  5       n[        UR                  [        5      (       d   eUR                  [        UR                   [        -   UR                   -   [        UR                  UR                  5      5      5        OUR                  U5        SnSnGM~  SnSnU Sh  vN   U(       d  Uv   / nGM     U Sh  vN   g GN N$ N
7f)aH  
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)``
NFTrl   )
rt   r(   ru   
isinstancer
   r   rp   r   poprL   )	r   r   r   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0$k"o335HIIO))..u{{;&+#B--4u{{B#B--'KO
 '??,D%djj*====&& JJ-;/

EKKH ""5) $#O !&#O"""KA B a 	X # s9   HG:#HFHG=H4G?5H=H?Hc                      [         (       di  [        R                   HU  n [         n[        U 5      S-
  n[	        U 5       H/  u  p4XA;  a  0 X'   X   nX2:X  d  M  [        R                  U    US'   M1     MW     [         $ )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:


rG   r   )r   r	   rJ   rI   	enumerate)emjr   lastidxrM   r   s        r   r   r   >  sr    ` < ++C#H#hlG$S>'%'HN#><'4'?'?'DHV$ * , r   N)r;   typingr   r   r   r   r   r   r   r	   __all__r(   r   r=   rv   r
   r   r   r   r?   r   r   r   rA   r   r   <module>r      s    @ ?  !d38n !:S :Sz!TJ !TH- 2"J "XS XD XXe_ XvBe_B*.B<@Be_BJ:c3h :r   