o
    Xzjþ  ã                   @   s’   d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZ eeeeedœZe d¡Zd	Zdd
d„Zddd„ZdS )zÖ
Simple markdown parser which does not support nesting. Intended primarily
for use within the library, which attempts to handle emojies correctly,
since they seem to count as two characters and it's a bit strange.
é    Né   )Úadd_surrogateÚdel_surrogateÚwithin_surrogateÚ
strip_text)ÚTLObject)ÚMessageEntityBoldÚMessageEntityItalicÚMessageEntityCodeÚMessageEntityPreÚMessageEntityTextUrlÚMessageEntityMentionNameÚMessageEntityStrike)z**Ú__z~~ú`z```z\[([^]]*?)\]\(([\s\S]*?)\)z
[{0}]({1})c              
   C   sÒ  | s| g fS |du rt }n
t|tƒrt |¡}|s#|dur!| g fS t}t d dd„ t|tdd�D ƒ¡¡}d}g }t	| ƒ} |t| ƒk �r^|j
| |d�}|réttd| ¡ ƒƒ}|  ||t|ƒ d	 ¡}|d
krèd | d|… | |t|ƒ |… | |t|ƒ d… f¡} |D ]0}	|	j|	j |kr´|	j|kr«|	j|	j |t|ƒ kr«|	 jt|ƒd 8  _q„|	 jt|ƒ8  _q„|| }	|	tkrÍ| |	||| t|ƒ dƒ¡ n| |	||| t|ƒ ƒ¡ |	ttfv rç|t|ƒ }q=nk|�rT|j
| |d�}|�rTd | d| ¡ … | d	¡| | ¡ d… f¡} | ¡ | ¡  t| d	¡ƒ }
|D ]}	|	j|	j | ¡ k�r2|	 j|
8  _�q| t| ¡ t| d	¡ƒt| d¡ƒd�¡ |t| d	¡ƒ7 }q=|d	7 }|t| ƒk sDt| |ƒ} t| ƒ|fS )aª  
    Parses the given markdown message and returns its stripped representation
    plus a list of the MessageEntity's that were found.

    :param message: the message with markdown-like syntax to be parsed.
    :param delimiters: the delimiters to be used, {delimiter: type}.
    :param url_re: the URL bytes regex to be used. Must have two groups.
    :return: a tuple consisting of (clean message, [message entities]).
    Nú|c                 s   s    � | ]}d   t |¡¡V  qdS )z({})N)ÚformatÚreÚescape)Ú.0Úk© r   úW/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telethon/extensions/markdown.pyÚ	<genexpr>7   s   € ÿzparse.<locals>.<genexpr>T)ÚkeyÚreverser   )Úposé   éÿÿÿÿÚ r   )ÚoffsetÚlengthÚurl)ÚDEFAULT_URL_REÚ
isinstanceÚstrr   ÚcompileÚDEFAULT_DELIMITERSÚjoinÚsortedÚlenr   ÚmatchÚnextÚfilterÚgroupsÚfindr    r!   r   Úappendr
   ÚstartÚgroupÚendr   r   r   )ÚmessageÚ
delimitersÚurl_reÚdelim_reÚiÚresultÚmÚdelimr3   ÚentÚ
delim_sizer   r   r   Úparse   s€   



ÿ
ý"€ â ý€þ¾
Dr>   c                 C   sz  | r|s| S |s|dur| S t }|durt d¡ t|tƒr!|f}t| ƒ} dd„ | ¡ D ƒ}g }t|ƒD ]U\}}|j}|j|j	 }| 
t|ƒd¡}	|	r]| |||	f¡ | || |	f¡ q4d}
t|tƒrh|j}
nt|tƒrsd |j¡}
|
r‰| ||df¡ | || d |
¡f¡ q4|jdd	„ d
� |r¹| ¡ \}}}t| |ƒr©|d7 }t| |ƒs | d|… | | |d…  } |s”t| ƒS )aZ  
    Performs the reverse operation to .parse(), effectively returning
    markdown-like syntax given a normal text and its MessageEntity's.

    :param text: the text to be reconverted into markdown.
    :param entities: the MessageEntity's applied to the text.
    :return: a markdown-like text representing the combination of both inputs.
    Nzurl_fmt is deprecatedc                 S   s   i | ]\}}||“qS r   r   )r   r   Úvr   r   r   Ú
<dictcomp>¡   s    zunparse.<locals>.<dictcomp>ztg://user?id={}ú[z]({})c                 S   s   | d | d fS )Nr   r   r   )Útr   r   r   Ú<lambda>´   s    zunparse.<locals>.<lambda>)r   r   )r'   ÚwarningsÚwarnr$   r   r   ÚitemsÚ	enumerater    r!   ÚgetÚtyper0   r   r"   r   r   Úuser_idÚsortÚpopr   r   )ÚtextÚentitiesr5   Úurl_fmtÚ	insert_atr8   ÚentityÚsÚeÚ	delimiterr"   ÚatÚ_Úwhatr   r   r   Úunparse‰   sL   	



€

ÿörX   )NN)Ú__doc__r   rD   Úhelpersr   r   r   r   Útlr   Útl.typesr   r	   r
   r   r   r   r   r'   r&   r#   ÚDEFAULT_URL_FORMATr>   rX   r   r   r   r   Ú<module>   s     $û

l