o
    5t¾i 0  ã                   @   sü   U d dl Z d dlmZmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ ddlmZ dd	lmZmZmZ eG d
d„ deƒƒZeG dd„ deƒƒZeG dd„ deƒƒZejejejejdœZeeeef  ed< deeef defdd„ZG dd„ dƒZdS )é    N)ÚEnumÚunique)ÚAnyÚFinalÚOptionalÚUnion)ÚAlign)ÚColoré   )Únormalize_enumé   )ÚFontSizeÚ	FontStyleÚ
FontWeightc                   @   ó   e Zd ZdZdZdZdZdS )ÚDecorationLineÚnoneÚline_throughÚstrikeÚ	underlineN)Ú__name__Ú
__module__Ú__qualname__ÚNONEÚLINE_THROUGHÚSTRIKEÚ	UNDERLINE© r   r   úN/home/ubuntu/.local/lib/python3.10/site-packages/pytablewriter/style/_style.pyr      ó
    r   c                   @   r   )ÚThousandSeparatorr   ÚcommaÚspaceÚ
underscoreN)r   r   r   r   ÚCOMMAÚSPACEÚ
UNDERSCOREr   r   r   r   r       r   r    c                   @   sV   e Zd ZdZdZdZdZedefdd„ƒZ	ede
fdd	„ƒZd
ede
ddfdd„ZdS )ÚVerticalAlign)r   Úbaseline)r
   Útop)é   Úmiddle)é   ÚbottomÚreturnc                 C   ó   | j S ©N)Ú_VerticalAlign__align_code©Úselfr   r   r   Ú
align_code#   ó   zVerticalAlign.align_codec                 C   r/   r0   )Ú_VerticalAlign__align_stringr2   r   r   r   Ú	align_str'   r5   zVerticalAlign.align_strÚcodeÚstringNc                 C   s   || _ || _d S r0   )r1   r6   )r3   r8   r9   r   r   r   Ú__init__+   s   
zVerticalAlign.__init__)r   r   r   ÚBASELINEÚTOPÚMIDDLEÚBOTTOMÚpropertyÚintr4   Ústrr7   r:   r   r   r   r   r'      s    r'   )Ú ú,ú Ú_Ú_s_to_tsÚvaluer.   c                 C   sR   t | tƒr| S t| ttjdd}t |tƒr|S t | ¡}|d u r'td| › ƒ‚|S )NF)ÚdefaultÚvalidatezunknown thousand separator: )Ú
isinstancer    r   r   rF   ÚgetÚ
ValueError)rG   Úthousand_separatorÚ
norm_valuer   r   r   Ú_normalize_thousand_separator8   s   
ü

rO   c                   @   sÖ  e Zd ZdZedefdd„ƒZejdeddfdd„ƒZedefdd	„ƒZ	ede
fd
d„ƒZedefdd„ƒZedefdd„ƒZedefdd„ƒZedee fdd„ƒZedee fdd„ƒZedee fdd„ƒZedefdd„ƒZedee fdd„ƒZejdee ddfdd„ƒZdeddfdd„Zdefd d!„Zd"edefd#d$„Z d"edefd%d&„Z!deddfd'd(„Z"d)eddfd*d+„Z#d)eddfd,d-„Z$d)eddfd.d/„Z%d)eddfd0d1„Z&d2ed3e'e(d4f ddfd5d6„Z)dS )7ÚStylea  Style specifier class for table elements.

    Args:
        color (Union[|str|, tcolorpy.Color, |None|]):
            Text color for cells.
            When using str, specify a color code (``"#XXXXXX"``) or a color name.

            .. note::
                In the current version, only applicable for part of text format writer classes.

        fg_color (Union[|str|, tcolorpy.Color, |None|]):
            Alias to :py:attr:`~.color`.

        bg_color (Union[|str|, tcolorpy.Color, |None|]):
            Background color for cells.
            When using str, specify a color code (``"#XXXXXX"``) or a color name.

            .. note::
                In the current version, only applicable for part of text format writer classes.

        align (|str| / :py:class:`~.style.Align`):
            Horizontal text alignment for cells.
            This can be only applied for text format writer classes.
            Possible string values are:

            - ``"auto"`` (default)
                - Detect data type for each column and set alignment that appropriate
                  for the type automatically
            - ``"left"``
            - ``"right"``
            - ``"center"``

        vertical_align (|str| / :py:class:`~.style.VerticalAlign`):
            Vertical text alignment for cells.
            This can be only applied for HtmlTableWriter class.
            Possible string values are:

            - ``"baseline"`` (default)
            - ``"top"``
            - ``"middle"``
            - ``"bottom"``

        font_size (|str| / :py:class:`~.style.FontSize`):
            Font size specification for cells in a column.
            This can be only applied for HTML/Latex writer classes.
            Possible string values are:

            - ``"tiny"``
            - ``"small"``
            - ``"medium"``
            - ``"large"``
            - ``"none"`` (default: no font size specification)

        font_weight (|str| / :py:class:`~.style.FontWeight`):
            Font weight specification for cells in a column.
            This can be only applied for HTML/Latex/Markdown writer classes.
            Possible string values are:

            - ``"normal"`` (default)
            - ``"bold"``

        font_style (|str| / :py:class:`~.style.FontStyle`):
            Font style specification for cells in a column.
            This can be applied only for HTML/Latex/Markdown writer classes.
            Possible string values are:

            - ``"normal"`` (default)
            - ``"italic"``
            - ``"typewriter"`` (only for Latex writer)

        decoration_line (|str| / :py:class:`~.style.DecorationLine`)

            Experiental.
            Possible string values are:

            - ``"line-through"``
            - ``"strike"`` (alias for ``"line-through"``)
            - ``"underline"``
            - ``"none"`` (default)

        thousand_separator (|str| / :py:class:`~.style.ThousandSeparator`):
            Thousand separator specification for numbers in a column.
            This can be only applied for text format writer classes.
            Possible string values are:

            - ``","``/``"comma"``
            - ``" "``/``"space"``
            - ``"_"``/``"underscore"``
            - ``""``/``"none"`` (default)

    Example:
        :ref:`example-style`
    r.   c                 C   r/   r0   ©Ú_Style__alignr2   r   r   r   Úalign«   r5   zStyle.alignrG   Nc                 C   ó
   || _ d S r0   rQ   ©r3   rG   r   r   r   rS   ¯   ó   
c                 C   r/   r0   )Ú_Style__valignr2   r   r   r   Úvertical_align³   r5   zStyle.vertical_alignc                 C   r/   r0   )Ú_Style__decoration_liner2   r   r   r   Údecoration_line·   r5   zStyle.decoration_linec                 C   r/   r0   )Ú_Style__font_sizer2   r   r   r   Ú	font_size»   r5   zStyle.font_sizec                 C   r/   r0   )Ú_Style__font_styler2   r   r   r   Ú
font_style¿   r5   zStyle.font_stylec                 C   r/   r0   )Ú_Style__font_weightr2   r   r   r   Úfont_weightÃ   r5   zStyle.font_weightc                 C   r/   r0   ©Ú_Style__fg_colorr2   r   r   r   ÚcolorÇ   r5   zStyle.colorc                 C   r/   r0   ra   r2   r   r   r   Úfg_colorË   r5   zStyle.fg_colorc                 C   r/   r0   )Ú_Style__bg_colorr2   r   r   r   Úbg_colorÏ   r5   zStyle.bg_colorc                 C   r/   r0   )Ú_Style__thousand_separatorr2   r   r   r   rM   Ó   r5   zStyle.thousand_separatorc                 C   r/   r0   ©Ú_Style__paddingr2   r   r   r   Úpadding×   r5   zStyle.paddingc                 C   rT   r0   rh   rU   r   r   r   rj   Û   rV   Úkwargsc                 K   s\   || _ | jdd | jdd | jdd | jdd | j r,t d| j  ¡ › t¡ d S d S )NT©Ú
initializeú unknown style attributes found: ©	Ú_Style__kwargsÚ_Style__update_colorÚ_Style__update_alignÚ_Style__update_fontÚ_Style__update_miscÚwarningsÚwarnÚkeysÚUserWarning©r3   rk   r   r   r   r:   ß   s   ÿzStyle.__init__c                 C   s(  g }| j r| d| j j› ¡ | jd ur| d| j› ¡ | jr*| d| jj› ¡ | jr6| d| j› ¡ | jrB| d| j› ¡ | jt	j
urR| d| jj› ¡ | jtj
urb| d| jj› ¡ | jro| d| jj› ¡ | jr|| d	| jj› ¡ | jtj
urŒ| d
| jj› ¡ d d |¡¡S )Nzalign=zpadding=zvalign=zcolor=z	bg_color=zdecoration_line=z
font_size=zfont_style=zfont_weight=zthousand_separator=z({})z, )rS   ÚappendÚalign_stringrj   rX   r7   rc   rf   rZ   r   r   rG   r\   r   r^   r`   rM   r    ÚformatÚjoin)r3   Úitemsr   r   r   Ú__repr__é   s,   
zStyle.__repr__Úotherc                 C   sJ   | j |j urdS t| j|jk| j|jk| j|jk| j|jk| j|jkgƒS )NF)Ú	__class__ÚallrS   r\   r^   r`   rM   ©r3   r€   r   r   r   Ú__eq__  s   




ûÿzStyle.__eq__c                 C   s   | j |j urdS |  |¡ S )NT)r   r„   rƒ   r   r   r   Ú__ne__  s   zStyle.__ne__c                 K   s\   || _ | jdd | jdd | jdd | jdd | j r,t d| j  ¡ › t¡ dS dS )z"Update specified style attributes.Frl   rn   Nro   ry   r   r   r   Úupdate  s   ÿzStyle.updaterm   c                 C   sh   | j  dd ¡p| j  dd ¡}|rt|ƒ| _n|rd | _| j  dd ¡}|r+t|ƒ| _d S |r2d | _d S d S )Nrc   rd   rf   )rp   Úpopr	   rb   re   )r3   rm   rd   rf   r   r   r   Ú__update_color"  s   
ÿzStyle.__update_colorc                 C   sÈ   | j  dd ¡}|rt|tdtjd| _n|rtj| _|  dttf¡ | j  dd ¡}|r5t|ttj	d| _
n|r;tj	| _
|  dtf¡ | j  dd ¡}|rUt|ttj	d| _n|r[tj	| _|  dtf¡ d S )Nr\   F)rI   rH   r^   ©rH   r`   )rp   r‡   r   r   r   r[   Ú_Style__validate_attrrA   r   ÚNORMALr]   r   r_   )r3   rm   r\   r^   r`   r   r   r   Ú__update_font/  s.   
üzStyle.__update_fontc                 C   s„   | j  dd ¡}|rt|ttjd| _n|rtj| _|  dtf¡ | j  dd ¡}|r3t|ttjd| _	n|r9tj| _	|  dtf¡ d S )NrS   r‰   rX   )
rp   r‡   r   r   ÚAUTOrR   rŠ   r'   r;   rW   )r3   rm   rS   Úvalignr   r   r   Ú__update_alignJ  s   zStyle.__update_alignc                 C   s¤   | j  dd ¡}|d ur|| _n|rd | _| j  dd ¡}|r't|ttjd| _n|r-tj| _|  dtf¡ | j  dd ¡}|rCt|ƒ| _	n|rIt
j| _	|  dt
f¡ d S )Nrj   rZ   r‰   rM   )rp   r‡   ri   r   r   r   rY   rŠ   rO   rg   r    )r3   rm   rj   rZ   rM   r   r   r   Ú__update_miscY  s&   
ÿzStyle.__update_miscÚ	attr_nameÚexpected_types.c                 C   sH   t | |ƒ}d dd„ |D ƒ¡}t||ƒs"t|› d|› dt|ƒ› ƒ‚d S )Nz or c                 s   s    | ]}|j V  qd S r0   )r   )Ú.0Úcr   r   r   Ú	<genexpr>r  s   € z(Style.__validate_attr.<locals>.<genexpr>z must be instance of z	: actual=)Úgetattrr}   rJ   Ú	TypeErrorÚtype)r3   r‘   r’   rG   Úexpectedr   r   r   Ú__validate_attrp  s
   

ÿzStyle.__validate_attr)*r   r   r   Ú__doc__r?   r   rS   Úsetterr'   rX   r   rZ   r   r\   r   r^   r   r`   r   r	   rc   rd   rf   r    rM   r@   rj   r   r:   rA   r   Úboolr„   r…   r†   rq   rs   rr   rt   Útupler˜   rŠ   r   r   r   r   rP   L   sL    ^
"rP   ) ru   Úenumr   r   Útypingr   r   r   r   Údatapropertyr   Útcolorpyr	   Ú	_functionr   Ú_fontr   r   r   r   r    r'   r   r$   r%   r&   rF   ÚdictrA   Ú__annotations__rO   rP   r   r   r   r   Ú<module>   s(   
 ü