a
    oÝEbe"  ã                   @  sP   d Z ddlmZ ddlZddlZG dd„ deƒZddœdd	„ZG d
d„ dƒZdS )zN
Utilities for interpreting CSS from Stylers for formatting non-HTML outputs.
é    )ÚannotationsNc                   @  s   e Zd ZdZdS )Ú
CSSWarningz5
    This CSS syntax cannot currently be parsed.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úU/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/io/formats/css.pyr   
   s   r   Ústr©Úprop_fmtc                   s   ddœ‡ fdd„}|S )Nr
   )Úvaluec              
   3  sx   |  ¡ }z| jt|ƒ }W n. tyH   t d|› d|› d�t¡ Y d S 0 t| j|ƒD ]\}}ˆ  	|¡|| fV  qVd S )NzCould not expand "z: ú")
ÚsplitÚSIDE_SHORTHANDSÚlenÚKeyErrorÚwarningsÚwarnr   ÚzipÚSIDESÚformat)ÚselfÚpropr   ÚtokensÚmappingÚkeyÚidxr   r   r	   Úexpand   s    z_side_expander.<locals>.expandr   )r   r   r   r   r	   Ú_side_expander   s    
r   c                   @  sZ  e Zd ZdZddddddddd	d
œ	Ze ¡ Ze ddddddddddddœ¡ e ¡ Ze ddi¡ e ¡ Z	e	 dddddœ¡ g d¢g d¢g d¢g d ¢d!œZ
d"ZdEd$d%d&d'œd(d)„Zd&d&d&d*œd+d,„Zd&d&d&d*œd-d.„Zd&d/d0œd1d2„Zd$d3d4œd5d6„Zd&d&d0œd7d8„Zd#efd9d:„Zd;d<„ Zed=ƒZed>ƒZed?ƒZed@ƒZedAƒZd$dBœdCdD„Zd#S )FÚCSSResolverzH
    A callable for parsing and resolving CSS to atomic properties.
    )Úpté   )Úemç      à?)r!   g      è?)r!   éH   )ÚingL&“Éd2Ù?)r&   g
…B¡P(¤?)Úmmg      Ð?)r#   r   )	ÚremÚexÚpxZpcr&   Úcmr'   Úqú	!!default)r#   g{®Gáz„?)r(   r$   )r(   g      ä?)r(   gš™™™™™é?)r(   é   )r(   g      ò?)r(   g      ø?)r(   é   )r#   g«ªªªªªê?)r#   g333333ó?)r#   r.   )ú%zxx-smallzx-smallÚsmallÚmediumZlargezx-largezxx-largeZsmallerZlargerr-   Únone)r!   r   )r*   é   )r*   r/   )r*   r.   )r3   Zthickr2   Zthin)r   r   r   r   )r   r.   r   r.   )r   r.   r/   r.   )r   r.   r/   é   )r.   r/   r5   r4   )ÚtopÚrightÚbottomÚleftNr
   zdict[str, str] | Nonezdict[str, str])Údeclarations_strÚ	inheritedÚreturnc                 C  sB   t |  |  |¡¡ƒ}|du r i }|  ||¡}|  ||¡}|  |¡S )aü  
        The given declarations to atomic properties.

        Parameters
        ----------
        declarations_str : str
            A list of CSS declarations
        inherited : dict, optional
            Atomic properties indicating the inherited style context in which
            declarations_str is to be resolved. ``inherited`` should already
            be resolved, i.e. valid output of this method.

        Returns
        -------
        dict
            Atomic CSS 2.2 properties.

        Examples
        --------
        >>> resolve = CSSResolver()
        >>> inherited = {'font-family': 'serif', 'font-weight': 'bold'}
        >>> out = resolve('''
        ...               border-color: BLUE RED;
        ...               font-size: 1em;
        ...               font-size: 2em;
        ...               font-weight: normal;
        ...               font-weight: inherit;
        ...               ''', inherited)
        >>> sorted(out.items())  # doctest: +NORMALIZE_WHITESPACE
        [('border-bottom-color', 'blue'),
         ('border-left-color', 'red'),
         ('border-right-color', 'red'),
         ('border-top-color', 'blue'),
         ('font-family', 'serif'),
         ('font-size', '24pt'),
         ('font-weight', 'bold')]
        N)ÚdictÚatomizeÚparseÚ_update_initialÚ_update_font_sizeÚ_update_other_units)r   r:   r;   Úpropsr   r   r	   Ú__call__X   s    *zCSSResolver.__call__)rC   r;   r<   c                 C  sl   |  ¡ D ]\}}||vr|||< q| ¡ }|  ¡ D ]4\}}|dkrN| |d¡}|dv r^||= q2|||< q2|S )NÚinheritÚinitial)rF   N)ÚitemsÚcopyÚget)r   rC   r;   r   ÚvalZ	new_propsr   r   r	   r@   Š   s    

zCSSResolver._update_initialc                 C  s.   |  d¡r*| j|d |  |¡| jd�|d< |S )Nú	font-size©Úconversions)rI   Ú
size_to_ptÚ_get_font_sizeÚFONT_SIZE_RATIOS)r   rC   r;   r   r   r	   rA       s    
ý
zCSSResolver._update_font_sizezfloat | None)rC   r<   c                 C  s    |  d¡r|d }|  |¡S d S )NrK   )rI   Ú_get_float_font_size_from_pt)r   rC   Úfont_size_stringr   r   r	   rO   ®   s    

zCSSResolver._get_font_sizeÚfloat)rR   r<   c                 C  s   |  d¡sJ ‚t| d¡ƒS )Nr!   )ÚendswithrS   Úrstrip)r   rR   r   r   r	   rQ   ´   s    z(CSSResolver._get_float_font_size_from_ptc                 C  s„   |   |¡}| jD ]n}d|› d�}||v rB| j|| || jd�||< d|› �d|› �fD ]&}||v rV| j|| || jd�||< qVq|S )Nzborder-z-width)Úem_ptrM   zmargin-zpadding-)rO   r   rN   ÚBORDER_WIDTH_RATIOSÚMARGIN_RATIOS)r   rC   Z	font_sizeZsider   r   r   r	   rB   ¸   s"    

ý
ýzCSSResolver._update_other_unitsc           
        s  ‡ ‡‡fdd„}t  dˆ¡}|d u r*|ƒ S | ¡ \}}|dkrDd}n&zt|ƒ}W n tyh   |ƒ  Y S 0 |dkrÊ|dkr–|d u rˆd}qj||9 }d}qjzˆ | \}}W n ty¾   |ƒ  Y S 0 ||9 }qjt|d	ƒ}t|ƒ|kròt|ƒd
›d�}	n|d›d�}	|	S )Nc                     s$   t  dtˆƒ› �t¡ ˆjdˆ d�S )NzUnhandled size: z
1!!defaultrL   )r   r   Úreprr   rN   r   ©rM   Úin_valr   r   r	   Ú_errorÏ   s    z&CSSResolver.size_to_pt.<locals>._errorz^(\S*?)([a-zA-Z%!].*)Ú r.   r!   r#   r(   é   ÚdÚf)ÚreÚmatchÚgroupsrS   Ú
ValueErrorr   ÚroundÚint)
r   r[   rV   rM   r\   rb   rJ   ÚunitÚmulZsize_fmtr   rZ   r	   rN   Î   s8    

zCSSResolver.size_to_ptc              	   c  sl   |D ]b\}}d|  dd¡ }zt| |ƒ}W n tyF   ||fV  Y q0 |||ƒD ]\}}||fV  qRqd S )NZexpand_ú-Ú_)ÚreplaceÚgetattrÚAttributeError)r   Zdeclarationsr   r   Úattrr   r   r   r	   r>   ÷   s    zCSSResolver.atomizezborder-{:s}-colorzborder-{:s}-stylezborder-{:s}-widthzmargin-{:s}zpadding-{:s})r:   c                 c  sl   |  d¡D ]\}| ¡ sq
| d¡\}}}| ¡  ¡ }| ¡  ¡ }|rP||fV  q
t dt|ƒ› �t¡ q
dS )zÖ
        Generates (prop, value) pairs from declarations.

        In a future version may generate parsed tokens from tinycss/tinycss2

        Parameters
        ----------
        declarations_str : str
        ú;ú:z-Ill-formatted attribute: expected a colon in N)r   ÚstripÚ	partitionÚlowerr   r   rY   r   )r   r:   Údeclr   ÚseprJ   r   r   r	   r?     s    
þzCSSResolver.parse)N)r   r   r   r   ZUNIT_RATIOSrH   rP   ÚupdaterX   rW   r   r   rD   r@   rA   rO   rQ   rB   rN   r>   r   Zexpand_border_colorZexpand_border_styleZexpand_border_widthZexpand_marginZexpand_paddingr?   r   r   r   r	   r       sr   öõÿüÿü ý2)r    )	r   Ú
__future__r   ra   r   ÚUserWarningr   r   r    r   r   r   r	   Ú<module>   s   