
    h"                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ ddlmZ  ej        e          Z G d	 d
e          Z G d d          ZdS )    N)
HTMLParser)Optional)raw)MessageEntityType)PeerIdInvalid   )utilsc                   X     e Zd Z ej        d          Zd	 fdZd Zd Zd Z	d Z
 xZS )
Parserztg://user\?id=(\d+)clienthydrogram.Clientc                     t                                                       || _        d| _        g | _        i | _        d S )N )super__init__r   textentitiestag_entities)selfr   	__class__s     U/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/hydrogram/parser/html.pyr   zParser.__init__'   s<    	    c                    t          |          }i }|dv rt          j        j        }n|dv rt          j        j        }nw|dk    rt          j        j        }n^|dv rt          j        j        }nG|dk    rt          j        j        }n.|dk    rt          j        j        }n|dk    r+t          j        j	        }|
                    dd	          |d<   n|d
k    rt          j        j        }n|dk    r|
                    dd	          }t          j                            |          x}r7t          j        j        }t!          |                    d                    |d<   nXt          j        j        }||d<   nA|dk    r9t          j        j        }t!          |
                    d                    }||d<   nd S || j        vr
g | j        |<   | j        |                              |dt-          | j                  dd|           d S )N>   bstrong>   iemu>   sdelstrike
blockquote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_starttagzParser.handle_starttag0   s   U/!!Y0FFKY2FFCZZY5FF***Y2FFL  Y6FFF]]Y0FFE\\Y/F %		*b 9 9E*IY3FFCZZ))FB''C +11#666w #@#&w}}Q'7'7#8#8i  7"eG^^Y7F!%))D//22O#2E-  Fd'''%'Dc"#%%ff&VC	NN1&V&VPU&V&VWWWWWr   c                     t          j        |          }| j                                        D ]$}|D ]}|xj        t          |          z  c_         %| xj        |z  c_        d S N)htmlunescaper   valuesr0   rE   r   )r   datar   rI   s       r   handle_datazParser.handle_dataZ   sq    }T"")0022 	+ 	+H" + +T*+ 			T				r   c                 j   	 | j                             | j        |                                                    | j        |         s| j                            |           d S d S # t          t
          f$ r= |                                 \  }}|dz  }t                              d|||           Y d S w xY w)Nr   z)Unmatched closing tag </%s> at line %s:%s)	r   rD   r   popKeyError
IndexErrorgetposlogdebug)r   rF   liner/   s       r   handle_endtagzParser.handle_endtagc   s    		+M  !23!7!;!;!=!=>>> $S) +!%%c*****+ + *% 	V 	V 	V;;==LD&aKFIIA3fUUUUUU		Vs   7A$ $A
B21B2c                     d S rN   r1   )r   messages     r   errorzParser.erroro   s    r   )r   r   )__name__
__module____qualname__recompiler=   r   rL   rS   r\   r_   __classcell__)r   s   @r   r   r   $   s        233J     (X (X (XT  
+ 
+ 
+      r   r   c                   R    e Zd Zded         fdZdefdZededefd            Z	dS )	HTMLr   r   c                     || _         d S rN   )r   )r   r   s     r   r   zHTML.__init__t   s    r   r   c           	        K   t          j        dd|          }t          j        dd|          }t          | j                  }|                    t          j        |                     |                                 |j        rxg }|j        	                                D ].\  }}|
                    d| dt          |           d           /t                              dd                    |                     g }|j        D ]y}t!          |t"          j        j                  rC	 | j        *| j                            |j                   d {V |_        n# t,          $ r Y `w xY w|
                    |           zt/          t1          d	 |                    }t          j        |j                  t7          |d
           pd dS )Nz^\s*(<[\w<>=\s\"]*>)\s*z\1z\s*(</[\w</>]*>)\s*$<z> (x)zUnclosed tags: %sz, c                     | j         dk    S )Nr   )r0   )xs    r   <lambda>zHTML.parse.<locals>.<lambda>   s    A r   c                     | j         S rN   )r/   es    r   rn   zHTML.parse.<locals>.<lambda>   s    qx r   key)r^   r   )rc   subr   r   feedr	   add_surrogatescloser   itemsrD   rE   rY   infojoinr   
isinstancer   r3   r?   resolve_peerr)   r   listfilterremove_surrogatesr   sorted)r   r   parserunclosed_tagsrF   r   rI   s          r   parsez
HTML.parsew   s     v0%>>v-ud;;$$E(../// 	DM!'!4!:!:!<!< D DX$$%B%B%B#h--%B%B%BCCCCHH($))M*B*BCCCo 	$ 	$F&#)"IJJ {./3{/G/G/W/W)W)W)W)W)W)W$   H OOF#### 55x@@AA .v{;;x-?-?@@@HD
 
 	
s   (1E
E'&E'r   c                    d dt           dt           ffdt          j        |           } g                     d            d}|t	                    k     r!| |          z  }|t	                    k     !rZd         d	         }t                    D ]<\  }}| d |         |z   t          j        | ||                   z   | |d          z   } |}=t          j        |           S )
Nc                    | j         }| j        }|| j        z   }|t          j        t          j        t          j        t          j        hv r-|j        d         	                                }d| d}d| d}n|t          j
        k    rD|j        	                                }t          | dd          pd}|r	d| d| dnd| d}d| d}n|t          j        t          j        t          j        hv r&|j        	                                }d| d}d| d}ng|t          j        k    r| j        }d	| d}d
}nG|t          j        k    r| j        }	d|	j         d}d
}n"|t          j        k    r| j        }
d|
 d}d}ndS ||f||ffS )z_
            Parses a single entity and returns (start_tag, start), (end_tag, end)
            r   rj   >z</r%   r   z language="z">z	<a href="z</a>z<a href="tg://user?id=z<emoji id="z</emoji>N)typer/   r0   r   BOLDITALIC	UNDERLINESTRIKETHROUGHnamelowerPREgetattrCODE
BLOCKQUOTESPOILER	TEXT_LINKr*   TEXT_MENTIONuserr,   CUSTOM_EMOJIrK   )rI   entity_typestartendr   	start_tagend_tagr%   r*   r   rK   s              r   	parse_onezHTML.unparse.<locals>.parse_one   s    !+KME&-'C!&!(!+!/	   #'*0022'KKK	&t,,, 1 555"'--//"6:r::@bAIZ======={SW{{{	&t,,,!&!,!)!  
 #'--//'KKK	&t,,, 1 ;;;j////	  1 >>>{@TW@@@	  1 >>>"("8=/===	$tu%~55r   entity_ireturnc                 `    	|                    }|dS |\  \  }}\  }}                     ||f           | dz   }|t                    k     rC|         j        |k     r2| 
|          z  }|t                    k     r|         j        |k     2                     ||f           || z
  S )aR  
            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.
            Nr   )rD   rE   r/   )r   thisr   r   r   r   
internal_ir   entities_offsetsr   	recursives          r   r   zHTML.unparse.<locals>.recursive   s     9Xh/00D|q15.Y###Y$6777!AJs8}},,*1E1Ls1R1Rii
333
 s8}},,*1E1Ls1R1R##WcN333((r   c                      | j         | j         fS rN   r.   rp   s    r   rn   zHTML.unparse.<locals>.<lambda>   s    QXy$9 r   rr   r   r   )	r@   r	   rv   sortrE   reversedrO   escaper   )	r   r   r   last_offsetrI   r/   r   r   r   s	    `    @@@r   unparsezHTML.unparse   sV   -	6 -	6 -	6^	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)& #D)) 	99::: #h--1A #h--  
	%*2.q1K"*+;"<"< % %&Mk$vk'9":;;< ;<<()  %&t,,,r   N)
r`   ra   rb   r   r   strr   staticmethodr}   r   r1   r   r   rg   rg   s   s        x(:;    #
 #
 #
 #
 #
J [-c [-T [- [- [- \[- [- [-r   rg   )rO   loggingrc   html.parserr   typingr   	hydrogramr   hydrogram.enumsr   hydrogram.errorsr   r   r	   	getLoggerr`   rY   r   rg   r1   r   r   <module>r      s  (   				 " " " " " "                 - - - - - - * * * * * *      g!!L L L L LZ L L L^E- E- E- E- E- E- E- E- E- E-r   