o
    Û­jù1  ã                   @  sˆ   d Z ddlmZ ddlZddlmZmZ ddlZddlm	Z	 ddl
mZ er0ddlmZmZmZ ddd„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.
é    )ÚannotationsN)ÚTYPE_CHECKINGÚCallable)Ú
CSSWarning)Úfind_stack_level)Ú	GeneratorÚIterableÚIteratorÚprop_fmtÚstrÚreturnr   c                   s   d‡ fdd„}|S )	a)  
    Wrapper to expand shorthand property into top, right, bottom, left properties

    Parameters
    ----------
    side : str
        The border side to expand into properties

    Returns
    -------
        function: Return to call when a 'border(-{side}): {value}' string is encountered
    Úvaluer   r   ú&Generator[tuple[str, str], None, None]c              	   3  s€   � |  ¡ }z	| jt|ƒ }W n ty(   tjd|› d|› d�ttƒ d� Y dS w t| j	|ƒD ]\}}ˆ  
|¡|| fV  q/dS )a<  
        Expand shorthand property into side-specific property (top, right, bottom, left)

        Parameters
        ----------
            prop (str): CSS property name
            value (str): String token for property

        Yields
        ------
            Tuple (str, str): Expanded property, value
        zCould not expand "z: ú"©Ú
stacklevelN)ÚsplitÚSIDE_SHORTHANDSÚlenÚKeyErrorÚwarningsÚwarnr   r   ÚzipÚSIDESÚformat)ÚselfÚpropr   ÚtokensÚmappingÚkeyÚidx©r
   © úR/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/io/formats/css.pyÚexpand&   s   €ýúÿz_side_expander.<locals>.expandN©r   r   r   r   r"   )r
   r$   r"   r!   r#   Ú_side_expander   s   r&   Ú Úsidec                   s$   ˆ dkr	dˆ › �‰ d
‡ fdd„}|S )a.  
    Wrapper to expand 'border' property into border color, style, and width properties

    Parameters
    ----------
    side : str
        The border side to expand into properties

    Returns
    -------
        function: Return to call when a 'border(-{side}): {value}' string is encountered
    r'   ú-r   r   r   r   c                 3  sà   � |  ¡ }t|ƒdkst|ƒdkrtjd|› d�ttƒ d� dˆ› d�ddˆ› d	�d
dˆ› d�di}|D ]/‰ ˆ  ¡ | jv rFˆ |dˆ› d	�< q4t‡ fdd„| j	D ƒƒr[ˆ |dˆ› d�< q4ˆ |dˆ› d�< q4|  
| ¡ ¡E dH  dS )aV  
        Expand border into color, style, and width tuples

        Parameters
        ----------
            prop : str
                CSS property name passed to styler
            value : str
                Value passed to styler for property

        Yields
        ------
            Tuple (str, str): Expanded property, value
        r   é   zToo many tokens provided to "z" (expected 1-3)r   Úborderz-colorÚblackz-styleÚnoneú-widthÚmediumc                 3  s   � | ]	}|ˆ   ¡ v V  qd S ©N)Úlower)Ú.0Úratio©Útokenr"   r#   Ú	<genexpr>s   s   € z3_border_expander.<locals>.expand.<locals>.<genexpr>N)r   r   r   r   r   r   r1   ÚBORDER_STYLESÚanyÚBORDER_WIDTH_RATIOSÚatomizeÚitems)r   r   r   r   Úborder_declarations©r(   r4   r#   r$   S   s&   €
ýýz _border_expander.<locals>.expandNr%   r"   )r(   r$   r"   r=   r#   Ú_border_expanderC   s   
)r>   c                   @  sH  e Zd ZdZdd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¢Z
g d¢g d ¢g d!¢g d"¢d#œZd$Zi d%d&„ d'D ƒ¥d(d&„ d)D ƒ¥ed*ƒed+ƒd,œ¥Z	-dOdPd4d5„ZdQd7d8„ZdQd9d:„ZdRd<d=„ZdSdAdB„ZdTdCdD„Zd-efdUdEdF„ZdVdIdJ„ZdWdMdN„Zd-S )XÚCSSResolverzH
    A callable for parsing and resolving CSS to atomic properties.
    )Úpté   )ÚemrA   )r@   é   )rB   ç      à?)r@   g      è?)r@   éH   )ÚingL&“Éd2Ù?)rF   g
…B¡P(¤?)Úmmg      Ð?)rB   r   )r@   rB   ÚremÚexÚpxÚpcrF   ÚcmrG   Úqú	!!default)rB   g{®Gáz„?)rH   rD   )rH   g      ä?)rH   gš™™™™™é?)rH   rA   )rH   g      ò?)rH   g      ø?)rH   é   )rB   g«ªªªªªê?)rB   g333333ó?)ú%zxx-smallzx-smallÚsmallr/   Úlargezx-largezxx-largeÚsmallerÚlargerrN   r-   )r@   r   )rJ   é   )rJ   rO   )rJ   rA   )r-   Úthickr/   Úthin)r-   ÚhiddenÚdottedÚdashedÚsolidÚdoubleÚgrooveÚridgeÚinsetÚoutsetÚmediumdashdotÚ
dashdotdotÚhairÚmediumdashdotdotÚdashdotÚslantdashdotÚmediumdashed)r   r   r   r   )r   rA   r   rA   )r   rA   rO   rA   )r   rA   rO   r*   )rA   rO   r*   rU   )ÚtopÚrightÚbottomÚleftc                 C  s$   i | ]}|rd |› �ndt |ƒ“qS )úborder-r+   )r>   ©r2   r   r"   r"   r#   Ú
<dictcomp>Ð   s    ÿÿzCSSResolver.<dictcomp>)r'   rh   ri   rj   rk   c                 C  s"   i | ]}d |› �t d|› �ƒ“qS )rl   zborder-{:s}-)r&   rm   r"   r"   r#   rn   Ô   s    ÿÿ)ÚcolorÚstyleÚwidthzmargin-{:s}zpadding-{:s})ÚmarginÚpaddingNÚdeclarationsústr | Iterable[tuple[str, str]]Ú	inheritedúdict[str, str] | Noner   údict[str, str]c                 C  sP   t |tƒr
|  |¡}t|  |¡ƒ}|du ri }|  ||¡}|  ||¡}|  |¡S )a£  
        The given declarations to atomic properties.

        Parameters
        ----------
        declarations_str : str | Iterable[tuple[str, str]]
            A CSS string or set of CSS declaration tuples
            e.g. "font-weight: bold; background: blue" or
            {("font-weight", "bold"), ("background", "blue")}
        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)Ú
isinstancer   ÚparseÚdictr:   Ú_update_initialÚ_update_font_sizeÚ_update_other_units)r   rt   rv   Úpropsr"   r"   r#   Ú__call__Ü   s   
,

zCSSResolver.__call__r   c                 C  sl   |  ¡ D ]\}}||vr|||< q| ¡ }|  ¡ D ]\}}|dkr'| |d¡}|dv r/||= q|||< q|S )NÚinheritÚinitial)r‚   N)r;   ÚcopyÚget)r   r   rv   r   ÚvalÚ	new_propsr"   r"   r#   r|     s   €
zCSSResolver._update_initialc                 C  s.   |  d¡r| j|d |  |¡| jd�|d< |S )Nú	font-size©Úconversions)r„   Ú
size_to_ptÚ_get_font_sizeÚFONT_SIZE_RATIOS)r   r   rv   r"   r"   r#   r}   (  s   

ýzCSSResolver._update_font_sizeúfloat | Nonec                 C  s    |  d¡r|d }|  |¡S d S )Nr‡   )r„   Ú_get_float_font_size_from_pt)r   r   Úfont_size_stringr"   r"   r#   r‹   6  s   

zCSSResolver._get_font_sizer�   r   Úfloatc                 C  s   |  d¡sJ ‚t| d¡ƒS )Nr@   )Úendswithr�   Úrstrip)r   r�   r"   r"   r#   rŽ   <  s   z(CSSResolver._get_float_font_size_from_ptc                 C  s„   |   |¡}| jD ]7}d|› d�}||v r!| j|| || jd�||< d|› �d|› �fD ]}||v r>| j|| || jd�||< q+q|S )Nrl   r.   )Úem_ptr‰   zmargin-zpadding-)r‹   r   rŠ   r9   ÚMARGIN_RATIOS)r   r   Ú	font_sizer(   r   r"   r"   r#   r~   @  s&   


ý
ý€ýzCSSResolver._update_other_unitsc           
        s
  ‡ ‡‡fdd„}t  dˆ¡}|d u r|ƒ S | ¡ \}}|dkr"d}nzt|ƒ}W n ty4   |ƒ  Y S w |dkrh|dkrK|d u rDd}n||9 }d}q5zˆ | \}}W n ty_   |ƒ  Y S w ||9 }|dks9t|d	ƒ}t|ƒ|kr}t|ƒd
›d�}	|	S |d›d�}	|	S )Nc                     s*   t jdtˆƒ› �ttƒ d� ˆjdˆ d�S )NzUnhandled size: r   z
1!!defaultrˆ   )r   r   Úreprr   r   rŠ   r"   ©r‰   Úin_valr   r"   r#   Ú_errorW  s   ýz&CSSResolver.size_to_pt.<locals>._errorz^(\S*?)([a-zA-Z%!].*)r'   rA   r@   rB   rH   é   ÚdÚf)ÚreÚmatchÚgroupsr�   Ú
ValueErrorr   ÚroundÚint)
r   r˜   r“   r‰   r™   rž   r…   ÚunitÚmulÚsize_fmtr"   r—   r#   rŠ   V  s@   
ÿ
ÿó
ÿzCSSResolver.size_to_ptr   r   c                 c  sV   � |D ]%\}}|  ¡ }|  ¡ }|| jv r#| j| }|| ||ƒE d H  q||fV  qd S r0   )r1   ÚCSS_EXPANSIONS)r   rt   r   r   r$   r"   r"   r#   r:   ƒ  s   €

ùzCSSResolver.atomizeÚdeclarations_strúIterator[tuple[str, str]]c                 c  st   � |  d¡D ]1}| ¡ sq| d¡\}}}| ¡  ¡ }| ¡  ¡ }|r)||fV  qtjdt|ƒ› �ttƒ d� 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 r   N)	r   ÚstripÚ	partitionr1   r   r   r–   r   r   )r   r§   Údeclr   Úsepr…   r"   r"   r#   rz   �  s   €
ýözCSSResolver.parser0   )rt   ru   rv   rw   r   rx   )r   rx   rv   rx   r   rx   )r   rx   r   r�   )r�   r   r   r�   )r   rx   r   rx   )r   r   )rt   r   r   r   )r§   r   r   r¨   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚUNIT_RATIOSrƒ   rŒ   Úupdater”   r9   r7   r   r   r&   r¦   r€   r|   r}   r‹   rŽ   r~   rŠ   r:   rz   r"   r"   r"   r#   r?      sˆ    ôõÿüÿ
üþÿþû	öý
6




-
r?   )r
   r   r   r   )r'   )r(   r   r   r   )r²   Ú
__future__r   r�   Útypingr   r   r   Úpandas.errorsr   Úpandas.util._exceptionsr   Úcollections.abcr   r   r	   r&   r>   r?   r"   r"   r"   r#   Ú<module>   s    
+<