o
    5˜ŽjÏO  ã                   @  s  U d dl mZ d dlZd dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZmZ e	Zdldd„ZG dd„ dee ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G d d!„ d!eƒZ!G d"d#„ d#eƒZ"G d$d%„ d%eƒZ#G d&d'„ d'eƒZ$G d(d)„ d)eƒZ%G d*d+„ d+eƒZ&G d,d-„ d-eƒZ'G d.d/„ d/eƒZ(G d0d1„ d1eƒZ)G d2d3„ d3eƒZ*G d4d5„ d5eƒZ+G d6d7„ d7eƒZ,i ej-e“ej-e“ej-e“ej-e“ej-e“ej-e“ej-e“e j-e “e!j-e!“e"j-e"“e#j-e#“e$j-e$“e%j-e%“e&j-e&“e'j-e'“e(j-e(“e)j-e)“e*j-e*e+j-e+e,j-e,i¥Z.d8e/d9< dmd>d?„Z0		dndodHdI„Z1dJdKdLœdpdPdQ„Z2dJdRœdqdSdT„Z3dUdVœdrdXdY„Z4dZd[d\œdsd_d`„Z5dtdcdd„Z6dUdVœdudedf„Z7dZd[d\œdvdgdh„Z8dwdjdk„Z9dS )xé    )ÚannotationsN)Ú	GeneratorÚIterableÚIterator)Údatetime)ÚAnyÚClassVar)ÚSelf)ÚMessageEntityType)ÚMessageEntityÚUser)Úadd_surrogatesÚhtml_decorationÚmarkdown_decorationÚremove_surrogatesÚvalueÚstrÚreturnÚintc                 C  s   t |  d¡ƒd S )Nz	utf-16-leé   )ÚlenÚencode)r   © r   úU/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiogram/utils/formatting.pyÚsizeof   s   r   c                   @  s   e Zd ZU dZdZded< dZdPdd„ZedQdd„ƒZ	ddddœdRdd„Z
dSd"d#„Zdddd$d%œdTd+d,„Zdd-œdUd.d/„Zdd-œdUd0d1„Zdd-œdUd2d3„Zdd-œdUd4d5„ZdVd6d7„ZdVd8d9„ZdWd>d?„ZdXdYdBdC„ZdZdEdF„Zd[dHdI„Zd\dJdK„Zd]dNdO„ZdS )^ÚTextz
    Simple text element
    NzClassVar[str | None]Útype©Ú_bodyÚ_paramsÚbodyÚNodeTypeÚparamsr   r   ÚNonec                 O  s   || _ || _d S ©Nr   )Úselfr    r"   r   r   r   Ú__init__#   s   
zText.__init__Útextr   Úentitiesúlist[MessageEntity]c                 C  s.   | t t|ƒ|rt|dd„ d�d�Ž S g d�Ž S )Nc                 S  ó   | j S r$   ©Úoffset)Úitemr   r   r   Ú<lambda>0   ó    z$Text.from_entities.<locals>.<lambda>©Úkey)r'   r(   )Ú_unparse_entitiesr   Úsorted)Úclsr'   r(   r   r   r   Úfrom_entities+   s   þÿþÿzText.from_entitiesr   T©Ú_offsetÚ_sortÚ_collect_entitiesr7   r   r8   Úboolr9   útuple[str, list[MessageEntity]]c          
      C  s¸   d}g }|}| j D ]1}t|tƒst|ƒ}||7 }|t|ƒ7 }q	|j|d|d�\}}	||7 }|t|ƒ7 }|r:| |	¡ q	|rL| jrL| | j	||| d�¡ |rX|rX|j
dd„ d� ||fS )zS
        Render elements tree as text with entities list

        :return:
        Ú Fr6   ©r,   Úlengthc                 S  r*   r$   r+   )Úentityr   r   r   r.   Y   r/   zText.render.<locals>.<lambda>r0   )r   Ú
isinstancer   r   r   ÚrenderÚextendr   ÚappendÚ_render_entityÚsort)
r%   r7   r8   r9   r'   r(   r,   ÚnodeÚ	node_textÚnode_entitiesr   r   r   rA   4   s.   


ý
€
zText.renderr,   r>   r   c                C  s,   | j d us	J dƒ‚td| j ||dœ| j¤ŽS )Nz-Node without type can't be rendered as entity)r   r,   r>   r   )r   r   r   )r%   r,   r>   r   r   r   rD   ]   s   zText._render_entityÚ
parse_mode)Útext_keyÚentities_keyÚreplace_parse_modeÚparse_mode_keyrJ   rK   rL   rM   údict[str, Any]c                C  s(   |   ¡ \}}||||i}|rd||< |S )af  
        Render element tree as keyword arguments for usage in an API call, for example:

        .. code-block:: python

            entities = Text(...)
            await message.answer(**entities.as_kwargs())

        :param text_key:
        :param entities_key:
        :param replace_parse_mode:
        :param parse_mode_key:
        :return:
        N)rA   )r%   rJ   rK   rL   rM   Ú
text_valueÚentities_valueÚresultr   r   r   Ú	as_kwargsa   s   þzText.as_kwargs)rL   c                C  s   | j dd|d�S )af  
        Shortcut for :meth:`as_kwargs` for usage with API calls that take
        ``caption`` as a parameter.

        .. code-block:: python

            entities = Text(...)
            await message.answer_photo(**entities.as_caption_kwargs(), photo=phot)

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        ÚcaptionÚcaption_entities)rJ   rK   rL   ©rR   ©r%   rL   r   r   r   Úas_caption_kwargs€   s
   ýzText.as_caption_kwargsc                C  ó   | j ddd|d�S )at  
        Shortcut for :meth:`as_kwargs` for usage with
        method :class:`aiogram.methods.send_poll.SendPoll`.

        .. code-block:: python

            entities = Text(...)
            await message.answer_poll(**entities.as_poll_question_kwargs(), options=options)

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        ÚquestionÚquestion_entitiesÚquestion_parse_mode©rJ   rK   rM   rL   rU   rV   r   r   r   Úas_poll_question_kwargs“   ó   üzText.as_poll_question_kwargsc                C  rX   )a'  
        Shortcut for :meth:`as_kwargs` for usage with
        method :class:`aiogram.methods.send_poll.SendPoll`.

        .. code-block:: python

            question_entities = Text(...)
            explanation_entities = Text(...)
            await message.answer_poll(
                **question_entities.as_poll_question_kwargs(),
                options=options,
                **explanation_entities.as_poll_explanation_kwargs(),
            )

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        ÚexplanationÚexplanation_entitiesÚexplanation_parse_moder\   rU   rV   r   r   r   Úas_poll_explanation_kwargs§   s   üzText.as_poll_explanation_kwargsc                C  rX   )a{  
        Shortcut for :meth:`as_kwargs` for usage with
        method :class:`aiogram.methods.send_gift.SendGift`.

        .. code-block:: python

            entities = Text(...)
            await bot.send_gift(gift_id=gift_id, user_id=user_id, **entities.as_gift_text_kwargs())

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        r'   Útext_entitiesÚtext_parse_moder\   rU   rV   r   r   r   Úas_gift_text_kwargsÀ   r^   zText.as_gift_text_kwargsc                 C  ó   |   ¡ \}}t ||¡S )z5
        Render elements tree as HTML markup
        )rA   r   Úunparse©r%   r'   r(   r   r   r   Úas_htmlÔ   ó   zText.as_htmlc                 C  rf   )z;
        Render elements tree as MarkdownV2 markup
        )rA   r   rg   rh   r   r   r   Úas_markdownÛ   rj   zText.as_markdownr%   r	   ÚargsÚkwargsc                 O  s   t | ƒ|i i | j¥|¥¤ŽS r$   )r   r   )r%   rl   rm   r   r   r   Úreplaceâ   s   zText.replaceFÚindentc                   s˜   ˆ rdnd}|  ‡ fdd„| jD ƒ¡}|  dd„ | j ¡ D ƒ¡}g }|r)| |¡ |r0| |¡ |  |¡}ˆ rAt d| d d¡}t| ƒj› d|› d	�S )
Nz,
z, c                 3  s.   � | ]}t |tƒr|jˆ d �nt|ƒV  qdS )©ro   N)r@   r   Úas_pretty_stringÚrepr©Ú.0r-   rp   r   r   Ú	<genexpr>ç   s
   € ÿ
ÿz(Text.as_pretty_string.<locals>.<genexpr>c                 s  s*   � | ]\}}|d ur|› d|›�V  qd S )Nú=r   )rt   ÚkÚvr   r   r   ru   ë   s   €( Ú
z    ú(ú))	Újoinr   r   ÚitemsrC   Útextwrapro   r   Ú__name__)r%   ro   Úsepr    r"   rl   Úargs_strr   rp   r   rq   å   s   þ


zText.as_pretty_stringÚotherc                 C  s~   t |tƒr |j| jkr | j|jkr t| ƒg | ¢|¢R i | j¤ŽS t| ƒtu r:t |tƒr:t| ƒg | ¢|‘R i | j¤ŽS t| |ƒS r$   )r@   r   r   r   r   )r%   r‚   r   r   r   Ú__add__ø   s
   "
zText.__add__úIterator[NodeType]c                 c  s   � | j E d H  d S r$   )r   )r%   r   r   r   Ú__iter__ÿ   s   €zText.__iter__c                 C  s   | j dd�\}}t|ƒS )NF)r9   )rA   r   )r%   r'   Ú_r   r   r   Ú__len__  s   zText.__len__r-   Úslicec                 C  s   t |tƒsd}t|ƒ‚|jd u s|jdkr |jd u r | j| jŽ S |jd u r'dn|j}|jd u r3t| ƒn|j}||kr>|  ¡ S g }d}| jD ]5}t|ƒ}|}	||7 }||k rVqE|	|kr\ ntd||	 fƒ}
t	|||	 fƒ}||
|… }|suqE| 
|¡ qE| j|Ž S )NzCan only be slicedr   )r@   rˆ   Ú	TypeErrorÚstartÚstoprn   r   r   ÚmaxÚminrC   )r%   r-   ÚmsgrŠ   r‹   ÚnodesÚpositionrF   Ú	node_sizeÚcurrent_positionÚaÚbÚnew_noder   r   r   Ú__getitem__  s4   


zText.__getitem__©r    r!   r"   r   r   r#   )r'   r   r(   r)   r   r   )r7   r   r8   r:   r9   r:   r   r;   )r,   r   r>   r   r   r   )
rJ   r   rK   r   rL   r:   rM   r   r   rN   )rL   r:   r   rN   )r   r   )r%   r	   rl   r   rm   r   r   r	   )F)ro   r:   r   r   )r‚   r!   r   r   )r   r„   )r   r   )r-   rˆ   r   r   )r   Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__Ú	__slots__r&   Úclassmethodr5   rA   rD   rR   rW   r]   rb   re   ri   rk   rn   rq   rƒ   r…   r‡   r–   r   r   r   r   r      s:   
 
û
)ú





r   c                      ó(   e Zd ZdZejZd
‡ fdd	„Z‡  ZS )ÚHashTaga   
    Hashtag element.

    .. warning::

        The value should always start with '#' symbol

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.HASHTAG`
    r    r!   r"   r   r   r#   c                   ód   t |ƒdkrd}t|ƒ‚t|d tƒsd}t|ƒ‚|d  d¡s'd|d  f}tƒ j|i |¤Ž d S )Né   z$Hashtag can contain only one elementr   zHashtag can contain only stringú#©r   Ú
ValueErrorr@   r   Ú
startswithÚsuperr&   ©r%   r    r"   rŽ   ©Ú	__class__r   r   r&   4  ó   zHashTag.__init__r—   )	r   r˜   r™   rš   r
   ÚHASHTAGr   r&   Ú__classcell__r   r   r¨   r   rŸ   &  ó    rŸ   c                      rž   )ÚCashTaga   
    Cashtag element.

    .. warning::

        The value should always start with '$' symbol

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.CASHTAG`
    r    r!   r"   r   r   r#   c                   r    )Nr¡   z$Cashtag can contain only one elementr   zCashtag can contain only stringú$r£   r§   r¨   r   r   r&   N  rª   zCashTag.__init__r—   )	r   r˜   r™   rš   r
   ÚCASHTAGr   r&   r¬   r   r   r¨   r   r®   @  r­   r®   c                   @  ó   e Zd ZdZejZdS )Ú
BotCommanda  
    Bot command element.

    .. warning::

        The value should always start with '/' symbol

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.BOT_COMMAND`
    N)r   r˜   r™   rš   r
   ÚBOT_COMMANDr   r   r   r   r   r²   Z  s    
r²   c                   @  r±   )ÚUrlz¯
    Url element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.URL`
    N)r   r˜   r™   rš   r
   ÚURLr   r   r   r   r   r´   i  ó    
r´   c                   @  r±   )ÚEmailz³
    Email element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.EMAIL`
    N)r   r˜   r™   rš   r
   ÚEMAILr   r   r   r   r   r·   t  r¶   r·   c                   @  r±   )ÚPhoneNumberzÁ
    Phone number element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.PHONE_NUMBER`
    N)r   r˜   r™   rš   r
   ÚPHONE_NUMBERr   r   r   r   r   r¹     r¶   r¹   c                   @  r±   )ÚBoldz±
    Bold element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.BOLD`
    N)r   r˜   r™   rš   r
   ÚBOLDr   r   r   r   r   r»   Š  r¶   r»   c                   @  r±   )ÚItaliczµ
    Italic element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.ITALIC`
    N)r   r˜   r™   rš   r
   ÚITALICr   r   r   r   r   r½   •  r¶   r½   c                   @  r±   )Ú	Underlinez»
    Underline element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.UNDERLINE`
    N)r   r˜   r™   rš   r
   Ú	UNDERLINEr   r   r   r   r   r¿      r¶   r¿   c                   @  r±   )ÚStrikethroughzÃ
    Strikethrough element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.STRIKETHROUGH`
    N)r   r˜   r™   rš   r
   ÚSTRIKETHROUGHr   r   r   r   r   rÁ   «  r¶   rÁ   c                   @  r±   )ÚSpoilerz·
    Spoiler element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.SPOILER`
    N)r   r˜   r™   rš   r
   ÚSPOILERr   r   r   r   r   rÃ   ¶  r¶   rÃ   c                   @  r±   )ÚCodez±
    Code element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.CODE`
    N)r   r˜   r™   rš   r
   ÚCODEr   r   r   r   r   rÅ   Á  r¶   rÅ   c                      s.   e Zd ZdZejZddœd‡ fdd„Z‡  ZS )ÚPrez¯
    Pre element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.PRE`
    N)Úlanguager    r!   rÈ   ú
str | Noner"   r   r   r#   c                  ó   t ƒ j|d|i|¤Ž d S )NrÈ   ©r¦   r&   )r%   rÈ   r    r"   r¨   r   r   r&   Ö  ó   zPre.__init__)r    r!   rÈ   rÉ   r"   r   r   r#   )	r   r˜   r™   rš   r
   ÚPREr   r&   r¬   r   r   r¨   r   rÇ   Ì  s    rÇ   c                      ó(   e Zd ZdZejZd‡ fd
d„Z‡  ZS )ÚTextLinkz»
    Text link element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.TEXT_LINK`
    r    r!   Úurlr   r"   r   r   r#   c                  rÊ   )NrÐ   rË   )r%   rÐ   r    r"   r¨   r   r   r&   ä  rÌ   zTextLink.__init__)r    r!   rÐ   r   r"   r   r   r#   )	r   r˜   r™   rš   r
   Ú	TEXT_LINKr   r&   r¬   r   r   r¨   r   rÏ   Ú  ó    rÏ   c                      rÎ   )ÚTextMentionzÁ
    Text mention element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.TEXT_MENTION`
    r    r!   Úuserr   r"   r   r   r#   c                  rÊ   )NrÔ   rË   )r%   rÔ   r    r"   r¨   r   r   r&   ò  rÌ   zTextMention.__init__)r    r!   rÔ   r   r"   r   r   r#   )	r   r˜   r™   rš   r
   ÚTEXT_MENTIONr   r&   r¬   r   r   r¨   r   rÓ   è  rÒ   rÓ   c                      rÎ   )ÚCustomEmojizÁ
    Custom emoji element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.CUSTOM_EMOJI`
    r    r!   Úcustom_emoji_idr   r"   r   r   r#   c                  rÊ   )Nr×   rË   )r%   r×   r    r"   r¨   r   r   r&      rÌ   zCustomEmoji.__init__)r    r!   r×   r   r"   r   r   r#   )	r   r˜   r™   rš   r
   ÚCUSTOM_EMOJIr   r&   r¬   r   r   r¨   r   rÖ   ö  rÒ   rÖ   c                   @  r±   )Ú
BlockQuotez¾
    Block quote element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.BLOCKQUOTE`
    N)r   r˜   r™   rš   r
   Ú
BLOCKQUOTEr   r   r   r   r   rÙ     r¶   rÙ   c                   @  r±   )ÚExpandableBlockQuotezÔ
    Expandable block quote element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.EXPANDABLE_BLOCKQUOTE`
    N)r   r˜   r™   rš   r
   ÚEXPANDABLE_BLOCKQUOTEr   r   r   r   r   rÛ     r¶   rÛ   c                      s*   e Zd ZejZddœd‡ fdd„Z‡  ZS )ÚDateTimeN)Údate_time_formatr    r!   Ú	unix_timeúint | datetimerÞ   rÉ   r"   r   r   r#   c                  s2   t |tƒrt| ¡ ƒ}tƒ j|||dœ|¤Ž d S )N)rß   rÞ   )r@   r   r   Ú	timestampr¦   r&   )r%   rß   rÞ   r    r"   r¨   r   r   r&     s   
ý
üzDateTime.__init__)
r    r!   rß   rà   rÞ   rÉ   r"   r   r   r#   )r   r˜   r™   r
   Ú	DATE_TIMEr   r&   r¬   r   r   r¨   r   rÝ     s    ürÝ   zdict[str | None, type[Text]]Ú
NODE_TYPESr?   r   r�   r!   c                 G  s*   t  | jt¡}||i | jh d£dd�¤ŽS )zW
    Apply single entity to text

    :param entity:
    :param text:
    :return:
    >   r   r>   r,   F)ÚexcludeÚwarnings)rã   Úgetr   r   Ú
model_dump)r?   r�   Ú	node_typer   r   r   Ú_apply_entityF  s   ÿþré   r'   Úbytesr(   r)   r,   ú
int | Noner>   úGenerator[NodeType, None, None]c              	   #  sâ   � ˆ d u rd‰ |pt | ƒ}t|ƒD ]N\}}|jd ˆ k rq|jd ˆ kr0t| ˆ |jd … ƒV  |jd }|jd |jd  ‰ tt‡ fdd„||d d … ƒƒ}t|gt| ||ˆ d�¢R Ž V  qˆ |k rot| ˆ |… ƒV  d S d S )Nr   r   c                   s   | j d ˆ pdk S )Nr   r   r+   )Úer+   r   r   r.   g  s    z#_unparse_entities.<locals>.<lambda>r¡   r=   )	r   Ú	enumerater,   r   r>   ÚlistÚfilterré   r2   )r'   r(   r,   r>   Úindexr?   rŠ   Úsub_entitiesr   r+   r   r2   U  s(   €
"ÿþÿr2   ry   r<   )Úendr€   r}   ró   r€   c                 G  sV   |r!g }|dd… D ]	}|  ||g¡ q
|  |d | g¡ t|Ž S g |¢| ‘}t|Ž S )zÿ
    Wrap multiple nodes into line with :code:`\\n` at the end of line.

    :param items: Text or Any
    :param end: ending of the line, by default is :code:`\\n`
    :param sep: separator between items, by default is empty string
    :return: Text
    Néÿÿÿÿ)rB   r   )ró   r€   r}   r�   r-   r   r   r   Úas_lineq  s   	ÿrõ   )r€   c                 G  s:   g }|dd… D ]	}|  || g¡ q| |d ¡ t|Ž S )z^
    Wrap each element to separated lines

    :param items:
    :param sep:
    :return:
    Nrô   )rB   rC   r   )r€   r}   r�   r-   r   r   r   Úas_list„  s
   rö   z- ©Úmarkerrø   c                   s   t ‡ fdd„|D ƒŽ S )z~
    Wrap elements as marked list

    :param items:
    :param marker: line marker, by default is '- '
    :return: Text
    c                 3  s   � | ]}t ˆ |ƒV  qd S r$   ©r   rs   r÷   r   r   ru   ›  s   € z!as_marked_list.<locals>.<genexpr>)rö   )rø   r}   r   r÷   r   Úas_marked_list“  s   rú   r¡   z{}. ©rŠ   ÚfmtrŠ   rü   c                   s   t ‡ fdd„t|| ƒD ƒŽ S )z­
    Wrap elements as numbered list

    :param items:
    :param start: initial number, by default 1
    :param fmt: number format, by default '{}. '
    :return: Text
    c                 3  s$   � | ]\}}t ˆ  |¡|ƒV  qd S r$   )r   Úformat)rt   rñ   r-   ©rü   r   r   ru   §  s   €" z#as_numbered_list.<locals>.<genexpr>)rö   rî   )rŠ   rü   r}   r   rþ   r   Úas_numbered_listž  s   	rÿ   Útitler    c                 G  s   t | dg|¢R Ž S )z{
    Wrap elements as simple section, section has title and body

    :param title:
    :param body:
    :return: Text
    ry   rù   )r   r    r   r   r   Ú
as_sectionª  ó   r  c                G  s   t | t|d|iŽƒS )zw
    Wrap elements as section with marked list

    :param title:
    :param body:
    :param marker:
    :return:
    rø   )r  rú   )r   rø   r    r   r   r   Úas_marked_sectionµ  s   r  c                G  s   t | t|||dœŽƒS )zˆ
    Wrap elements as section with numbered list

    :param title:
    :param body:
    :param start:
    :param fmt:
    :return:
    rû   )r  rÿ   )r   rŠ   rü   r    r   r   r   Úas_numbered_sectionÅ  s   r  r1   c                 C  s   t t| dƒd|ƒS )z„
    Wrap elements pair as key-value line. (:code:`<b>{key}:</b> {value}`)

    :param key:
    :param value:
    :return: Text
    ú:ú )r   r»   )r1   r   r   r   r   Úas_key_value×  r  r  )r   r   r   r   )r?   r   r�   r!   r   r!   )NN)
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   )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   r   r   )r1   r!   r   r!   r   r   ):Ú
__future__r   r~   Úcollections.abcr   r   r   r   Útypingr   r   Útyping_extensionsr	   Úaiogram.enumsr
   Úaiogram.typesr   r   Úaiogram.utils.text_decorationsr   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é   r2   rõ   rö   rú   rÿ   r  r  r  r  r   r   r   r   Ú<module>   s®    
  ÿþýüûúùø	÷
öõôóòñðïì
ü
ýü