U
    \> e“  ã                   @  sŠ   d Z ddlmZ ddlmZ ddlmZ ddlm  m	Z ddl
Z
ddlmZ er^dd	lmZ G d
d„ deƒZG dd„ deƒZdd„ ZdS )a  
Adds rST-style admonitions. Inspired by [rST][] feature with the same name.

[rST]: http://docutils.sourceforge.net/docs/ref/rst/directives.html#specific-admonitions

See the [documentation](https://Python-Markdown.github.io/extensions/admonition)
for details.
é    )Úannotationsé   )Ú	Extensioné   )ÚBlockProcessorN)ÚTYPE_CHECKING)Úblockparserc                   @  s   e Zd ZdZdd„ ZdS )ÚAdmonitionExtensionz+ Admonition extension for Python-Markdown. c                 C  s&   |  | ¡ |jj t|jƒdd¡ dS )z& Add Admonition to Markdown instance. Ú
admonitionéi   N)ZregisterExtensionÚparserÚblockprocessorsÚregisterÚAdmonitionProcessor)ÚselfZmd© r   úB/tmp/pip-unpacked-wheel-wj0og6ym/markdown/extensions/admonition.pyÚextendMarkdown*   s    
z"AdmonitionExtension.extendMarkdownN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r	   '   s   r	   c                      s„   e Zd ZdZdZe d¡Ze d¡Zddœ‡ fdd„Z	d	d
ddœdd„Z
d	d
ddœdd„Zd	dddœdd„Zdddœdd„Z‡  ZS )r   r
   zadmonition-titlez<(?:^|\n)!!! ?([\w\-]+(?: +[\w\-]+)*)(?: +"(.*?)")? *(?:\n|$)z  +zblockparser.BlockParser)r   c                   s   t ƒ  |¡ d| _d| _dS )zInitialization.Nr   )ÚsuperÚ__init__Úcurrent_siblingÚcontent_indent)r   r   ©Ú	__class__r   r   r   8   s    zAdmonitionProcessor.__init__zetree.ElementÚstrz%tuple[etree.Element | None, str, str])ÚparentÚblockÚreturnc                 C  sN  |}d}| j dk	r@| j }|  || j¡\}}d| _ d| _|||fS |  |¡}|dkst|jdkst| dd¡ | j¡dkrzd}nÊ|  |¡}d}|dk	rþ|dk	rø| d| j	 d ¡rø|dk	rø|jd	krø|  |¡}|dk	rÚ|  |¡nd}|| j	d… }|| j	7 }qˆd}qˆ| d| j	 ¡sd}|dk	rD|| j	7 }|  ||¡\}}|| _ || _|||fS )
z‰Get sibling admonition.

        Retrieve the appropriate sibling element. This can get tricky when
        dealing with lists.

        Ú Nr   ÚdivÚclasséÿÿÿÿú r   )ÚulÚolÚdl)
r   Údetabr   Z	lastChildÚtagÚgetÚfindÚ	CLASSNAMEÚ
startswithZ
tab_length)r   r   r    Z	old_blockZthe_restÚsiblingZ
last_childÚindentr   r   r   Úparse_content@   sF    


*
ÿÿþþ


z!AdmonitionProcessor.parse_contentÚboolc                 C  s(   | j  |¡rdS |  ||¡d d k	S d S )NTr   )ÚREÚsearchr2   )r   r   r    r   r   r   Útestz   s    zAdmonitionProcessor.testz	list[str]ÚNone)r   Úblocksr!   c                 C  s$  |  d¡}| j |¡}|rb| ¡ dkrB| j ||d | ¡ … g¡ || ¡ d … }|  |¡\}}n|  ||¡\}}}|rÎ|  	|¡\}}t
 |d¡}	|	 dd | j|¡¡ |rÌt
 |	d¡}
||
_|
 d| j¡ n2|jdkrü|jrü|j}d|_t
 |d¡}
||
_|}	| j |	|¡ |r | d|¡ d S )Nr   r#   r$   z{} {}Úp)ÚliÚddr"   )Úpopr4   r5   Ústartr   ZparseBlocksÚendr*   r2   Úget_class_and_titleÚetreeÚ
SubElementÚsetÚformatr.   ÚtextÚCLASSNAME_TITLEr+   Z
parseChunkÚinsert)r   r   r8   r    ÚmZtheRestr0   ÚklassÚtitler#   r9   rD   r   r   r   Úrun   s2    
zAdmonitionProcessor.runzre.Match[str]ztuple[str, str | None])Úmatchr!   c                 C  sZ   |  d¡ ¡ |  d¡ }}| j d|¡}|d krF| dd¡d  ¡ }n|dkrRd }||fS )Nr   r   r&   r   r"   )ÚgroupÚlowerÚ	RE_SPACESÚsubÚsplitÚ
capitalize)r   rK   rH   rI   r   r   r   r?   §   s    z'AdmonitionProcessor.get_class_and_title)r   r   r   r.   rE   ÚreÚcompiler4   rN   r   r2   r6   rJ   r?   Ú__classcell__r   r   r   r   r   1   s   

:&r   c                  K  s
   t f | ŽS )N)r	   )Úkwargsr   r   r   ÚmakeExtension¶   s    rV   )r   Ú
__future__r   r"   r   r   r   Úxml.etree.ElementTreer@   ÚElementTreerR   Útypingr   Zmarkdownr   r	   r   rV   r   r   r   r   Ú<module>   s   	
 