
    i(#                         S SK r S SKrS SKrS SKJr  S SKJr  S SKrS SKJr  S SK	J
r
  S SKJr  SSKJr  \R                  " \5      r " S	 S
\5      r " S S5      rg)    N)
HTMLParser)Optional)raw)MessageEntityType)PeerIdInvalid   )utilsc                   h   ^  \ rS rSr\R
                  " S5      rS	U 4S jjrS rS r	S r
S rSrU =r$ )
Parser"   ztg://user\?id=(\d+)c                 X   > [         TU ]  5         Xl        SU l        / U l        0 U l        g )N )super__init__clienttextentitiestag_entities)selfr   	__class__s     A/app/mltbenv/lib/python3.13/site-packages/pyrogram/parser/html.pyr   Parser.__init__%   s)    	    c                    [        U5      n0 nUS;   a  [        R                  R                  nGOUS;   a  [        R                  R                  nGOUS:X  a  [        R                  R
                  nGOUS;   a  [        R                  R                  nGOxUS:X  a$  [        R                  R                  nSU;   US'   GONUS:X  a  [        R                  R                  nGO,US	:X  a0  [        R                  R                  nUR                  S
S5      US
'   OUS:X  a  [        R                  R                  nOUS:X  a  UR                  SS5      n[        R                  R                  U5      nU(       a8  [        R                  R                  n[!        UR#                  S5      5      US'   O_[        R                  R$                  nXSS'   O@US:X  a9  [        R                  R&                  n[!        UR                  S5      5      nXsS'   Og XR(                  ;  a  / U R(                  U'   U R(                  U   R+                  U" S[-        U R.                  5      SS.UD65        g )N)bstrong)iemu)sdelstrike
blockquote
expandable	collapsedcodeprelanguager   spoilerahrefr   user_idurlemojiiddocument_idr   offsetlength )dictr   typesMessageEntityBoldMessageEntityItalicMessageEntityUnderlineMessageEntityStrikeMessageEntityBlockquoteMessageEntityCodeMessageEntityPregetMessageEntitySpoilerr   
MENTION_REmatchInputMessageEntityMentionNameintgroupMessageEntityTextUrlMessageEntityCustomEmojir   appendlenr   )r   tagattrsextraentityr-   mentioncustom_emoji_ids           r   handle_starttagParser.handle_starttag.   s   U/!YY00FKYY22FCZYY55F**YY22FL YY66F!-!6E+F]YY00FE\YY//F %		*b 9E*IYY33FCZ))FB'C''--c2G@@#&w}}Q'7#8i 77"eG^YY77F!%))D/2O#2- '''%'Dc"#%%f&VC		N1&VPU&VWr   c                     [         R                  " U5      nU R                  R                  5        H*  nU H!  nU=R                  [        U5      -  sl        M#     M,     U =R                  U-  sl        g N)htmlunescaper   valuesr3   rH   r   )r   datar   rL   s       r   handle_dataParser.handle_data[   sU    }}T"))002H"T* # 3 			T	r   c                 Z    U R                   R                  U R                  U   R                  5       5        U R                  U   (       d  U R                  R                  U5        g g ! [        [
        4 a1    U R                  5       u  p#US-  n[        R                  SXU5         g f = f)Nr   z)Unmatched closing tag </%s> at line %s:%s)	r   rG   r   popKeyError
IndexErrorgetposlogdebug)r   rI   liner2   s       r   handle_endtagParser.handle_endtagd   s    		+MM  !2!23!7!;!;!=> $$S)!!%%c* * *% 	V;;=LDaKFIIA3fU		Vs   6A) )>B*)B*c                     g rR   r4   )r   messages     r   errorParser.errorp   s    r   )r   r   r   r   )r   pyrogram.Client)__name__
__module____qualname____firstlineno__recompiler@   r   rO   rW   ra   re   __static_attributes____classcell__)r   s   @r   r   r   "   s2    23J+XZ
+ r   r   c                   Z    \ rS rSrS\S   4S jrS\S\4S jr\	S\S\
S\4S	 j5       rS
rg)HTMLt   r   rg   c                     Xl         g rR   r   )r   r   s     r   r   HTML.__init__u   s    r   r   returnc           	        #    [         R                  " SSU5      n[         R                  " SSU5      n[        U R                  5      nUR	                  [
        R                  " U5      5        UR                  5         UR                  (       ak  / nUR                  R                  5        H&  u  pEUR                  SU S[        U5       S35        M(     [        R                  SSR                  U5      5        / nUR                   H}  n[!        U["        R$                  R&                  5      (       a@   U R                  b2  U R                  R)                  UR*                  5      I S h  vN Ul        UR                  U5        M     [/        [1        S	 U5      5      n[
        R2                  " UR4                  5      [7        US
 S9=(       d    S S.$  Ni! [,         a     M  f = f7f)Nz^\s*(<[\w<>=\s\"]*>)\s*z\1z\s*(</[\w</>]*>)\s*$<z> (x)zUnclosed tags: %sz, c                      U R                   S:  $ )Nr   )r3   )xs    r   <lambda>HTML.parse.<locals>.<lambda>   s    Ar   c                     U R                   $ rR   )r2   es    r   r|   r}      s    qxxr   key)rd   r   )rl   subr   r   feedr	   add_surrogatescloser   itemsrG   rH   r^   infojoinr   
isinstancer   r6   rB   resolve_peerr,   r   listfilterremove_surrogatesr   sorted)r   r   parserunclosed_tagsrI   r   rL   s          r   parse
HTML.parsex   sz    vv0%>vv-ud;$E((./M!'!4!4!:!:!<$$qT#h-%BC "= HH($))M*BCooF&#))"I"IJJ{{./3{{/G/G/W)W OOF# & 5x@A ..v{{;x-?@HD
 	
 *X$ s=   D1G&45G)G*	G3A G&G
G#G&"G##G&r   c                   ^^^^ S mS[         S[         4UUUU4S jjm[        R                  " U 5      n / mTR                  S S9  SnU[	        T5      :  a  UT" U5      -  nU[	        T5      :  a  M  T(       aD  TS   S	   n[        T5       H-  u  pEU S U U-   [        R                  " XU 5      -   XS  -   n UnM/     [        R                  " U 5      $ )
Nc                 @   U R                   nU R                  nX R                  -   nU[        R                  [        R
                  [        R                  [        R                  4;   a+  UR                  S   R                  5       nSU S3nSU S3nGOU[        R                  :X  aN  UR                  R                  5       n[        U SS5      =(       d    SnU(       a	  SU SU S3OSU S3nSU S3nGO$U[        R                  :X  a?  UR                  R                  5       n[        U S	S
5      nSU U(       a  SOS S3nSU S3nOU[        R                  [        R                  4;   a'  UR                  R                  5       nSU S3nSU S3nOU[        R                  :X  a  U R                   n	SU	 S3nSnO]U[        R"                  :X  a  U R$                  n
SU
R&                   S3nSnO*U[        R(                  :X  a  U R*                  nSU S3nSnOgXR4Xc44$ )zG
Parses a single entity and returns (start_tag, start), (end_tag, end)
r   rx   >z</r(   r   z language="z">r$   Fz expandablez	<a href="z</a>z<a href="tg://user?id=z<emoji id="z</emoji>N)typer2   r3   r   BOLDITALIC	UNDERLINESTRIKETHROUGHnamelowerPREgetattr
BLOCKQUOTECODESPOILER	TEXT_LINKr-   TEXT_MENTIONuserr/   CUSTOM_EMOJIrN   )rL   entity_typestartendr   	start_tagend_tagr(   r$   r-   r   rN   s               r   	parse_oneHTML.unparse.<locals>.parse_one   s.    !++KMME--'C!&&!((!++!//	  #''*002vQK	tfA, 1 5 55"''--/"6:r:@bAIav[
"=QRSWRXXY{	tfA, 1 < <<"''--/$V\5A
vzmr%J!L	tfA,!&&!))!  #''--/vQK	tfA, 1 ; ;;jj'uB/	  1 > >>{{4TWWIR@	  1 > >>"("8"8)/):"=	$%~55r   entity_irv   c                 0  > T	" TU    5      nUc  gUu  u  p#u  pETR                  X#45        U S-   nU[        T5      :  aB  TU   R                  U:  a/  UT
" U5      -  nU[        T5      :  a  TU   R                  U:  a  M/  TR                  XE45        X`-
  $ )a  
Takes the index of the entity to start parsing from, returns the number of parsed entities inside it.
Uses entities_offsets as a stack, pushing (start_tag, start) first, then parsing nested entities,
and finally pushing (end_tag, end) to the stack.
No need to sort at the end.
r   )rG   rH   r2   )r   thisr   r   r   r   
internal_ir   entities_offsetsr   	recursives          r   r   HTML.unparse.<locals>.recursive   s     Xh/0D|15.Y##Y$67!AJs8},*1E1L1Ls1Ri
33
 s8},*1E1L1Ls1R##WN3((r   c                 4    U R                   U R                  * 4$ rR   r1   r   s    r   r|   HTML.unparse.<locals>.<lambda>   s    QXXy$9r   r   r   r   )	rC   r	   r   sortrH   reversedrS   escaper   )	r   r   r   last_offsetrL   r2   r   r   r   s	    `    @@@r   unparseHTML.unparse   s    1	6f	) 	) 	) 	)& ##D) 	9: #h-1A #h- *2.q1K"*+;"<GV}v-D<T0UUX\]iXjj$ #= &&t,,r   rt   N)rh   ri   rj   rk   r   r   strr5   r   staticmethodr   r   rn   r4   r   r   rq   rq   t   sV    x(9: #
 #
 #
J Z-c Z-T Z-c Z- Z-r   rq   )rS   loggingrl   html.parserr   typingr   pyrogramr   pyrogram.enumsr   pyrogram.errorsr   r   r	   	getLoggerrh   r^   r   rq   r4   r   r   <module>r      sP   &   	 "    , ) !OZ OdD- D-r   