a
    t=ic×  ã                   @   sb   d Z ddlmZ ddlmZ ddlm  mZ ddlZG dd„ deƒZ	G d	d
„ d
eƒZ
dd„ ZdS )a  
Admonition extension for Python-Markdown
========================================

Adds rST-style admonitions. Inspired by [rST][] feature with the same name.

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

See <https://Python-Markdown.github.io/extensions/admonition>
for documentation.

Original code Copyright [Tiago Serafim](https://www.tiagoserafim.com/).

All changes Copyright The Python Markdown Project

License: [BSD](https://opensource.org/licenses/bsd-license.php)

é   )Ú	Extensioné   )ÚBlockProcessoré    Nc                   @   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)ÚselfÚmd© r   úo/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/markdown/extensions/admonition.pyÚextendMarkdown   s    
z"AdmonitionExtension.extendMarkdownN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s   r   c                       sX   e Zd ZdZdZe d¡Ze d¡Z‡ fdd„Z	dd„ Z
d	d
„ Zdd„ Zdd„ Z‡  ZS )r   r   zadmonition-titlez<(?:^|\n)!!! ?([\w\-]+(?: +[\w\-]+)*)(?: +"(.*?)")? *(?:\n|$)z  +c                    s   t ƒ  |¡ d| _d| _dS )zInitialization.Nr   )ÚsuperÚ__init__Úcurrent_siblingZcontent_indention)r   r	   ©Ú	__class__r   r   r   +   s    zAdmonitionProcessor.__init__c                 C   s2  |}d}| j dur@| j }|  || j¡\}}d| _ d| _|||fS |  |¡}|du sj| dd¡ | j¡dkrpd}n¸|  |¡}d}|rä|rÞ| d| j d ¡rÞ|rÞ|j	dv rÞ|  |¡}|rÀ|  |¡nd}|| jd… }|| j7 }q~d}q~| d| j ¡sød}|dur(|| j7 }|  ||¡\}}|| _ || _|||fS )	z‰Get sibling admonition.

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

        Ú Nr   Úclasséÿÿÿÿú r   )ZulÚolÚdl)
r   ÚdetabZcontent_indentZ	lastChildÚgetÚfindÚ	CLASSNAMEÚ
startswithZ
tab_lengthÚtag)r   ÚparentÚblockZ	old_blockZthe_restÚsiblingZ
last_childÚindentr   r   r   Úparse_content3   sF    


 
ÿÿþþ


z!AdmonitionProcessor.parse_contentc                 C   s(   | j  |¡rdS |  ||¡d d uS d S )NTr   )ÚREÚsearchr+   )r   r'   r(   r   r   r   Útestm   s    zAdmonitionProcessor.testc                 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v rü|jrü|j}d|_t
 |d¡}
||
_|}	| j |	|¡ |r | d|¡ d S )Nr   Údivr   z{} {}Úp)ZliÚddr   )Úpopr,   r-   Ústartr	   ZparseBlocksÚendr!   r+   Úget_class_and_titleÚetreeZ
SubElementÚsetÚformatr$   ÚtextÚCLASSNAME_TITLEr&   Z
parseChunkÚinsert)r   r'   Úblocksr(   ÚmZtheRestr)   ÚklassÚtitler/   r0   r9   r   r   r   Úrunt   s2    
zAdmonitionProcessor.runc                 C   sZ   |  d¡ ¡ |  d¡ }}| j d|¡}|d u rF| dd¡d  ¡ }n|dkrRd }||fS )Nr   r   r   r   r   )ÚgroupÚlowerÚ	RE_SPACESÚsubÚsplitÚ
capitalize)r   Úmatchr>   r?   r   r   r   r5   š   s    z'AdmonitionProcessor.get_class_and_title)r   r   r   r$   r:   ÚreÚcompiler,   rC   r   r+   r.   r@   r5   Ú__classcell__r   r   r   r   r   $   s   

:&r   c                  K   s   t f i | ¤ŽS )N)r   )Úkwargsr   r   r   ÚmakeExtension©   s    rL   )r   r   r   r
   r   Zxml.etree.ElementTreer6   ZElementTreerH   r   r   rL   r   r   r   r   Ú<module>   s   
 