B
    fd                 @   s   d dl Z d dl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Z
dZd	Zd
ZdZdZdZedjddd dd eeeeee
egD D dZdZdZdZeegZG dd dZdS )    N)Optional)MessageEntityType   )utils)HTMLz**__z--z~~z||`z```z({d})|\[(.+?)\]\((.+?)\)|c             C   s   g | ]}d  |qS ) )join).0i r   </tmp/pip-unpacked-wheel-rcokkf2l/pyrogram/parser/markdown.py
<listcomp>&   s    r   c             C   s   g | ]}d d |D qS )c             S   s   g | ]}d | qS )\r   )r   jr   r   r   r   '   s    z<listcomp>.<listcomp>r   )r   r   r   r   r   r   '   s   )dz<{}>z</{}>z<a href="{}">{}</a>c               @   sD   e Zd Zed dddZdeedddZeee	d	d
dZ
dS )Markdownzpyrogram.Client)clientc             C   s   t || _d S )N)r   html)selfr   r   r   r   __init__;   s    zMarkdown.__init__F)textstrictc          	      s  |rt |}t }d}x~ttt|D ]h\}}| \}}| \}	}
}|	d}|	t
krh| }|rv|	t
krvq,|
rt||t||
|}q,|	tkrd}nV|	tkrd}nH|	tkrd}n:|	tkrd}n,|	tkrd}n|	tkrd}n|	tkr,d	}nq,|	|kr||	 t|}n||	 t|}|	tkr|	|kr||td  d
d }|ttd  }t||d| d|}q,t||	||}q,W | j |I d H S )NFr   br   uscodepreZspoiler
z<pre language="z">)r   escapeset	enumeraterefinditerMARKDOWN_REspangroupsgroupFIXED_WIDTH_DELIMSr   Zreplace_once
URL_MARKUPformat
BOLD_DELIMITALIC_DELIMUNDERLINE_DELIMSTRIKE_DELIM
CODE_DELIM	PRE_DELIMSPOILER_DELIMaddOPENING_TAGremoveCLOSING_TAGfindsplitlenparse)r   r   r   delimsZis_fixed_widthr   matchstart_delimZtext_urlurlfulltagZdelim_and_languagelanguager   r   r   r;   >   sT    





zMarkdown.parse)r   entitiesc             C   s  t | } g }xJ|D ]@}|j}|j}||j }|tjkrFt }}n|tjkrZt	 }}n|tj
krnt }}n|tjkrt }}n|tjkrt }}n|tjkrt|ddpd}	t |	 d}dt }nr|tjkrt }}n^|tjkrt }}nJ|tjkr|j}
d}d|
 d}n&|tjkr|j}d}d|j d}nq|||f |||f qW tdd	 tt|d
d	 dd}x.|D ]&\}}| d | | | |d   } qW t | S )NrD   r
   r    [z]()z](tg://user?id=c             S   s   | d S )Nr   r   )xr   r   r   <lambda>       z"Markdown.unparse.<locals>.<lambda>c             S   s   | d d | d fS )Nr   r   r   )rH   r   r   r   rI      rJ   T)keyreverse) r   Zadd_surrogatestypeoffsetlengthr   ZBOLDr-   ZITALICr.   Z	UNDERLINEr/   ZSTRIKETHROUGHr0   ZCODEr1   ZPREgetattrr2   Z
BLOCKQUOTEZSPOILERr3   Z	TEXT_LINKrA   ZTEXT_MENTIONuseridappendmapsortedr#   Zremove_surrogates)r   rE   Zentities_offsetsentityZentity_typer>   endZ	start_tagZend_tagrD   rA   rQ   rN   r   r   r   unparsev   sX    


















"zMarkdown.unparseN)F)__name__
__module____qualname__r   r   strboolr;   staticmethodlistrX   r   r   r   r   r   :   s   8r   )r   r$   typingr   ZpyrogramZpyrogram.enumsr   r
   r   r   r-   r.   r/   r0   r3   r1   r2   compiler,   r   r&   r5   r7   r+   r*   r   r   r   r   r   <module>   s:   