U
    \> e½  ã                   @  s‚   d Z ddlmZ ddlmZ ddlmZmZ ddlm	  m
Z	 ddlZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZdd„ ZdS )z›
Adds parsing of Definition Lists to Python-Markdown.

See the [documentation](https://Python-Markdown.github.io/extensions/definition_lists)
for details.
é    )Úannotationsé   )Ú	Extensioné   )ÚBlockProcessorÚListIndentProcessorNc                   @  sH   e Zd ZdZe d¡Ze d¡Zddddœdd	„Zdd
ddœdd„Z	dS )ÚDefListProcessorz Process Definition Lists. z"(^|\n)[ ]{0,3}:[ ]{1,3}(.*?)(\n|$)z^[ ]{0,3}[^ :]úetree.ElementÚstrÚbool©ÚparentÚblockÚreturnc                 C  s   t | j |¡ƒS ©N)r   ÚREÚsearch)Úselfr   r   © r   ú@/tmp/pip-unpacked-wheel-wj0og6ym/markdown/extensions/def_list.pyÚtest$   s    zDefListProcessor.testz	list[str]zbool | None)r   Úblocksr   c                 C  s´  |  d¡}| j |¡}dd„ |d | ¡ …  d¡D ƒ}|| ¡ d … }| j |¡}|rb|d  }}	n|  |¡\}}	|rˆd 	| 
d¡|¡}n
| 
d¡}|  |¡}
|s¸|
d kr¸| d|¡ dS |sì|
jdkrìd	}|
j d¡}| |
¡ |  |¡}
nd
}|
d k	r>|
jdkr>|
}|sJt|ƒrJ|d jdkrJt|d ƒrJd	}nt |d¡}|D ]}t |d¡}||_qN| jj |¡ t |d¡}| j ||g¡ | jj ¡  |	r°| d|	¡ d S )Nr   c                 S  s   g | ]}|  ¡ r|  ¡ ‘qS r   )Ústrip)Ú.0Útermr   r   r   Ú
<listcomp>+   s    ÿz(DefListProcessor.run.<locals>.<listcomp>Ú
z{}
{}r   FÚpZ	looselistÚlistÚdléÿÿÿÿÚddÚdt)Úpopr   r   ÚstartÚsplitÚendÚNO_INDENT_REÚmatchZdetabÚformatÚgroupZ	lastChildÚinsertÚtagÚtextÚremoveÚlenÚetreeÚ
SubElementÚparserÚstateÚsetÚparseBlocksÚreset)r   r   r   Z	raw_blockÚmZtermsr   Z	no_indentÚdZtheRestZsiblingr3   r   r   r"   r!   r   r   r   Úrun'   sJ    
ÿ


.
zDefListProcessor.runN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompiler   r'   r   r9   r   r   r   r   r      s
   

r   c                   @  s4   e Zd ZdZddgZdddgZddd	d
œdd„ZdS )ÚDefListIndentProcessorz5 Process indented children of definition list items. r!   Úlir   ÚolÚulr	   r
   ÚNoner   c                 C  s    t  |d¡}| j ||g¡ dS )z\ Create a new `dd` or `li` (depending on parent) and parse the block with it as the parent. r!   N)r0   r1   r2   r5   )r   r   r   r!   r   r   r   Úcreate_itemf   s    z"DefListIndentProcessor.create_itemN)r:   r;   r<   r=   Z
ITEM_TYPESZ
LIST_TYPESrE   r   r   r   r   r@   ]   s   
r@   c                   @  s   e Zd ZdZdd„ ZdS )ÚDefListExtensionz# Add definition lists to Markdown. c                 C  s4   |j j t|j ƒdd¡ |j j t|j ƒdd¡ dS )z9 Add an instance of `DefListProcessor` to `BlockParser`. Z	defindentéU   Zdeflisté   N)r2   ÚblockprocessorsÚregisterr@   r   )r   Zmdr   r   r   ÚextendMarkdownp   s    zDefListExtension.extendMarkdownN)r:   r;   r<   r=   rK   r   r   r   r   rF   m   s   rF   c                  K  s
   t f | ŽS r   )rF   )Úkwargsr   r   r   ÚmakeExtensionv   s    rM   )r=   Ú
__future__r   Ú r   rI   r   r   Úxml.etree.ElementTreer0   ÚElementTreer>   r   r@   rF   rM   r   r   r   r   Ú<module>   s   ?	