Ë
    Áj'"  ã                  ó¨   — d Z ddlmZ ddlmZ ddlmZ ddlmc m	Z ddl
Z
ddlmZmZmZ erdd	lmZ dZdZdZ G d
„ de«      Z G d„ de«      Zd„ Zy)z‡
Adds 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                  óœ   ‡ — e Zd ZdZ ej
                  d«      Z ej
                  d«      Zdˆ fd„Zdd„Z	dd„Z
dd„Zdd„Zdd	„Zdd
„Zˆ xZS )ÚTableProcessorz Process Tables. z"(?:(\\\\)|(\\`+)|(`+)|(\\\|)|(\|))z(?<!\\)(?:\\\\)*\|$c                óN   •— d| _         d| _        || _        t        ‰| �  |«       y )NFÚ )ÚborderÚ	separatorÚconfigÚsuperÚ__init__)ÚselfÚparserr   Ú	__class__s      €úM/var/www/html/venv/lib/python3.12/site-packages/markdown/extensions/tables.pyr   zTableProcessor.__init__,   s%   ø€ Ø"'ˆŒØ(*ˆŒØˆŒä‰Ñ˜Õ ó    c                ó"  — d}|j                  d«      D �cg c]  }|j                  d«      ‘Œ }}t        |«      dkD  �rK|d   }t        | _        |j                  d«      r| xj                  t        z  c_        | j                  j                  |«      �| xj                  t        z  c_        | j                  |«      }t        |«      }|dkD  }|se|dk(  r`| j                  rTt        dt        |«      «      D ]<  }||   j                  d«      }|s | j                  j                  ||   «      du}|rŒ< n |rS| j                  |d   «      }t        |«      |k(  xr& t        dj                  |«      «      t        d	«      k  }|r|| _        |S c c}w )
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.
        FÚ
Ú r   r   Ú|Nr   z|:- )ÚsplitÚstripÚlenÚ	PIPE_NONEr   Ú
startswithÚ	PIPE_LEFTÚRE_END_BORDERÚsearchÚ
PIPE_RIGHTÚ
_split_rowÚrangeÚsetÚjoinr   )	r   ÚparentÚblockÚis_tableÚrowÚrowsÚheader0Úrow0_lenÚindexs	            r   ÚtestzTableProcessor.test3   sc  € ð ˆØ*/¯+©+°dÔ*;Ó<Ñ*; 3�—	‘	˜#•Ð*;ˆÐ<Üˆt‹9�q‹=Ø˜1‘gˆGÜ#ˆDŒKØ×!Ñ! #Ô&Ø—’œyÑ(•Ø×!Ñ!×(Ñ(¨Ó1Ð=Ø—’œzÑ)•Ø—/‘/ 'Ó*ˆCÜ˜3“xˆHØ !‘|ˆHñ  ¨A¢°$·+²+Ü" 1¤c¨$£iÖ0�EØ# E™{×5Ñ5°cÓ:�HÙ#Ø#'×#5Ñ#5×#<Ñ#<¸TÀ%¹[Ó#IÐQUÐ#U˜Ú#Ùð 1ñ Ø—o‘o d¨1¡gÓ.�Ü ›H¨Ñ0ÒV´c¸"¿'¹'À#»,Ó6GÌ3ÈvË;Ñ6V�ÙØ%(�D”Nàˆùò7 =s   –Fc                ó2  — |j                  d«      j                  d«      }|d   j                  d«      }t        |«      dk  rg n|dd }g }| j                  D ]ž  }|j                  d«      }|j                  d«      r#|j                  d«      r|j                  d«       ŒH|j                  d«      r|j                  d	«       Œk|j                  d«      r|j                  d
«       ŒŽ|j                  d«       Œ  t        j                  |d«      }t        j                  |d«      }	| j                  ||	|«       t        j                  |d«      }
t        |«      dk(  r| j                  |
|«       y|D ]$  }| j                  |j                  d«      |
|«       Œ& y)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+   Úblocksr,   Úheaderr/   ÚalignÚcr:   r;   r<   r.   s               r   ÚrunzTableProcessor.runW   sG  € à—
‘
˜1“×#Ñ# DÓ)ˆØ�q‘—‘ Ó$ˆÜ˜“Z !’^‰r¨¨q¨r¨ˆð #%ˆØ—”ˆAØ—‘˜“ˆAØ�|‰|˜CÔ  Q§Z¡Z°¤_Ø—‘˜XÕ&Ø—‘˜cÔ"Ø—‘˜VÕ$Ø—‘˜C”Ø—‘˜WÕ%à—‘˜TÕ"ð  ô × Ñ  ¨Ó1ˆÜ× Ñ  ¨Ó0ˆØ�‰˜  uÔ-Ü× Ñ  ¨Ó0ˆÜˆt‹9˜Š>à×!Ñ! %¨Õ/ã�Ø—‘ §	¡	¨#£°°uÕ=ñ r   c                óˆ   — t        j                  |d«      }t        |«      }|rt        j                  |d«       |dz  }|rŒyy)zBuild an empty row.ÚtrÚtdr   N)r@   rA   r    )r   r+   rF   rJ   Úcounts        r   rC   zTableProcessor._build_empty_rowv   s>   € ä×Ñ˜f dÓ+ˆÜ�E“
ˆÙÜ×Ñ˜R Ô&Ø�Q‰JˆEô r   c                ó   — t        j                  |d«      }d}|j                  dk(  rd}| j                  |«      }t	        |«      D ]p  \  }}t        j                  ||«      }		 ||   j                  d«      |	_        |sŒ9| j                  d   r|	j                  d|«       Œ[|	j                  d	d
|› d�«       Œr y# t        $ r
 d|	_        Y ŒPw xY w)z) Given a row of text, build table cells. rJ   rK   r;   Úthr   r   Úuse_align_attributerF   Ústyleztext-align: Ú;N)
r@   rA   Útagr'   Ú	enumerater   ÚtextÚ
IndexErrorr   r)   )
r   r.   r+   rF   rJ   rR   ÚcellsÚiÚarG   s
             r   rB   zTableProcessor._build_row~   sÇ   € ä×Ñ˜f dÓ+ˆØˆØ�:‰:˜Ò ØˆCØ—‘ Ó$ˆô ˜eÖ$‰DˆAˆqÜ× Ñ   SÓ)ˆAðØ˜q™Ÿ™¨Ó,�”ò Ø—;‘;Ð4Ò5Ø—E‘E˜' 1Õ%à—E‘E˜' \°!°°AÐ#6Õ7ñ %øô ò Ø�–ðús   Á#B:Â:CÃCc                ó    — | j                   r2|j                  d«      r|dd }| j                  j                  d|«      }| j	                  |«      S )z) split a row of text into list of cells. r   r   Nr   )r   r"   r$   ÚsubÚ_split)r   r.   s     r   r'   zTableProcessor._split_row“   sG   € à�;Š;Ø�~‰~˜cÔ"Ø˜!˜"�g�Ø×$Ñ$×(Ñ(¨¨SÓ1ˆCØ�{‰{˜3ÓÐr   c                ó˜  — g }g }g }g }g }g }| j                   j                  |«      D �]  }|j                  d«      rb|j                  t	        |j                  d«      «      dz
  «       |j                  |j                  d«      |j                  d«      dz
  df«       Œw|j                  d«      r_|j                  t	        |j                  d«      «      «       |j                  |j                  d«      |j                  d«      dz
  df«       Œç|j                  d«      sŒù|j                  |j                  d«      «       �Œ d}	t	        |«      }
|	|
k  rd	 ||	   ||	   d   z
  }|dk(  rt        ‚||	dz   d j                  |«      dz   }|j                  ||	   d   ||	|z      d   f«       |	|dz   z  }	|	|
k  rŒd|D ]A  }d}|D ]$  }||d   k  r n|d   |cxk  r	|d   k  sŒn Œ"d} n |rŒ1|j                  |«       ŒC d}	|D ]  }|j                  ||	| «       |dz   }	Œ |j                  ||	d «       |S # t        $ r |	dz  }	Y Œ”w xY w)	z: split a row of text with some code into a list of cells. r   r   r5   r   é   NFT)	ÚRE_CODE_PIPESÚfinditerÚgroupr?   r    ÚstartÚendÚ
ValueErrorr2   )r   r.   ÚelementsÚpipesÚticsÚ
tic_pointsÚ
tic_regionÚ
good_pipesÚmÚposÚtic_lenÚtic_sizer2   ÚpipeÚ	throw_outÚregions                   r   r[   zTableProcessor._split›   sV  € àˆØˆØˆØˆ
Øˆ
Øˆ
ð ×#Ñ#×,Ñ,¨S×1ˆAà�w‰w�qŒzð —‘œC §¡¨£
›O¨aÑ/Ô0à×!Ñ! 1§7¡7¨1£:¨q¯u©u°Q«x¸!©|¸QÐ"?Õ@Ø—‘˜”ð —‘œC §¡¨£
›OÔ,à×!Ñ! 1§7¡7¨1£:¨q¯u©u°Q«x¸!©|¸QÐ"?Õ@à—‘˜•Ø—‘˜QŸW™W Q›ZÖ(ð! 2ð, ˆÜ�d“)ˆØ�GŠmðØ ™9 z°#¡°qÑ'9Ñ9�Ø˜q’=Ü$Ð$Ø˜S 1™W˜X˜×,Ñ,¨XÓ6¸Ñ:�Ø×!Ñ! :¨c¡?°1Ñ#5°zÀ#ÈÁ+Ñ7NÈqÑ7QÐ"RÔSØ�u˜q‘yÑ �ð �G‹mó  ˆDØˆIÛ$�Ø˜& ™)Ò#áØ˜A‘Y $Ô3¨&°©)Ö3à $�IÙð %ò Ø×!Ñ! $Õ'ð ð ˆÛˆDØ�O‰O˜C  D˜MÔ*Ø˜‘(‰Cð ð 	�‰˜˜C˜D˜	Ô"Øˆøô7 ò Ø�q‘’ðús   ÅAH8 È8I	ÉI	)r   zblockparser.BlockParserr   zdict[str, Any])r+   úetree.Elementr,   ÚstrÚreturnÚbool)r+   rq   rD   ú	list[str]rs   ÚNone)r+   rq   rF   úSequence[str | None]rs   rv   )r.   rr   r+   rq   rF   rw   rs   rv   )r.   rr   rs   ru   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompiler^   r$   r   r3   rH   rC   rB   r'   r[   Ú__classcell__©r   s   @r   r   r   &   sM   ø„ Ùà�B—J‘JÐDÓE€MØ�B—J‘JÐ5Ó6€Mõ!ó"óH>ó>ó8ó* ÷Fr   r   c                  ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚTableExtensionz Add tables to Markdown. c                ó<   •— dddgi| _         	 t        ‰| �  di |¤Ž y )NrO   Fz-True to use align attribute instead of style.© )r   r   r   )r   Úkwargsr   s     €r   r   zTableExtension.__init__ç   s,   ø€ à! EÐ+ZÐ#[ð
ˆŒð 	/ä‰ÑÑ"˜6Ó"r   c                óì   — d|j                   vr|j                   j                  d«       t        |j                  | j	                  «       «      }|j                  j
                  j                  |dd«       y)z7 Add an instance of `TableProcessor` to `BlockParser`. r   r:   éK   N)ÚESCAPED_CHARSr?   r   r   Ú
getConfigsÚblockprocessorsÚregister)r   ÚmdÚ	processors      r   ÚextendMarkdownzTableExtension.extendMarkdownï   sW   € à�b×&Ñ&Ñ&Ø×Ñ×#Ñ# CÔ(Ü" 2§9¡9¨d¯o©oÓ.?Ó@ˆ	Ø
�	‰	×!Ñ!×*Ñ*¨9°g¸rÕBr   )rx   ry   rz   r{   r   r�   r~   r   s   @r   r�   r�   ä   s   ø„ Ù#ô#öCr   r�   c                 ó   — t        di | ¤ŽS )Nrƒ   )r�   )r„   s    r   ÚmakeExtensionr�   ÷   s   € ÜÑ#˜FÑ#Ð#r   )r{   Ú
__future__r   r   r   r‰   r   Úxml.etree.ElementTreer@   ÚElementTreer|   Útypingr   r	   r
   r   r!   r#   r&   r   r�   r�   rƒ   r   r   Ú<module>r”      s[   ðñõ #å Ý ,ß %Ð %Û 	ß /Ñ /áÝà€	Ø€	Ø€
ô{�^ô {ô|C�Yô Có&$r   