o
    -×¾g%"  ã                   @  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r3d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                      sr   e 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d'dd„Zd'd d!„Z‡  ZS )(ÚTableProcessorz Process Tables. z"(?:(\\\\)|(\\`+)|(`+)|(\\\|)|(\|))z(?<!\\)(?:\\\\)*\|$Úparserúblockparser.BlockParserÚconfigúdict[str, Any]c                   s"   d| _ d| _|| _tƒ  |¡ d S )NFÚ )ÚborderÚ	separatorr   ÚsuperÚ__init__)Úselfr   r   ©Ú	__class__© úd/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/markdown/extensions/tables.pyr   ,   s   zTableProcessor.__init__Úparentúetree.ElementÚblockÚstrÚreturnÚboolc           	      C  s  d}dd„ |  d¡D ƒ}t|ƒdkrŠ|d }t| _| d¡r%|  jtO  _| j |¡dur4|  jtO  _|  	|¡}t|ƒ}|dk}|sk|dkrk| jrkt
dt|ƒƒD ]}||  d¡}|sf| j || ¡du}|sj nqQ|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>:   s    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   Úis_tableÚrowsÚheader0r#   Úrow0_lenÚindexr   r   r   Útest3   s4   

ÿ"zTableProcessor.testÚblocksú	list[str]ÚNonec                 C  s  |  d¡ d¡}|d  d¡}t|ƒdk rg n|dd… }g }| jD ]2}| d¡}| d¡r9| d¡r9| d¡ q"| d¡rD| d	¡ q"| d¡rO| d
¡ q"| d¡ q"t 	|d¡}t 	|d¡}	|  
||	|¡ t 	|d¡}
t|ƒdkr||  |
|¡ dS |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   r9   r   Úheaderr4   ÚalignÚcrA   rB   rC   r#   r   r   r   ÚrunW   s,   



ÿzTableProcessor.runrL   úSequence[str | None]c                 C  s8   t  |d¡}t|ƒ}|rt  |d¡ |d8 }|sdS dS )zBuild an empty row.ÚtrÚtdr   N)rG   rH   r(   )r   r   rL   rP   Úcountr   r   r   rJ   v   s   þzTableProcessor._build_empty_rowr#   c           
   	   C  s¨   t  |d¡}d}|jdkrd}|  |¡}t|ƒD ]9\}}t  ||¡}	z
||  d¡|	_W n ty8   d|	_Y nw |rQ| jd rG|	 	d|¡ q|	 	d	d
|› d¡ qdS )z) Given a row of text, build table cells. rP   rQ   rB   Úthr    r   Úuse_align_attributerL   Ústyleztext-align: ú;N)
rG   rH   Útagr/   Ú	enumerater!   ÚtextÚ
IndexErrorr   r1   )
r   r#   r   rL   rP   rW   ÚcellsÚiÚarM   r   r   r   rI   ~   s$   


ÿ
€özTableProcessor._build_rowc                 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 ]Q}| d¡r6| t| d¡ƒd ¡ | | d¡| d¡d df¡ q| d¡rV| t| d¡ƒ¡ | | d¡| d¡d df¡ q| d¡rc| | d¡¡ qd}	t|ƒ}
|	|
k r¶z6||	 ||	 d  }|dkrt‚||	d d…  |¡d }| ||	 d ||	|  d f¡ |	|d 7 }	W n ty±   |	d7 }	Y nw |	|
k sn|D ],}d}|D ]}||d k rÈ n|d |  krÖ|d krÜn q¾d} nq¾|sä| |¡ q¸d}	|D ]}| ||	|… ¡ |d }	qé| ||	d… ¡ |S )	z: split a row of text with some code into a list of cells. r   r   r<   r   é   NFT)	ÚRE_CODE_PIPESÚfinditerÚgrouprF   r(   ÚstartÚendÚ
ValueErrorr7   )r   r#   ÚelementsÚpipesÚticsÚ
tic_pointsÚ
tic_regionÚ
good_pipesÚmÚposÚtic_lenÚtic_sizer7   ÚpipeÚ	throw_outÚregionr   r   r   r_   ›   s`   
"
"
€"ÿø ý
€
zTableProcessor._split)r   r   r   r   )r   r   r   r   r   r   )r   r   r9   r:   r   r;   )r   r   rL   rO   r   r;   )r#   r   r   r   rL   rO   r   r;   )r#   r   r   r:   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompilera   r,   r   r8   rN   rJ   rI   r/   r_   Ú__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di |¤Ž d S )NrT   Fz-True to use align attribute instead of style.r   )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&   rA   éK   N)ÚESCAPED_CHARSrF   r   r   Ú
getConfigsÚblockprocessorsÚregister)r   ÚmdÚ	processorr   r   r   ÚextendMarkdownï   s   
zTableExtension.extendMarkdown)rt   ru   rv   rw   r   r„   rz   r   r   r   r   r{   ä   s    r{   c                  K  s   t di | ¤ŽS )Nr   )r{   )r|   r   r   r   ÚmakeExtension÷   s   r…   )rw   Ú
__future__r   r   r   r€   r   Úxml.etree.ElementTreerG   ÚElementTreerx   Útypingr   r   r	   r
   r)   r+   r.   r   r{   r…   r   r   r   r   Ú<module>   s     ?