ó
    "nj%"  ã                  ó²   • S r SSKJr  SSKJr  SSKJr  SSKJs  J	r  SSK
r
SSKJrJrJr  \(       a  SS	KJr  SrSrSr " S
 S\5      r " S S\5      rS rg)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                  ó´   ^ • \ rS rSrSr\R                  " S5      r\R                  " S5      rSU 4S jjr	SS jr
SS jrSS jrSS	 jrSS
 jrSS jrSrU =r$ )ÚTableProcessoré&   zProcess Tables. z"(?:(\\\\)|(\\`+)|(`+)|(\\\|)|(\|))z(?<!\\)(?:\\\\)*\|$c                óL   >• SU l         SU l        X l        [        TU ]  U5        g )NFÚ )ÚborderÚ	separatorÚconfigÚsuperÚ__init__)ÚselfÚparserr   Ú	__class__s      €Ú</usr/lib/python3/dist-packages/markdown/extensions/tables.pyr   ÚTableProcessor.__init__,   s#   ø€ Ø"'ˆŒØ(*ˆŒØŒä‰Ñ˜Õ ó    c                óz  • SnUR                  S5       Vs/ s H  oDR                  S5      PM     nn[        U5      S:”  Gat  US   n[        U l        UR                  S5      (       a  U =R                  [        -  sl        U R                  R                  U5      b  U =R                  [        -  sl        U R                  U5      n[        U5      nUS:„  nU(       du  US:X  ao  U R                  (       a^  [        S[        U5      5       HE  nXX   R                  S5      nU(       d  U R                  R                  XX   5      SLnU(       a  ME    O   U(       a\  U R                  US   5      n[        U5      U:H  =(       a&    [        SR                  U5      5      [        S	5      :*  nU(       a  X@l        U$ s  snf )
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   ÚtestÚTableProcessor.test3   s`  € ð ˆØ*/¯+©+°dÔ*;Ó<Ò*; 3—	‘	˜#–Ñ*;ˆÐ<Üˆt‹9�qŒ=Ø˜1‘gˆGÜ#ˆDŒKØ×!Ñ! #×&Ñ&Ø—’œyÑ(•Ø×!Ñ!×(Ñ(¨Ó1Ñ=Ø—’œzÑ)•Ø—/‘/ 'Ó*ˆCÜ˜3“xˆHØ !‘|ˆHö  ¨A£°$·+·+Ü" 1¤c¨$£iÖ0�EØ#™{×5Ñ5°cÓ:�HÞ#Ø#'×#5Ñ#5×#<Ñ#<¸T¹[Ó#IÐQUÐ#U˜ß#˜8Ùñ 1ö Ø—o‘o d¨1¡gÓ.�Ü ›H¨Ñ0×V´c¸"¿'¹'À#»,Ó6GÌ3ÈvË;Ñ6V�ÞØ%(”Nàˆùò7 =s   –F8c                ól  • UR                  S5      R                  S5      nUS   R                  S5      n[        U5      S:  a  / OUSS n/ nU R                   H¶  nUR                  S5      nUR                  S5      (       a)  UR                  S5      (       a  UR                  S5        MS  UR                  S5      (       a  UR                  S	5        M|  UR                  S5      (       a  UR                  S
5        M¥  UR                  S5        M¸     [        R                  " US5      n[        R                  " US5      n	U R                  XIU5        [        R                  " US5      n
[        U5      S:X  a  U R                  X¦5        gU H$  nU R                  UR                  S5      X¦5        M&     g)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.   Úheaderr1   ÚalignÚcr=   r>   r?   r0   s               r   ÚrunÚTableProcessor.runW   sK  € à—
‘
˜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˜‹>à×!Ñ! %Õ/ã�Ø—‘ §	¡	¨#£°Ö=ò r   c                ó¢   • [         R                  " US5      n[        U5      nU(       a&  [         R                  " US5        US-  nU(       a  M%  gg)zBuild an empty row.ÚtrÚtdr   N)rC   rD   r"   )r   r-   rI   rN   Úcounts        r   rF   ÚTableProcessor._build_empty_rowv   s@   € ä×Ò˜f dÓ+ˆÜ�E“
ˆÞÜ×Ò˜R Ô&Ø�Q‰JˆE÷ Šer   c                ó¾  • [         R                  " US5      nSnUR                  S:X  a  SnU R                  U5      n[	        U5       H{  u  px[         R                  " XE5      n	 Xg   R                  S5      U	l        U(       d  M=  U R                  S   (       a  U	R                  SU5        Me  U	R                  S	S
U S35        M}     g! [         a
    SU	l         N_f = f)z(Given a row of text, build table cells. rN   rO   r>   Úthr   r   Úuse_align_attributerI   Ústyleztext-align: Ú;N)
rC   rD   Útagr)   Ú	enumerater!   ÚtextÚ
IndexErrorr   r+   )
r   r0   r-   rI   rN   rW   ÚcellsÚiÚarJ   s
             r   rE   ÚTableProcessor._build_row~   sÃ   € ä×Ò˜f dÓ+ˆØˆØ�:‰:˜Ó ØˆCØ—‘ Ó$ˆô ˜eÖ$‰DˆAÜ× Ò  Ó)ˆAðØ™Ÿ™¨Ó,�”÷ ˆqØ—;‘;Ð4×5Ø—E‘E˜' 1Ö%à—E‘E˜' \°!°°AÐ#6Ö7ò %øô ó Ø�–ðús   Á$CÃCÃCc                ó´   • U R                   (       a7  UR                  S5      (       a  USS nU R                  R                  SU5      nU R	                  U5      $ )z(split a row of text into list of cells. r   r   Nr   )r   r$   r&   ÚsubÚ_split)r   r0   s     r   r)   ÚTableProcessor._split_row“   sJ   € à�;�;Ø�~‰~˜c×"Ñ"Ø˜!˜"�g�Ø×$Ñ$×(Ñ(¨¨SÓ1ˆCØ�{‰{˜3ÓÐr   c                óÖ  • / n/ n/ n/ n/ n/ nU R                   R                  U5       GH,  nUR                  S5      (       ac  UR                  [	        UR                  S5      5      S-
  5        UR                  UR                  S5      UR                  S5      S-
  S45        M}  UR                  S5      (       a`  UR                  [	        UR                  S5      5      5        UR                  UR                  S5      UR                  S5      S-
  S45        Mó  UR                  S5      (       d  GM  UR                  UR                  S5      5        GM/     Sn	[	        U5      n
Xš:  a`   XI   XY   S   -
  nUS:X  a  [        eXIS-   S R                  U5      S-   nUR                  XY   S   XYU-      S   45        XœS-   -  n	Xš:  a  M`  U HM  nSnU H(  nXßS   :  a    OUS   Us=::  a  US   ::  d  M"  O  M&  Sn  O   U(       a  M<  UR                  U5        MO     Sn	U H  nUR                  XU 5        US-   n	M     UR                  XS 5        U$ ! [         a    U	S-  n	 N£f = f)	z9split a row of text with some code into a list of cells. r   r   r8   r   é   NFT)	ÚRE_CODE_PIPESÚfinditerÚgrouprB   r"   ÚstartÚendÚ
ValueErrorr4   )r   r0   ÚelementsÚpipesÚticsÚ
tic_pointsÚ
tic_regionÚ
good_pipesÚmÚposÚtic_lenÚtic_sizer4   ÚpipeÚ	throw_outÚregions                   r   ra   ÚTableProcessor._split›   sK  € àˆØˆØˆØˆ
Øˆ
Øˆ
ð ×#Ñ#×,Ñ,¨S×1ˆAà�w‰w�q�z‰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“)ˆØ‹mðØ™9 z¡°qÑ'9Ñ9�Ø˜q“=Ü$Ð$Ø 1™W˜X˜×,Ñ,¨XÓ6¸Ñ:�Ø×!Ñ! :¡?°1Ñ#5°zÈÁ+Ñ7NÈqÑ7QÐ"RÔSØ˜q‘yÑ �ð �mó  ˆDØˆIÛ$�Ø ™)Ó#áØ˜A‘Y $Õ3¨&°©)×3Ñ3à $�IÙñ %÷ �9Ø×!Ñ! $Ö'ñ ð ˆÛˆDØ�O‰O˜C D˜MÔ*Ø˜‘(ŠCñ ð 	�‰˜˜D˜	Ô"Øˆøô7 ó Ø�q‘’ðús   Å,AI ÉI(É'I()r   r   r   )r   zblockparser.BlockParserr   zdict[str, Any])r-   úetree.Elementr.   ÚstrÚreturnÚbool)r-   ry   rG   ú	list[str]r{   ÚNone)r-   ry   rI   úSequence[str | None]r{   r~   )r0   rz   r-   ry   rI   r   r{   r~   )r0   rz   r{   r}   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚreÚcompilere   r&   r   r5   rK   rF   rE   r)   ra   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r   &   sO   ø† Ùà—J’JÐDÓE€MØ—J’JÐ5Ó6€M÷!ô"ôH>ô>ô8ô* ÷Fò Fr   r   c                  ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚTableExtensionéä   zAdd tables to Markdown. c                ó>   >• SSS/0U l          [        TU ]  " S0 UD6  g )NrT   Fz-True to use align attribute instead of style.© )r   r   r   )r   Úkwargsr   s     €r   r   ÚTableExtension.__init__ç   s,   ø€ à! EÐ+ZÐ#[ð
ˆŒð 	/ä‰ÒÑ"˜6Ó"r   c                óð   • SUR                   ;  a  UR                   R                  S5        [        UR                  U R	                  5       5      nUR                  R
                  R                  USS5        g)z6Add an instance of `TableProcessor` to `BlockParser`. r   r=   éK   N)ÚESCAPED_CHARSrB   r   r   Ú
getConfigsÚblockprocessorsÚregister)r   ÚmdÚ	processors      r   ÚextendMarkdownÚTableExtension.extendMarkdownï   sW   € à�b×&Ñ&Ó&Ø×Ñ×#Ñ# CÔ(Ü" 2§9¡9¨d¯o©oÓ.?Ó@ˆ	Ø
�	‰	×!Ñ!×*Ñ*¨9°g¸rÕBr   )r   )	r€   r�   r‚   rƒ   r„   r   r™   r‡   rˆ   r‰   s   @r   r‹   r‹   ä   s   ø† Ù#õ#÷Cð Cr   r‹   c                 ó   • [        S0 U D6$ )NrŽ   )r‹   )r�   s    r   ÚmakeExtensionrœ   ÷   s   € ÜÑ#˜FÑ#Ð#r   )r„   Ú
__future__r   r   r   r•   r   Úxml.etree.ElementTreerC   ÚElementTreer…   Útypingr   r	   r
   r   r#   r%   r(   r   r‹   rœ   rŽ   r   r   Ú<module>r¡      s[   ðñõ #å Ý ,ß %Ð %Û 	ß /Ñ /æÝà€	Ø€	Ø€
ô{�^ô {ô|C�Yô Có&$r   