o
    Uj|(                     @  s   d dl mZ d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ erHd dlmZ d d	lmZ d d
lmZ dZdddZdddZG dd deZG dd deZG dd deZe Ze ZdS )    )annotationsN)ABCabstractmethod)datedatetimetime)TYPE_CHECKINGcast)MessageEntityType)create_tg_link)	Generator)Pattern)MessageEntity)HtmlDecorationMarkdownDecorationTextDecorationadd_surrogateshtml_decorationmarkdown_decorationremove_surrogatestextstrreturnbytesc                 C  
   |  dS Nz	utf-16-le)encoder    r   W/opt/telega-widget/.venv/lib/python3.10/site-packages/aiogram/utils/text_decorations.pyr         
r   c                 C  r   r   )decoder   r   r   r   r   !   r    r   c                   @  s   e Zd Zd9ddZd:d;ddZ		d<d=ddZed>ddZed?ddZed?ddZ	ed?ddZ
ed?dd Zed@d"d#Zed?d$d%Zed?d&d'Zed?d(d)Zed?d*d+ZedAd-d.Zed?d/d0Zed?d1d2Ze	d:dBd7d8ZdS )Cr   entityr   r   r   r   c              	   C  sH  |j tjtjtjtjtjtjtjhv r|S |j tj	tj
tjtjtjtjtjtjhv r6ttt| |j |dS |j tjkrM|jrG| j||jdS | j|dS |j tjkrjddlm} t||j}| j|d|j dS |j tjkr{| j|tt|jdS |j tj kr| j!|tt|j"dS |j tj#kr| j$|tt%|j&|j'dS | (|S )	zk
        Apply single entity to text

        :param entity:
        :param text:
        :return:
        )value)r#   languager   )Userztg://user?id=r#   link)r#   custom_emoji_id)r#   	unix_timedate_time_format))typer
   BOT_COMMANDURLMENTIONPHONE_NUMBERHASHTAGCASHTAGEMAILBOLDITALICCODE	UNDERLINESTRIKETHROUGHSPOILER
BLOCKQUOTEEXPANDABLE_BLOCKQUOTEr	   r   getattrPREr$   pre_languagepreTEXT_MENTIONaiogram.typesr%   userr'   id	TEXT_LINKurlCUSTOM_EMOJIcustom_emojir(   	DATE_TIME	date_timeintr)   r*   quote)selfr"   r   r%   rA   r   r   r   apply_entity&   sT   




zTextDecoration.apply_entityNentitieslist[MessageEntity] | Nonec              	   C  s.   d | t||rt|dd dS g S )z
        Unparse message entities

        :param text: raw text
        :param entities: Array of MessageEntities
        :return:
         c                 S  s   | j S Noffset)itemr   r   r   <lambda>i   s    z(TextDecoration.unparse.<locals>.<lambda>)key)join_unparse_entitiesr   sorted)rK   r   rM   r   r   r   unparse^   s   zTextDecoration.unparser   list[MessageEntity]rR   
int | NonelengthGenerator[str, None, None]c           	      #  s     d u rd |pt |}t|D ]S\}}|jd  k rq|jd  kr3| t| |jd  V  |jd }|jd |jd   tt fdd||d d  }| |d	| j
||| dV  q |k rw| t| | V  d S d S )Nr      c                   s   | j d  pdk S )Nr^   r   rQ   )erQ   r   r   rT      s    z2TextDecoration._unparse_entities.<locals>.<lambda>   rO   )rR   r\   )len	enumeraterR   rJ   r   r\   listfilterrL   rV   rW   )	rK   r   rM   rR   r\   indexr"   startsub_entitiesr   rQ   r   rW   m   s*   
z TextDecoration._unparse_entitiesr#   r'   c                 C     d S rP   r   rK   r#   r'   r   r   r   r'         zTextDecoration.linkc                 C  rh   rP   r   rK   r#   r   r   r   bold   rj   zTextDecoration.boldc                 C  rh   rP   r   rk   r   r   r   italic   rj   zTextDecoration.italicc                 C  rh   rP   r   rk   r   r   r   code   rj   zTextDecoration.codec                 C  rh   rP   r   rk   r   r   r   r>      rj   zTextDecoration.prer$   c                 C  rh   rP   r   rK   r#   r$   r   r   r   r=      rj   zTextDecoration.pre_languagec                 C  rh   rP   r   rk   r   r   r   	underline   rj   zTextDecoration.underlinec                 C  rh   rP   r   rk   r   r   r   strikethrough   rj   zTextDecoration.strikethroughc                 C  rh   rP   r   rk   r   r   r   spoiler   rj   zTextDecoration.spoilerc                 C  rh   rP   r   rk   r   r   r   rJ      rj   zTextDecoration.quoter(   c                 C  rh   rP   r   rK   r#   r(   r   r   r   rF      rj   zTextDecoration.custom_emojic                 C  rh   rP   r   rk   r   r   r   
blockquote   rj   zTextDecoration.blockquotec                 C  rh   rP   r   rk   r   r   r   expandable_blockquote   rj   z$TextDecoration.expandable_blockquoter)   int | datetimer*   
str | Nonec                 C  rh   rP   r   )rK   r#   r)   r*   r   r   r   rH      s   zTextDecoration.date_time)r"   r   r   r   r   r   rP   )r   r   rM   rN   r   r   )NN)
r   r   rM   rZ   rR   r[   r\   r[   r   r]   r#   r   r'   r   r   r   r#   r   r   r   r#   r   r$   r   r   r   r#   r   r(   r   r   r   r#   r   r)   rv   r*   rw   r   r   )__name__
__module____qualname__rL   rY   rW   r   r'   rl   rm   rn   r>   r=   rp   rq   rr   rJ   rF   rt   ru   rH   r   r   r   r   r   %   sF    
8r   c                   @  s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdddd<ddZd=ddZd>ddZd>ddZd>d d!Zd>d"d#Zd?d%d&Zd>d'd(Zd>d)d*Zd>d+d,Zd>d-d.Zd@d0d1Zd>d2d3Zd>d4d5Z	dAdBd:d;ZdS )Cr   biusrn   r>   az
tg-spoilerztg-emojiztg-timert   N)attrsflagstagr   contentr   dict[str, str] | Noner   list[str] | Noner   c                C  sj   g }|r| dd | D  |r| dd |D  d|}|r'd| }d| | d| d| dS )Nc                 s  s$    | ]\}}| d | dV  qdS )z=""Nr   ).0kvr   r   r   	<genexpr>   s   " z&HtmlDecoration._tag.<locals>.<genexpr>c                 s  s    | ]}| V  qd S rP   r   )r   flagr   r   r   r      s     <>z</)extenditemsrV   )rK   r   r   r   r   prepared_attrs	attrs_strr   r   r   _tag   s   
zHtmlDecoration._tagr#   r'   c                 C     | j | j|d|idS )Nhrefr   )r   LINK_TAGri   r   r   r   r'         zHtmlDecoration.linkc                 C     |  | j|S rP   )r   BOLD_TAGrk   r   r   r   rl         zHtmlDecoration.boldc                 C  r   rP   )r   
ITALIC_TAGrk   r   r   r   rm      r   zHtmlDecoration.italicc                 C  r   rP   )r   CODE_TAGrk   r   r   r   rn      r   zHtmlDecoration.codec                 C  r   rP   )r   PRE_TAGrk   r   r   r   r>      r   zHtmlDecoration.prer$   c              	   C  s&   |  | j| j | j|dd| idS )Nr$   z	language-r   )r   r   r   ro   r   r   r   r=      s   zHtmlDecoration.pre_languagec                 C  r   rP   )r   UNDERLINE_TAGrk   r   r   r   rp      r   zHtmlDecoration.underlinec                 C  r   rP   )r   STRIKETHROUGH_TAGrk   r   r   r   rq     r   zHtmlDecoration.strikethroughc                 C  r   rP   )r   SPOILER_TAGrk   r   r   r   rr     r   zHtmlDecoration.spoilerc                 C  s   t j|ddS )NF)rJ   )htmlescaperk   r   r   r   rJ     r   zHtmlDecoration.quoter(   c                 C  r   )Nzemoji-idr   )r   	EMOJI_TAGrs   r   r   r   rF     r   zHtmlDecoration.custom_emojic                 C  r   rP   r   BLOCKQUOTE_TAGrk   r   r   r   rt     r   zHtmlDecoration.blockquotec                 C  s   | j | j|dgdS )N
expandable)r   r   rk   r   r   r   ru     s   z$HtmlDecoration.expandable_blockquoter)   rv   r*   rw   c                 C  s@   t |trt| }dt|i}|r||d< | j| j||dS )Nunixformatr   )
isinstancer   rI   	timestampr   r   DATE_TIME_TAG)rK   r#   r)   r*   argsr   r   r   rH     s   
zHtmlDecoration.date_time)
r   r   r   r   r   r   r   r   r   r   rx   ry   rz   r{   rP   r|   )r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   rl   rm   rn   r>   r=   rp   rq   rr   rJ   rF   rt   ru   rH   r   r   r   r   r      s<    












r   c                   @  s   e Zd ZU edZded< d+dd	Zd,d
dZd,ddZ	d,ddZ
d,ddZd-ddZd,ddZd,ddZd,ddZd,ddZd.ddZd,d d!Zd,d"d#Z	$d/d0d)d*Zd$S )1r   z([_*\[\]()~`>#+\-=|{}.!\\])zPattern[str]MARKDOWN_QUOTE_PATTERNr#   r   r'   r   c                 C  s   d| d| dS )N[z]()r   ri   r   r   r   r'   '     zMarkdownDecoration.linkc                 C     d| dS )N*r   rk   r   r   r   rl   *     zMarkdownDecoration.boldc                 C  r   )Nz_r   rk   r   r   r   rm   -  r   zMarkdownDecoration.italicc                 C  r   )N`r   rk   r   r   r   rn   0  r   zMarkdownDecoration.codec                 C  s   d| dS )Nz```

```r   rk   r   r   r   r>   3  r   zMarkdownDecoration.prer$   c                 C  s   d| d| dS )Nz```
r   r   ro   r   r   r   r=   6  r   zMarkdownDecoration.pre_languagec                 C  r   )Nz__r   rk   r   r   r   rp   9  r   zMarkdownDecoration.underlinec                 C  r   )N~r   rk   r   r   r   rq   <  r   z MarkdownDecoration.strikethroughc                 C  r   )N||r   rk   r   r   r   rr   ?  r   zMarkdownDecoration.spoilerc                 C  s   t j| jd|dS )Nz\\\1)patternreplstring)resubr   rk   r   r   r   rJ   B  r   zMarkdownDecoration.quoter(   c                 C  s    t d|d}d| j||d S )Nemoji)emoji_id!r&   )r   r'   )rK   r#   r(   r'   r   r   r   rF   E  s   zMarkdownDecoration.custom_emojic                 C  s   d dd | D S )Nr   c                 s      | ]}d | V  qdS r   Nr   r   liner   r   r   r   J      z0MarkdownDecoration.blockquote.<locals>.<genexpr>rV   
splitlinesrk   r   r   r   rt   I  s   zMarkdownDecoration.blockquotec                 C  s   d dd | D d S )Nr   c                 s  r   r   r   r   r   r   r   r   M  r   z;MarkdownDecoration.expandable_blockquote.<locals>.<genexpr>r   r   rk   r   r   r   ru   L  s   z(MarkdownDecoration.expandable_blockquoteNr)   rv   r*   rw   c                 C  sP   t |trt| }dt|i}|r||d< tdi |}d| j||d S )Nr   r   r   r   )r'   )r   )r   r   rI   r   r   r   r'   )rK   r#   r)   r*   link_paramsr'   r   r   r   rH   O  s   
zMarkdownDecoration.date_timerx   ry   rz   r{   rP   r|   )r}   r~   r   r   compiler   __annotations__r'   rl   rm   rn   r>   r=   rp   rq   rr   rJ   rF   rt   ru   rH   r   r   r   r   r   $  s"   
 












r   )r   r   r   r   )r   r   r   r   )
__future__r   r   r   abcr   r   r   r   r   typingr   r	   aiogram.enumsr
   aiogram.utils.linkr   collections.abcr   r   r@   r   __all__r   r   r   r   r   r   r   r   r   r   r   <module>   s*    

 %[<
