o
    ¼>h¦  ã                   @  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 to Python-Markdown.
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)ÚregisterExtensionÚparserÚblockprocessorsÚregisterÚAdmonitionProcessor)ÚselfÚmd© r   ú~/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/markdown/extensions/admonition.pyÚextendMarkdown+   s   
z"AdmonitionExtension.extendMarkdownN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r	   (   s    r	   c                      sb   e Zd ZdZdZe d¡Ze d¡Zd‡ fdd„Z	ddd„Z
d dd„Zd!dd„Zd"dd„Z‡  ZS )#r   r
   zadmonition-titlez<(?:^|\n)!!! ?([\w\-]+(?: +[\w\-]+)*)(?: +"(.*?)")? *(?:\n|$)z  +r   úblockparser.BlockParserc                   s   t ƒ  |¡ d| _d| _dS )zInitialization.Nr   )ÚsuperÚ__init__Úcurrent_siblingÚcontent_indent)r   r   ©Ú	__class__r   r   r   9   s   
zAdmonitionProcessor.__init__Úparentúetree.ElementÚblockÚstrÚreturnú%tuple[etree.Element | None, str, str]c                 C  sP  |}d}| j dur | j }|  || j¡\}}d| _ d| _|||fS |  |¡}|du s:|jdks:| dd¡ | j¡dkr=d}nf|  |¡}d}|dur‚|dur|| d| j	 d ¡r||dur||jd	v r||  |¡}|durm|  |¡nd}|| j	d… }|| j	7 }nd}|dusH| 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   ÚdivÚclasséÿÿÿÿú r   )ÚulÚolÚdl)
r   Údetabr   Ú	lastChildÚtagÚgetÚfindÚ	CLASSNAMEÚ
startswithÚ
tab_length)r   r!   r#   Ú	old_blockÚthe_restÚsiblingÚ
last_childÚindentr   r   r   Úparse_contentA   s<   


*

ï

z!AdmonitionProcessor.parse_contentÚboolc                 C  s$   | j  |¡rdS |  ||¡d d uS )NTr   )ÚREÚsearchr<   )r   r!   r#   r   r   r   Útest{   s   zAdmonitionProcessor.testÚblocksú	list[str]ÚNonec                 C  s&  |  d¡}| j |¡}|r1| ¡ dkr!| j ||d | ¡ … g¡ || ¡ d … }|  |¡\}}n	|  ||¡\}}}|rg|  	|¡\}}t
 |d¡}	|	 dd | j|¡¡ |rft
 |	d¡}
||
_|
 d| j¡ n|jdv r~|jr~|j}d|_t
 |d¡}
||
_|}	| j |	|¡ |r‘| d|¡ d S d S )Nr   r(   r)   z{} {}Úp)ÚliÚddr'   )Úpopr>   r?   Ústartr   ÚparseBlocksÚendr/   r<   Úget_class_and_titleÚetreeÚ
SubElementÚsetÚformatr4   ÚtextÚCLASSNAME_TITLEr1   Ú
parseChunkÚinsert)r   r!   rA   r#   ÚmÚtheRestr9   ÚklassÚtitler(   rD   rP   r   r   r   Úrun‚   s6   
€üzAdmonitionProcessor.runÚmatchúre.Match[str]útuple[str, str | None]c                 C  s`   |  d¡ ¡ |  d¡}}| j d|¡}|d u r&| dd¡d  ¡ }||fS |dkr,d }||fS )Nr   r   r+   r   r'   )ÚgroupÚlowerÚ	RE_SPACESÚsubÚsplitÚ
capitalize)r   rY   rV   rW   r   r   r   rK   ¨   s   üz'AdmonitionProcessor.get_class_and_title)r   r   )r!   r"   r#   r$   r%   r&   )r!   r"   r#   r$   r%   r=   )r!   r"   rA   rB   r%   rC   )rY   rZ   r%   r[   )r   r   r   r4   rQ   ÚreÚcompiler>   r^   r   r<   r@   rX   rK   Ú__classcell__r   r   r   r   r   2   s    



:
&r   c                  K  s   t di | ¤ŽS )Nr   )r	   )Úkwargsr   r   r   ÚmakeExtension·   s   rf   )r   Ú
__future__r   r'   r   r   r   Úxml.etree.ElementTreerL   ÚElementTreerb   Útypingr   Úmarkdownr   r	   r   rf   r   r   r   r   Ú<module>   s   

 