
    ̆h#"                        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
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                     ^  \ 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      R/opt/services/DDDS/venv/lib/python3.13/site-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		#*;<t9q=1gG#DK!!#&&y(!!((1=z)//'*C3xH!|H A$++"1c$i0E#{55c:H##'#5#5#<#<T[#IQU#U#8 1 ood1g.H0Vc"''#,6G3v;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                  X5        gU H$  nU R                  UR                  S5      X5        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qr #%AA||C  QZZ__X&c""V$CW%T"     1  0u-  0t9>!!%/		#= 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@    fd+E
R&QJE 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    fd+:: C$ e$DA  )A, q;;45EE'1%EE'\!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1C{{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        XS-   -  n	X:  a  M`  U HM  nSnU H(  nXS   :  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	 Nf = 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1Awwqzz C
Oa/0!!1771:quuQx!|Q"?@ C
O,!!1771:quuQx!|Q"?@QWWQZ(! 2, d)m9zq'99q=$$1WX,,X6:!!:?1#5z+7Nq7Q"RSqy  m  DI$)#AY$3&)33 $I % 9!!$'  DOOCDM*(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    JJDEMJJ56M!"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("299doo.?@	
		!!**9gr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   