
    c                         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dS )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                 t    d| _         d| _        || _        t                                          |           d S )NF )border	separatorconfigsuper__init__)selfparserr   	__class__s      :lib/python3.11/site-packages/markdown/extensions/tables.pyr   zTableProcessor.__init__!   s6             c                 Z   d}d |                     d          D             }t          |          dk    ru|d         }t          | _        |                    d          r| xj        t
          z  c_        | j                            |          | xj        t          z  c_        | 	                    |          }t          |          }|dk    }|sp|dk    rj| j        rct          dt          |                    D ]E}||                             d          }|s"| j                            ||                   du}|s nF|rj| 	                    |d                   }t          |          |k    o2t          d                    |                    t          d	          k    }|r|| _        |S )
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.
        Fc                 8    g | ]}|                     d           S ) )strip).0rows     r   
<listcomp>z'TableProcessor.test.<locals>.<listcomp>/   s"    <<<3		#<<<r   
r   r   |Nr
   z|:- )splitlen	PIPE_NONEr   
startswith	PIPE_LEFTRE_END_BORDERsearch
PIPE_RIGHT
_split_rowrangesetjoinr   )	r   parentblockis_tablerowsheader0r   row0_lenindexs	            r   testzTableProcessor.test(   s    <<%++d*;*;<<<t99q= 	)1gG#DK!!#&& )y(!((11 *z)//'**C3xxH!|H  A $+ "1c$ii00  E#E{55c::H# V#'#5#<#<T%[#I#IQU#U#   )ood1g..HH0Vc"''#,,6G6G3v;;6V )%(DNr   c                    |                     d                              d          }|d                             d          }t          |          dk     rg n	|dd         }g }| j        D ]}|                    d          }|                    d          r+|                    d          r|                    d           W|                    d          r|                    d	           |                    d          r|                    d
           |                    d           t          j	        |d          }t          j	        |d          }	| 
                    ||	|           t          j	        |d          }
t          |          dk    r|                     |
|           dS |D ],}| 
                    |                    d          |
|           -dS )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cr8   r9   r:   r   s               r   runzTableProcessor.runL   s   

1##D))q$$ZZ!^2rrqrr  		# 		#AA||C   #QZZ__ #X&&&&c"" #V$$$$C #W%%%%T""""  11 00u--- 00t99> 	>!!%///// > >		#u====> >r   c                     t          j        |d          }t          |          }|rt          j        |d           |dz  }|dS dS )zBuild an empty row.trtdr   N)r>   r?   r   )r   r*   rD   rH   counts        r   rA   zTableProcessor._build_empty_rowk   sa    fd++E

 	R&&&QJE  	 	 	 	 	r   c                    t          j        |d          }d}|j        dk    rd}|                     |          }t	          |          D ]\  }}t          j        ||          }		 ||                             d          |	_        n# t          $ r
 d|	_        Y nw xY w|r>| j        d         r|		                    d|           y|		                    d	d
| d           dS )z) Given a row of text, build table cells. rH   rI   r9   thr   r
   use_align_attributerD   styleztext-align: ;N)
r>   r?   tagr&   	enumerater   text
IndexErrorr   r(   )
r   r   r*   rD   rH   rP   cellsiarE   s
             r   r@   zTableProcessor._build_rows   s   fd++:  	C$$ e$$ 
	8 
	8DAq S))Aq,,    8;45 8EE'1%%%%EE'#6!#6#6#6777
	8 
	8s   $ BBBc                     | j         r:|                    d          r
|dd         }| j                            d|          }|                     |          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   sW    ; 	2~~c"" !""g$((S11C{{3r   c                    g }g }g }g }g }g }| j                             |          D ]\}|                    d          rz|                    t	          |                    d                    dz
             |                    |                    d          |                    d          dz
  df           |                    d          rx|                    t	          |                    d                               |                    |                    d          |                    d          dz
  df           |                    d          r(|                    |                    d                     ^d}	t	          |          }
|	|
k     r	 ||	         ||	         d         z
  }|dk    rt          ||	dz   d                             |          dz   }|                    ||	         d         ||	|z            d         f           |	|dz   z  }	n# t          $ r |	dz  }	Y nw xY w|	|
k     |D ]N}d}|D ]0}||d         k     r n!|d         |cxk    r|d         k    rn ,d} n1|s|                    |           Od}	|D ]$}|                    ||	|                    |dz   }	%|                    ||	d                    |S )	z: split a row of text with some code into a list of cells. r   r   r3   r      NFT)	RE_CODE_PIPESfinditergroupr=   r   startend
ValueErrorr0   )r   r   elementspipestics
tic_points
tic_region
good_pipesmpostic_lentic_sizer0   pipe	throw_outregions                   r   rY   zTableProcessor._split   s3   


 #,,S11 	) 	)Awwqzz ) C

OOa/000!!1771::quuQxx!|Q"?@@@@ ) C

OO,,,!!1771::quuQxx!|Q"?@@@@ )QWWQZZ((( d))Gm 		9z#q'99q= %$$S1WXX,,X66:!!:c?1#5z#+7Nq7Q"RSSSuqy    q Gm 		   	( 	(DI$  &)# EAY$    &)      $IE  (!!$'''  	 	DOOCDM***(CCCDD	"""s   BH H10H1)__name__
__module____qualname____doc__recompiler\   r#   r   r1   rF   rA   r@   r&   rY   __classcell__r   s   @r   r   r      s        BJDEEMBJ566M! ! ! ! !" " "H> > >>  8 8 8*     F F F F F F Fr   r   c                   (     e Zd ZdZ fdZd Z xZS )TableExtensionz Add tables to Markdown. c                 P    dddgi| _          t                      j        di | d S )NrM   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                             d           t          |j        |                                           }|j        j                            |dd           dS )z3 Add an instance of TableProcessor to BlockParser. r   r8   K   N)ESCAPED_CHARSr=   r   r   
getConfigsblockprocessorsregister)r   md	processors      r   extendMarkdownzTableExtension.extendMarkdown   sg    b&& 	)##C((("29doo.?.?@@	
	!**9grBBBBBr   )ro   rp   rq   rr   r   r   ru   rv   s   @r   rx   rx      sT        ### # # # #C C C C C C Cr   rx   c                      t          di | S )Nrz   )rx   )r{   s    r   makeExtensionr      s    ##F###r   )rr   r
   r   r   r   xml.etree.ElementTreer>   ElementTreers   r    r"   r%   r   rx   r   rz   r   r   <module>r      s    "       , , , , , , % % % % % % % % % 						
{ { { { {^ { { {|C C C C CY C C C$$ $ $ $ $r   