
    -Be                     x    d Z ddlmZ ddlmZ ddlmc mZ ddlZdZ	dZ
dZ G d de      Z G d	 d
e      Zd Zy)a  
Tables Extension for Python-Markdown
====================================

Added parsing of tables to Python-Markdown.

See <https://Python-Markdown.github.io/extensions/tables>
for documentation.

Original code Copyright 2009 [Waylan Limberg](http://achinghead.com)

All changes Copyright 2008-2014 The Python Markdown Project

License: [BSD](https://opensource.org/licenses/bsd-license.php)

   )	Extension   )BlockProcessor    Nc                        e Zd ZdZ ej
                  d      Z ej
                  d      Z fdZd Z	d Z
d Zd Zd	 Z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      :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.test(   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cr5   r6   r7   r)   s               r   runzTableProcessor.runL   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;   r<   r   )r   r&   rA   rE   counts        r   r>   zTableProcessor._build_empty_rowk   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. rE   rF   r6   thr   r
   use_align_attributerA   styleztext-align: ;N)
r;   r<   tagr"   	enumerater   text
IndexErrorr   r$   )
r   r)   r&   rA   rE   rM   cellsiarB   s
             r   r=   zTableProcessor._build_rows   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   r0   r      NFT)	RE_CODE_PIPESfinditergroupr:   r   startend
ValueErrorr-   )r   r)   elementspipestics
tic_points
tic_region
good_pipesmpostic_lentic_sizer-   pipe	throw_outregions                   r   rV   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	)__name__
__module____qualname____doc__recompilerY   r   r   r.   rC   r>   r=   r"   rV   __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 )NrJ   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)z3 Add an instance of TableProcessor to BlockParser. r   r5   K   N)ESCAPED_CHARSr:   r   r   
getConfigsblockprocessorsregister)r   md	processors      r   extendMarkdownzTableExtension.extendMarkdown   sW    b&&&##C("299doo.?@	
		!!**9grBr   )rl   rm   rn   ro   r   r   rr   rs   s   @r   ru   ru      s    ##Cr   ru   c                      t        di | S )Nrw   )ru   )rx   s    r   makeExtensionr      s    #F##r   )ro   r
   r   r}   r   xml.etree.ElementTreer;   ElementTreerp   r   r   r!   r   ru   r   rw   r   r   <module>r      sL   "  , % % 			
{^ {|CY C$$r   