U
    Sh                     @  s   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ erddlmZ dd	lmZ dd
lmZmZ ddddddddddZdS )z&Process block-level custom containers.    )annotations)floor)TYPE_CHECKINGAnyCallableSequence)
MarkdownIt)
StateBlock)is_code_block)RendererProtocol)Token)EnvTypeOptionsDict:Nr   strz!None | Callable[[str, str], bool]zNone | Callable[..., str]None)mdnamemarkervalidaterenderreturnc              
     s   ddddfdd}ddd	d
dddfdd}d|d  t pP||pX|}dd	d	ddd fdd}| jjdd |dddddgi | d d| | d d| dS )a  Plugin ported from
    `markdown-it-container <https://github.com/markdown-it/markdown-it-container>`__.

    It is a plugin for creating block-level custom containers:

    .. code-block:: md

        :::: name
        ::: name
        *markdown*
        :::
        ::::

    :param name: the name of the container to parse
    :param marker: the marker character to use
    :param validate: func(marker, param) -> bool, default matches against the name
    :param render: render func

    r   r   bool)paramsargsr   c                   s   |   ddd  kS )N    r   )stripsplit)r   r   r    R/root/rtd-docs/venv/lib/python3.8/site-packages/mdit_py_plugins/container/index.pyvalidateDefault.   s    z)container_plugin.<locals>.validateDefaultr   zSequence[Token]intr   r   )selftokensidx_optionsenvr   c                   s.   || j dkr|| d  | ||||S )N   class)ZnestingZattrJoinZrenderToken)r$   r%   r&   r'   r(   r   r    r!   renderDefault1   s    z'container_plugin.<locals>.renderDefault   r   r	   )state	startLineendLinesilentr   c                   s  t | |rdS d}| j| | j|  }| j| } | j| krBdS |d }||krz| j| }W n tk
rx   Y qY nX ||   |krq|d7 }qJt||  }	|	k rdS |||  8 }| j|| }
| j|| }d k	st||
sdS |rdS |}|d7 }||kr q4| j| | j|  }| j| }||k r^| j| | j	k r^q4 | j| krrq
t | |rq
|d }||krz| j| }W n tk
r   Y qY nX ||   |krڐq|d7 }qt||  |	k r q
|||  8 }| 
|}||k r(q
d}q4q
| j}| j}d| _|| _| d ddd}|
|_d|_||_||g|_| jj| |d | | d ddd	}| j|| |_d|_|| _|| _||rdnd
 | _dS )NFr)   T	container
container__opendiv_closer   )r
   ZbMarksZtShiftZeMarkssrc
IndexErrorr   AssertionErrorZsCountZ	blkIndentZ
skipSpacesZ
parentTypeZlineMaxpushmarkupblockinfomapr   tokenizeline)r-   r.   r/   r0   Zauto_closedstartmaximumpos	characterZmarker_countr;   r   ZnextLineZ
old_parentZold_line_maxtokenZmarker_charZ
marker_lenZ
marker_strZmin_markersr   r   r    r!   container_funcE   s    










z(container_plugin.<locals>.container_funcZfencer2   ZaltZ	paragraph	referenceZ
blockquotelistr3   r5   N)lenr<   ZrulerbeforeZadd_render_rule)r   r   r   r   r   r"   r+   rG   r    rF   r!   container_plugin   s"    $trL   )r   NN)__doc__
__future__r   mathr   typingr   r   r   r   Zmarkdown_itr   Zmarkdown_it.rules_blockr	   Zmdit_py_plugins.utilsr
   Zmarkdown_it.rendererr   Zmarkdown_it.tokenr   Zmarkdown_it.utilsr   r   rL   r    r    r    r!   <module>   s      