
    /Vh#"                        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      J/home/dcms/DCMS/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   se    */++d*;<3		#<<t9q=1gG#DK!!#&y(!!((1=z)//'*C3xH!|H A$++"1c$i0 E#E{55c:H##'#5#5#<#<T%[#IQU#U# ood1g.H0Vc"''#,6G3v;6V%(DN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   sQ   

1##D)q$Z!^rqr #% 		#AA||C QZZ_X&c"V$CW%T"		#   1  0u-  0t9>!!%/ >		#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>    fd+E
R&QJE 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    fd+:: C$ e$ 
	8DAq  S)Aq, ;;45EE'1%EE'\!A#67
	8  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1C{{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   sj   


 ##,,S1 	)Awwqz C
Oa/0!!1771:quuQx!|Q"?@ C
O,!!1771:quuQx!|Q"?@QWWQZ(!	), d)Gm9z#q'99q=$$S1WX,,X6:!!:c?1#5z#+7Nq7Q"RSuqy  Gm   	(DI$ &)#AY$3&)3 $I !!$'	(  	DOOCDM*(C	 	CD	"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    BJJDEMBJJ56M!"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("299doo.?@	
		!!**9gr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   