
    Mh2                       d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZ dd	lmZ g d
Zd  ej                    D             Zd%dZ eddddddddd	  	        Zd&dZd'dZ ej        d          Z G d de          Zej        Z G d de          Z  e	d          Z!d(dZ"d)d#Z# G d$ d"e          Z$dS )*z-
Tool for creating styles from a dictionary.
    )annotationsN)Enum)HashableTypeVar)SimpleCache   )ANSI_COLOR_NAMESANSI_COLOR_NAMES_ALIASESDEFAULT_ATTRSAttrs	BaseStyle)NAMED_COLORS)Styleparse_colorPrioritymerge_stylesc                d    i | ]-\  }}|                                 |                    d           .S )#)lowerlstrip).0kvs      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/styles/style.py
<dictcomp>r      s0    UUU117799ahhsmmUUU    textstrreturnc                   | t           v r| S | t          v rt          |          S 	 t          |                                          S # t          $ r Y nw xY w| dd         dk    rw| dd         }|t           v r|S |t          v rt          |         S t          |          dk    r|S t          |          dk    r#|d         dz  |d         dz  z   |d         dz  z   S n| dv r| S t          d	|           )
z
    Parse/validate color format.

    Like in Pygments, but also support the ANSI color names.
    (These will map to the colors of the 16 color palette.)
    r   r   r   N         ) defaultzWrong color format )r	   r
   _named_colors_lowercaser   KeyErrorlen
ValueError)r   cols     r   r   r   !   s-    ''''--&tzz||44    AaCyC122h """J,,,+C00 XX]]J XX]]q6A:A
*SVaZ77  
	 	 
3433
4
44s   A 
AA	colorbgcolorbold	underlinestrikeitalicblinkreversehidden	classname	list[str]c                    g }|                      d          }t          dt          |          dz             D ]D}|                    d                    |d|                                                              E|S )z
    Split a single class name at the `.` operator, and build a list of classes.

    E.g. 'a.b.c' becomes ['a', 'a.b', 'a.b.c']
    .r   N)splitranger(   appendjoinr   )r5   resultpartsis       r   _expand_classnamer@   ^   sw     FOOC  E1c%jj1n%% 3 3chhuRaRy))//112222Mr   	style_strr   c                   d| v rt           }nt          }|                                 D ]}|dk    r
|dk    r|                    d          }'|dk    r|                    d          }D|dk    r|                    d          }a|d	k    r|                    d          }~|d
k    r|                    d          }|dk    r|                    d          }|dk    r|                    d          }|dk    r|                    d          }|dk    r|                    d          }|dk    r|                    d          }.|dk    r|                    d          }L|dk    r|                    d          }j|dk    r|                    d          }|dk    r|                    d          }|dv r|                    d          r|                    d          r|                    d          r|                    d          r-|                    t          |dd                              }1|                    d!          r-|                    t          |dd                   "          }s|                    t          |          "          }|S )#zd
    Take a style string, e.g.  'bg:red #88ff00 class:title'
    and return a `Attrs` instance.
    	noinheritr.   Tr.   noboldFr1   r1   noitalicr/   r/   nounderliner0   r0   nostriker2   r2   noblinkr3   r3   	noreverser4   r4   nohidden)romansansmonozborder:[]zbg:r"   Nr-   zfg:r,   )r   _EMPTY_ATTRSr9   _replace
startswithendswithr   )rA   attrsparts      r   _parse_style_strr_   m   s    i !! 3< 3<;V^^NNN--EEXNNN..EEXNN$N//EEZNN%N00EE[  NNTN22EE]""NNUN33EEXNN$N//EEZNN%N00EE W__NNN..EEYNNN//EEYNN4N00EE[  NN5N11EEXNN$N//EEZNN%N00EE ...__Y'' 	< __S!! 		<dmmC&8&8 		< __U## 	<NN;tABBx+@+@NAAEE__U## 	<NNT!""X)>)>N??EENNT):):N;;EELr   z^[a-z0-9.\s_-]*$c                      e Zd ZdZdZdZdS )r   a  
    The priority of the rules, when a style is created from a dictionary.

    In a `Style`, rules that are defined later will always override previous
    defined rules, however in a dictionary, the key order was arbitrary before
    Python 3.6. This means that the style could change at random between rules.

    We have two options:

    - `DICT_KEY_ORDER`: This means, iterate through the dictionary, and take
       the key/value pairs in order as they come. This is a good option if you
       have Python >3.6. Rules at the end will override rules at the beginning.
    - `MOST_PRECISE`: keys that are defined with most precision will get higher
      priority. (More precise means: more elements.)
    	KEY_ORDERMOST_PRECISEN)__name__
__module____qualname____doc__DICT_KEY_ORDERrb    r   r   r   r      s$           !N!LLLr   r   c                  b    e Zd ZdZddZedd            Zeefdd            Z	e
fddZddZdS )r   a  
    Create a ``Style`` instance from a list of style rules.

    The `style_rules` is supposed to be a list of ('classnames', 'style') tuples.
    The classnames are a whitespace separated string of class names and the
    style string is just like a Pygments style definition, but with a few
    additions: it supports 'reverse' and 'blink'.

    Later rules always override previous rules.

    Usage::

        Style([
            ('title', '#ff0000 bold underline'),
            ('something-else', 'reverse'),
            ('class1 class2', 'reverse'),
        ])

    The ``from_dict`` classmethod is similar, but takes a dictionary as input.
    style_ruleslist[tuple[str, str]]r   Nonec                J   g }|D ]\  }}t                               |          sJ t          |                      t          |                                                                          }t          |          }|                    ||f           || _        || _	        d S N)
CLASS_NAMES_REmatchrepr	frozensetr   r9   r_   r;   _style_rulesclass_names_and_attrs)selfrj   rt   class_namesrA   class_names_setr]   s          r   __init__zStyle.__init__   s     " '2 	C 	C"K!''44GGd;6G6GGGG ((9(9(;(;(A(A(C(CDDO$Y//E!((/5)ABBBB'%:"""r   c                    | j         S rn   )rs   ru   s    r   rj   zStyle.style_rules   s      r   
style_dictdict[str, str]priorityr   c                    |t           j        k    r0dd} | t          |                                |                    S  | t	          |                                                    S )	za
        :param style_dict: Style dictionary.
        :param priority: `Priority` value.
        itemtuple[str, str]r   intc                d    t          d | d                                         D                       S )Nc              3  Z   K   | ]&}t          |                    d                     V  'dS )r8   N)r(   r9   )r   r?   s     r   	<genexpr>z/Style.from_dict.<locals>.key.<locals>.<genexpr>  s4      FF3qwws||,,FFFFFFr   r   )sumr9   )r   s    r   keyzStyle.from_dict.<locals>.key  s+    FFd1gmmooFFFFFFr   )r   N)r   r   r   r   )r   rb   sorteditemslist)clsr{   r}   r   s       r   	from_dictzStyle.from_dict   sy     x,,,G G G G 3vj..00c:::;;;3tJ,,..//000r   rA   r   r%   r   c           
        |g}t                      }| j        D ]\  }}|s|                    |           |                                D ]g}|                    d          r*g }|dd                                                             d          D ]$}	|                    t          |	                     %|D ]}
t                      }|                    t          |
g                     t          dt          |          dz             D ]@}t          j        ||          D ](}|                    t          ||
fz                        )A| j        D ]\  }}||v r|                    |           |                    |
           АCt          |          }|                    |           it          |          S )z9
        Get `Attrs` for the given style string.
        zclass:r!   N,r   )setrt   r;   r9   r[   r   extendr@   addrr   r:   r(   	itertoolscombinationsr_   _merge_attrs)ru   rA   r%   list_of_attrsrv   namesattrr^   new_class_namespnew_namecomboscountc2inline_attrss                  r   get_attrs_for_style_strzStyle.get_attrs_for_style_str  s    !	 #  5 	+ 	+KE4 +$$T*** OO%% 	3 	3D x(( 3"$abb))//44 A AA#**+<Q+?+?@@@@ / . .H UUFJJy(44555!&q#k*:*:Q*>!?!? D D"+"8e"L"L D DB"JJyxk1A'B'BCCCCD (,'A 7 7t F??)00666OOH----.$  055$$\2222M***r   r   c                *    t          | j                  S rn   )idrt   rz   s    r   invalidation_hashzStyle.invalidation_hash=  s    $,---r   N)rj   rk   r   rl   r   rk   )r{   r|   r}   r   r   r   rA   r   r%   r   r   r   r   r   )rc   rd   re   rf   rx   propertyrj   classmethoddefault_priorityr   r   r   r   rh   r   r   r   r      s         *; ; ; ;$ ! ! ! X! >N1 1 1 1 [1$ 0=/+ /+ /+ /+ /+b. . . . . .r   r   _Tr   list[Attrs]c                l   dd}t           |dgd | D             R   |dgd | D             R   |dgd	 | D             R   |dgd
 | D             R   |dgd | D             R   |dgd | D             R   |dgd | D             R   |dgd | D             R   |dgd | D             R  	  	        S )z
    Take a list of :class:`.Attrs` instances and merge them into one.
    Every `Attr` in the list can override the styling of the previous one. So,
    the last one has highest priority.
    valuesr   r   c                 8    | ddd         D ]}||c S 	t           )z/Take first not-None value, starting at the end.N)r)   )r   r   s     r   _orz_merge_attrs.<locals>._orK  s4    " 	 	A} r   r$   c                    g | ]	}|j         
S rh   rX   r   as     r   
<listcomp>z _merge_attrs.<locals>.<listcomp>S  s    777A777r   c                    g | ]	}|j         
S rh   rW   r   s     r   r   z _merge_attrs.<locals>.<listcomp>T  s    ;;;!);;;r   Fc                    g | ]	}|j         
S rh   rD   r   s     r   r   z _merge_attrs.<locals>.<listcomp>U  s    888Q!&888r   c                    g | ]	}|j         
S rh   rH   r   s     r   r   z _merge_attrs.<locals>.<listcomp>V  s    BBBqq{BBBr   c                    g | ]	}|j         
S rh   rJ   r   s     r   r   z _merge_attrs.<locals>.<listcomp>W      <<<AH<<<r   c                    g | ]	}|j         
S rh   rF   r   s     r   r   z _merge_attrs.<locals>.<listcomp>X  r   r   c                    g | ]	}|j         
S rh   rL   r   s     r   r   z _merge_attrs.<locals>.<listcomp>Y  s    :::q17:::r   c                    g | ]	}|j         
S rh   rN   r   s     r   r   z _merge_attrs.<locals>.<listcomp>Z  s    >>>1QY>>>r   c                    g | ]	}|j         
S rh   rP   r   s     r   r   z _merge_attrs.<locals>.<listcomp>[  r   r   r+   )r   r   r   r   )r   )r   r   s     r   r   r   D  ss       c"877777888B<;;];;;<<<S988-888999#eCBBMBBBCCCs5=<<m<<<===s5=<<m<<<===c%;::M:::;;;E?>>>>>???s5=<<m<<<===
 
 
 
r   styleslist[BaseStyle]_MergedStylec                8    d | D             } t          |           S )z)
    Merge multiple `Style` objects.
    c                    g | ]}||S rn   rh   r   ss     r   r   z merge_styles.<locals>.<listcomp>c  s    111A1=a===r   )r   )r   s    r   r   r   _  s%     21111Fr   c                  ^    e Zd ZdZddZedd            Zedd
            ZefddZ	ddZ
dS )r   z
    Merge multiple `Style` objects into one.
    This is supposed to ensure consistency: if any of the given styles changes,
    then this style will be updated.
    r   r   r   rl   c                >    || _         t          d          | _        d S )Nr   )maxsize)r   r   _style)ru   r   s     r   rx   z_MergedStyle.__init__w  s    4?4J4J4Jr   r   c                j     d fd} j                                                              |          S )z=The `Style` object that has the other styles merged together.r   r   c                 ,    t           j                  S rn   )r   rj   rz   s   r   getz'_MergedStyle._merged_style.<locals>.get  s    )***r   r   r   )r   r   r   )ru   r   s   ` r   _merged_stylez_MergedStyle._merged_style{  sE    	+ 	+ 	+ 	+ 	+ 	+ {t5577===r   rk   c                R    g }| j         D ]}|                    |j                   |S rn   )r   r   rj   )ru   rj   r   s      r   rj   z_MergedStyle.style_rules  s7     	. 	.Aq}----r   rA   r   r%   r   c                8    | j                             ||          S rn   )r   r   )ru   rA   r%   s      r   r   z$_MergedStyle.get_attrs_for_style_str  s     !99)WMMMr   r   c                >    t          d | j        D                       S )Nc              3  >   K   | ]}|                                 V  d S rn   )r   r   s     r   r   z1_MergedStyle.invalidation_hash.<locals>.<genexpr>  s.      @@qQ((**@@@@@@r   )tupler   rz   s    r   r   z_MergedStyle.invalidation_hash  s!    @@DK@@@@@@r   N)r   r   r   rl   r   r   r   r   )rc   rd   re   rf   rx   r   r   rj   r   r   r   rh   r   r   r   r   g  s         K K K K > > > X>    X 0=N N N N N
A A A A A Ar   )r   r   r   r   )r5   r   r   r6   )rA   r   r   r   )r   r   r   r   )r   r   r   r   )%rf   
__future__r   r   reenumr   typingr   r   prompt_toolkit.cacher   baser	   r
   r   r   r   named_colorsr   __all__r   r&   r   rY   r@   r_   compilero   r   rg   r   r   r   r   r   r   rh   r   r   <module>r      sh    # " " " " "     				       $ $ $ $ $ $ $ $ , , , , , ,              ' & & & & &   VU@R@R@T@TUUU +5 +5 +5 +5` u
	

 
 
   A A A AH /00" " " " "t " " ". * p. p. p. p. p.I p. p. p.f WT]]   6       *A *A *A *A *A9 *A *A *A *A *Ar   