o
    5ti                     @   s   d dl Z d dlZd dlmZmZ d dlZd dlZd dlmZm	Z	 d dlm
Z
 ddlmZmZmZ ddlmZ d	d
lmZ G dd deZG dd deZG dd deZdS )    N)AnyFinal)ColumnDataPropertyDataProperty)Typecode   )AlignLatexStylerStylerInterface   )AbstractTableWriter   )IndentationTextTableWriterc                       s   e Zd ZU dZedZeed< e	de
fddZdeddf fd	d
Zdede
fddZdee fddZd fddZd fddZdedefddZdedefddZ  ZS )LatexWriterz/
    A base writer class for LaTeX format.
    z^\\?[a-zA-Z]+$_RE_MATH_PARTSreturnc                 C   s   dS )NT selfr   r   T/home/ubuntu/.local/lib/python3.10/site-packages/pytablewriter/writer/text/_latex.pysupport_split_write   s   zLatexWriter.support_split_writekwargsNc                    s\   t  jdi | | d d| _d| _|dd| _d| _d| _t	
tj| _|   d S )N Tindent_stringz    z & z \\r   )super__init__
_set_charsis_write_opening_rowis_write_closing_rowgetr   column_delimiterchar_right_side_rowcopydeepcopydpNOT_QUOTING_FLAGS_quoting_flags_init_cross_point_mapsr   r   	__class__r   r   r      s   
zLatexWriter.__init__value_dpc                 C   sF   |j tjtjfv rdS z| j|jrW dS W dS  ty"   Y dS w NFT)typecoder   INTEGERREAL_NUMBERr   searchdata	TypeErrorr   r+   r   r   r   _is_math_parts)   s   zLatexWriter._is_math_partsc                 C   sh   g }| j D ],}| |jj}|d u s|tjkr|j}|tjkr"d}n
|tjkr*d}nd}|| q|S )Nrcl)	_column_dp_list_get_col_stylecolumn_indexalignr   AUTORIGHTCENTERappend)r   col_align_listcol_dpr;   	col_alignr   r   r   _get_col_align_char_list5   s   


z$LatexWriter._get_col_align_char_listc                    s   t    |   d S N)r   _write_opening_rowinc_indent_levelr   r)   r   r   rE   H   s   
zLatexWriter._write_opening_rowc                    s   |    t   d S rD   )dec_indent_levelr   _write_closing_rowr   r)   r   r   rH   L   s   zLatexWriter._write_closing_rowvaluec                 C   s   |S rD   r   r   rI   r   r   r   _to_math_partsP   s   zLatexWriter._to_math_partswriterc                 C   s   t |S rD   )r	   )r   rL   r   r   r   _create_stylerW   s   zLatexWriter._create_stylerr   N)__name__
__module____qualname____doc__recompiler   r   __annotations__propertyboolr   r   r   r   r4   liststrrC   rE   rH   rK   r   r
   rM   __classcell__r   r   r)   r   r      s   
 r   c                       s   e Zd ZU dZdZedZee	d< e
defddZdedd	f fd
dZdedededef fddZdee fddZdee fddZdee fddZd fddZd fddZ  ZS )LatexMatrixWritera  
    A matrix writer class for LaTeX environment.

        :Example:
            :ref:`example-latex-matrix-writer`

    .. py:method:: write_table

        |write_table| with LaTeX ``array`` environment.

        :Example:
            :ref:`example-latex-matrix-writer`
    latex_matrixz^[a-zA-Z]+_\{[a-zA-Z0-9]+\}$_RE_VARr   c                 C      | j S rD   FORMAT_NAMEr   r   r   r   format_namem      zLatexMatrixWriter.format_namer   Nc                    s"   t  jdi | d| _d| _d S )NFr   )r   r   is_write_headeris_write_header_separator_rowr(   r)   r   r   r   q   s   
zLatexMatrixWriter.__init__row_idxrA   r+   c                    s8   t  |||}| j|r|S | |r| |S |S rD   )r   _to_row_itemr]   r0   r4   rK   r   re   rA   r+   row_itemr)   r   r   rf   w   s   

zLatexMatrixWriter._to_row_itemc                 C   s   g S rD   r   r   r   r   r   _get_header_row_separator_items   s   z1LatexMatrixWriter._get_header_row_separator_itemsc              	   C   sX   g }t | jr|| jd  n|d |ddd|  dg d|gS )Nz
 = \left( z\left( \begin{array}{{:s}r   })typepyis_not_null_string
table_namer?   extendformatjoinrC   )r   row_item_listr   r   r   _get_opening_row_items   s   
z(LatexMatrixWriter._get_opening_row_itemsc                 C      dgS )Nz\end{array} \right)r   r   r   r   r   _get_closing_row_items      z(LatexMatrixWriter._get_closing_row_itemsc                    s    |  d |   t   d S )Nz\begin{equation})_write_linerF   r   rE   r   r)   r   r   rE         
z$LatexMatrixWriter._write_opening_rowc                    s    t    |   | d d S )Nz\end{equation})r   rH   rG   rx   r   r)   r   r   rH      ry   z$LatexMatrixWriter._write_closing_rowrN   )rO   rP   rQ   rR   r`   rS   rT   r]   r   rU   rV   rY   ra   r   r   intr   r   rf   rX   ri   rt   rv   rE   rH   rZ   r   r   r)   r   r[   [   s   
 r[   c                       s   e Zd ZdZdZedefddZdeddf fdd	Z	de
e fd
dZdedefddZdedefddZdededef fddZdedededef fddZde
e fddZde
e fddZ  ZS )LatexTableWritera  
    A matrix writer class for LaTeX environment.

        :Example:
            :ref:`example-latex-table-writer`

    .. py:method:: write_table

        |write_table| with LaTeX ``array`` environment.

        :Example:
            :ref:`example-latex-table-writer`
    latex_tabler   c                 C   r^   rD   r_   r   r   r   r   ra      rb   zLatexTableWriter.format_namer   Nc                    s,   t  jdi | d| _| jtjd d S )Nz
 \\ \hlinez\inftyr   )r   r   r!   _dp_extractorset_type_valuer   INFINITYr(   r)   r   r   r      s   zLatexTableWriter.__init__c              	   C   s"   d ddd |  dggS )Nr   rj   rk   z | z} \hline)rr   rq   rC   r   r   r   r   rt      s   z'LatexTableWriter._get_opening_row_itemsr+   c                 C   s   |j tjjkr	dS dS r,   )r-   rm   r   STRINGr3   r   r   r   __is_requre_verbatim   s   z%LatexTableWriter.__is_requre_verbatimrI   c                 C   s   dd|dd S )Nz\verb|sr   rJ   r   r   r   
__verbatim   s   zLatexTableWriter.__verbatimrA   c                    s   |  t ||S rD   )_LatexTableWriter__verbatimr   _to_header_item)r   rA   r+   r)   r   r   r      s   z LatexTableWriter._to_header_itemre   c                    s<   t  |||}| |r| |S | |r| |S |S rD   )r   rf   r4   rK   %_LatexTableWriter__is_requre_verbatimr   rg   r)   r   r   rf      s   



zLatexTableWriter._to_row_itemc                 C   ru   )Nz\hliner   r   r   r   r   ri      rw   z0LatexTableWriter._get_header_row_separator_itemsc                 C   ru   )Nz\end{array}r   r   r   r   r   rv      rw   z'LatexTableWriter._get_closing_row_items)rO   rP   rQ   rR   r`   rV   rY   ra   r   r   rX   rt   r   rW   r   r   r   r   rz   rf   ri   rv   rZ   r   r   r)   r   r{      s    r{   )r"   rS   typingr   r   datapropertyr$   rm   r   r   r   styler   r	   r
   _table_writerr   _text_writerr   r   r[   r{   r   r   r   r   <module>   s    LF