a
    !ºDf%"  ã                   @  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mZmZ erfdd	lmZ dZdZdZG d
d„ deƒZG dd„ deƒZdd„ ZdS )zˆ
Added parsing of tables to Python-Markdown.

See the [documentation](https://Python-Markdown.github.io/extensions/tables)
for details.
é    )Úannotationsé   )Ú	Extensioné   )ÚBlockProcessorN)ÚTYPE_CHECKINGÚAnyÚSequence)Úblockparserc                      s¦   e Zd ZdZe d¡Ze d¡Zd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œdd„Zd
ddœdd„Zd
ddœdd„Z‡  ZS ) ÚTableProcessorz Process Tables. z"(?:(\\\\)|(\\`+)|(`+)|(\\\|)|(\|))z(?<!\\)(?:\\\\)*\|$zblockparser.BlockParserzdict[str, Any])ÚparserÚconfigc                   s"   d| _ d| _|| _tƒ  |¡ d S )NFÚ )ÚborderÚ	separatorr   ÚsuperÚ__init__)Úselfr   r   ©Ú	__class__© úg/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/markdown/extensions/tables.pyr   ,   s    zTableProcessor.__init__zetree.ElementÚstrÚbool)ÚparentÚblockÚreturnc           	      C  s   d}dd„ |  d¡D ƒ}t|ƒdkr|d }t| _| d¡rL|  jtO  _| j |¡durj|  jtO  _|  	|¡}t|ƒ}|dk}|sØ|dkrØ| jrØt
dt|ƒƒD ]2}||  d¡}|sÎ| j || ¡du}|s¤ qØq¤|r|  	|d ¡}t|ƒ|kotd	 |¡ƒtd
ƒk}|r|| _|S )z©
        Ensure first two rows (column header and separator row) are valid table rows.

        Keep border check and separator row do avoid repeating the work.
        Fc                 S  s   g | ]}|  d ¡‘qS )ú )Ústrip)Ú.0Úrowr   r   r   Ú
<listcomp>:   ó    z'TableProcessor.test.<locals>.<listcomp>Ú
r   r   ú|Nr   z|:- )ÚsplitÚlenÚ	PIPE_NONEr   Ú
startswithÚ	PIPE_LEFTÚRE_END_BORDERÚsearchÚ
PIPE_RIGHTÚ
_split_rowÚrangeÚsetÚjoinr   )	r   r   r   Zis_tableÚrowsZheader0r    Zrow0_lenÚindexr   r   r   Útest3   s2    

$zTableProcessor.testz	list[str]ÚNone)r   Úblocksr   c                 C  s  |  d¡ d¡}|d  d¡}t|ƒdk r.g n
|dd… }g }| jD ]d}| d¡}| d¡rr| d¡rr| d¡ qD| d¡rˆ| d	¡ qD| d¡rž| d
¡ qD| d¡ qDt 	|d¡}t 	|d¡}	|  
||	|¡ t 	|d¡}
t|ƒdkrö|  |
|¡ n|D ]}|  
| d¡|
|¡ qúdS )z& Parse a table block and build table. r   r#   r   é   r   Nú:ÚcenterÚleftÚrightÚtableÚtheadÚtbody)Úpopr%   r   r&   r   r(   ÚendswithÚappendÚetreeÚ
SubElementÚ
_build_rowÚ_build_empty_row)r   r   r5   r   Úheaderr1   ÚalignÚcr;   r<   r=   r    r   r   r   ÚrunW   s*    



zTableProcessor.runzSequence[str | None])r   rF   r   c                 C  s2   t  |d¡}t|ƒ}|r.t  |d¡ |d8 }qdS )zBuild an empty row.ÚtrÚtdr   N)rA   rB   r&   )r   r   rF   rI   Úcountr   r   r   rD   v   s
    zTableProcessor._build_empty_row)r    r   rF   r   c           
   	   C  s¨   t  |d¡}d}|jdkrd}|  |¡}t|ƒD ]r\}}t  ||¡}	z||  d¡|	_W n typ   d|	_Y n0 |r0| jd rŽ|	 	d|¡ q0|	 	d	d
|› d¡ q0dS )z) Given a row of text, build table cells. rI   rJ   r<   Úthr   r   Úuse_align_attributerF   Ústyleztext-align: ú;N)
rA   rB   Útagr-   Ú	enumerater   ÚtextÚ
IndexErrorr   r/   )
r   r    r   rF   rI   rP   ÚcellsÚiÚarG   r   r   r   rC   ~   s    


zTableProcessor._build_row)r    r   c                 C  s4   | j r*| d¡r|dd… }| j d|¡}|  |¡S )z) split a row of text into list of cells. r$   r   Nr   )r   r(   r*   ÚsubÚ_split)r   r    r   r   r   r-   “   s
    
zTableProcessor._split_rowc                 C  s  g }g }g }g }g }g }| j  |¡D ]¢}| d¡rl| t| d¡ƒd ¡ | | d¡| d¡d df¡ q$| d¡r¬| t| d¡ƒ¡ | | d¡| d¡d df¡ q$| d¡r$| | d¡¡ q$d}	t|ƒ}
|	|
k rlzn||	 ||	 d  }|dkrt‚||	d d…  |¡d }| ||	 d ||	|  d f¡ |	|d 7 }	W qÔ tyh   |	d7 }	Y qÔ0 qÔ|D ]j}d}|D ]J}||d k r– qÈn.|d |  kr¶|d kr|n n
d} qÈq||sp| |¡ qpd}	|D ] }| ||	|… ¡ |d }	qä| ||	d… ¡ |S )	z: split a row of text with some code into a list of cells. r   r   r6   r   é   NFT)	ÚRE_CODE_PIPESÚfinditerÚgroupr@   r&   ÚstartÚendÚ
ValueErrorr2   )r   r    ÚelementsZpipesZticsZ
tic_pointsZ
tic_regionZ
good_pipesÚmÚposZtic_lenZtic_sizer2   ÚpipeZ	throw_outZregionr   r   r   rX   ›   sV    
"
"


"$
zTableProcessor._split)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompilerZ   r*   r   r3   rH   rD   rC   r-   rX   Ú__classcell__r   r   r   r   r   &   s   

$r   c                      s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚTableExtensionz Add tables to Markdown. c                   s$   dddgi| _ tƒ jf i |¤Ž d S )NrM   Fz-True to use align attribute instead of style.)r   r   r   )r   Úkwargsr   r   r   r   ç   s    ÿzTableExtension.__init__c                 C  s<   d|j vr|j  d¡ t|j|  ¡ ƒ}|jj |dd¡ dS )z7 Add an instance of `TableProcessor` to `BlockParser`. r$   r;   éK   N)ZESCAPED_CHARSr@   r   r   Z
getConfigsÚblockprocessorsÚregister)r   ZmdÚ	processorr   r   r   ÚextendMarkdownï   s    
zTableExtension.extendMarkdown)rd   re   rf   rg   r   rq   rj   r   r   r   r   rk   ä   s   rk   c                  K  s   t f i | ¤ŽS )N)rk   )rl   r   r   r   ÚmakeExtension÷   s    rr   )rg   Ú
__future__r   r   r   rn   r   Úxml.etree.ElementTreerA   ÚElementTreerh   Útypingr   r   r	   r
   r'   r)   r,   r   rk   rr   r   r   r   r   Ú<module>   s    ?