
    $g%"                        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dS )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                       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(?<!\\)(?:\\\\)*\|$parserblockparser.BlockParserconfigdict[str, Any]c                t    d| _         d| _        || _        t                                          |           d S )NF )border	separatorr   super__init__)selfr   r   	__class__s      Z/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/markdown/extensions/tables.pyr   zTableProcessor.__init__,   s6    "'(*         parentetree.Elementblockstrreturnboolc                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   r   r   is_tablerowsheader0r'   row0_lenindexs	            r   testzTableProcessor.test3   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   blocks	list[str]Nonec                   |                     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   r=   r   headerr8   aligncrF   rG   rH   r'   s               r   runzTableProcessor.runW   s   

1##D))q$$ZZ!^^rrqrr #% 		# 		#AA||C   #QZZ__ #X&&&&c"" #V$$$$C #W%%%%T""""  11 00u--- 00t99>>!!%///// > >		#u====> >r   rQ   Sequence[str | None]c                    t          j        |d          }t          |          }|rt          j        |d           |dz  }|dS dS )zBuild an empty row.trtdr   N)rL   rM   r,   )r   r   rQ   rV   counts        r   rO   zTableProcessor._build_empty_rowv   sa    fd++E

 	R&&&QJE  	 	 	 	 	r   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. rV   rW   rG   thr$   r   use_align_attributerQ   styleztext-align: ;N)
rL   rM   tagr3   	enumerater%   text
IndexErrorr   r5   )
r   r'   r   rQ   rV   r^   cellsiarR   s
             r   rN   zTableProcessor._build_row~   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.   r0   sub_split)r   r'   s     r   r3   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   rA   r      NFT)	RE_CODE_PIPESfinditergrouprK   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   rg   zTableProcessor._split   s   


 #,,S11 	) 	)Awwqzz ) C

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

OO,,,!!1771::quuQxx!|Q"?@@@@ )QWWQZZ((( d))Gmm9z#q'99q==$$S1WXX,,X66:!!:c?1#5z#+7Nq7Q"RSSSuqy    q Gmm   	( 	(DI$  &)##EAY$3333&)33333 $IE 4  (!!$'''  	 	DOOCDM***(CCCDD	"""s   BH H10H1)r   r   r   r   )r   r   r   r   r    r!   )r   r   r=   r>   r    r?   )r   r   rQ   rT   r    r?   )r'   r   r   r   rQ   rT   r    r?   )r'   r   r    r>   )__name__
__module____qualname____doc__recompilerj   r0   r   r<   rS   rO   rN   r3   rg   __classcell__r   s   @r   r   r   &   s        BJDEEMBJ566M! ! ! ! ! !" " " "H> > > >>   8 8 8 8*       F 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                R    dddgi| _         	  t                      j        di | d S )Nr[   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 )z7 Add an instance of `TableProcessor` to `BlockParser`. r*   rF   K   N)ESCAPED_CHARSrK   r   r   
getConfigsblockprocessorsregister)r   md	processors      r   extendMarkdownzTableExtension.extendMarkdown   se    b&&&##C((("29doo.?.?@@	
	!**9grBBBBBr   )r}   r~   r   r   r   r   r   r   s   @r   r   r      sT        ### # # # #C C C C C C 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.ElementTreerL   ElementTreer   typingr   r	   r
   r   r-   r/   r2   r   r   r   r   r   r   <module>r      s0    # " " " " "       , , , , , , % % % % % % % % % 				 / / / / / / / / / / 		
{ { { { {^ { { {|C C C C CY C C C&$ $ $ $ $r   