
    cMh1                        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r
ddlmZmZmZ ddZdddZ G 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                     d f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  `  K   |                                 }	 | j        t          |                   }n@# t          $ r3 t	          j        d| d| dt          t                                 Y dS w xY wt          | j	        |          D ]$\  }}
                    |          ||         fV  %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idxr   s          U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/io/formats/css.pyexpandz_side_expander.<locals>.expand&   s       	*3v;;7GG 	 	 	M5T55U555+--   
 FF	 DJ00 	4 	4HC//#&&s33333	4 	4s   4 9A10A1r   r   r   r    )r   r%   s   ` r$   _side_expanderr(      s(    4 4 4 4 4 44 M     sidec                *      dk    rd   d f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    K   |                                 }t          |          dk    st          |          dk    r,t          j        d| dt          t                                 d ddd d	d
d ddi}|D ]Z                                | j        v r
|d d	<   't          fd| j	        D                       r
|d d<   Q|d d<   [| 
                    |                                          E d{V  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  D   K   | ]}|                                 v V  d S N)lower).0ratiotokens     r$   	<genexpr>z3_border_expander.<locals>.expand.<locals>.<genexpr>s   s0      RRUekkmm+RRRRRRr)   N)r   r   r   r   r   r   r7   BORDER_STYLESanyBORDER_WIDTH_RATIOSatomizeitems)r   r   r   r    border_declarationsr:   r+   s        @r$   r%   z _border_expander.<locals>.expandS   s|      v;;!s6{{QMFFFF+--    "T!!!7!T!!!6!T!!!8

  	C 	CE{{}} 222=B#$9T$9$9$9::RRRR9QRRRRR C=B#$9T$9$9$9::=B#$9T$9$9$9:: << 3 9 9 ; ;<<<<<<<<<<<r)   r&   r'   )r+   r%   s   ` r$   _border_expanderrB   C   s?     rzz4zz'= '= '= '= '= '=R Mr)   c                  (   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              ed)           ed*          d+Z	 dEdFd3ZdGd5ZdGd6ZdHd8ZdId<ZdJd=Zd,efdKd>ZdLdAZdMdDZd,S )NCSSResolverzH
    A callable for parsing and resolving CSS to atomic properties.
    )pt   )emrF   )rE      )rG         ?)rE   g      ?)rE   H   )ingL&d2?)rK   g
BP(?)mmg      ?)rG   r   )rE   rG   remexpxpcrK   cmrL   q	!!default)rG   g{Gz?)rM   rI   )rM   g      ?)rM   g?)rM   rF   )rM   g      ?)rM   g      ?)rM      )rG   g?)rG   g333333?)%zxx-smallzx-smallsmallr4   largezx-largezxx-largesmallerlargerrS   r2   )rE   r   )rO      )rO   rT   )rO   rF   )r2   thickr4   thin)r2   hiddendotteddashedsoliddoublegrooveridgeinsetoutsetmediumdashdot
dashdotdothairmediumdashdotdotdashdotslantdashdotmediumdashed)r   r   r   r   )r   rF   r   rF   )r   rF   rT   rF   )r   rF   rT   r/   )rF   rT   r/   rZ   )toprightbottomleftc                <    i | ]}|rd | ndt          |          S )border-r0   )rB   r8   r   s     r$   
<dictcomp>zCSSResolver.<dictcomp>   sF     
 
 
 "&3t86Ft6L6L
 
 
r)   )r*   rm   rn   ro   rp   c                :    i | ]}d | t          d|           S )rr   zborder-{:s}-)r(   rs   s     r$   rt   zCSSResolver.<dictcomp>   sC     
 
 
 dn-Dd-D-DEE
 
 
r)   )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                $   t          |t                    r|                     |          }t          |                     |                    }|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')]
        )
isinstancer   parsedictr?   _update_initial_update_font_size_update_other_units)r   r{   r}   propss       r$   __call__zCSSResolver.__call__   s    X lC(( 	4::l33LT\\,//00I$$UI66&&ui88''...r)   r   c                    |                                 D ]\  }}||vr|||<   |                                }|                                 D ].\  }}|dk    r|                    |d          }|dv r||= )|||<   /|S )Ninheritinitial)r   N)r@   copyget)r   r   r}   r   val	new_propss         r$   r   zCSSResolver._update_initial  s     #** 	" 	"ID#5  !dJJLL	 	& 	&ID#immD)44'''dOO"%	$r)   c                    |                     d          r9|                     |d         |                     |          | j                  |d<   |S )N	font-sizeconversions)r   
size_to_pt_get_font_sizeFONT_SIZE_RATIOS)r   r   r}   s      r$   r   zCSSResolver._update_font_size(  s[     99[!! 	!%k"##I.. 1 "1 " "E+
 r)   float | Nonec                j    |                     d          r|d         }|                     |          S d S )Nr   )r   _get_float_font_size_from_pt)r   r   font_size_strings      r$   r   zCSSResolver._get_font_size6  s<    99[!! 	G$[1445EFFFtr)   r   r   floatc                t    |                     d          sJ t          |                    d                    S )NrE   )endswithr   rstrip)r   r   s     r$   r   z(CSSResolver._get_float_font_size_from_pt<  s9    ((.....%,,T22333r)   c                   |                      |          }| j        D ]i}d| d}||v r&|                     ||         || j                  ||<   d| d| fD ],}||v r&|                     ||         || j                  ||<   -j|S )Nrr   r3   )em_ptr   zmargin-zpadding-)r   r   r   r>   MARGIN_RATIOS)r   r   	font_sizer+   r   s        r$   r   zCSSResolver._update_other_units@  s    ''..	J 	 	D)T)))Du}}"oo$K# $ 8 .  d *4))+<d+<+<=  5=="&//d'$($6 #2 # #E$K r)   c                     fd}t          j        d          }|
 |            S |                                \  }}|dk    rd}n+	 t          |          }n# t          $ r  |            cY S w xY w|dk    rE|dk    r|d}n||z  }d}	 |         \  }}n# t
          $ r  |            cY S w xY w||z  }|dk    Et          |d          }t          |          |k    rt          |          d	d}	n|d
d}	|	S )Nc                     t          j        dt                     t          t	                                                     d           S )NzUnhandled size: r   z
1!!defaultr   )r   r   reprr   r   r   )r   in_valr   s   r$   _errorz&CSSResolver.size_to_pt.<locals>._errorW  sQ    M14<<11+--   
 ??<[?IIIr)   z^(\S*?)([a-zA-Z%!].*)r*   rF   rE   rG   rM      df)rematchgroupsr   
ValueErrorr   roundint)
r   r   r   r   r   r   r   unitmulsize_fmts
   `` `      r$   r   zCSSResolver.size_to_ptV  s}   	J 	J 	J 	J 	J 	J 	J 16::=688OLLNN	T"99CC Cjj      vxx  dllt||= DD5LCD '-	cc      vxx 3JC dll Cmms88s??c((((((HH||||Hs$   A A43A4B B43B4r	   r   c              #     K   |D ]]\  }}|                                 }|                                 }|| j        v r!| j        |         } || ||          E d {V  W||fV  ^d S r6   )r7   CSS_EXPANSIONS)r   r{   r   r   r%   s        r$   r?   zCSSResolver.atomize  s      ' 	" 	"KD%::<<DKKMMEt***,T2!6$e4444444444Ek!!!!	" 	"r)   declarations_strIterator[tuple[str, str]]c              #    K   |                     d          D ]}|                                s|                    d          \  }}}|                                                                }|                                                                }|r||fV  t	          j        dt          |           t          t                                 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	partitionr7   r   r   r   r   r   )r   r   declr   sepr   s         r$   r   zCSSResolver.parse  s       %**3// 	 	D::<< !^^C00ND#s::<<%%''D))++##%%C CiPDJJPP/11    	 	r)   r6   )r{   r|   r}   r~   r   r   )r   r   r}   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   )r{   r	   r   r   )r   r   r   r   )__name__
__module____qualname____doc__UNIT_RATIOSr   r   updater   r>   r<   r   r   r(   r   r   r   r   r   r   r   r   r?   r   r'   r)   r$   rD   rD      s        
  K #''))$%! ##"&!"	
 	
     $$&&M&),---%**,,		
 	
    M* <<<<<<<<	 O /E
 
>
 
 


 
3
 
 
 !.//!>.11  N  ,04/ 4/ 4/ 4/ 4/l   ,      4 4 4 4   , (, + + + + +Z" " " "     r)   rD   )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(   rB   rD   r'   r)   r$   <module>r      s(    # " " " " " 				         $ $ $ $ $ $ 4 4 4 4 4 4          ( ( ( (V9 9 9 9 9xf f f f f f f f f fr)   