
    f2                       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 ej*                         D  ci c]%  \  } }| j-                         |j/                  d      ' c}} 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&yc c}} w )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_styles#c                n   | t         v r| S | t        v r	t        |    S 	 t        | j                            S # t        $ r Y nw xY w| dd dk(  rX| 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 | 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_lowercaselowerKeyErrorlen
ValueError)textcols     V/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/styles/style.pyr   r   !   s     '''--&tzz|44  AayC12h ""J,,+C00 X]J X]q6A:A
*SVaZ77 
	 
*4(3
44s   4 	A A 	colorbgcolorbold	underlinestrikeitalicblinkreversehiddenc                    g }| j                  d      }t        dt        |      dz         D ]3  }|j                  dj	                  |d|       j                                5 |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   )	classnameresultpartsis       r!   _expand_classnamer6   ^   s`     FOOC E1c%j1n% 3chhuRay)//123 M    c                ~   d| v rt         }nt        }| j                         D ]  }|dk(  r
|dk(  r|j                  d      }"|dk(  r|j                  d      }:|dk(  r|j                  d      }R|d	k(  r|j                  d      }j|d
k(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      }|dk(  r|j                  d      },|dk(  r|j                  d      }E|dk(  r|j                  d      }^|dv rd|j	                  d      rw|j	                  d      r|j                  d      r|j	                  d      r |j                  t        |dd              }|j	                  d!      r |j                  t        |dd       "      }|j                  t        |      "      } |S )#zd
    Take a style string, e.g.  'bg:red #88ff00 class:title'
    and return a `Attrs` instance.
    	noinheritr%   T)r%   noboldFr(   )r(   noitalicr&   )r&   nounderliner'   )r'   nostriker)   )r)   noblinkr*   )r*   	noreverser+   )r+   nohidden)romansansmonozborder:[]zbg:r   N)r$   zfg:)r#   )r   _EMPTY_ATTRSr.   _replace
startswithendswithr   )	style_strattrsparts      r!   _parse_style_strrM   m   s0    i ! 3<;V^NNN-EXNNN.EXNN$N/EZNN%N0E[ NNTN2E]"NNUN3EXNN$N/EZNN%N0E W_NNN.EYNNN/EYNN4N0E[ NN5N1EXNN$N/EZNN%N0E ..__Y' __S!dmmC&8 __U#NN;tABx+@NAE__U#NNT!"X)>N?ENNT):N;Eg3<j Lr7   z^[a-z0-9.\s_-]*$c                      e Zd ZdZdZdZy)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_ORDERrP    r7   r!   r   r      s      !N!Lr7   r   c                  h    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y)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.
    c                   g }|D ]o  \  }}t         j                  |      sJ t        |             t        |j	                         j                               }t        |      }|j                  ||f       q || _        || _	        y N)
CLASS_NAMES_REmatchrepr	frozensetr   r.   rM   r0   _style_rulesclass_names_and_attrs)selfstyle_rulesr_   class_namesrJ   class_names_setrK   s          r!   __init__zStyle.__init__   s     " '2 	C"K!''4Gd;6GG4 ((9(9(;(A(A(CDO$Y/E!((/5)AB	C (%:"r7   c                    | j                   S rY   )r^   r`   s    r!   ra   zStyle.style_rules   s       r7   c                    |t         j                  k(  r%dd} | t        |j                         |            S  | t	        |j                                     S )za
        :param style_dict: Style dictionary.
        :param priority: `Priority` value.
        c                H    t        d | d   j                         D              S )Nc              3  P   K   | ]  }t        |j                  d                yw)r-   N)r   r.   ).0r5   s     r!   	<genexpr>z/Style.from_dict.<locals>.key.<locals>.<genexpr>  s     F3qwws|,Fs   $&r   )sumr.   )items    r!   keyzStyle.from_dict.<locals>.key  s    Fd1gmmoFFFr7   )rn   )rm   ztuple[str, str]returnint)r   rP   sorteditemslist)cls
style_dictpriorityrn   s       r!   	from_dictzStyle.from_dict   sN     x,,,G vj..0c:;;tJ,,./00r7   c           
        |g}t               }| j                  D ]  \  }}|r	|j                  |        |j                         D ]3  }|j	                  d      rg }|dd j                         j                  d      D ]  }	|j                  t        |	              |D ]  }
t               }|j                  t        |
g             t        dt        |      dz         D ];  }t        j                  ||      D ]   }|j                  t        ||
fz                " = | j                  D ]  \  }}||v s|j                  |        |j                  |
        t        |      }|j                  |       6 t        |      S )z9
        Get `Attrs` for the given style string.
        zclass:r   N,r   )setr_   r0   r.   rH   r   extendr6   addr]   r/   r   	itertoolscombinationsrM   _merge_attrs)r`   rJ   r   list_of_attrsrb   namesattrrL   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5 	+KE4$$T*	+ OO% 	3D x("$ab)//4 AA#**+<Q+?@A !0 .H UFJJy(45!&q#k*:Q*>!? D"+"8"8e"L DB"JJyxk1A'BCDD
 (,'A'A 7t F?)0067  OOH-.$  05$$\2;	3> M**r7   c                ,    t        | j                        S rY   )idr_   rf   s    r!   invalidation_hashzStyle.invalidation_hash=  s    $,,--r7   N)ra   list[tuple[str, str]]ro   Nonero   r   )ru   zdict[str, str]rv   r   ro   r   rJ   strr   r   ro   r   ro   r   )rQ   rR   rS   rT   rd   propertyra   classmethoddefault_priorityrw   r   r   r   rV   r7   r!   r   r      sw    *;$ ! ! >N1'13;1	1 1$ 0=/+/+',/+	/+b.r7   r   _Tc                   dd}t         |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j
                   c}  |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j                   c}  |dg| D cg c]  }|j                   c} 	      S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )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.
    c                 4    | ddd   D ]  }||c S  t         )z/Take first not-None value, starting at the end.N)r   )valuesvs     r!   _orz_merge_attrs.<locals>._orK  s+    " 	A}	 r7   r   Fr"   )r   r   ro   r   )
r   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r   r   as      r!   r   r   D  s-    "87A78B<];!));<9-8Q!&&89eCMBqq{{BC5=m<AHH<=5=m<AHH<=%;M:q177:;E?>1QYY>?5=m<AHH<=
 
7;8B<<:><s4   D0D5D:2D?E2E	E2EE_MergedStylec                F    | D cg c]  }||	 } }t        |       S c c}w )z)
    Merge multiple `Style` objects.
    )r   )stylesss     r!   r   r   _  s+      1A1=a1F1 2s   c                  Z    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
y)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.
    c                4    || _         t        d      | _        y )Nr   )maxsize)r   r   _style)r`   r   s     r!   rd   z_MergedStyle.__init__w  s    4?4Jr7   c                d     d fd} j                   j                   j                         |      S )z=The `Style` object that has the other styles merged together.c                 .    t         j                        S rY   )r   ra   rf   s   r!   getz'_MergedStyle._merged_style.<locals>.get  s    ))**r7   ro   r   )r   r   r   )r`   r   s   ` r!   _merged_stylez_MergedStyle._merged_style{  s(    	+ {{t557==r7   c                b    g }| j                   D ]  }|j                  |j                          |S rY   )r   r{   ra   )r`   ra   r   s      r!   ra   z_MergedStyle.style_rules  s2     	.Aq}}-	.r7   c                :    | j                   j                  ||      S rY   )r   r   )r`   rJ   r   s      r!   r   z$_MergedStyle.get_attrs_for_style_str  s     !!99)WMMr7   c                :    t        d | j                  D              S )Nc              3  <   K   | ]  }|j                           y wrY   )r   )rj   r   s     r!   rk   z1_MergedStyle.invalidation_hash.<locals>.<genexpr>  s     @qQ((*@s   )tupler   rf   s    r!   r   z_MergedStyle.invalidation_hash  s    @DKK@@@r7   N)r   list[BaseStyle]ro   r   r   r   r   r   )rQ   rR   rS   rT   rd   r   r   ra   r   r   r   rV   r7   r!   r   r   g  sa    K > >   0=NN',N	N
Ar7   )r   r   ro   r   )r2   r   ro   z	list[str])rJ   r   ro   r   )r   zlist[Attrs]ro   r   )r   r   ro   r   )'rT   
__future__r   r}   reenumr   typingr   r   prompt_toolkit.cacher   baser	   r
   r   r   r   named_colorsr   __all__rr   r   lstripr   r   rF   r6   rM   compilerZ   r   rU   r   r   r   r   r   r   )kr   s   00r!   <module>r      s
   #  	  $ ,  ' AS@R@R@TU11779ahhsm3U +5` 
	

AH /0"t ". ** p.I p.f T]6 *A9 *AS
 Vs   *C,